From 196f5da6354eb9ef1626b6d85a0173fd5f1a8a7a Mon Sep 17 00:00:00 2001 From: subhamkrai Date: Tue, 21 Jun 2022 20:55:34 +0530 Subject: [PATCH] core: delete v1beta1 cronjob only when v1 not found earlier we're deleting v1beta1 always before creating v1 job. Now, we delete only when k8s version is latest(which supports v1 job) and v1 job is not created which means this is the first time and this is the only time we'll delete v1beta1. Signed-off-by: subhamkrai --- pkg/operator/ceph/cluster/crash/crash.go | 22 +++++++++++++++----- pkg/operator/ceph/cluster/crash/reconcile.go | 6 ++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/pkg/operator/ceph/cluster/crash/crash.go b/pkg/operator/ceph/cluster/crash/crash.go index b0db4acfc..14c0f911e 100644 --- a/pkg/operator/ceph/cluster/crash/crash.go +++ b/pkg/operator/ceph/cluster/crash/crash.go @@ -164,14 +164,12 @@ func (r *ReconcileNode) createOrUpdateCephCron(cephCluster cephv1.CephCluster, c // minimum k8s version required for v1 cronJob is 'v1.21.0'. Apply v1 if k8s version is at least 'v1.21.0', else apply v1beta1 cronJob. if useCronJobV1 { - // delete v1beta1 cronJob if it already exists - err := r.client.Delete(r.opManagerContext, &v1beta1.CronJob{ObjectMeta: objectMeta}) - if err != nil && !apierrors.IsNotFound(err) { - return controllerutil.OperationResultNone, errors.Wrapf(err, "failed to delete CronJob v1Beta1 %q", prunerName) + if err := r.deletev1betaJob(objectMeta); err != nil { + return controllerutil.OperationResultNone, err } cronJob := &v1.CronJob{ObjectMeta: objectMeta} - err = controllerutil.SetControllerReference(&cephCluster, cronJob, r.scheme) + err := controllerutil.SetControllerReference(&cephCluster, cronJob, r.scheme) if err != nil { return controllerutil.OperationResultNone, errors.Errorf("failed to set owner reference of deployment %q", cronJob.Name) } @@ -204,6 +202,20 @@ func (r *ReconcileNode) createOrUpdateCephCron(cephCluster cephv1.CephCluster, c return controllerutil.CreateOrUpdate(r.opManagerContext, r.client, cronJob, mutateFunc) } +func (r *ReconcileNode) deletev1betaJob(objectMeta metav1.ObjectMeta) error { + // delete v1beta1 cronJob on an update to v1 job,only if v1 job is not created yet + if _, err := r.context.Clientset.BatchV1().CronJobs(objectMeta.Namespace).Get(r.opManagerContext, prunerName, metav1.GetOptions{}); err != nil { + if apierrors.IsNotFound(err) { + err = r.client.Delete(r.opManagerContext, &v1beta1.CronJob{ObjectMeta: objectMeta}) + if err != nil && !apierrors.IsNotFound(err) { + return errors.Wrapf(err, "failed to delete CronJob v1Beta1 %q", prunerName) + } + } + } + + return nil +} + func getCrashDirInitContainer(cephCluster cephv1.CephCluster) corev1.Container { dataPathMap := config.NewDatalessDaemonDataPathMap(cephCluster.GetNamespace(), cephCluster.Spec.DataDirHostPath) crashPostedDir := path.Join(dataPathMap.ContainerCrashDir(), "posted") diff --git a/pkg/operator/ceph/cluster/crash/reconcile.go b/pkg/operator/ceph/cluster/crash/reconcile.go index c524af63a..804734b77 100644 --- a/pkg/operator/ceph/cluster/crash/reconcile.go +++ b/pkg/operator/ceph/cluster/crash/reconcile.go @@ -299,10 +299,8 @@ func (r *ReconcileNode) reconcileCrashRetention(namespace string, cephCluster ce var cronJob client.Object // minimum k8s version required for v1 cronJob is 'v1.21.0'. Apply v1 if k8s version is at least 'v1.21.0', else apply v1beta1 cronJob. if useCronJobV1 { - // delete v1beta1 cronJob if it already exists - err = r.client.Delete(r.opManagerContext, &v1beta1.CronJob{ObjectMeta: objectMeta}) - if err != nil && !kerrors.IsNotFound(err) { - return errors.Wrapf(err, "failed to delete CronJob v1beta1 %q", prunerName) + if err := r.deletev1betaJob(objectMeta); err != nil { + return err } cronJob = &v1.CronJob{ObjectMeta: objectMeta} } else {