diff --git a/pkg/state/state.go b/pkg/state/state.go index 4b2b14a7..c45b94db 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -2699,6 +2699,14 @@ func (st *HelmState) appendKeyringFlags(flags []string, release *ReleaseSpec) [] return flags } +// appendEnableDNSFlags append the helm command-line flag for DNS resolution +func (st *HelmState) appendEnableDNSFlags(flags []string, release *ReleaseSpec) []string { + if release.EnableDNS != nil && *release.EnableDNS || release.EnableDNS == nil && st.HelmDefaults.EnableDNS { + flags = append(flags, "--enable-dns") + } + return flags +} + func (st *HelmState) kubeConnectionFlags(release *ReleaseSpec) []string { flags := []string{} if release.KubeContext != "" { @@ -2774,9 +2782,7 @@ func (st *HelmState) timeoutFlags(release *ReleaseSpec, ops *SyncOpts) []string func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSpec, workerIndex int, opt *SyncOpts) ([]string, []string, error) { var flags []string flags = st.appendChartVersionFlags(flags, release) - if release.EnableDNS != nil && *release.EnableDNS || release.EnableDNS == nil && st.HelmDefaults.EnableDNS { - flags = append(flags, "--enable-dns") - } + flags = st.appendEnableDNSFlags(flags, release) flags = st.appendWaitFlags(flags, helm, release, opt) flags = st.appendWaitForJobsFlags(flags, release, opt) @@ -2901,6 +2907,7 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec, settings := cli.New() var flags []string flags = st.appendChartVersionFlags(flags, release) + flags = st.appendEnableDNSFlags(flags, release) disableOpenAPIValidation := false if release.DisableOpenAPIValidation != nil { diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index b499279c..57774b23 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -1858,14 +1858,19 @@ func TestHelmState_DiffReleases(t *testing.T) { } func TestHelmState_DiffFlags(t *testing.T) { + enable := true + disable := false + tests := []struct { name string + defaults HelmSpec releases []ReleaseSpec helm *exectest.Helm wantDiffFlags []string }{ { - name: "release with api version and kubeversion", + name: "release with api version and kubeversion", + defaults: HelmSpec{}, releases: []ReleaseSpec{ { Name: "releaseName", @@ -1878,7 +1883,8 @@ func TestHelmState_DiffFlags(t *testing.T) { wantDiffFlags: []string{"--api-versions", "helmfile.test/v1", "--api-versions", "helmfile.test/v2", "--kube-version", "1.21"}, }, { - name: "release with kubeversion and plain http which is ignored", + name: "release with kubeversion and plain http which is ignored", + defaults: HelmSpec{}, releases: []ReleaseSpec{ { Name: "releaseName", @@ -1890,13 +1896,52 @@ func TestHelmState_DiffFlags(t *testing.T) { helm: &exectest.Helm{}, wantDiffFlags: []string{"--kube-version", "1.21"}, }, + { + name: "release with enable-dns", + defaults: HelmSpec{EnableDNS: false}, + releases: []ReleaseSpec{ + { + Name: "releaseName", + Chart: "foo", + EnableDNS: &enable, + }, + }, + helm: &exectest.Helm{}, + wantDiffFlags: []string{"--enable-dns"}, + }, + { + name: "release with disable-dns override", + defaults: HelmSpec{EnableDNS: true}, + releases: []ReleaseSpec{ + { + Name: "releaseName", + Chart: "foo", + EnableDNS: &disable, + }, + }, + helm: &exectest.Helm{}, + wantDiffFlags: nil, + }, + { + name: "release with enable-dns from default", + defaults: HelmSpec{EnableDNS: true}, + releases: []ReleaseSpec{ + { + Name: "releaseName", + Chart: "foo", + }, + }, + helm: &exectest.Helm{}, + wantDiffFlags: []string{"--enable-dns"}, + }, } for i := range tests { tt := tests[i] t.Run(tt.name, func(t *testing.T) { state := &HelmState{ ReleaseSetSpec: ReleaseSetSpec{ - Releases: tt.releases, + Releases: tt.releases, + HelmDefaults: tt.defaults, }, logger: logger, valsRuntime: valsRuntime,