From e84ff05a6353ae9e7081aa6d0157195f73d1c313 Mon Sep 17 00:00:00 2001 From: Yusuke KUOKA Date: Thu, 23 Aug 2018 09:26:39 +0900 Subject: [PATCH] fix: helmfile should fail on duplicate release name Fixes #193 --- state/state.go | 10 ++++++++++ state/state_test.go | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/state/state.go b/state/state.go index 77861123..bcc1d7cf 100644 --- a/state/state.go +++ b/state/state.go @@ -109,6 +109,16 @@ func readFromYaml(content []byte, file string, logger *zap.SugaredLogger) (*Helm state.DeprecatedReleases = []ReleaseSpec{} } + releaseNameCounts := map[string]int{} + for _, r := range state.Releases { + releaseNameCounts[r.Name] += 1 + } + for name, c := range releaseNameCounts { + if c > 1 { + return nil, fmt.Errorf("invalid helmfile: duplicate release name found: there were %d releases named \"%s\"", c, name) + } + } + state.logger = logger return &state, nil diff --git a/state/state_test.go b/state/state_test.go index 63795ee0..4f269307 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -164,6 +164,29 @@ func TestReadFromYaml_FilterNegatives(t *testing.T) { } } +// See https://github.com/roboll/helmfile/issues/193 +func TestReadFromYaml_DuplicateReleaseName(t *testing.T) { + yamlFile := "example/path/to/yaml/file" + yamlContent := []byte(`releases: +- name: myrelease1 + chart: mychart1 + labels: + stage: pre + foo: bar +- name: myrelease1 + chart: mychart2 + labels: + stage: post +`) + _, err := readFromYaml(yamlContent, yamlFile, logger) + if err == nil { + t.Error("error expected but not happened") + } + if err.Error() != "invalid helmfile: duplicate release name found: there were 2 releases named \"myrelease1\"" { + t.Errorf("unexpected error happened: %v", err) + } +} + func TestLabelParsing(t *testing.T) { cases := []struct { labelString string