From 0070a4c695feb432e78dbacb09e3ad89d2db213e Mon Sep 17 00:00:00 2001 From: ravineet <rajula.vineet.reddy@cern.ch> Date: Wed, 22 Sep 2021 15:55:11 +0200 Subject: [PATCH] Add default to ReleaseSpec if empty --- api/v1alpha1/drupalsite_types.go | 3 +-- .../templates/manager-deploy.yaml | 1 + chart/drupalsite-operator/values.yaml | 1 + .../drupal.webservices.cern.ch_drupalsites.yaml | 2 -- controllers/drupalsite_controller.go | 7 +++++++ controllers/drupalsite_controller_test.go | 17 ++++++++++------- controllers/suite_test.go | 1 + main.go | 2 +- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/api/v1alpha1/drupalsite_types.go b/api/v1alpha1/drupalsite_types.go index d2ef2656..06fbb696 100644 --- a/api/v1alpha1/drupalsite_types.go +++ b/api/v1alpha1/drupalsite_types.go @@ -60,8 +60,7 @@ type Version struct { // typically of the format `RELEASE.<timestamp>`. // CERN Drupal image tags take the form `<version.name>-<version.releaseSpec>`, // for example `v8.9-1-RELEASE.2021.05.25T16-00-33Z` - // +kubebuilder:validation:Required - // +kubebuilder:validation:MinLength=1 + // +optional ReleaseSpec string `json:"releaseSpec"` } diff --git a/chart/drupalsite-operator/templates/manager-deploy.yaml b/chart/drupalsite-operator/templates/manager-deploy.yaml index 77737798..049e2a13 100644 --- a/chart/drupalsite-operator/templates/manager-deploy.yaml +++ b/chart/drupalsite-operator/templates/manager-deploy.yaml @@ -27,6 +27,7 @@ spec: - --nginx-image={{.Values.drupalsiteOperator.nginxImage}} - --zap-stacktrace-level={{.Values.drupalsiteOperator.logStacktraceLevel}} - --zap-log-level={{.Values.drupalsiteOperator.logLevel}} + - --default-release-spec={{.Values.drupalsiteOperator.defaultReleaseSpec}} command: - /manager image: {{ .Values.image | quote }} diff --git a/chart/drupalsite-operator/values.yaml b/chart/drupalsite-operator/values.yaml index af0661cf..174e8ca1 100644 --- a/chart/drupalsite-operator/values.yaml +++ b/chart/drupalsite-operator/values.yaml @@ -22,3 +22,4 @@ drupalsiteOperator: logLevel: "3" # Zap Level at and above which stacktraces are captured (one of 'info', 'error') logStacktraceLevel: "error" + defaultReleaseSpec: "RELEASE-2021.09.13T09-24-02Z" diff --git a/config/crd/bases/drupal.webservices.cern.ch_drupalsites.yaml b/config/crd/bases/drupal.webservices.cern.ch_drupalsites.yaml index b4333cfc..3b486bcd 100644 --- a/config/crd/bases/drupal.webservices.cern.ch_drupalsites.yaml +++ b/config/crd/bases/drupal.webservices.cern.ch_drupalsites.yaml @@ -111,11 +111,9 @@ spec: version, typically of the format `RELEASE.<timestamp>`. CERN Drupal image tags take the form `<version.name>-<version.releaseSpec>`, for example `v8.9-1-RELEASE.2021.05.25T16-00-33Z` - minLength: 1 type: string required: - name - - releaseSpec type: object required: - siteUrl diff --git a/controllers/drupalsite_controller.go b/controllers/drupalsite_controller.go index 2830ca59..d605ce15 100644 --- a/controllers/drupalsite_controller.go +++ b/controllers/drupalsite_controller.go @@ -67,6 +67,8 @@ var ( SMTPHost string // VeleroNamespace refers to the namespace of the velero server to create backups VeleroNamespace string + // ReleaseSpec refers to the releaseSpec of the drupalSite to be defaulted incase it is empty + DefaultReleaseSpec string ) // DrupalSiteReconciler reconciles a DrupalSite object @@ -493,6 +495,11 @@ func (r *DrupalSiteReconciler) ensureSpecFinalizer(ctx context.Context, drp *web return false, newApplicationError(err, ErrClientK8s) } } + // Initialize 'spec.version.releaseSpec' if empty + if len(drp.Spec.Version.ReleaseSpec) == 0 { + drp.Spec.Version.ReleaseSpec = DefaultReleaseSpec + update = true || update + } return update, nil } diff --git a/controllers/drupalsite_controller_test.go b/controllers/drupalsite_controller_test.go index 4b6aa896..a3d1143b 100644 --- a/controllers/drupalsite_controller_test.go +++ b/controllers/drupalsite_controller_test.go @@ -1136,7 +1136,7 @@ var _ = Describe("DrupalSite controller", func() { }) Describe("Creating a drupalSite object", func() { - Context("Without 'configuration' field", func() { + Context("Without 'configuration' & 'releaseSpec' field", func() { It("Default values should be used and the site should be created", func() { key = types.NamespacedName{ Name: Name + "-defaults", @@ -1153,8 +1153,7 @@ var _ = Describe("DrupalSite controller", func() { }, Spec: drupalwebservicesv1alpha1.DrupalSiteSpec{ Version: drupalwebservicesv1alpha1.Version{ - Name: "v8.9-1", - ReleaseSpec: "stable", + Name: "v8.9-1", }, SiteURL: []drupalwebservicesv1alpha1.Url{dummySiteUrl}, }, @@ -1190,6 +1189,12 @@ var _ = Describe("DrupalSite controller", func() { return string(cr.Spec.Configuration.DiskSize) == "2000Mi" }, timeout, interval).Should(BeTrue()) + By("Expecting the default configuration values to be set") + Eventually(func() bool { + k8sClient.Get(ctx, key, &cr) + return cr.Spec.Version.ReleaseSpec != DefaultReleaseSpec + }, timeout, interval).Should(BeTrue()) + trueVar := true expectedOwnerReference := metav1.OwnerReference{ APIVersion: "drupal.webservices.cern.ch/v1alpha1", @@ -1332,8 +1337,7 @@ var _ = Describe("DrupalSite controller", func() { }, Spec: drupalwebservicesv1alpha1.DrupalSiteSpec{ Version: drupalwebservicesv1alpha1.Version{ - Name: "v8.9-1", - ReleaseSpec: "stable", + Name: "v8.9-1", }, Configuration: drupalwebservicesv1alpha1.Configuration{ DatabaseClass: drupalwebservicesv1alpha1.DBODStandard, @@ -1387,8 +1391,7 @@ var _ = Describe("DrupalSite controller", func() { }, Spec: drupalwebservicesv1alpha1.DrupalSiteSpec{ Version: drupalwebservicesv1alpha1.Version{ - Name: "v8.9-1", - ReleaseSpec: "stable", + Name: "v8.9-1", }, Configuration: drupalwebservicesv1alpha1.Configuration{ QoSClass: "randomval", diff --git a/controllers/suite_test.go b/controllers/suite_test.go index 2ecbf2ef..da6c19d4 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -78,6 +78,7 @@ var _ = BeforeSuite(func(done Done) { VeleroNamespace = "openshift-cern-drupal" PhpFpmExporterImage = "test-phpfpmexporter" WebDAVImage = "test-webdav" + DefaultReleaseSpec = "test-spec" By("bootstrapping test environment") testEnv = &envtest.Environment{ diff --git a/main.go b/main.go index a0a64850..07510e3a 100644 --- a/main.go +++ b/main.go @@ -77,7 +77,7 @@ func main() { flag.StringVar(&controllers.WebDAVImage, "webdav-image", "gitlab-registry.cern.ch/drupal/paas/sabredav/webdav:RELEASE-2021.07.28T17-19-49Z", "The webdav source image name.") flag.StringVar(&controllers.SMTPHost, "smtp-host", "cernmx.cern.ch", "SMTP host used by Drupal server pods to send emails.") flag.StringVar(&controllers.VeleroNamespace, "velero-namespace", "openshift-cern-drupal", "The namespace of the Velero server to create backups") - + flag.StringVar(&controllers.DefaultReleaseSpec, "default-release-spec", "RELEASE-2021.09.13T09-24-02Z", "The default releaseSpec value to be passed to the DrupalSites") opts := zap.Options{ Development: false, } -- GitLab