Commit 4eec38e1 authored by Công Nguyễn's avatar Công Nguyễn
Browse files

feat: add extra envFrom config

parent a7be8d5f
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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 }}
+8 −0
Original line number Diff line number Diff line
@@ -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 }}
+8 −0
Original line number Diff line number Diff line
@@ -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 }}
+78 −3
Original line number Diff line number Diff line
@@ -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)
			}
		})
	}
}
+72 −2
Original line number Diff line number Diff line
@@ -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)
		})
	}
}
Loading