Add kube version flag (#804)
* add --kube-version flag into template cmd Signed-off-by: FeLvi-zzz <34182539+FeLvi-zzz@users.noreply.github.com> * add test Signed-off-by: FeLvi-zzz <34182539+FeLvi-zzz@users.noreply.github.com> * modify flag description Signed-off-by: FeLvi-zzz <34182539+FeLvi-zzz@users.noreply.github.com> * use switch Signed-off-by: FeLvi-zzz <34182539+FeLvi-zzz@users.noreply.github.com> * add comment Signed-off-by: FeLvi-zzz <34182539+FeLvi-zzz@users.noreply.github.com> --------- Signed-off-by: FeLvi-zzz <34182539+FeLvi-zzz@users.noreply.github.com>
This commit is contained in:
parent
0012e7e5a1
commit
a8a0a33c33
|
|
@ -45,6 +45,7 @@ func NewTemplateCmd(globalCfg *config.GlobalImpl) *cobra.Command {
|
||||||
f.BoolVar(&templateOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`)
|
f.BoolVar(&templateOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`)
|
||||||
f.BoolVar(&templateOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security")
|
f.BoolVar(&templateOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security")
|
||||||
f.StringVar(&templateOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)
|
f.StringVar(&templateOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)
|
||||||
|
f.StringVar(&templateOptions.KubeVersion, "kube-version", "", `pass --kube-version to "helm template". Overrides kubeVersion in helmfile.yaml`)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1884,6 +1884,7 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) {
|
||||||
SkipCleanup: c.SkipCleanup(),
|
SkipCleanup: c.SkipCleanup(),
|
||||||
SkipTests: c.SkipTests(),
|
SkipTests: c.SkipTests(),
|
||||||
PostRenderer: c.PostRenderer(),
|
PostRenderer: c.PostRenderer(),
|
||||||
|
KubeVersion: c.KubeVersion(),
|
||||||
}
|
}
|
||||||
return st.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts)
|
return st.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -2097,6 +2097,7 @@ type configImpl struct {
|
||||||
includeNeeds bool
|
includeNeeds bool
|
||||||
includeTransitiveNeeds bool
|
includeTransitiveNeeds bool
|
||||||
skipCharts bool
|
skipCharts bool
|
||||||
|
kubeVersion string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c configImpl) Selectors() []string {
|
func (c configImpl) Selectors() []string {
|
||||||
|
|
@ -2179,6 +2180,10 @@ func (c configImpl) PostRenderer() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c configImpl) KubeVersion() string {
|
||||||
|
return c.kubeVersion
|
||||||
|
}
|
||||||
|
|
||||||
type applyConfig struct {
|
type applyConfig struct {
|
||||||
args string
|
args string
|
||||||
values []string
|
values []string
|
||||||
|
|
@ -2213,6 +2218,7 @@ type applyConfig struct {
|
||||||
waitForJobs bool
|
waitForJobs bool
|
||||||
reuseValues bool
|
reuseValues bool
|
||||||
postRenderer string
|
postRenderer string
|
||||||
|
kubeVersion string
|
||||||
|
|
||||||
// template-only options
|
// template-only options
|
||||||
includeCRDs, skipTests bool
|
includeCRDs, skipTests bool
|
||||||
|
|
@ -2361,6 +2367,10 @@ func (a applyConfig) PostRenderer() string {
|
||||||
return a.postRenderer
|
return a.postRenderer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a applyConfig) KubeVersion() string {
|
||||||
|
return a.kubeVersion
|
||||||
|
}
|
||||||
|
|
||||||
type depsConfig struct {
|
type depsConfig struct {
|
||||||
skipRepos bool
|
skipRepos bool
|
||||||
includeTransitiveNeeds bool
|
includeTransitiveNeeds bool
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,7 @@ type TemplateConfigProvider interface {
|
||||||
SkipTests() bool
|
SkipTests() bool
|
||||||
OutputDir() string
|
OutputDir() string
|
||||||
IncludeCRDs() bool
|
IncludeCRDs() bool
|
||||||
|
KubeVersion() string
|
||||||
|
|
||||||
DAGConfig
|
DAGConfig
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ type TemplateOptions struct {
|
||||||
SkipCleanup bool
|
SkipCleanup bool
|
||||||
// Propagate '--post-renderer' to helmv3 template and helm install
|
// Propagate '--post-renderer' to helmv3 template and helm install
|
||||||
PostRenderer string
|
PostRenderer string
|
||||||
|
// KubeVersion is the kube-version flag
|
||||||
|
KubeVersion string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTemplateOptions creates a new Apply
|
// NewTemplateOptions creates a new Apply
|
||||||
|
|
@ -123,3 +125,8 @@ func (t *TemplateImpl) Values() []string {
|
||||||
func (t *TemplateImpl) PostRenderer() string {
|
func (t *TemplateImpl) PostRenderer() string {
|
||||||
return t.TemplateOptions.PostRenderer
|
return t.TemplateOptions.PostRenderer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KubeVersion returns the the KubeVersion.
|
||||||
|
func (t *TemplateImpl) KubeVersion() string {
|
||||||
|
return t.TemplateOptions.KubeVersion
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1040,6 +1040,7 @@ type ChartPrepareOptions struct {
|
||||||
OutputDirTemplate string
|
OutputDirTemplate string
|
||||||
IncludeTransitiveNeeds bool
|
IncludeTransitiveNeeds bool
|
||||||
Concurrency int
|
Concurrency int
|
||||||
|
KubeVersion string
|
||||||
}
|
}
|
||||||
|
|
||||||
type chartPrepareResult struct {
|
type chartPrepareResult struct {
|
||||||
|
|
@ -1384,6 +1385,7 @@ type TemplateOpts struct {
|
||||||
IncludeCRDs bool
|
IncludeCRDs bool
|
||||||
SkipTests bool
|
SkipTests bool
|
||||||
PostRenderer string
|
PostRenderer string
|
||||||
|
KubeVersion string
|
||||||
}
|
}
|
||||||
|
|
||||||
type TemplateOpt interface{ Apply(*TemplateOpts) }
|
type TemplateOpt interface{ Apply(*TemplateOpts) }
|
||||||
|
|
@ -2540,13 +2542,14 @@ func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseS
|
||||||
|
|
||||||
flags = st.appendHelmXFlags(flags, release)
|
flags = st.appendHelmXFlags(flags, release)
|
||||||
|
|
||||||
flags = st.appendApiVersionsFlags(flags, release)
|
|
||||||
|
|
||||||
postRenderer := ""
|
postRenderer := ""
|
||||||
|
kubeVersion := ""
|
||||||
if opt != nil {
|
if opt != nil {
|
||||||
postRenderer = opt.PostRenderer
|
postRenderer = opt.PostRenderer
|
||||||
|
kubeVersion = opt.KubeVersion
|
||||||
}
|
}
|
||||||
flags = st.appendPostRenderFlags(flags, release, postRenderer)
|
flags = st.appendPostRenderFlags(flags, release, postRenderer)
|
||||||
|
flags = st.appendApiVersionsFlags(flags, release, kubeVersion)
|
||||||
|
|
||||||
common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex)
|
common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -2579,7 +2582,11 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
|
||||||
flags = append(flags, "--disable-validation")
|
flags = append(flags, "--disable-validation")
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = st.appendApiVersionsFlags(flags, release)
|
// TODO:
|
||||||
|
// `helm diff` has `--kube-version` flag from v3.5.0, but only respected when `helm diff upgrade --disable-validation`.
|
||||||
|
// `helm template --validate` and `helm upgrade --dry-run` ignore `--kube-version` flag.
|
||||||
|
// For the moment, not specifying kubeVersion.
|
||||||
|
flags = st.appendApiVersionsFlags(flags, release, "")
|
||||||
|
|
||||||
flags = st.appendConnectionFlags(flags, release)
|
flags = st.appendConnectionFlags(flags, release)
|
||||||
|
|
||||||
|
|
@ -2622,7 +2629,7 @@ func (st *HelmState) appendValuesControlModeFlag(flags []string, reuseValues boo
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec) []string {
|
func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec, kubeVersion string) []string {
|
||||||
if len(r.ApiVersions) != 0 {
|
if len(r.ApiVersions) != 0 {
|
||||||
for _, a := range r.ApiVersions {
|
for _, a := range r.ApiVersions {
|
||||||
flags = append(flags, "--api-versions", a)
|
flags = append(flags, "--api-versions", a)
|
||||||
|
|
@ -2633,9 +2640,12 @@ func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec) []st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.KubeVersion != "" {
|
switch {
|
||||||
|
case kubeVersion != "":
|
||||||
|
flags = append(flags, "--kube-version", kubeVersion)
|
||||||
|
case r.KubeVersion != "":
|
||||||
flags = append(flags, "--kube-version", r.KubeVersion)
|
flags = append(flags, "--kube-version", r.KubeVersion)
|
||||||
} else if st.KubeVersion != "" {
|
case st.KubeVersion != "":
|
||||||
flags = append(flags, "--kube-version", st.KubeVersion)
|
flags = append(flags, "--kube-version", st.KubeVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -736,12 +736,13 @@ func TestHelmState_flagsForTemplate(t *testing.T) {
|
||||||
postRendererRelease := "foo-release.sh"
|
postRendererRelease := "foo-release.sh"
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
version *semver.Version
|
version *semver.Version
|
||||||
defaults HelmSpec
|
defaults HelmSpec
|
||||||
release *ReleaseSpec
|
release *ReleaseSpec
|
||||||
want []string
|
templateOpts TemplateOpts
|
||||||
wantErr string
|
want []string
|
||||||
|
wantErr string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "post-renderer-flags-use-helmdefault",
|
name: "post-renderer-flags-use-helmdefault",
|
||||||
|
|
@ -810,6 +811,55 @@ func TestHelmState_flagsForTemplate(t *testing.T) {
|
||||||
"--namespace", "test-namespace",
|
"--namespace", "test-namespace",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "kube-version-flag-should-be-used",
|
||||||
|
defaults: HelmSpec{
|
||||||
|
Verify: false,
|
||||||
|
CreateNamespace: &enable,
|
||||||
|
},
|
||||||
|
version: semver.MustParse("3.10.0"),
|
||||||
|
release: &ReleaseSpec{
|
||||||
|
Chart: "test/chart",
|
||||||
|
Version: "0.1",
|
||||||
|
Verify: &disable,
|
||||||
|
Name: "test-charts",
|
||||||
|
Namespace: "test-namespace",
|
||||||
|
CreateNamespace: &disable,
|
||||||
|
},
|
||||||
|
templateOpts: TemplateOpts{
|
||||||
|
KubeVersion: "1.100",
|
||||||
|
},
|
||||||
|
want: []string{
|
||||||
|
"--version", "0.1",
|
||||||
|
"--kube-version", "1.100",
|
||||||
|
"--namespace", "test-namespace",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "kube-version-flag-should-be-respected",
|
||||||
|
defaults: HelmSpec{
|
||||||
|
Verify: false,
|
||||||
|
CreateNamespace: &enable,
|
||||||
|
},
|
||||||
|
version: semver.MustParse("3.10.0"),
|
||||||
|
release: &ReleaseSpec{
|
||||||
|
Chart: "test/chart",
|
||||||
|
Version: "0.1",
|
||||||
|
Verify: &disable,
|
||||||
|
Name: "test-charts",
|
||||||
|
Namespace: "test-namespace",
|
||||||
|
CreateNamespace: &disable,
|
||||||
|
KubeVersion: "1.25",
|
||||||
|
},
|
||||||
|
templateOpts: TemplateOpts{
|
||||||
|
KubeVersion: "1.100",
|
||||||
|
},
|
||||||
|
want: []string{
|
||||||
|
"--version", "0.1",
|
||||||
|
"--kube-version", "1.100",
|
||||||
|
"--namespace", "test-namespace",
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for i := range tests {
|
for i := range tests {
|
||||||
tt := tests[i]
|
tt := tests[i]
|
||||||
|
|
@ -827,7 +877,7 @@ func TestHelmState_flagsForTemplate(t *testing.T) {
|
||||||
Version: tt.version,
|
Version: tt.version,
|
||||||
}
|
}
|
||||||
|
|
||||||
args, _, err := state.flagsForTemplate(helm, tt.release, 0, &TemplateOpts{})
|
args, _, err := state.flagsForTemplate(helm, tt.release, 0, &(tt.templateOpts))
|
||||||
if err != nil && tt.wantErr == "" {
|
if err != nil && tt.wantErr == "" {
|
||||||
t.Errorf("unexpected error flagsForUpgrade: %v", err)
|
t.Errorf("unexpected error flagsForUpgrade: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue