diff --git a/assets/auto-deploy-app/templates/cronjob.yaml b/assets/auto-deploy-app/templates/cronjob.yaml index fc8192d705c60db8fc94a7543ae9f0a38c0d27b4..cc2aba3f34eeb2fb6cf95285dac5480b67d53879 100644 --- a/assets/auto-deploy-app/templates/cronjob.yaml +++ b/assets/auto-deploy-app/templates/cronjob.yaml @@ -89,6 +89,14 @@ items: envFrom: - secretRef: name: {{ $.Values.application.secretName }} +{{- if $jobConfig.extraEnvFrom }} +{{ toYaml $jobConfig.extraEnvFrom | nindent 14 }} +{{- end }} + {{- else }} + envFrom: +{{- if $jobConfig.extraEnvFrom }} +{{ toYaml $jobConfig.extraEnvFrom | nindent 14 }} +{{- end }} {{- end }} env: {{- if $.Values.postgresql.managed }} diff --git a/assets/auto-deploy-app/templates/deployment.yaml b/assets/auto-deploy-app/templates/deployment.yaml index c2042c78776c7d160ff2a723934711e4cb66e768..5dfdd235379547859a1162e4839a0a0ea908b7d5 100644 --- a/assets/auto-deploy-app/templates/deployment.yaml +++ b/assets/auto-deploy-app/templates/deployment.yaml @@ -107,6 +107,14 @@ spec: envFrom: - secretRef: name: {{ .Values.application.secretName }} +{{- if .Values.extraEnvFrom }} +{{ toYaml .Values.extraEnvFrom | indent 8 }} +{{- end }} + {{- else}} + envFrom: +{{- if .Values.extraEnvFrom }} +{{ toYaml .Values.extraEnvFrom | indent 8 }} +{{- end }} {{- end }} env: {{- if .Values.postgresql.managed }} diff --git a/assets/auto-deploy-app/templates/worker-deployment.yaml b/assets/auto-deploy-app/templates/worker-deployment.yaml index 64aeee639a4cd5b86589b593ae1d7de49c2f3f47..b94b60a62ee2c199a6d566e4ed5638e4707244d4 100644 --- a/assets/auto-deploy-app/templates/worker-deployment.yaml +++ b/assets/auto-deploy-app/templates/worker-deployment.yaml @@ -103,6 +103,14 @@ items: envFrom: - secretRef: name: {{ $.Values.application.secretName }} +{{- if $workerConfig.extraEnvFrom }} +{{ toYaml $workerConfig.extraEnvFrom | indent 10 }} +{{- end }} + {{- else }} + envFrom: +{{- if $workerConfig.extraEnvFrom }} +{{ toYaml $workerConfig.extraEnvFrom | indent 10 }} +{{- end }} {{- end }} env: {{- if $.Values.application.database_url }} diff --git a/assets/auto-deploy-app/test/templates/cronjob_test.go b/assets/auto-deploy-app/test/templates/cronjob_test.go index 628699caf23edf7fbe266ad4437a194aa1cc8132..dd727f1c27fd0f422b60bb93545e1e5307bc6a17 100644 --- a/assets/auto-deploy-app/test/templates/cronjob_test.go +++ b/assets/auto-deploy-app/test/templates/cronjob_test.go @@ -1,7 +1,7 @@ package main import ( - "regexp" + "regexp" "strings" "testing" @@ -579,12 +579,12 @@ func TestCronjobTemplateWithVolumeMounts(t *testing.T) { coreV1.VolumeMount{ Name: "test-host-path", MountPath: "/etc/ssl/certs/", - ReadOnly: true, + ReadOnly: true, }, coreV1.VolumeMount{ Name: "secret-volume", MountPath: "/etc/specialSecret", - ReadOnly: true, + ReadOnly: true, }, }, }, @@ -726,3 +726,78 @@ func TestCronjobAffinity(t *testing.T) { }) } } + +func TestCronJobTemplateWithExtraEnvFrom(t *testing.T) { + releaseName := "cronjob-with-extra-envfrom-test" + templates := []string{"templates/cronjob.yaml"} + + tcs := []struct { + name string + values map[string]string + expectedEnvFrom coreV1.EnvFromSource + }{ + { + name: "with extra envfrom secret test", + values: map[string]string{ + "cronjobs.job1.schedule": "*/2 * * * *", + "cronjobs.job1.extraEnvFrom[0].secretRef.name": "secret-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + SecretRef: &coreV1.SecretEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "secret-name-test", + }, + }, + }, + }, + { + name: "with extra envfrom with secretName test", + values: map[string]string{ + "cronjobs.job1.schedule": "*/2 * * * *", + "application.secretName": "gitlab-secretname-test", + "cronjobs.job1.extraEnvFrom[0].secretRef.name": "secret-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + SecretRef: &coreV1.SecretEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "secret-name-test", + }, + }, + }, + }, + { + name: "with extra envfrom configmap test", + values: map[string]string{ + "cronjobs.job1.schedule": "*/2 * * * *", + "cronjobs.job1.extraEnvFrom[0].configMapRef.name": "configmap-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + ConfigMapRef: &coreV1.ConfigMapEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "configmap-name-test", + }, + }, + }, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + opts := &helm.Options{ + SetValues: tc.values, + } + output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates) + + if err != nil { + t.Error(err) + return + } + + var cronjobs batchV1beta1.CronJobList + helm.UnmarshalK8SYaml(t, output, &cronjobs) + for _, cronjob := range cronjobs.Items { + require.Contains(t, cronjob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].EnvFrom, tc.expectedEnvFrom) + } + }) + } +} diff --git a/assets/auto-deploy-app/test/templates/deployment_test.go b/assets/auto-deploy-app/test/templates/deployment_test.go index 7546d449a50b1de05a43062469b93f80c4eb4a7b..11058a70793f0aa305454c8ef5bff5c718197a70 100644 --- a/assets/auto-deploy-app/test/templates/deployment_test.go +++ b/assets/auto-deploy-app/test/templates/deployment_test.go @@ -969,12 +969,12 @@ func TestDeploymentTemplateWithVolumeMounts(t *testing.T) { coreV1.VolumeMount{ Name: "test-host-path", MountPath: "/etc/ssl/certs/", - ReadOnly: true, + ReadOnly: true, }, coreV1.VolumeMount{ Name: "secret-volume", MountPath: "/etc/specialSecret", - ReadOnly: true, + ReadOnly: true, }, }, }, @@ -1120,3 +1120,73 @@ func TestDeploymentDatabaseUrlEnvironmentVariable(t *testing.T) { }) } } + +func TestDeploymentTemplateWithExtraEnvFrom(t *testing.T) { + releaseName := "deployment-with-extra-envfrom-test" + templates := []string{"templates/deployment.yaml"} + + tcs := []struct { + name string + values map[string]string + expectedEnvFrom coreV1.EnvFromSource + }{ + { + name: "with extra envfrom secret test", + values: map[string]string{ + "extraEnvFrom[0].secretRef.name": "secret-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + SecretRef: &coreV1.SecretEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "secret-name-test", + }, + }, + }, + }, + { + name: "with extra envfrom with secretName test", + values: map[string]string{ + "application.secretName": "gitlab-secretname-test", + "extraEnvFrom[0].secretRef.name": "secret-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + SecretRef: &coreV1.SecretEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "secret-name-test", + }, + }, + }, + }, + { + name: "with extra envfrom configmap test", + values: map[string]string{ + "extraEnvFrom[0].configMapRef.name": "configmap-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + ConfigMapRef: &coreV1.ConfigMapEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "configmap-name-test", + }, + }, + }, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + opts := &helm.Options{ + SetValues: tc.values, + } + output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates) + + if err != nil { + t.Error(err) + return + } + + deployment := new(appsV1.Deployment) + helm.UnmarshalK8SYaml(t, output, deployment) + require.Contains(t, deployment.Spec.Template.Spec.Containers[0].EnvFrom, tc.expectedEnvFrom) + }) + } +} diff --git a/assets/auto-deploy-app/test/templates/workerdeployment_test.go b/assets/auto-deploy-app/test/templates/workerdeployment_test.go index 8eca1560ba69909917415571c4b59bbf769fbcbd..76bfa27b8f77635b0cf69d4a35b7b10a884e53ae 100644 --- a/assets/auto-deploy-app/test/templates/workerdeployment_test.go +++ b/assets/auto-deploy-app/test/templates/workerdeployment_test.go @@ -1021,12 +1021,12 @@ func TestWorkerTemplateWithVolumeMounts(t *testing.T) { coreV1.VolumeMount{ Name: "test-host-path", MountPath: "/etc/ssl/certs/", - ReadOnly: true, + ReadOnly: true, }, coreV1.VolumeMount{ Name: "secret-volume", MountPath: "/etc/specialSecret", - ReadOnly: true, + ReadOnly: true, }, }, }, @@ -1065,7 +1065,7 @@ func TestWorkerTemplateWithVolumeMounts(t *testing.T) { require.Equal(t, expectedVolume.Secret.SecretName, deployment.Spec.Template.Spec.Volumes[i].Secret.SecretName) } } - + for i, expectedVolumeMount := range tc.expectedVolumeMounts { require.Equal(t, expectedVolumeMount.Name, deployment.Spec.Template.Spec.Containers[0].VolumeMounts[i].Name) require.Equal(t, expectedVolumeMount.MountPath, deployment.Spec.Template.Spec.Containers[0].VolumeMounts[i].MountPath) @@ -1142,3 +1142,81 @@ func TestWorkerDatabaseUrlEnvironmentVariable(t *testing.T) { }) } } + +func TestWorkerDeploymentTemplateWithExtraEnvFrom(t *testing.T) { + releaseName := "worker-deployment-with-extra-envfrom-test" + templates := []string{"templates/worker-deployment.yaml"} + + tcs := []struct { + name string + values map[string]string + expectedEnvFrom coreV1.EnvFromSource + }{ + { + name: "with extra envfrom secret test", + values: map[string]string{ + "workers.worker1.command[0]": "echo", + "workers.worker1.command[1]": "worker1", + "workers.worker1.extraEnvFrom[0].secretRef.name": "secret-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + SecretRef: &coreV1.SecretEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "secret-name-test", + }, + }, + }, + }, + { + name: "with extra envfrom with secretName test", + values: map[string]string{ + "workers.worker1.command[0]": "echo", + "workers.worker1.command[1]": "worker1", + "application.secretName": "gitlab-secretname-test", + "workers.worker1.extraEnvFrom[0].secretRef.name": "secret-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + SecretRef: &coreV1.SecretEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "secret-name-test", + }, + }, + }, + }, + { + name: "with extra envfrom configmap test", + values: map[string]string{ + "workers.worker1.command[0]": "echo", + "workers.worker1.command[1]": "worker1", + "workers.worker1.extraEnvFrom[0].configMapRef.name": "configmap-name-test", + }, + expectedEnvFrom: coreV1.EnvFromSource{ + ConfigMapRef: &coreV1.ConfigMapEnvSource{ + LocalObjectReference: coreV1.LocalObjectReference{ + Name: "configmap-name-test", + }, + }, + }, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + opts := &helm.Options{ + SetValues: tc.values, + } + output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates) + + if err != nil { + t.Error(err) + return + } + + var deployments deploymentAppsV1List + helm.UnmarshalK8SYaml(t, output, &deployments) + for _, deployment := range deployments.Items { + require.Contains(t, deployment.Spec.Template.Spec.Containers[0].EnvFrom, tc.expectedEnvFrom) + } + }) + } +} diff --git a/assets/auto-deploy-app/values.yaml b/assets/auto-deploy-app/values.yaml index 851458de1d85e704c1725a0fac984cd39a5bc989..ce8f5a42860c5137649f98239439f15f85872a0f 100644 --- a/assets/auto-deploy-app/values.yaml +++ b/assets/auto-deploy-app/values.yaml @@ -220,6 +220,10 @@ extraVolumeMounts: [] # mountPath: /app/config.yaml # subPath: config.yaml +extraEnvFrom: [] +# - secretRef: +# name: {{ .Values.application.secretName }} + workers: {} # worker: # replicaCount: 1 @@ -268,6 +272,7 @@ workers: {} # - stop_worker # extraVolumes: [] # extraVolumeMounts: [] + # extraEnvFrom: [] cronjobs: {} # job: @@ -298,3 +303,4 @@ cronjobs: {} # probeType: "httpGet" # extraVolumes: [] # extraVolumeMounts: [] + # extraEnvFrom: []