diff --git a/controllers/limitador_controller.go b/controllers/limitador_controller.go index e61665df..8a1d6b7b 100644 --- a/controllers/limitador_controller.go +++ b/controllers/limitador_controller.go @@ -35,6 +35,7 @@ import ( limitadorv1alpha1 "github.com/kuadrant/limitador-operator/api/v1alpha1" "github.com/kuadrant/limitador-operator/pkg/limitador" "github.com/kuadrant/limitador-operator/pkg/reconcilers" + upgrades "github.com/kuadrant/limitador-operator/pkg/upgrades" ) // LimitadorReconciler reconciles a Limitador object @@ -200,7 +201,8 @@ func (r *LimitadorReconciler) reconcileDeployment(ctx context.Context, limitador return err } - return nil + // TODO: To be deleted when the upgrade path is no longer needed. + return upgrades.UpgradeTov070(ctx, r.Client(), limitadorObj, deployment) } func (r *LimitadorReconciler) reconcileService(ctx context.Context, limitadorObj *limitadorv1alpha1.Limitador) error { @@ -267,6 +269,12 @@ func (r *LimitadorReconciler) reconcileLimitsConfigMap(ctx context.Context, limi return err } + // TODO: To be deleted when the upgrade path is no longer needed. + err = upgrades.UpgradeConfigMapTov070(ctx, r.Client(), limitadorObj) + if err != nil { + return err + } + return nil } diff --git a/pkg/upgrades/v0_7_0.go b/pkg/upgrades/v0_7_0.go new file mode 100644 index 00000000..44d3575e --- /dev/null +++ b/pkg/upgrades/v0_7_0.go @@ -0,0 +1,66 @@ +package upgrades + +import ( + "context" + "fmt" + + appsv1 "k8s.io/api/apps/v1" + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + + limitadorv1alpha1 "github.com/kuadrant/limitador-operator/api/v1alpha1" + "github.com/kuadrant/limitador-operator/pkg/helpers" +) + +func UpgradeTov070(ctx context.Context, cli client.Client, limitadorObj *limitadorv1alpha1.Limitador, deployment *appsv1.Deployment) error { + newDeployment := &appsv1.Deployment{} + if err := cli.Get(ctx, client.ObjectKeyFromObject(deployment), newDeployment); err != nil { + return err + } + + return UpgradeDeploymentTov070(ctx, cli, limitadorObj, newDeployment) +} + +func UpgradeDeploymentTov070(ctx context.Context, cli client.Client, limitadorObj *limitadorv1alpha1.Limitador, newDeployment *appsv1.Deployment) error { + availableCondition := helpers.FindDeploymentStatusCondition(newDeployment.Status.Conditions, "Available") + + if availableCondition != nil && availableCondition.Status == v1.ConditionTrue { + oldDeployment := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: ReleaseV060DeploymentName(limitadorObj), + Namespace: limitadorObj.Namespace, + }, + } + + if err := cli.Delete(ctx, oldDeployment); err != nil && !errors.IsNotFound(err) { + return err + } + } + + return nil +} + +func UpgradeConfigMapTov070(ctx context.Context, cli client.Client, limitadorObj *limitadorv1alpha1.Limitador) error { + oldConfigMap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: ReleaseV060LimitsConfigMapName(limitadorObj), + Namespace: limitadorObj.Namespace, + }, + } + + if err := cli.Delete(ctx, oldConfigMap); err != nil && !errors.IsNotFound(err) { + return err + } + + return nil +} + +func ReleaseV060DeploymentName(limitadorObj *limitadorv1alpha1.Limitador) string { + return limitadorObj.Name +} + +func ReleaseV060LimitsConfigMapName(limitadorObj *limitadorv1alpha1.Limitador) string { + return fmt.Sprintf("limits-config-%s", limitadorObj.Name) +}