feat: execute templates against postRendererHooks

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 2024-12-18 19:11:17 +01:00 committed by Zubair Haque
parent 9dc0aaa1e7
commit c5d44414b1
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 {