Fixed initialization and teardown update issues

This commit is contained in:
jandre 2021-04-27 21:42:38 +02:00
parent 9cf5dc10d0
commit ea03e9af62

View File

@ -58,6 +58,7 @@ type BackupConfigurationReconciler struct {
// +kubebuilder:rbac:groups=batch,resources=cronjobs/status,verbs=get // +kubebuilder:rbac:groups=batch,resources=cronjobs/status,verbs=get
func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
var changed bool
ctx := context.Background() ctx := context.Background()
log := r.Log.WithValues("backupconfiguration", req.NamespacedName) log := r.Log.WithValues("backupconfiguration", req.NamespacedName)
//time.Sleep(300 * time.Millisecond) //time.Sleep(300 * time.Millisecond)
@ -110,13 +111,12 @@ func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result
Name: "backup-" + backupConf.Name, Name: "backup-" + backupConf.Name,
}, cronjob); err == nil { }, cronjob); err == nil {
log.V(0).Info("there is already a cronjob") log.V(0).Info("there is already a cronjob")
var changed bool
if backupConf.Spec.Schedule != cronjob.Spec.Schedule { 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) log.V(0).Info("cronjob schedule has changed", "old schedule", cronjob.Spec.Schedule, "new schedule", backupConf.Spec.Schedule)
cronjob.Spec.Schedule = backupConf.Spec.Schedule cronjob.Spec.Schedule = backupConf.Spec.Schedule
changed = true changed = true
} }
if backupConf.Spec.Suspend != cronjob.Spec.Suspend { if backupConf.Spec.Suspend != nil && backupConf.Spec.Suspend != cronjob.Spec.Suspend {
log.V(0).Info("cronjob suspend has changed", "before", cronjob.Spec.Suspend, "new", backupConf.Spec.Suspend) log.V(0).Info("cronjob suspend has changed", "before", cronjob.Spec.Suspend, "new", backupConf.Spec.Suspend)
cronjob.Spec.Suspend = backupConf.Spec.Suspend cronjob.Spec.Suspend = backupConf.Spec.Suspend
changed = true changed = true
@ -175,9 +175,11 @@ func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result
if err := r.Create(context.Background(), cronjob); err != nil { if err := r.Create(context.Background(), cronjob); err != nil {
log.Error(err, "unable to create the cronjob", "cronjob", cronjob) log.Error(err, "unable to create the cronjob", "cronjob", cronjob)
return err return err
} } else {
changed = true
return nil return nil
} }
}
deleteSidecarContainer := func(target formolv1alpha1.Target) error { deleteSidecarContainer := func(target formolv1alpha1.Target) error {
deployment, err := getDeployment(backupConf.Namespace, target.Name) deployment, err := getDeployment(backupConf.Namespace, target.Name)
@ -278,9 +280,11 @@ func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result
if err := r.Update(context.Background(), deployment); err != nil { if err := r.Update(context.Background(), deployment); err != nil {
log.Error(err, "unable to update the Deployment") log.Error(err, "unable to update the Deployment")
return err return err
} } else {
changed = true
return nil return nil
} }
}
deleteExternalResources := func() error { deleteExternalResources := func() error {
for _, target := range backupConf.Spec.Targets { for _, target := range backupConf.Spec.Targets {
@ -300,17 +304,18 @@ func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result
log.V(0).Info("backupconf being deleted", "backupconf", backupConf.Name) log.V(0).Info("backupconf being deleted", "backupconf", backupConf.Name)
if formolutils.ContainsString(backupConf.ObjectMeta.Finalizers, finalizerName) { if formolutils.ContainsString(backupConf.ObjectMeta.Finalizers, finalizerName) {
_ = deleteExternalResources() _ = deleteExternalResources()
}
backupConf.ObjectMeta.Finalizers = formolutils.RemoveString(backupConf.ObjectMeta.Finalizers, finalizerName) backupConf.ObjectMeta.Finalizers = formolutils.RemoveString(backupConf.ObjectMeta.Finalizers, finalizerName)
if err := r.Update(context.Background(), backupConf); err != nil { if err := r.Update(context.Background(), backupConf); err != nil {
log.Error(err, "unable to remove finalizer") log.Error(err, "unable to remove finalizer")
return ctrl.Result{}, err return ctrl.Result{}, err
} }
}
// We have been deleted. Return here // We have been deleted. Return here
log.V(0).Info("backupconf deleted", "backupconf", backupConf.Name) log.V(0).Info("backupconf deleted", "backupconf", backupConf.Name)
return ctrl.Result{}, nil return ctrl.Result{}, nil
} }
// Add finalizer
if !formolutils.ContainsString(backupConf.ObjectMeta.Finalizers, finalizerName) { if !formolutils.ContainsString(backupConf.ObjectMeta.Finalizers, finalizerName) {
backupConf.ObjectMeta.Finalizers = append(backupConf.ObjectMeta.Finalizers, finalizerName) backupConf.ObjectMeta.Finalizers = append(backupConf.ObjectMeta.Finalizers, finalizerName)
err := r.Update(context.Background(), backupConf) err := r.Update(context.Background(), backupConf)
@ -322,25 +327,29 @@ func (r *BackupConfigurationReconciler) Reconcile(req ctrl.Request) (ctrl.Result
if err := addCronJob(); err != nil { if err := addCronJob(); err != nil {
return ctrl.Result{}, nil return ctrl.Result{}, nil
} } else {
backupConf.Status.ActiveCronJob = true backupConf.Status.ActiveCronJob = true
}
for _, target := range backupConf.Spec.Targets { for _, target := range backupConf.Spec.Targets {
switch target.Kind { switch target.Kind {
case formolv1alpha1.SidecarKind: case formolv1alpha1.SidecarKind:
if err := addSidecarContainer(target); err != nil { if err := addSidecarContainer(target); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err) return ctrl.Result{}, client.IgnoreNotFound(err)
} } else {
backupConf.Status.ActiveSidecar = true backupConf.Status.ActiveSidecar = true
} }
} }
}
backupConf.Status.Suspended = false //backupConf.Status.Suspended = false
if changed == true {
log.V(1).Info("updating backupconf") log.V(1).Info("updating backupconf")
if err := r.Status().Update(ctx, backupConf); err != nil { if err := r.Status().Update(ctx, backupConf); err != nil {
log.Error(err, "unable to update backupconf", "backupconf", backupConf) log.Error(err, "unable to update backupconf", "backupconf", backupConf)
return ctrl.Result{}, err return ctrl.Result{}, err
} }
}
return ctrl.Result{}, nil return ctrl.Result{}, nil
} }