feat: add chart version to template values

Signed-off-by: Hans Song <hans.song.dev@gmail.com>
This commit is contained in:
Hans Song 2025-05-24 14:10:14 +10:00
parent 3429901363
commit b308476477
3 changed files with 50 additions and 10 deletions

View File

@ -28,11 +28,12 @@ func (st *HelmState) createReleaseTemplateData(release *ReleaseSpec, vals map[st
Chart: st.OverrideChart,
Values: vals,
Release: releaseTemplateDataRelease{
Name: release.Name,
Chart: release.Chart,
Namespace: release.Namespace,
Labels: release.Labels,
KubeContext: release.KubeContext,
Name: release.Name,
Chart: release.Chart,
ChartVersion: release.Version,
Namespace: release.Namespace,
Labels: release.Labels,
KubeContext: release.KubeContext,
},
}
tmplData.StateValues = &tmplData.Values

View File

@ -9,6 +9,7 @@ import (
"github.com/go-test/deep"
"github.com/helmfile/helmfile/pkg/environment"
"github.com/helmfile/helmfile/pkg/event"
"github.com/helmfile/helmfile/pkg/filesystem"
)
@ -146,6 +147,41 @@ func TestHelmState_executeTemplates(t *testing.T) {
},
},
},
{
name: "Has template expressions in hook args",
input: ReleaseSpec{
Name: "test-name",
Chart: "test-chart",
Version: "{{ .Release.Name }}-0.1.0",
Hooks: []event.Hook{{
Name: "test-hook",
Command: "helm",
Args: []string{
"show",
"crds",
"{{ .Release.Chart }}",
"--version",
"{{ .Release.ChartVersion }}",
},
}},
},
want: ReleaseSpec{
Name: "test-name",
Chart: "test-chart",
Version: "test-name-0.1.0",
Hooks: []event.Hook{{
Name: "test-hook",
Command: "helm",
Args: []string{
"show",
"crds",
"test-chart",
"--version",
"0.1.0",
},
}},
},
},
}
for i := range tests {

View File

@ -16,11 +16,11 @@ type EnvironmentTemplateData struct {
// Namespace is accessible as `.Namespace` from any non-values template executed by the renderer
Namespace string
// Values is accessible as `.Values` and it contains default state values overrode by environment values and override values.
Values map[string]any
StateValues *map[string]any
Values map[string]interface{}
StateValues *map[string]interface{}
}
func NewEnvironmentTemplateData(environment environment.Environment, namespace string, values map[string]any) *EnvironmentTemplateData {
func NewEnvironmentTemplateData(environment environment.Environment, namespace string, values map[string]interface{}) *EnvironmentTemplateData {
d := EnvironmentTemplateData{environment, namespace, values, nil}
d.StateValues = &d.Values
return &d
@ -35,8 +35,8 @@ type releaseTemplateData struct {
// It contains a subset of ReleaseSpec that is known to be useful to dynamically render values.
Release releaseTemplateDataRelease
// Values is accessible as `.Values` and it contains default state values overrode by environment values and override values.
Values map[string]any
StateValues *map[string]any
Values map[string]interface{}
StateValues *map[string]interface{}
// KubeContext is HelmState.OverrideKubeContext.
// You should better use Release.KubeContext as it might work as you'd expect even if HelmState.OverrideKubeContext is not set.
// See releaseTemplateDataRelease.KubeContext for more information.
@ -64,6 +64,9 @@ type releaseTemplateDataRelease struct {
// Chart is ReleaseSpec.Chart
Chart string
// ChartVersion is ReleaseSpec.Version, renamed to disambiguate from the templated version field
ChartVersion string
// KubeContext is ReleaseSpec.KubeContext
KubeContext string
}