Skip to content

Commit 02d9add

Browse files
Link-TingluoHuang
andauthored
Fix bug preventing env variables from being specified (#2450)
Co-authored-by: Tingluo Huang <[email protected]>
1 parent f5ac134 commit 02d9add

File tree

3 files changed

+88
-28
lines changed

3 files changed

+88
-28
lines changed

charts/gha-runner-scale-set-controller/templates/deployment.yaml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,8 @@ spec:
6969
fieldRef:
7070
fieldPath: metadata.namespace
7171
{{- with .Values.env }}
72-
{{- if kindIs "slice" .Values.env }}
73-
{{- toYaml .Values.env | nindent 8 }}
74-
{{- else }}
75-
{{- range $key, $val := .Values.env }}
76-
- name: {{ $key }}
77-
value: {{ $val | quote }}
78-
{{- end }}
72+
{{- if kindIs "slice" . }}
73+
{{- toYaml . | nindent 8 }}
7974
{{- end }}
8075
{{- end }}
8176
{{- with .Values.resources }}

charts/gha-runner-scale-set-controller/tests/template_test.go

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,8 @@ func TestTemplate_ControllerDeployment_Customize(t *testing.T) {
390390
"imagePullSecrets[0].name": "dockerhub",
391391
"nameOverride": "gha-runner-scale-set-controller-override",
392392
"fullnameOverride": "gha-runner-scale-set-controller-fullname-override",
393+
"env[0].name": "ENV_VAR_NAME_1",
394+
"env[0].value": "ENV_VAR_VALUE_1",
393395
"serviceAccount.name": "gha-runner-scale-set-controller-sa",
394396
"podAnnotations.foo": "bar",
395397
"podSecurityContext.fsGroup": "1000",
@@ -432,6 +434,9 @@ func TestTemplate_ControllerDeployment_Customize(t *testing.T) {
432434
assert.Equal(t, "bar", deployment.Spec.Template.Annotations["foo"])
433435
assert.Equal(t, "manager", deployment.Spec.Template.Annotations["kubectl.kubernetes.io/default-container"])
434436

437+
assert.Equal(t, "ENV_VAR_NAME_1", deployment.Spec.Template.Spec.Containers[0].Env[2].Name)
438+
assert.Equal(t, "ENV_VAR_VALUE_1", deployment.Spec.Template.Spec.Containers[0].Env[2].Value)
439+
435440
assert.Len(t, deployment.Spec.Template.Spec.ImagePullSecrets, 1)
436441
assert.Equal(t, "dockerhub", deployment.Spec.Template.Spec.ImagePullSecrets[0].Name)
437442
assert.Equal(t, "gha-runner-scale-set-controller-sa", deployment.Spec.Template.Spec.ServiceAccountName)
@@ -467,10 +472,13 @@ func TestTemplate_ControllerDeployment_Customize(t *testing.T) {
467472
assert.Equal(t, "--auto-scaler-image-pull-secrets=dockerhub", deployment.Spec.Template.Spec.Containers[0].Args[1])
468473
assert.Equal(t, "--log-level=debug", deployment.Spec.Template.Spec.Containers[0].Args[2])
469474

470-
assert.Len(t, deployment.Spec.Template.Spec.Containers[0].Env, 2)
475+
assert.Len(t, deployment.Spec.Template.Spec.Containers[0].Env, 3)
471476
assert.Equal(t, "CONTROLLER_MANAGER_CONTAINER_IMAGE", deployment.Spec.Template.Spec.Containers[0].Env[0].Name)
472477
assert.Equal(t, managerImage, deployment.Spec.Template.Spec.Containers[0].Env[0].Value)
473478

479+
assert.Equal(t, "ENV_VAR_NAME_1", deployment.Spec.Template.Spec.Containers[0].Env[2].Name)
480+
assert.Equal(t, "ENV_VAR_VALUE_1", deployment.Spec.Template.Spec.Containers[0].Env[2].Value)
481+
474482
assert.Equal(t, "CONTROLLER_MANAGER_POD_NAMESPACE", deployment.Spec.Template.Spec.Containers[0].Env[1].Name)
475483
assert.Equal(t, "metadata.namespace", deployment.Spec.Template.Spec.Containers[0].Env[1].ValueFrom.FieldRef.FieldPath)
476484

@@ -704,6 +712,52 @@ func TestTemplate_ControllerDeployment_WatchSingleNamespace(t *testing.T) {
704712
assert.Equal(t, "/tmp", deployment.Spec.Template.Spec.Containers[0].VolumeMounts[0].MountPath)
705713
}
706714

715+
func TestTemplate_ControllerContainerEnvironmentVariables(t *testing.T) {
716+
t.Parallel()
717+
718+
// Path to the helm chart we will test
719+
helmChartPath, err := filepath.Abs("../../gha-runner-scale-set-controller")
720+
require.NoError(t, err)
721+
722+
releaseName := "test-arc"
723+
namespaceName := "test-" + strings.ToLower(random.UniqueId())
724+
725+
options := &helm.Options{
726+
SetValues: map[string]string{
727+
"env[0].Name": "ENV_VAR_NAME_1",
728+
"env[0].Value": "ENV_VAR_VALUE_1",
729+
"env[1].Name": "ENV_VAR_NAME_2",
730+
"env[1].ValueFrom.SecretKeyRef.Key": "ENV_VAR_NAME_2",
731+
"env[1].ValueFrom.SecretKeyRef.Name": "secret-name",
732+
"env[1].ValueFrom.SecretKeyRef.Optional": "true",
733+
"env[2].Name": "ENV_VAR_NAME_3",
734+
"env[2].Value": "",
735+
"env[3].Name": "ENV_VAR_NAME_4",
736+
},
737+
KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
738+
}
739+
740+
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/deployment.yaml"})
741+
742+
var deployment appsv1.Deployment
743+
helm.UnmarshalK8SYaml(t, output, &deployment)
744+
745+
assert.Equal(t, namespaceName, deployment.Namespace)
746+
assert.Equal(t, "test-arc-gha-runner-scale-set-controller", deployment.Name)
747+
748+
assert.Len(t, deployment.Spec.Template.Spec.Containers[0].Env, 6)
749+
assert.Equal(t, "ENV_VAR_NAME_1", deployment.Spec.Template.Spec.Containers[0].Env[2].Name)
750+
assert.Equal(t, "ENV_VAR_VALUE_1", deployment.Spec.Template.Spec.Containers[0].Env[2].Value)
751+
assert.Equal(t, "ENV_VAR_NAME_2", deployment.Spec.Template.Spec.Containers[0].Env[3].Name)
752+
assert.Equal(t, "secret-name", deployment.Spec.Template.Spec.Containers[0].Env[3].ValueFrom.SecretKeyRef.Name)
753+
assert.Equal(t, "ENV_VAR_NAME_2", deployment.Spec.Template.Spec.Containers[0].Env[3].ValueFrom.SecretKeyRef.Key)
754+
assert.True(t, *deployment.Spec.Template.Spec.Containers[0].Env[3].ValueFrom.SecretKeyRef.Optional)
755+
assert.Equal(t, "ENV_VAR_NAME_3", deployment.Spec.Template.Spec.Containers[0].Env[4].Name)
756+
assert.Empty(t, deployment.Spec.Template.Spec.Containers[0].Env[4].Value)
757+
assert.Equal(t, "ENV_VAR_NAME_4", deployment.Spec.Template.Spec.Containers[0].Env[5].Name)
758+
assert.Empty(t, deployment.Spec.Template.Spec.Containers[0].Env[5].ValueFrom)
759+
}
760+
707761
func TestTemplate_WatchSingleNamespace_NotCreateManagerClusterRole(t *testing.T) {
708762
t.Parallel()
709763

charts/gha-runner-scale-set-controller/values.yaml

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,17 @@ imagePullSecrets: []
1818
nameOverride: ""
1919
fullnameOverride: ""
2020

21+
env:
22+
## Define environment variables for the controller pod
23+
# - name: "ENV_VAR_NAME_1"
24+
# value: "ENV_VAR_VALUE_1"
25+
# - name: "ENV_VAR_NAME_2"
26+
# valueFrom:
27+
# secretKeyRef:
28+
# key: ENV_VAR_NAME_2
29+
# name: secret-name
30+
# optional: true
31+
2132
serviceAccount:
2233
# Specifies whether a service account should be created for running the controller pod
2334
create: true
@@ -31,27 +42,27 @@ serviceAccount:
3142
podAnnotations: {}
3243

3344
podSecurityContext: {}
34-
# fsGroup: 2000
45+
# fsGroup: 2000
3546

3647
securityContext: {}
37-
# capabilities:
38-
# drop:
39-
# - ALL
40-
# readOnlyRootFilesystem: true
41-
# runAsNonRoot: true
42-
# runAsUser: 1000
48+
# capabilities:
49+
# drop:
50+
# - ALL
51+
# readOnlyRootFilesystem: true
52+
# runAsNonRoot: true
53+
# runAsUser: 1000
4354

4455
resources: {}
45-
# We usually recommend not to specify default resources and to leave this as a conscious
46-
# choice for the user. This also increases chances charts run on environments with little
47-
# resources, such as Minikube. If you do want to specify resources, uncomment the following
48-
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
49-
# limits:
50-
# cpu: 100m
51-
# memory: 128Mi
52-
# requests:
53-
# cpu: 100m
54-
# memory: 128Mi
56+
## We usually recommend not to specify default resources and to leave this as a conscious
57+
## choice for the user. This also increases chances charts run on environments with little
58+
## resources, such as Minikube. If you do want to specify resources, uncomment the following
59+
## lines, adjust them as necessary, and remove the curly braces after 'resources:'.
60+
# limits:
61+
# cpu: 100m
62+
# memory: 128Mi
63+
# requests:
64+
# cpu: 100m
65+
# memory: 128Mi
5566

5667
nodeSelector: {}
5768

@@ -69,6 +80,6 @@ flags:
6980
# Defaults to "debug".
7081
logLevel: "debug"
7182

72-
# Restricts the controller to only watch resources in the desired namespace.
73-
# Defaults to watch all namespaces when unset.
74-
# watchSingleNamespace: ""
83+
## Restricts the controller to only watch resources in the desired namespace.
84+
## Defaults to watch all namespaces when unset.
85+
# watchSingleNamespace: ""

0 commit comments

Comments
 (0)