Skip to content

Commit be5af8e

Browse files
authored
Enhance support for kube-version and api-versions (#2121)
This adds support for `kube-version` and `api-versions` to be available to `chartify` so that it works even if your release requires `chartify` due to that you use features like `forceNamespace`, `jsonPatches`, `strategicMergePatches`, and so on. This also enhances `ReleaseSpec` which corresponds to each item of `releases[]` in your `helmfile.yaml` to also accept `kubeVersion` and `apiVersions`, in addition to the top-level `kubeVersion` and `apiVersions` we have today. The top-level ones works as the default values for release-specific ones. If you have been using the top-level ones, keep using it. It is backward-compatible. If you want to specify it per release, because, for example, your releases are deployed across clusters(in case you differentiate `kubeContext` fields), try the new fields added to the release spec. Resolves #1864
1 parent ed436ba commit be5af8e

3 files changed

Lines changed: 36 additions & 14 deletions

File tree

pkg/state/state.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,12 @@ type ReleaseSetSpec struct {
6060
CommonLabels map[string]string `yaml:"commonLabels,omitempty"`
6161
Releases []ReleaseSpec `yaml:"releases,omitempty"`
6262
Selectors []string `yaml:"-"`
63-
ApiVersions []string `yaml:"apiVersions,omitempty"`
64-
KubeVersion string `yaml:"kubeVersion,omitempty"`
63+
64+
// Capabilities.APIVersions
65+
ApiVersions []string `yaml:"apiVersions,omitempty"`
66+
67+
// Capabilities.KubeVersion
68+
KubeVersion string `yaml:"kubeVersion,omitempty"`
6569

6670
// Hooks is a list of extension points paired with operations, that are executed in specific points of the lifecycle of releases defined in helmfile
6771
Hooks []event.Hook `yaml:"hooks,omitempty"`
@@ -249,6 +253,12 @@ type ReleaseSpec struct {
249253
ValuesTemplate []interface{} `yaml:"valuesTemplate,omitempty"`
250254
SetValuesTemplate []SetValue `yaml:"setTemplate,omitempty"`
251255

256+
// Capabilities.APIVersions
257+
ApiVersions []string `yaml:"apiVersions,omitempty"`
258+
259+
// Capabilities.KubeVersion
260+
KubeVersion string `yaml:"kubeVersion,omitempty"`
261+
252262
// The 'env' section is not really necessary any longer, as 'set' would now provide the same functionality
253263
EnvValues []SetValue `yaml:"env,omitempty"`
254264

@@ -1121,6 +1131,9 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
11211131

11221132
chartifyOpts.Validate = opts.Validate
11231133

1134+
chartifyOpts.KubeVersion = release.KubeVersion
1135+
chartifyOpts.ApiVersions = release.ApiVersions
1136+
11241137
out, err := c.Chartify(release.Name, chartPath, chartify.WithChartifyOpts(chartifyOpts))
11251138
if err != nil {
11261139
results <- &chartPrepareResult{err: err}
@@ -2471,10 +2484,7 @@ func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseS
24712484
return nil, nil, err
24722485
}
24732486

2474-
flags = st.appendApiVersionsFlags(flags)
2475-
if st.KubeVersion != "" {
2476-
flags = append(flags, "--kube-version", st.KubeVersion)
2477-
}
2487+
flags = st.appendApiVersionsFlags(flags, release)
24782488

24792489
common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex)
24802490
if err != nil {
@@ -2536,10 +2546,15 @@ func (st *HelmState) chartVersionFlags(release *ReleaseSpec) []string {
25362546
return flags
25372547
}
25382548

2539-
func (st *HelmState) appendApiVersionsFlags(flags []string) []string {
2540-
for _, a := range st.ApiVersions {
2549+
func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec) []string {
2550+
for _, a := range r.ApiVersions {
25412551
flags = append(flags, "--api-versions", a)
25422552
}
2553+
2554+
if r.KubeVersion != "" {
2555+
flags = append(flags, "--kube-version", st.KubeVersion)
2556+
}
2557+
25432558
return flags
25442559
}
25452560

pkg/state/state_exec_tmpl.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ func (st *HelmState) ExecuteTemplates() (*HelmState, error) {
100100
for k, v := range st.CommonLabels {
101101
release.Labels[k] = v
102102
}
103+
if len(release.ApiVersions) == 0 {
104+
release.ApiVersions = st.ApiVersions
105+
}
106+
if release.KubeVersion == "" {
107+
release.KubeVersion = st.KubeVersion
108+
}
109+
103110
successFlag := false
104111
for it, prev := 0, &release; it < 6; it++ {
105112
tmplData := st.createReleaseTemplateData(prev, vals)

pkg/state/temp_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
3838
run(testcase{
3939
subject: "baseline",
4040
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
41-
want: "foo-values-779795898b",
41+
want: "foo-values-6d97d4c7ff",
4242
})
4343

4444
run(testcase{
4545
subject: "different bytes content",
4646
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
4747
data: []byte(`{"k":"v"}`),
48-
want: "foo-values-6b7ffbccc",
48+
want: "foo-values-74fcbfbd68",
4949
})
5050

5151
run(testcase{
5252
subject: "different map content",
5353
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
5454
data: map[string]interface{}{"k": "v"},
55-
want: "foo-values-6d57bbfccf",
55+
want: "foo-values-7b954b6b6b",
5656
})
5757

5858
run(testcase{
5959
subject: "different chart",
6060
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
61-
want: "foo-values-5c45b58947",
61+
want: "foo-values-5c54676568",
6262
})
6363

6464
run(testcase{
6565
subject: "different name",
6666
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
67-
want: "bar-values-99d5fdbcc",
67+
want: "bar-values-5fff459546",
6868
})
6969

7070
run(testcase{
7171
subject: "specific ns",
7272
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
73-
want: "myns-foo-values-544cb97d7f",
73+
want: "myns-foo-values-cfd9959dd",
7474
})
7575

7676
for id, n := range ids {

0 commit comments

Comments
 (0)