Enhance createNamespace error handling (#1227)

- An error is raised if createNamespace is set explicitly and the
  helm version being used is not 3.2+
This commit is contained in:
Craig Dunford 2020-04-26 19:59:44 -04:00 committed by GitHub
parent eeb61e6174
commit d71ac15748
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 5 deletions

View File

@ -1639,10 +1639,14 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
flags = append(flags, "--cleanup-on-fail") flags = append(flags, "--cleanup-on-fail")
} }
if helm.IsVersionAtLeast(3, 2) && if release.CreateNamespace != nil && *release.CreateNamespace ||
(release.CreateNamespace != nil && *release.CreateNamespace || release.CreateNamespace == nil && (st.HelmDefaults.CreateNamespace == nil || *st.HelmDefaults.CreateNamespace) {
release.CreateNamespace == nil && (st.HelmDefaults.CreateNamespace == nil || *st.HelmDefaults.CreateNamespace)) { if helm.IsVersionAtLeast(3, 2) {
flags = append(flags, "--create-namespace") flags = append(flags, "--create-namespace")
} else if release.CreateNamespace != nil || st.HelmDefaults.CreateNamespace != nil {
// createNamespace was set explicitly, but not running supported version of helm - error
return nil, fmt.Errorf("releases[].createNamespace requires Helm 3.2.0 or greater")
}
} }
flags = st.appendConnectionFlags(flags, release) flags = st.appendConnectionFlags(flags, release)

View File

@ -167,6 +167,7 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
defaults HelmSpec defaults HelmSpec
release *ReleaseSpec release *ReleaseSpec
want []string want []string
wantErr string
}{ }{
{ {
name: "no-options", name: "no-options",
@ -669,6 +670,26 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
"--namespace", "test-namespace", "--namespace", "test-namespace",
}, },
}, },
{
name: "create-namespace-unsupported",
defaults: HelmSpec{
Verify: false,
CreateNamespace: &enable,
},
version: &helmexec.Version{
Major: 2,
Minor: 16,
Patch: 0,
},
release: &ReleaseSpec{
Chart: "test/chart",
Version: "0.1",
Verify: &disable,
Name: "test-charts",
Namespace: "test-namespace",
},
wantErr: "releases[].createNamespace requires Helm 3.2.0 or greater",
},
} }
for i := range tests { for i := range tests {
tt := tests[i] tt := tests[i]
@ -685,9 +706,12 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
} }
args, err := state.flagsForUpgrade(helm, tt.release, 0) args, err := state.flagsForUpgrade(helm, tt.release, 0)
if err != nil { if err != nil && tt.wantErr == "" {
t.Errorf("unexpected error flagsForUpgrade: %v", err) t.Errorf("unexpected error flagsForUpgrade: %v", err)
} }
if tt.wantErr != "" && (err == nil || err.Error() != tt.wantErr) {
t.Errorf("expected error '%v'; got '%v'", err, tt.wantErr)
}
if !reflect.DeepEqual(args, tt.want) { if !reflect.DeepEqual(args, tt.want) {
t.Errorf("flagsForUpgrade returned = %v, want %v", args, tt.want) t.Errorf("flagsForUpgrade returned = %v, want %v", args, tt.want)
} }