diff --git a/controllers/backupconfiguration_controller.go b/controllers/backupconfiguration_controller.go index 0db5a17..7a1378c 100644 --- a/controllers/backupconfiguration_controller.go +++ b/controllers/backupconfiguration_controller.go @@ -28,7 +28,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" formolv1alpha1 "github.com/desmo999r/formol/api/v1alpha1" - //formolutils "github.com/desmo999r/formol/pkg/utils" ) // BackupConfigurationReconciler reconciles a BackupConfiguration object @@ -43,15 +42,6 @@ type BackupConfigurationReconciler struct { //+kubebuilder:rbac:groups=formol.desmojim.fr,resources=backupconfigurations/status,verbs=get;update;patch //+kubebuilder:rbac:groups=formol.desmojim.fr,resources=backupconfigurations/finalizers,verbs=update -// Reconcile is part of the main kubernetes reconciliation loop which aims to -// move the current state of the cluster closer to the desired state. -// TODO(user): Modify the Reconcile function to compare the state specified by -// the BackupConfiguration object against the actual cluster state, and then -// perform operations to make the cluster state reflect the state specified by -// the user. -// -// For more details, check Reconcile and its Result here: -// - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.13.1/pkg/reconcile func (r *BackupConfigurationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { r.Context = ctx r.Log = log.FromContext(ctx) diff --git a/controllers/backupconfiguration_controller_cronjob.go b/controllers/backupconfiguration_controller_cronjob.go deleted file mode 100644 index 3a424fb..0000000 --- a/controllers/backupconfiguration_controller_cronjob.go +++ /dev/null @@ -1,103 +0,0 @@ -package controllers - -import ( - formolv1alpha1 "github.com/desmo999r/formol/api/v1alpha1" - batchv1 "k8s.io/api/batch/v1" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -func (r *BackupConfigurationReconciler) DeleteCronJob(backupConf formolv1alpha1.BackupConfiguration) error { - cronjob := &batchv1.CronJob{} - if err := r.Get(r.Context, client.ObjectKey{ - Namespace: backupConf.Namespace, - Name: "backup-" + backupConf.Name, - }, cronjob); err == nil { - r.Log.V(0).Info("Deleting cronjob", "cronjob", cronjob.Name) - return r.Delete(r.Context, cronjob) - } else { - return err - } -} - -func (r *BackupConfigurationReconciler) AddCronJob(backupConf formolv1alpha1.BackupConfiguration) error { - cronjob := &batchv1.CronJob{} - if err := r.Get(r.Context, client.ObjectKey{ - Namespace: backupConf.Namespace, - Name: "backup-" + backupConf.Name, - }, cronjob); err == nil { - r.Log.V(0).Info("there is already a cronjob") - var changed bool - if backupConf.Spec.Schedule != cronjob.Spec.Schedule { - r.Log.V(0).Info("cronjob schedule has changed", "old schedule", cronjob.Spec.Schedule, "new schedule", backupConf.Spec.Schedule) - cronjob.Spec.Schedule = backupConf.Spec.Schedule - changed = true - } - if backupConf.Spec.Suspend != nil && backupConf.Spec.Suspend != cronjob.Spec.Suspend { - r.Log.V(0).Info("cronjob suspend has changed", "before", cronjob.Spec.Suspend, "new", backupConf.Spec.Suspend) - cronjob.Spec.Suspend = backupConf.Spec.Suspend - changed = true - } - if changed == true { - if err := r.Update(r.Context, cronjob); err != nil { - r.Log.Error(err, "unable to update cronjob definition") - return err - } - backupConf.Status.Suspended = *backupConf.Spec.Suspend - } - return nil - } else if errors.IsNotFound(err) == false { - r.Log.Error(err, "something went wrong") - return err - } - - cronjob = &batchv1.CronJob{ - ObjectMeta: metav1.ObjectMeta{ - Name: "backup-" + backupConf.Name, - Namespace: backupConf.Namespace, - }, - Spec: batchv1.CronJobSpec{ - Suspend: backupConf.Spec.Suspend, - Schedule: backupConf.Spec.Schedule, - JobTemplate: batchv1.JobTemplateSpec{ - Spec: batchv1.JobSpec{ - Template: corev1.PodTemplateSpec{ - Spec: corev1.PodSpec{ - RestartPolicy: corev1.RestartPolicyOnFailure, - ServiceAccountName: "backupsession-creator", - Containers: []corev1.Container{ - corev1.Container{ - Name: "job-createbackupsession-" + backupConf.Name, - Image: backupConf.Spec.Image, - Args: []string{ - "backupsession", - "create", - "--namespace", - backupConf.Namespace, - "--name", - backupConf.Name, - }, - }, - }, - }, - }, - }, - }, - }, - } - if err := ctrl.SetControllerReference(&backupConf, cronjob, r.Scheme); err != nil { - r.Log.Error(err, "unable to set controller on job", "cronjob", cronjob, "backupconf", backupConf) - return err - } - r.Log.V(0).Info("creating the cronjob") - if err := r.Create(r.Context, cronjob); err != nil { - r.Log.Error(err, "unable to create the cronjob", "cronjob", cronjob) - return err - } else { - backupConf.Status.Suspended = *backupConf.Spec.Suspend - return nil - } -} diff --git a/controllers/backupconfiguration_controller_sidecar.go b/controllers/backupconfiguration_controller_helpers.go similarity index 59% rename from controllers/backupconfiguration_controller_sidecar.go rename to controllers/backupconfiguration_controller_helpers.go index 6953302..ec13f9b 100644 --- a/controllers/backupconfiguration_controller_sidecar.go +++ b/controllers/backupconfiguration_controller_helpers.go @@ -2,12 +2,108 @@ package controllers import ( appsv1 "k8s.io/api/apps/v1" + batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" formolv1alpha1 "github.com/desmo999r/formol/api/v1alpha1" ) +func (r *BackupConfigurationReconciler) DeleteCronJob(backupConf formolv1alpha1.BackupConfiguration) error { + cronjob := &batchv1.CronJob{} + if err := r.Get(r.Context, client.ObjectKey{ + Namespace: backupConf.Namespace, + Name: "backup-" + backupConf.Name, + }, cronjob); err == nil { + r.Log.V(0).Info("Deleting cronjob", "cronjob", cronjob.Name) + return r.Delete(r.Context, cronjob) + } else { + return err + } +} + +func (r *BackupConfigurationReconciler) AddCronJob(backupConf formolv1alpha1.BackupConfiguration) error { + cronjob := &batchv1.CronJob{} + if err := r.Get(r.Context, client.ObjectKey{ + Namespace: backupConf.Namespace, + Name: "backup-" + backupConf.Name, + }, cronjob); err == nil { + r.Log.V(0).Info("there is already a cronjob") + var changed bool + if backupConf.Spec.Schedule != cronjob.Spec.Schedule { + r.Log.V(0).Info("cronjob schedule has changed", "old schedule", cronjob.Spec.Schedule, "new schedule", backupConf.Spec.Schedule) + cronjob.Spec.Schedule = backupConf.Spec.Schedule + changed = true + } + if backupConf.Spec.Suspend != nil && backupConf.Spec.Suspend != cronjob.Spec.Suspend { + r.Log.V(0).Info("cronjob suspend has changed", "before", cronjob.Spec.Suspend, "new", backupConf.Spec.Suspend) + cronjob.Spec.Suspend = backupConf.Spec.Suspend + changed = true + } + if changed == true { + if err := r.Update(r.Context, cronjob); err != nil { + r.Log.Error(err, "unable to update cronjob definition") + return err + } + backupConf.Status.Suspended = *backupConf.Spec.Suspend + } + return nil + } else if errors.IsNotFound(err) == false { + r.Log.Error(err, "something went wrong") + return err + } + + cronjob = &batchv1.CronJob{ + ObjectMeta: metav1.ObjectMeta{ + Name: "backup-" + backupConf.Name, + Namespace: backupConf.Namespace, + }, + Spec: batchv1.CronJobSpec{ + Suspend: backupConf.Spec.Suspend, + Schedule: backupConf.Spec.Schedule, + JobTemplate: batchv1.JobTemplateSpec{ + Spec: batchv1.JobSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + RestartPolicy: corev1.RestartPolicyOnFailure, + ServiceAccountName: "backupsession-creator", + Containers: []corev1.Container{ + corev1.Container{ + Name: "job-createbackupsession-" + backupConf.Name, + Image: backupConf.Spec.Image, + Args: []string{ + "backupsession", + "create", + "--namespace", + backupConf.Namespace, + "--name", + backupConf.Name, + }, + }, + }, + }, + }, + }, + }, + }, + } + if err := ctrl.SetControllerReference(&backupConf, cronjob, r.Scheme); err != nil { + r.Log.Error(err, "unable to set controller on job", "cronjob", cronjob, "backupconf", backupConf) + return err + } + r.Log.V(0).Info("creating the cronjob") + if err := r.Create(r.Context, cronjob); err != nil { + r.Log.Error(err, "unable to create the cronjob", "cronjob", cronjob) + return err + } else { + backupConf.Status.Suspended = *backupConf.Spec.Suspend + return nil + } +} + func (r *BackupConfigurationReconciler) DeleteSidecar(backupConf formolv1alpha1.BackupConfiguration) error { removeTags := func(podSpec *corev1.PodSpec, target formolv1alpha1.Target) { for i, container := range podSpec.Containers {