diff --git a/api/v1alpha1/backupconfiguration_types.go b/api/v1alpha1/backupconfiguration_types.go index 86c8843..4756f71 100644 --- a/api/v1alpha1/backupconfiguration_types.go +++ b/api/v1alpha1/backupconfiguration_types.go @@ -76,6 +76,9 @@ type BackupConfigurationSpec struct { // Foo is an example field of BackupConfiguration. Edit BackupConfiguration_types.go to remove/update Repository `json:"repository"` + // +optional + Suspend *bool `json:"suspend,omitempty"` + // +optional Schedule string `json:"schedule,omitempty"` // +kubebuilder:validation:MinItems=1 diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index f33fd4c..98c9cda 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -105,6 +105,11 @@ func (in *BackupConfigurationList) DeepCopyObject() runtime.Object { func (in *BackupConfigurationSpec) DeepCopyInto(out *BackupConfigurationSpec) { *out = *in out.Repository = in.Repository + if in.Suspend != nil { + in, out := &in.Suspend, &out.Suspend + *out = new(bool) + **out = **in + } if in.Targets != nil { in, out := &in.Targets, &out.Targets *out = make([]Target, len(*in)) diff --git a/controllers/backupconfiguration_controller.go b/controllers/backupconfiguration_controller.go index c62059d..719c563 100644 --- a/controllers/backupconfiguration_controller.go +++ b/controllers/backupconfiguration_controller.go @@ -238,15 +238,29 @@ func (r *BackupConfigurationReconciler) addSidecarContainer(backupConf *formolv1 func (r *BackupConfigurationReconciler) addCronJob(backupConf *formolv1alpha1.BackupConfiguration) error { log := r.Log.WithValues("addCronJob", backupConf.Name) + if err := formolrbac.CreateBackupSessionCreatorRBAC(r.Client, backupConf.Namespace); err != nil { + log.Error(err, "unable to create backupsession-creator RBAC") + return nil + } + cronjob := &kbatch_beta1.CronJob{} if err := r.Get(context.Background(), client.ObjectKey{ Namespace: backupConf.Namespace, Name: "backup-" + backupConf.Name, }, cronjob); err == nil { log.V(0).Info("there is already a cronjob") + var changed bool if backupConf.Spec.Schedule != cronjob.Spec.Schedule { 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 != cronjob.Spec.Suspend { + 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(context.TODO(), cronjob); err != nil { log.Error(err, "unable to update cronjob definition") return err @@ -258,17 +272,13 @@ func (r *BackupConfigurationReconciler) addCronJob(backupConf *formolv1alpha1.Ba return err } - if err := formolrbac.CreateBackupSessionCreatorRBAC(r.Client, backupConf.Namespace); err != nil { - log.Error(err, "unable to create backupsession-creator RBAC") - return nil - } - cronjob = &kbatch_beta1.CronJob{ ObjectMeta: metav1.ObjectMeta{ Name: "backup-" + backupConf.Name, Namespace: backupConf.Namespace, }, Spec: kbatch_beta1.CronJobSpec{ + Suspend: backupConf.Spec.Suspend, Schedule: backupConf.Spec.Schedule, JobTemplate: kbatch_beta1.JobTemplateSpec{ Spec: batchv1.JobSpec{