feat: execute templates against postRendererHooks (#1839)

This commit is supposed to add template support to post renderer args.
Also, to make it possible to template arguments that are added to helm
defaults, during the load, I'm removing default post renderer args from
the state and putting them to each release, unless custom args are
defined for the release.

Signed-off-by: Nikolai Rodionov <allanger@badhouseplants.net>
This commit is contained in:
Nikolai Rodionov 2025-01-28 15:34:59 +01:00 committed by GitHub
parent 9dc0aaa1e7
commit b5eb879357
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 0 deletions

View File

@ -249,6 +249,14 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba
finalState.RenderedValues = currentState.RenderedValues
}
if len(finalState.HelmDefaults.PostRendererArgs) > 0 {
for i := range finalState.Releases {
if len(finalState.Releases[i].PostRendererArgs) == 0 {
finalState.Releases[i].PostRendererArgs = finalState.HelmDefaults.PostRendererArgs
}
}
finalState.HelmDefaults.PostRendererArgs = nil
}
env = &finalState.Env
ld.logger.Debugf("merged environment: %v", env)

View File

@ -90,6 +90,18 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R
result.Labels[key] = s.String()
}
{
postRendererArgs := []string{}
for _, ts := range result.PostRendererArgs {
postRendererArg, err := renderer.RenderTemplateContentToString([]byte(ts))
if err != nil {
return nil, fmt.Errorf("failed executing template expressions in release \"%s\".postRendererArgs = \"%s\": %v", r.Name, ts, err)
}
postRendererArgs = append(postRendererArgs, postRendererArg)
}
result.PostRendererArgs = postRendererArgs
}
if len(result.ValuesTemplate) > 0 {
for i, t := range result.ValuesTemplate {
switch ts := t.(type) {

View File

@ -123,6 +123,29 @@ func TestHelmState_executeTemplates(t *testing.T) {
Values: []any{map[string]any{"key": "app-val0"}},
},
},
{
name: "Has template expressions in post renderer args",
input: ReleaseSpec{
Chart: "test-chart",
PostRendererArgs: []string{
"--release",
"{{ .Release.Name }}",
"--chart",
"{{ .Release.Chart }}",
},
Name: "test-release",
},
want: ReleaseSpec{
Chart: "test-chart",
Name: "test-release",
PostRendererArgs: []string{
"--release",
"test-chart-dev",
"--chart",
"test-chart",
},
},
},
}
for i := range tests {