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:
parent
d61df9253d
commit
f77dc3d5b2
|
|
@ -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)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue