From 84f11a0706cf3db6eee68e6c790a1dabe2cb5f34 Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Wed, 17 Jul 2024 13:58:20 +0300 Subject: [PATCH 01/11] adding ckeditor-secret --- controllers/drupalsite_resources.go | 61 +++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index 77ad8597..885bb97b 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -24,6 +24,7 @@ import ( "io/ioutil" "math/rand" "net/url" + "os" "strconv" "time" @@ -100,6 +101,9 @@ func (r *DrupalSiteReconciler) ensureResources(drp *webservicesv1a1.DrupalSite, if transientErr := r.ensureResourceX(ctx, drp, "webdav_secret", log); transientErr != nil { transientErrs = append(transientErrs, transientErr.Wrap("%v: for WebDAV Secret")) } + if transientErr := r.ensureResourceX(ctx, drp, "ckeditor_secret", log); transientErr != nil { + transientErrs = append(transientErrs, transientErr.Wrap("%v: for ckeditor Secret")) + } // 3. Serving layer @@ -212,6 +216,7 @@ ensureResourceX ensure the requested resource is created, with the following val - oidc_return_uri: Redirection URI for OIDC - dbod_cr: DBOD custom resource to establish database & respective connection for the drupalsite - webdav_secret: Secret with credential for WebDAV + - ckeditor_secret: Secret with credential for ckeditor4lts - backup_schedule: Velero Schedule for scheduled backups of the drupalSite - tekton_extra_perm_rbac: ClusterRoleBinding for tekton tasks - gitlab_trigger_secret: Secret for Gitlab trigger config in buildconfig @@ -253,6 +258,17 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic return newApplicationError(err, ErrClientK8s) } return nil + case "ckeditor_secret": + ckeditor_secret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "ckeditor-secret-" + d.Name, Namespace: d.Namespace}} + _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditor_secret, func() error { + log.V(4).Info("Ensuring Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) + return secretForCKEditor(ckeditor_secret, d) + }) + if err != nil { + log.Error(err, "Failed to ensure Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) + return newApplicationError(err, ErrClientK8s) + } + return nil case "svc_nginx": svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: d.Name, Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, svc, func() error { @@ -928,6 +944,13 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st }, }, }, + { + SecretRef: &corev1.SecretEnvSource{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "ckeditor-secret-" + d.Name, + }, + }, + }, } currentobject.Spec.Template.Spec.Containers[i].VolumeMounts = []corev1.VolumeMount{ { @@ -1419,6 +1442,30 @@ func secretForWebDAV(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite return nil } +// secretForCKEditor returns a Secret object for the CKEditor license key +func secretForCKEditor(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { + addOwnerRefToObject(currentobject, asOwner(d)) + currentobject.Type = "kubernetes.io/opaque" + + // Fetch the CKEditor license key from environment variable + ckeditorLicenseKey := os.Getenv("CKEDITOR_LICENSE_KEY") + if ckeditorLicenseKey == "" { + return fmt.Errorf("CKEDITOR_LICENSE_KEY environment variable is not set") + } + currentobject.StringData = map[string]string{ + "licenseKey": ckeditorLicenseKey, + } + if currentobject.Labels == nil { + currentobject.Labels = map[string]string{} + } + ls := labelsForDrupalSite(d.Name) + ls["app"] = "drupal" + for k, v := range ls { + currentobject.Labels[k] = v + } + return nil +} + // persistentVolumeClaimForDrupalSite returns a PVC object func persistentVolumeClaimForDrupalSite(currentobject *corev1.PersistentVolumeClaim, d *webservicesv1a1.DrupalSite) error { addOwnerRefToObject(currentobject, asOwner(d)) @@ -1620,6 +1667,13 @@ func jobForDrupalSiteInstallation(currentobject *batchv1.Job, databaseSecret str }, }, }, + { + SecretRef: &corev1.SecretEnvSource{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "ckeditor-secret-" + d.Name, + }, + }, + }, }, VolumeMounts: []corev1.VolumeMount{ { @@ -1772,6 +1826,13 @@ func jobForDrupalSiteClone(currentobject *batchv1.Job, databaseSecret string, d }, }, }, + { + SecretRef: &corev1.SecretEnvSource{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: "ckeditor-secret-" + d.Name, + }, + }, + }, }, VolumeMounts: []corev1.VolumeMount{ { -- GitLab From a87c1c39f4d1cce455535bd9113ab4b1b74f441d Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Thu, 18 Jul 2024 09:55:20 +0300 Subject: [PATCH 02/11] Revert "adding ckeditor-secret" This reverts commit 0b08c80db36b651b975539365e3751864c7f150a. --- controllers/drupalsite_resources.go | 61 ----------------------------- 1 file changed, 61 deletions(-) diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index 885bb97b..77ad8597 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -24,7 +24,6 @@ import ( "io/ioutil" "math/rand" "net/url" - "os" "strconv" "time" @@ -101,9 +100,6 @@ func (r *DrupalSiteReconciler) ensureResources(drp *webservicesv1a1.DrupalSite, if transientErr := r.ensureResourceX(ctx, drp, "webdav_secret", log); transientErr != nil { transientErrs = append(transientErrs, transientErr.Wrap("%v: for WebDAV Secret")) } - if transientErr := r.ensureResourceX(ctx, drp, "ckeditor_secret", log); transientErr != nil { - transientErrs = append(transientErrs, transientErr.Wrap("%v: for ckeditor Secret")) - } // 3. Serving layer @@ -216,7 +212,6 @@ ensureResourceX ensure the requested resource is created, with the following val - oidc_return_uri: Redirection URI for OIDC - dbod_cr: DBOD custom resource to establish database & respective connection for the drupalsite - webdav_secret: Secret with credential for WebDAV - - ckeditor_secret: Secret with credential for ckeditor4lts - backup_schedule: Velero Schedule for scheduled backups of the drupalSite - tekton_extra_perm_rbac: ClusterRoleBinding for tekton tasks - gitlab_trigger_secret: Secret for Gitlab trigger config in buildconfig @@ -258,17 +253,6 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic return newApplicationError(err, ErrClientK8s) } return nil - case "ckeditor_secret": - ckeditor_secret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "ckeditor-secret-" + d.Name, Namespace: d.Namespace}} - _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditor_secret, func() error { - log.V(4).Info("Ensuring Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) - return secretForCKEditor(ckeditor_secret, d) - }) - if err != nil { - log.Error(err, "Failed to ensure Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) - return newApplicationError(err, ErrClientK8s) - } - return nil case "svc_nginx": svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: d.Name, Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, svc, func() error { @@ -944,13 +928,6 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st }, }, }, - { - SecretRef: &corev1.SecretEnvSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "ckeditor-secret-" + d.Name, - }, - }, - }, } currentobject.Spec.Template.Spec.Containers[i].VolumeMounts = []corev1.VolumeMount{ { @@ -1442,30 +1419,6 @@ func secretForWebDAV(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite return nil } -// secretForCKEditor returns a Secret object for the CKEditor license key -func secretForCKEditor(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { - addOwnerRefToObject(currentobject, asOwner(d)) - currentobject.Type = "kubernetes.io/opaque" - - // Fetch the CKEditor license key from environment variable - ckeditorLicenseKey := os.Getenv("CKEDITOR_LICENSE_KEY") - if ckeditorLicenseKey == "" { - return fmt.Errorf("CKEDITOR_LICENSE_KEY environment variable is not set") - } - currentobject.StringData = map[string]string{ - "licenseKey": ckeditorLicenseKey, - } - if currentobject.Labels == nil { - currentobject.Labels = map[string]string{} - } - ls := labelsForDrupalSite(d.Name) - ls["app"] = "drupal" - for k, v := range ls { - currentobject.Labels[k] = v - } - return nil -} - // persistentVolumeClaimForDrupalSite returns a PVC object func persistentVolumeClaimForDrupalSite(currentobject *corev1.PersistentVolumeClaim, d *webservicesv1a1.DrupalSite) error { addOwnerRefToObject(currentobject, asOwner(d)) @@ -1667,13 +1620,6 @@ func jobForDrupalSiteInstallation(currentobject *batchv1.Job, databaseSecret str }, }, }, - { - SecretRef: &corev1.SecretEnvSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "ckeditor-secret-" + d.Name, - }, - }, - }, }, VolumeMounts: []corev1.VolumeMount{ { @@ -1826,13 +1772,6 @@ func jobForDrupalSiteClone(currentobject *batchv1.Job, databaseSecret string, d }, }, }, - { - SecretRef: &corev1.SecretEnvSource{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "ckeditor-secret-" + d.Name, - }, - }, - }, }, VolumeMounts: []corev1.VolumeMount{ { -- GitLab From f21b8840f3043e5fdcaf361403c7298025ec3438 Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Thu, 18 Jul 2024 11:43:31 +0300 Subject: [PATCH 03/11] adding ckeditor-secret second iteration --- controllers/drupalsite_controller.go | 1 + controllers/drupalsite_resources.go | 40 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/controllers/drupalsite_controller.go b/controllers/drupalsite_controller.go index 83e81745..1fdad848 100644 --- a/controllers/drupalsite_controller.go +++ b/controllers/drupalsite_controller.go @@ -49,6 +49,7 @@ const ( debugAnnotation = "debug" adminPauseAnnotation = "admin-pause-reconcile" oidcSecretName = "oidc-client-secret" + ckeditorSecretName = "ckeditor-secret" // Labels used by the Operator ssoProxyLabel = "drupal.okd.cern.ch/full-sso" diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index 77ad8597..7159853a 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -253,6 +253,17 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic return newApplicationError(err, ErrClientK8s) } return nil + case "ckeditor_secret": + ckeditor_secret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: ckeditorSecretName, Namespace: d.Namespace}} + _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditor_secret, func() error { + log.V(4).Info("Ensuring Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) + return secretForCKEditor(ckeditor_secret, d) + }) + if err != nil { + log.Error(err, "Failed to ensure Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) + return newApplicationError(err, ErrClientK8s) + } + return nil case "svc_nginx": svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: d.Name, Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, svc, func() error { @@ -912,6 +923,17 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st Name: "SMTPHOST", Value: SMTPHost, }, + { + Name: "CKEDITOR_LICENSE_KEY", + ValueFrom: &corev1.EnvVarSource{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: ckeditorSecretName, + }, + Key: "CKEDITOR_LICENSE_KEY", + }, + }, + }, } currentobject.Spec.Template.Spec.Containers[i].EnvFrom = []corev1.EnvFromSource{ { @@ -1419,6 +1441,24 @@ func secretForWebDAV(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite return nil } +// secretForCKEditor returns a Secret object +func secretForCKEditor(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { + addOwnerRefToObject(currentobject, asOwner(d)) + currentobject.Type = "kubernetes.io/opaque" + currentobject.StringData = map[string]string{ + "CKEDITOR_LICENSE_KEY": "WWxoQmNYSTFabkZvYWpWTVVrSkZjamd6TmpseWN6STRjUT09LU56WXpOelE0TkRZNU9EYzVNems1", + } + if currentobject.Labels == nil { + currentobject.Labels = map[string]string{} + } + ls := labelsForDrupalSite(d.Name) + ls["app"] = "drupal" + for k, v := range ls { + currentobject.Labels[k] = v + } + return nil +} + // persistentVolumeClaimForDrupalSite returns a PVC object func persistentVolumeClaimForDrupalSite(currentobject *corev1.PersistentVolumeClaim, d *webservicesv1a1.DrupalSite) error { addOwnerRefToObject(currentobject, asOwner(d)) -- GitLab From 14b9ef59baf5649d74039d52e20331f0f879b885 Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Thu, 18 Jul 2024 16:58:04 +0300 Subject: [PATCH 04/11] fixed typos --- controllers/drupalsite_controller.go | 1 - controllers/drupalsite_resources.go | 61 +++++++++++++++------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/controllers/drupalsite_controller.go b/controllers/drupalsite_controller.go index 1fdad848..83e81745 100644 --- a/controllers/drupalsite_controller.go +++ b/controllers/drupalsite_controller.go @@ -49,7 +49,6 @@ const ( debugAnnotation = "debug" adminPauseAnnotation = "admin-pause-reconcile" oidcSecretName = "oidc-client-secret" - ckeditorSecretName = "ckeditor-secret" // Labels used by the Operator ssoProxyLabel = "drupal.okd.cern.ch/full-sso" diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index 7159853a..ad710d21 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -253,17 +253,22 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic return newApplicationError(err, ErrClientK8s) } return nil - case "ckeditor_secret": - ckeditor_secret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: ckeditorSecretName, Namespace: d.Namespace}} - _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditor_secret, func() error { - log.V(4).Info("Ensuring Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) - return secretForCKEditor(ckeditor_secret, d) + case "ckeditor_license_key_secret": + ckeditorLicenseKeySecret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "ckeditor-license-key", + Namespace: d.Namespace, + }, + } + _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditorLicenseKeySecret, func() error { + log.V(4).Info("Ensuring Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) + return secretForCKEditorLicenseKey(ckeditorLicenseKeySecret, d) }) if err != nil { - log.Error(err, "Failed to ensure Resource", "Kind", ckeditor_secret.TypeMeta.Kind, "Resource.Namespace", ckeditor_secret.Namespace, "Resource.Name", ckeditor_secret.Name) + log.Error(err, "Failed to ensure Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) return newApplicationError(err, ErrClientK8s) } - return nil + return nil case "svc_nginx": svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: d.Name, Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, svc, func() error { @@ -925,10 +930,10 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st }, { Name: "CKEDITOR_LICENSE_KEY", - ValueFrom: &corev1.EnvVarSource{ - SecretKeyRef: &corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: ckeditorSecretName, + ValueFrom: &v1.EnvVarSource{ + SecretKeyRef: &v1.SecretKeySelector{ + LocalObjectReference: v1.LocalObjectReference{ + Name: "ckeditor-license-key", }, Key: "CKEDITOR_LICENSE_KEY", }, @@ -1440,25 +1445,23 @@ func secretForWebDAV(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite } return nil } - -// secretForCKEditor returns a Secret object -func secretForCKEditor(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { - addOwnerRefToObject(currentobject, asOwner(d)) - currentobject.Type = "kubernetes.io/opaque" - currentobject.StringData = map[string]string{ - "CKEDITOR_LICENSE_KEY": "WWxoQmNYSTFabkZvYWpWTVVrSkZjamd6TmpseWN6STRjUT09LU56WXpOelE0TkRZNU9EYzVNems1", - } - if currentobject.Labels == nil { - currentobject.Labels = map[string]string{} - } - ls := labelsForDrupalSite(d.Name) - ls["app"] = "drupal" - for k, v := range ls { - currentobject.Labels[k] = v - } - return nil +// secretForCKEditorLicenseKey returns a Secret object for CKEditor license key +func secretForCKEditorLicenseKey(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { + addOwnerRefToObject(currentobject, asOwner(d)) + currentobject.Type = "Opaque" + currentobject.StringData = map[string]string{ + "CKEDITOR_LICENSE_KEY": "WWxoQmNYSTFabkZvYWpWTVVrSkZjamd6TmpseWN6STRjUT09LU56WXpOelE0TkRZNU9EYzVNems1", + } + if currentobject.Labels == nil { + currentobject.Labels = map[string]string{} + } + ls := labelsForDrupalSite(d.Name) + ls["app"] = "drupal" + for k, v := range ls { + currentobject.Labels[k] = v + } + return nil } - // persistentVolumeClaimForDrupalSite returns a PVC object func persistentVolumeClaimForDrupalSite(currentobject *corev1.PersistentVolumeClaim, d *webservicesv1a1.DrupalSite) error { addOwnerRefToObject(currentobject, asOwner(d)) -- GitLab From 13a54293dc46d6a7864d3c44fcef65aa3a517771 Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Fri, 19 Jul 2024 10:05:19 +0300 Subject: [PATCH 05/11] Using os.getenv for the key --- controllers/drupalsite_resources.go | 71 ++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index ad710d21..f27a17da 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -24,6 +24,7 @@ import ( "io/ioutil" "math/rand" "net/url" + "os" "strconv" "time" @@ -100,6 +101,9 @@ func (r *DrupalSiteReconciler) ensureResources(drp *webservicesv1a1.DrupalSite, if transientErr := r.ensureResourceX(ctx, drp, "webdav_secret", log); transientErr != nil { transientErrs = append(transientErrs, transientErr.Wrap("%v: for WebDAV Secret")) } + if transientErr := r.ensureResourceX(ctx, drp, "ckeditor_license_key_secret", log); transientErr != nil { + transientErrs = append(transientErrs, transientErr.Wrap("%v: for Ckeditor4LTS Secret")) + } // 3. Serving layer @@ -212,6 +216,7 @@ ensureResourceX ensure the requested resource is created, with the following val - oidc_return_uri: Redirection URI for OIDC - dbod_cr: DBOD custom resource to establish database & respective connection for the drupalsite - webdav_secret: Secret with credential for WebDAV + - ckeditor_license_key_secret: Secret with license key for ckeditor4lts - backup_schedule: Velero Schedule for scheduled backups of the drupalSite - tekton_extra_perm_rbac: ClusterRoleBinding for tekton tasks - gitlab_trigger_secret: Secret for Gitlab trigger config in buildconfig @@ -254,12 +259,7 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic } return nil case "ckeditor_license_key_secret": - ckeditorLicenseKeySecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "ckeditor-license-key", - Namespace: d.Namespace, - }, - } + ckeditorLicenseKeySecret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "ckeditor-license-key", Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditorLicenseKeySecret, func() error { log.V(4).Info("Ensuring Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) return secretForCKEditorLicenseKey(ckeditorLicenseKeySecret, d) @@ -268,7 +268,7 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic log.Error(err, "Failed to ensure Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) return newApplicationError(err, ErrClientK8s) } - return nil + return nil case "svc_nginx": svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: d.Name, Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, svc, func() error { @@ -1445,23 +1445,30 @@ func secretForWebDAV(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite } return nil } + // secretForCKEditorLicenseKey returns a Secret object for CKEditor license key func secretForCKEditorLicenseKey(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { - addOwnerRefToObject(currentobject, asOwner(d)) - currentobject.Type = "Opaque" - currentobject.StringData = map[string]string{ - "CKEDITOR_LICENSE_KEY": "WWxoQmNYSTFabkZvYWpWTVVrSkZjamd6TmpseWN6STRjUT09LU56WXpOelE0TkRZNU9EYzVNems1", - } - if currentobject.Labels == nil { - currentobject.Labels = map[string]string{} - } - ls := labelsForDrupalSite(d.Name) - ls["app"] = "drupal" - for k, v := range ls { - currentobject.Labels[k] = v - } - return nil + addOwnerRefToObject(currentobject, asOwner(d)) + currentobject.Type = "Opaque" + // Retrieve the CKEDITOR_LICENSE_KEY from environment variables + ckeditorLicenseKey := os.Getenv("CKEDITOR_LICENSE_KEY") + if ckeditorLicenseKey == "" { + return fmt.Errorf("CKEDITOR_LICENSE_KEY environment variable is not set") + } + currentobject.StringData = map[string]string{ + "CKEDITOR_LICENSE_KEY": ckeditorLicenseKey, + } + if currentobject.Labels == nil { + currentobject.Labels = map[string]string{} + } + ls := labelsForDrupalSite(d.Name) + ls["app"] = "drupal" + for k, v := range ls { + currentobject.Labels[k] = v + } + return nil } + // persistentVolumeClaimForDrupalSite returns a PVC object func persistentVolumeClaimForDrupalSite(currentobject *corev1.PersistentVolumeClaim, d *webservicesv1a1.DrupalSite) error { addOwnerRefToObject(currentobject, asOwner(d)) @@ -1647,6 +1654,17 @@ func jobForDrupalSiteInstallation(currentobject *batchv1.Job, databaseSecret str Name: "SMTPHOST", Value: SMTPHost, }, + { + Name: "CKEDITOR_LICENSE_KEY", + ValueFrom: &v1.EnvVarSource{ + SecretKeyRef: &v1.SecretKeySelector{ + LocalObjectReference: v1.LocalObjectReference{ + Name: "ckeditor-license-key", + }, + Key: "CKEDITOR_LICENSE_KEY", + }, + }, + }, }, EnvFrom: []corev1.EnvFromSource{ { @@ -1799,6 +1817,17 @@ func jobForDrupalSiteClone(currentobject *batchv1.Job, databaseSecret string, d Name: "DRUPAL_SHARED_VOLUME", Value: "/drupal-data-source", }, + { + Name: "CKEDITOR_LICENSE_KEY", + ValueFrom: &v1.EnvVarSource{ + SecretKeyRef: &v1.SecretKeySelector{ + LocalObjectReference: v1.LocalObjectReference{ + Name: "ckeditor-license-key", + }, + Key: "CKEDITOR_LICENSE_KEY", + }, + }, + }, }, EnvFrom: []corev1.EnvFromSource{ { -- GitLab From 16c40ed16307e227b3093b6c770191519d7779fb Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Wed, 24 Jul 2024 10:55:00 +0300 Subject: [PATCH 06/11] added variable in gitlab-ci yaml --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e95c537f..44ef9f33 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,6 +15,7 @@ stages: variables: DEFAULT_DOMAIN: "webtest.cern.ch" + CKEDITOR_LICENSE_KEY: $CKEDITOR_LICENSE_KEY GoTest: stage: test -- GitLab From 1d3704033f506ff416c102cbb36598d9a17a3041 Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Fri, 26 Jul 2024 11:26:04 +0300 Subject: [PATCH 07/11] first attempt to pass key from parameter --- .gitlab-ci.yml | 1 - .../drupalsite-operator/templates/manager-deploy.yaml | 1 + chart/drupalsite-operator/values.yaml | 1 + controllers/drupalsite_controller.go | 2 ++ controllers/drupalsite_resources.go | 11 ++++------- controllers/suite_test.go | 1 + main.go | 1 + 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 44ef9f33..e95c537f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,7 +15,6 @@ stages: variables: DEFAULT_DOMAIN: "webtest.cern.ch" - CKEDITOR_LICENSE_KEY: $CKEDITOR_LICENSE_KEY GoTest: stage: test diff --git a/chart/drupalsite-operator/templates/manager-deploy.yaml b/chart/drupalsite-operator/templates/manager-deploy.yaml index 887b9396..2311e037 100644 --- a/chart/drupalsite-operator/templates/manager-deploy.yaml +++ b/chart/drupalsite-operator/templates/manager-deploy.yaml @@ -35,6 +35,7 @@ spec: - --easystart-backup-name={{.Values.drupalsiteOperator.easystartBackupName}} - --supported-drupal-version-name={{.Values.drupalsiteOperator.supportedDrupalVersionName}} - --velero-backup-storage-location={{.Values.drupalsiteOperator.veleroBackupStorageLocation}} + - --ckeditor-license-key={{.Values.drupalsiteOperator.ckeditorLicenseKey}} command: - /manager image: {{ .Values.image | quote }} diff --git a/chart/drupalsite-operator/values.yaml b/chart/drupalsite-operator/values.yaml index b7450610..88964a6e 100644 --- a/chart/drupalsite-operator/values.yaml +++ b/chart/drupalsite-operator/values.yaml @@ -33,3 +33,4 @@ drupalsiteOperator: clusterName: {} easystartBackupName: "" veleroBackupStorageLocation: "default" + ckeditorLicenseKey: "DUMMY_LICENSE_KEY_FOR_TESTING" diff --git a/controllers/drupalsite_controller.go b/controllers/drupalsite_controller.go index 83e81745..0e44c246 100644 --- a/controllers/drupalsite_controller.go +++ b/controllers/drupalsite_controller.go @@ -84,6 +84,8 @@ var ( SupportedDrupalVersionName string // VeleroBackupStorageLocation refers to the name of the Velero backupStorageLocation to be used VeleroBackupStorageLocation string + // CkeditorLicenseKey refers to the name of the License key for the ckeditor4lts module + CkeditorLicenseKey string ) // DrupalSiteReconciler reconciles a DrupalSite object diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index f27a17da..8fb29a53 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -24,7 +24,6 @@ import ( "io/ioutil" "math/rand" "net/url" - "os" "strconv" "time" @@ -262,7 +261,7 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic ckeditorLicenseKeySecret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "ckeditor-license-key", Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditorLicenseKeySecret, func() error { log.V(4).Info("Ensuring Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) - return secretForCKEditorLicenseKey(ckeditorLicenseKeySecret, d) + return secretForCKEditorLicenseKey(ckeditorLicenseKeySecret, d, CkeditorLicenseKey) }) if err != nil { log.Error(err, "Failed to ensure Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) @@ -1446,14 +1445,12 @@ func secretForWebDAV(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite return nil } -// secretForCKEditorLicenseKey returns a Secret object for CKEditor license key -func secretForCKEditorLicenseKey(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite) error { +// secretForCKEditorLicenseKey returns the CKEditor license key from a parameter +func secretForCKEditorLicenseKey(currentobject *corev1.Secret, d *webservicesv1a1.DrupalSite, ckeditorLicenseKey string) error { addOwnerRefToObject(currentobject, asOwner(d)) currentobject.Type = "Opaque" - // Retrieve the CKEDITOR_LICENSE_KEY from environment variables - ckeditorLicenseKey := os.Getenv("CKEDITOR_LICENSE_KEY") if ckeditorLicenseKey == "" { - return fmt.Errorf("CKEDITOR_LICENSE_KEY environment variable is not set") + return fmt.Errorf("CKEDITOR_LICENSE_KEY parameter is not set") } currentobject.StringData = map[string]string{ "CKEDITOR_LICENSE_KEY": ckeditorLicenseKey, diff --git a/controllers/suite_test.go b/controllers/suite_test.go index 090f679f..a1728ff9 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -85,6 +85,7 @@ var _ = BeforeSuite(func(done Done) { EasystartBackupName = "easystart-backup" SupportedDrupalVersionName = "supported-drupal-versions" VeleroBackupStorageLocation = "default" + CkeditorLicenseKey = "DUMMY_LICENSE_KEY_FOR_TESTING" By("bootstrapping test environment") testEnv = &envtest.Environment{ diff --git a/main.go b/main.go index 651a25f9..3522c8ad 100644 --- a/main.go +++ b/main.go @@ -96,6 +96,7 @@ func main() { flag.StringVar(&controllers.SupportedDrupalVersionName, "supported-drupal-version-name", "supported-drupal-versions", "The name of the resource used cluster-wide for supported drupal versions") flag.StringVar(&controllers.VeleroBackupStorageLocation, "velero-backup-storage-location", "default", "The name of the backupStorageLocation to be used for Velero Schedules created by the controller") flag.StringVar(&websiteImagePullPolicyString, "websiteImagePullPolicy", "IfNotPresent", "The default image pull policy for deployed pods. We avoid 'Always' as it makes us more vulnerable to container registry downtime.") + flag.StringVar(&controllers.CkeditorLicenseKey, "ckeditor-license-key", "", "License key for the ckeditor4lts module") opts := zap.Options{ Development: false, } -- GitLab From 2da29a08c5b3f0f1884301adaffb1fbe2d0191db Mon Sep 17 00:00:00 2001 From: "cristina.petala" <cristina.petala@trasys.gr> Date: Tue, 30 Jul 2024 14:03:47 +0300 Subject: [PATCH 08/11] removing the dummy value from ckeditorLicenseKey --- chart/drupalsite-operator/values.yaml | 2 +- controllers/suite_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/chart/drupalsite-operator/values.yaml b/chart/drupalsite-operator/values.yaml index 88964a6e..80005cfa 100644 --- a/chart/drupalsite-operator/values.yaml +++ b/chart/drupalsite-operator/values.yaml @@ -33,4 +33,4 @@ drupalsiteOperator: clusterName: {} easystartBackupName: "" veleroBackupStorageLocation: "default" - ckeditorLicenseKey: "DUMMY_LICENSE_KEY_FOR_TESTING" + ckeditorLicenseKey: "" diff --git a/controllers/suite_test.go b/controllers/suite_test.go index a1728ff9..86ca34b4 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -85,7 +85,7 @@ var _ = BeforeSuite(func(done Done) { EasystartBackupName = "easystart-backup" SupportedDrupalVersionName = "supported-drupal-versions" VeleroBackupStorageLocation = "default" - CkeditorLicenseKey = "DUMMY_LICENSE_KEY_FOR_TESTING" + CkeditorLicenseKey = "" By("bootstrapping test environment") testEnv = &envtest.Environment{ -- GitLab From 62b18fdb8812e801cdaba24c5140507bd216d5f6 Mon Sep 17 00:00:00 2001 From: Carina Antunes <carinadeoliveiraantunes@gmail.com> Date: Tue, 17 Sep 2024 15:58:19 +0200 Subject: [PATCH 09/11] improvemtns: one ckeditor secret per instance --- controllers/drupalsite_resources.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index 8fb29a53..e2372cdf 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -258,7 +258,8 @@ func (r *DrupalSiteReconciler) ensureResourceX(ctx context.Context, d *webservic } return nil case "ckeditor_license_key_secret": - ckeditorLicenseKeySecret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "ckeditor-license-key", Namespace: d.Namespace}} + secretName := fmt.Sprintf("ckeditor-license-key-%s", d.Name) + ckeditorLicenseKeySecret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: secretName, Namespace: d.Namespace}} _, err := controllerruntime.CreateOrUpdate(ctx, r.Client, ckeditorLicenseKeySecret, func() error { log.V(4).Info("Ensuring Resource", "Kind", ckeditorLicenseKeySecret.TypeMeta.Kind, "Resource.Namespace", ckeditorLicenseKeySecret.Namespace, "Resource.Name", ckeditorLicenseKeySecret.Name) return secretForCKEditorLicenseKey(ckeditorLicenseKeySecret, d, CkeditorLicenseKey) @@ -932,7 +933,7 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st ValueFrom: &v1.EnvVarSource{ SecretKeyRef: &v1.SecretKeySelector{ LocalObjectReference: v1.LocalObjectReference{ - Name: "ckeditor-license-key", + Name: fmt.Sprintf("ckeditor-license-key-%s", d.Name), }, Key: "CKEDITOR_LICENSE_KEY", }, @@ -1656,7 +1657,7 @@ func jobForDrupalSiteInstallation(currentobject *batchv1.Job, databaseSecret str ValueFrom: &v1.EnvVarSource{ SecretKeyRef: &v1.SecretKeySelector{ LocalObjectReference: v1.LocalObjectReference{ - Name: "ckeditor-license-key", + Name: fmt.Sprintf("ckeditor-license-key-%s", d.Name), }, Key: "CKEDITOR_LICENSE_KEY", }, @@ -1819,7 +1820,7 @@ func jobForDrupalSiteClone(currentobject *batchv1.Job, databaseSecret string, d ValueFrom: &v1.EnvVarSource{ SecretKeyRef: &v1.SecretKeySelector{ LocalObjectReference: v1.LocalObjectReference{ - Name: "ckeditor-license-key", + Name: fmt.Sprintf("ckeditor-license-key-%s", d.Name), }, Key: "CKEDITOR_LICENSE_KEY", }, -- GitLab From c3afc4de4414388cb93b032df5a2d267a1f2cda5 Mon Sep 17 00:00:00 2001 From: Carina Antunes <carinadeoliveiraantunes@gmail.com> Date: Tue, 17 Sep 2024 16:44:27 +0200 Subject: [PATCH 10/11] enforce new deployment env on update as well --- controllers/drupalsite_resources.go | 43 +++++++++++++++-------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/controllers/drupalsite_resources.go b/controllers/drupalsite_resources.go index e2372cdf..f99d284a 100644 --- a/controllers/drupalsite_resources.go +++ b/controllers/drupalsite_resources.go @@ -919,27 +919,6 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st Name: "php-fpm", Protocol: "TCP", }} - currentobject.Spec.Template.Spec.Containers[i].Env = []corev1.EnvVar{ - { - Name: "DRUPAL_SHARED_VOLUME", - Value: "/drupal-data", - }, - { - Name: "SMTPHOST", - Value: SMTPHost, - }, - { - Name: "CKEDITOR_LICENSE_KEY", - ValueFrom: &v1.EnvVarSource{ - SecretKeyRef: &v1.SecretKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ - Name: fmt.Sprintf("ckeditor-license-key-%s", d.Name), - }, - Key: "CKEDITOR_LICENSE_KEY", - }, - }, - }, - } currentobject.Spec.Template.Spec.Containers[i].EnvFrom = []corev1.EnvFromSource{ { SecretRef: &corev1.SecretEnvSource{ @@ -1192,6 +1171,28 @@ func deploymentForDrupalSite(currentobject *appsv1.Deployment, databaseSecret st FailureThreshold: 3, SuccessThreshold: 1, } + + currentobject.Spec.Template.Spec.Containers[i].Env = []corev1.EnvVar{ + { + Name: "DRUPAL_SHARED_VOLUME", + Value: "/drupal-data", + }, + { + Name: "SMTPHOST", + Value: SMTPHost, + }, + { + Name: "CKEDITOR_LICENSE_KEY", + ValueFrom: &v1.EnvVarSource{ + SecretKeyRef: &v1.SecretKeySelector{ + LocalObjectReference: v1.LocalObjectReference{ + Name: fmt.Sprintf("ckeditor-license-key-%s", d.Name), + }, + Key: "CKEDITOR_LICENSE_KEY", + }, + }, + }, + } case "php-fpm-exporter": currentobject.Spec.Template.Spec.Containers[i].Image = PhpFpmExporterImage currentobject.Spec.Template.Spec.Containers[i].Resources = config.phpExporterResources -- GitLab From 249c3645c375f374067b6cb065c2e0de37b585a0 Mon Sep 17 00:00:00 2001 From: Carina Antunes <carina.oliveira.antunes@cern.ch> Date: Tue, 17 Sep 2024 17:15:26 +0200 Subject: [PATCH 11/11] Update file .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e95c537f..b0504ab9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,6 +9,10 @@ include: - project: 'paas-tools/infrastructure-ci' file: 'docker-images-ci-templates/DockerImages.gitlab-ci.yml' +Build Topic Branch: + variables: + TAG: "${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}" + stages: - build - test -- GitLab