Skip to content

Commit 1e8954d

Browse files
✨ (helm/v2-alpha): Add manager.envOverrides for CLI env overrides
1 parent 66c1957 commit 1e8954d

File tree

9 files changed

+100
-33
lines changed

9 files changed

+100
-33
lines changed

docs/book/src/cronjob-tutorial/testdata/project/dist/chart/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ manager:
2525
##
2626
env: []
2727

28+
## Env overrides (--set manager.envOverrides.VAR=value)
29+
## Same name in env above: this value takes precedence.
30+
##
31+
envOverrides: {}
32+
2833
## Image pull secrets
2934
##
3035
imagePullSecrets: []

docs/book/src/getting-started/testdata/project/dist/chart/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ manager:
2525
##
2626
env: []
2727

28+
## Env overrides (--set manager.envOverrides.VAR=value)
29+
## Same name in env above: this value takes precedence.
30+
##
31+
envOverrides: {}
32+
2833
## Image pull secrets
2934
##
3035
imagePullSecrets: []

docs/book/src/multiversion-tutorial/testdata/project/dist/chart/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ manager:
2525
##
2626
env: []
2727

28+
## Env overrides (--set manager.envOverrides.VAR=value)
29+
## Same name in env above: this value takes precedence.
30+
##
31+
envOverrides: {}
32+
2833
## Image pull secrets
2934
##
3035
imagePullSecrets: []

pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/helm_templater.go

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -611,21 +611,36 @@ func (t *HelmTemplater) templateEnvironmentVariables(yamlContent string) string
611611
}
612612
}
613613

614-
if i+1 < len(lines) && strings.Contains(lines[i+1], ".Values.manager.env") {
614+
nextLine := ""
615+
if i+1 < len(lines) {
616+
nextLine = lines[i+1]
617+
}
618+
if strings.Contains(nextLine, ".Values.manager.env") || strings.Contains(nextLine, "envOverrides") {
615619
return yamlContent
616620
}
617621

618622
childIndent := indentStr + " "
619623
childIndentWidth := strconv.Itoa(len(childIndent))
620-
621-
block := []string{
622-
indentStr + "env:",
623-
childIndent + "{{- if .Values.manager.env }}",
624-
childIndent + "{{- toYaml .Values.manager.env | nindent " + childIndentWidth + " }}",
625-
childIndent + "{{- else }}",
626-
childIndent + "[]",
627-
childIndent + "{{- end }}",
628-
}
624+
// Env list + envOverrides (CLI --set). Secret refs go in env list.
625+
hasEnv := `{{- if or .Values.manager.env (and (kindIs "map" .Values.manager.envOverrides) ` +
626+
`(not (empty .Values.manager.envOverrides))) }}`
627+
block := make([]string, 0, 22)
628+
block = append(block,
629+
indentStr+"env:",
630+
hasEnv,
631+
childIndent+`{{- if .Values.manager.env }}`,
632+
childIndent+"{{- toYaml .Values.manager.env | nindent "+childIndentWidth+" }}",
633+
childIndent+`{{- end }}`,
634+
childIndent+`{{- if kindIs "map" .Values.manager.envOverrides }}`,
635+
childIndent+`{{- range $k, $v := .Values.manager.envOverrides }}`,
636+
childIndent+`- name: {{ $k }}`,
637+
childIndent+` value: {{ $v | quote }}`,
638+
childIndent+`{{ end }}`,
639+
childIndent+`{{- end }}`,
640+
childIndent+`{{- else }}`,
641+
childIndent+"[]",
642+
childIndent+`{{- end }}`,
643+
)
629644

630645
newLines := append([]string{}, lines[:i]...)
631646
newLines = append(newLines, block...)

pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/helm_templater_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,9 +2047,10 @@ spec:
20472047
Expect(result).To(ContainSubstring("{{- if .Values.manager.resources }}"))
20482048
Expect(result).To(ContainSubstring("{{- toYaml .Values.manager.resources | nindent"))
20492049

2050-
// Should template environment variables
2051-
Expect(result).To(ContainSubstring("{{- if .Values.manager.env }}"))
2052-
Expect(result).To(ContainSubstring("{{- toYaml .Values.manager.env | nindent"))
2050+
// Env list + envOverrides (--set). Secret refs go in env list.
2051+
Expect(result).To(ContainSubstring(".Values.manager.env"))
2052+
Expect(result).To(ContainSubstring("toYaml .Values.manager.env"))
2053+
Expect(result).To(ContainSubstring("envOverrides"))
20532054

20542055
// Should template args
20552056
Expect(result).To(ContainSubstring("{{- range .Values.manager.args }}"))

pkg/plugins/optional/helm/v2alpha/scaffolds/internal/templates/values_basic.go

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -222,22 +222,7 @@ func (f *HelmValuesBasic) addDeploymentConfig(buf *bytes.Buffer) {
222222
return
223223
}
224224

225-
// Add environment variables if they exist
226-
if env, exists := f.DeploymentConfig["env"]; exists && env != nil {
227-
buf.WriteString(" ## Environment variables\n")
228-
buf.WriteString(" ##\n")
229-
buf.WriteString(" env:\n")
230-
if envYaml, err := yaml.Marshal(env); err == nil {
231-
f.IndentYamlProperly(buf, envYaml)
232-
} else {
233-
buf.WriteString(" []\n")
234-
}
235-
buf.WriteString("\n")
236-
} else {
237-
buf.WriteString(" ## Environment variables\n")
238-
buf.WriteString(" ##\n")
239-
buf.WriteString(" env: []\n\n")
240-
}
225+
f.addEnvSection(buf)
241226

242227
// Add image pull secrets
243228
if imagePullSecrets, exists := f.DeploymentConfig["imagePullSecrets"]; exists && imagePullSecrets != nil {
@@ -349,11 +334,41 @@ func (f *HelmValuesBasic) IndentYamlProperly(buf *bytes.Buffer, envYaml []byte)
349334
}
350335
}
351336

