fix: inject KubeVersion and ApiVersions in Chartify rendering (#1624)

* fix: inject KubeVersion and ApiVersions in Chartify rendering

fixes #1623

Signed-off-by: Thomas Loubiou <thomas.loubiou@mirakl.com>

* test: appendApiVersionsFlags

Signed-off-by: Thomas Loubiou <thomas.loubiou@mirakl.com>

* test: add case for appendApiVersionsFlags

Signed-off-by: Thomas Loubiou <thomas.loubiou@mirakl.com>

---------

Signed-off-by: Thomas Loubiou <thomas.loubiou@mirakl.com>
This commit is contained in:
Thomas Loubiou 2024-07-12 16:28:20 +02:00 committed by GitHub
parent d61df9253d
commit f77dc3d5b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 134 additions and 13 deletions

View File

@ -248,6 +248,7 @@ func (a *App) Template(c TemplateConfigProvider) error {
Concurrency: c.Concurrency(),
IncludeTransitiveNeeds: c.IncludeNeeds(),
Set: c.Set(),
KubeVersion: c.KubeVersion(),
}, func() {
ok, errs = a.template(run, c)
})

View File

@ -1256,8 +1256,9 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
chartifyOpts.Validate = opts.Validate
chartifyOpts.KubeVersion = release.KubeVersion
chartifyOpts.ApiVersions = release.ApiVersions
chartifyOpts.KubeVersion = st.getKubeVersion(release, opts.KubeVersion)
chartifyOpts.ApiVersions = st.getApiVersions(release)
// https://github.com/helmfile/helmfile/pull/867
// https://github.com/helmfile/helmfile/issues/895
var flags []string
@ -2822,24 +2823,32 @@ func (st *HelmState) appendValuesControlModeFlag(flags []string, reuseValues boo
return flags
}
func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec, kubeVersion string) []string {
func (st *HelmState) getApiVersions(r *ReleaseSpec) []string {
if len(r.ApiVersions) != 0 {
for _, a := range r.ApiVersions {
flags = append(flags, "--api-versions", a)
}
} else {
for _, a := range st.ApiVersions {
flags = append(flags, "--api-versions", a)
}
return r.ApiVersions
}
return st.ApiVersions
}
func (st *HelmState) getKubeVersion(r *ReleaseSpec, kubeVersion string) string {
switch {
case kubeVersion != "":
flags = append(flags, "--kube-version", kubeVersion)
return kubeVersion
case r.KubeVersion != "":
flags = append(flags, "--kube-version", r.KubeVersion)
return r.KubeVersion
case st.KubeVersion != "":
flags = append(flags, "--kube-version", st.KubeVersion)
return st.KubeVersion
}
return ""
}
func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec, kubeVersion string) []string {
for _, a := range st.getApiVersions(r) {
flags = append(flags, "--api-versions", a)
}
if version := st.getKubeVersion(r, kubeVersion); version != "" {
flags = append(flags, "--kube-version", version)
}
return flags

View File

@ -10,6 +10,7 @@ import (
"github.com/Masterminds/semver/v3"
"github.com/helmfile/vals"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/helmfile/helmfile/pkg/environment"
@ -3613,3 +3614,113 @@ func Test_appendExtraSyncFlags(t *testing.T) {
})
}
}
func TestHelmState_appendApiVersionsFlags(t *testing.T) {
tests := []struct {
name string
kubeVersion string
flags []string
expectedFlags []string
releaseKubeVersion string
releaseApiVersion []string
stateKubeVersion string
stateApiVersion []string
}{
{
name: "no kubeVersion is set",
expectedFlags: []string{},
},
{
name: "flags are kept",
flags: []string{"--flag1", "--flag2"},
expectedFlags: []string{"--flag1", "--flag2"},
},
{
name: "kubeVersion is set",
kubeVersion: "1.18.0",
expectedFlags: []string{"--kube-version", "1.18.0"},
},
{
name: "kubeVersion is set from release",
releaseKubeVersion: "1.19.0",
expectedFlags: []string{"--kube-version", "1.19.0"},
},
{
name: "kubeVersion from release hasn't priority",
kubeVersion: "1.18.0",
releaseKubeVersion: "1.19.0",
expectedFlags: []string{"--kube-version", "1.18.0"},
},
{
name: "kubeVersion is set from state",
stateKubeVersion: "1.18.0",
expectedFlags: []string{"--kube-version", "1.18.0"},
},
{
name: "kubeVersion from state hasn't priority",
stateKubeVersion: "1.18.0",
releaseKubeVersion: "1.19.0",
expectedFlags: []string{"--kube-version", "1.19.0"},
},
{
name: "kubeVersion priority",
stateKubeVersion: "1.18.0",
releaseKubeVersion: "1.19.0",
kubeVersion: "1.20.0",
expectedFlags: []string{"--kube-version", "1.20.0"},
},
{
name: "api-version are set from state",
stateApiVersion: []string{"v1,v2"},
expectedFlags: []string{"--api-versions", "v1,v2"},
},
{
name: "api-version are set from release",
releaseApiVersion: []string{"v1,v2"},
expectedFlags: []string{"--api-versions", "v1,v2"},
},
{
name: "api-version priority",
stateApiVersion: []string{"v1"},
releaseApiVersion: []string{"v2"},
expectedFlags: []string{"--api-versions", "v2"},
},
{
name: "api-version multiple values",
stateApiVersion: []string{"v1", "v2"},
expectedFlags: []string{"--api-versions", "v1", "--api-versions", "v2"},
},
{
name: "All kubeVersion and api-version are set",
kubeVersion: "1.18.0",
stateKubeVersion: "1.19.0",
releaseKubeVersion: "1.20.0",
stateApiVersion: []string{"v1"},
releaseApiVersion: []string{"v2"},
flags: []string{"--previous-flag-1", "--previous-flag-2"},
expectedFlags: []string{"--previous-flag-1", "--previous-flag-2", "--api-versions", "v2", "--kube-version", "1.18.0"},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if test.expectedFlags == nil {
test.expectedFlags = []string{}
}
if test.flags == nil {
test.flags = []string{}
}
state := &HelmState{
ReleaseSetSpec: ReleaseSetSpec{
KubeVersion: test.stateKubeVersion,
ApiVersions: test.stateApiVersion,
},
}
r := &ReleaseSpec{
KubeVersion: test.releaseKubeVersion,
ApiVersions: test.releaseApiVersion,
}
result := state.appendApiVersionsFlags(test.flags, r, test.kubeVersion)
assert.Equal(t, test.expectedFlags, result)
})
}
}