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(),
|
Concurrency: c.Concurrency(),
|
||||||
IncludeTransitiveNeeds: c.IncludeNeeds(),
|
IncludeTransitiveNeeds: c.IncludeNeeds(),
|
||||||
Set: c.Set(),
|
Set: c.Set(),
|
||||||
|
KubeVersion: c.KubeVersion(),
|
||||||
}, func() {
|
}, func() {
|
||||||
ok, errs = a.template(run, c)
|
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.Validate = opts.Validate
|
||||||
|
|
||||||
chartifyOpts.KubeVersion = release.KubeVersion
|
chartifyOpts.KubeVersion = st.getKubeVersion(release, opts.KubeVersion)
|
||||||
chartifyOpts.ApiVersions = release.ApiVersions
|
chartifyOpts.ApiVersions = st.getApiVersions(release)
|
||||||
|
|
||||||
// https://github.com/helmfile/helmfile/pull/867
|
// https://github.com/helmfile/helmfile/pull/867
|
||||||
// https://github.com/helmfile/helmfile/issues/895
|
// https://github.com/helmfile/helmfile/issues/895
|
||||||
var flags []string
|
var flags []string
|
||||||
|
|
@ -2822,24 +2823,32 @@ func (st *HelmState) appendValuesControlModeFlag(flags []string, reuseValues boo
|
||||||
return flags
|
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 {
|
if len(r.ApiVersions) != 0 {
|
||||||
for _, a := range r.ApiVersions {
|
return r.ApiVersions
|
||||||
flags = append(flags, "--api-versions", a)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for _, a := range st.ApiVersions {
|
|
||||||
flags = append(flags, "--api-versions", a)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return st.ApiVersions
|
||||||
|
}
|
||||||
|
|
||||||
|
func (st *HelmState) getKubeVersion(r *ReleaseSpec, kubeVersion string) string {
|
||||||
switch {
|
switch {
|
||||||
case kubeVersion != "":
|
case kubeVersion != "":
|
||||||
flags = append(flags, "--kube-version", kubeVersion)
|
return kubeVersion
|
||||||
case r.KubeVersion != "":
|
case r.KubeVersion != "":
|
||||||
flags = append(flags, "--kube-version", r.KubeVersion)
|
return r.KubeVersion
|
||||||
case st.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
|
return flags
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import (
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
"github.com/Masterminds/semver/v3"
|
||||||
"github.com/helmfile/vals"
|
"github.com/helmfile/vals"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/helmfile/helmfile/pkg/environment"
|
"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