337+
// addEnvSection writes env (list, same as master) and only adds envOverrides for CLI.
338+
func (f *HelmValuesBasic) addEnvSection(buf *bytes.Buffer) {
339+
buf.WriteString(" ## Environment variables\n")
340+
buf.WriteString(" ##\n")
341+
if env, exists := f.DeploymentConfig["env"]; exists && env != nil {
342+
if list, ok := env.([]any); ok && len(list) > 0 {
343+
buf.WriteString(" env:\n")
344+
if envYaml, err := yaml.Marshal(list); err == nil {
345+
f.IndentYamlProperly(buf, envYaml)
346+
}
347+
} else {
348+
buf.WriteString(" env: []\n")
349+
}
350+
} else {
351+
buf.WriteString(" env: []\n")
352+
}
353+
buf.WriteString("\n")
354+
buf.WriteString(" ## Env overrides (--set manager.envOverrides.VAR=value)\n")
355+
buf.WriteString(" ## Same name in env above: this value takes precedence.\n")
356+
buf.WriteString(" ##\n")
357+
buf.WriteString(" envOverrides: {}\n")
358+
buf.WriteString("\n")
359+
}
360+
352361
// addDefaultDeploymentSections adds default sections when no deployment config is available
353362
func (f *HelmValuesBasic) addDefaultDeploymentSections(buf *bytes.Buffer) {
354363
buf.WriteString(" ## Environment variables\n")
355364
buf.WriteString(" ##\n")
356-
buf.WriteString(" env: []\n\n")
365+
buf.WriteString(" env: []\n")
366+
buf.WriteString("\n")
367+
buf.WriteString(" ## Env overrides (--set manager.envOverrides.VAR=value)\n")
368+
buf.WriteString(" ## Same name in env above: this value takes precedence.\n")
369+
buf.WriteString(" ##\n")
370+
buf.WriteString(" envOverrides: {}\n")
371+
buf.WriteString("\n")
357372

358373
f.addDefaultImagePullSecrets(buf)
359374
f.addDefaultPodSecurityContext(buf)

pkg/plugins/optional/helm/v2alpha/scaffolds/internal/templates/values_basic_test.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,19 @@ var _ = Describe("HelmValuesBasic", func() {
5252
Expect(content).To(ContainSubstring("manager:"))
5353
Expect(content).To(ContainSubstring("args: []"))
5454
Expect(content).To(ContainSubstring("env: []"))
55+
Expect(content).To(ContainSubstring("envOverrides: {}"))
5556
Expect(content).To(ContainSubstring("metrics:"))
5657
Expect(content).To(ContainSubstring("prometheus:"))
5758
Expect(content).To(ContainSubstring("rbacHelpers:"))
5859
Expect(content).To(ContainSubstring("imagePullSecrets: []"))
5960
})
61+
62+
It("should include env list and envOverrides for CLI", func() {
63+
content := valuesTemplate.GetBody()
64+
Expect(content).To(ContainSubstring("env: []"))
65+
Expect(content).To(ContainSubstring("envOverrides: {}"))
66+
Expect(content).To(ContainSubstring("--set manager.envOverrides.VAR=value"))
67+
})
6068
})
6169

6270
Context("when project has no webhooks", func() {
@@ -153,8 +161,8 @@ var _ = Describe("HelmValuesBasic", func() {
153161
Expect(content).To(ContainSubstring("args:"))
154162
Expect(content).To(ContainSubstring("- --leader-elect"))
155163
Expect(content).To(ContainSubstring("env:"))
156-
Expect(content).To(ContainSubstring("name: TEST_ENV"))
157-
Expect(content).To(ContainSubstring("value: test-value"))
164+
Expect(content).To(ContainSubstring("TEST_ENV"))
165+
Expect(content).To(ContainSubstring("test-value"))
158166
Expect(content).To(ContainSubstring("repository: example.com/custom-controller"))
159167
Expect(content).To(ContainSubstring("tag: v1.2.3"))
160168
Expect(content).To(ContainSubstring("pullPolicy: Always"))
@@ -288,7 +296,7 @@ var _ = Describe("HelmValuesBasic", func() {
288296
It("should render nested env configuration", func() {
289297
content := valuesTemplate.GetBody()
290298
Expect(content).To(ContainSubstring("env:"))
291-
Expect(content).To(ContainSubstring("name: POD_NAMESPACE"))
299+
Expect(content).To(ContainSubstring("POD_NAMESPACE"))
292300
Expect(content).To(ContainSubstring("valueFrom:"))
293301
Expect(content).To(ContainSubstring("fieldRef:"))
294302
Expect(content).To(ContainSubstring("fieldPath: metadata.namespace"))

testdata/project-v4-with-plugins/dist/chart/templates/manager/manager.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,16 @@ spec:
5353
command:
5454
- /manager
5555
env:
56+
{{- if or .Values.manager.env (and (kindIs "map" .Values.manager.envOverrides) (not (empty .Values.manager.envOverrides))) }}
5657
{{- if .Values.manager.env }}
5758
{{- toYaml .Values.manager.env | nindent 20 }}
59+
{{- end }}
60+
{{- if kindIs "map" .Values.manager.envOverrides }}
61+
{{- range $k, $v := .Values.manager.envOverrides }}
62+
- name: {{ $k }}
63+
value: {{ $v | quote }}
64+
{{ end }}
65+
{{- end }}
5866
{{- else }}
5967
[]
6068
{{- end }}

testdata/project-v4-with-plugins/dist/chart/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ manager:
3333
fieldRef:
3434
fieldPath: metadata.namespace
3535

36+
## Env overrides (--set manager.envOverrides.VAR=value)
37+
## Same name in env above: this value takes precedence.
38+
##
39+
envOverrides: {}
40+
3641
## Image pull secrets
3742
##
3843
imagePullSecrets: []

0 commit comments

Comments
 (0)