Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions pkg/chart/chart.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,24 +207,29 @@ func (c *Chart) HasCIValuesFile(path string) bool {
}

// CreateInstallParams generates a randomized release name and namespace based on the chart path
// and optional buildID. If release_name is specified, the release name is set to that string instead.
// and optional buildID. If releaseName is non-empty it is used verbatim as the release name
// (Helm validates release-name syntax); otherwise a randomized "<name>-<suffix>" form is used.
// If a buildID is specified, it will be part of the generated namespace.
func (c *Chart) CreateInstallParams(buildID string, releaseName string) (release string, namespace string) {
release = filepath.Base(c.Path())
if release == "." || release == "/" {
if releaseName != "" {
release = releaseName
} else {
yaml := c.Yaml()
release = yaml.Name
}
yaml := c.Yaml()
release = yaml.Name
}
namespace = release
if buildID != "" {
namespace = fmt.Sprintf("%s-%s", namespace, buildID)
}
randomSuffix := util.RandomString(10)
release = util.SanitizeName(fmt.Sprintf("%s-%s", release, randomSuffix), maxNameLength)
if releaseName != "" {
// An explicit --release-name is used verbatim so the release name is
// stable and predictable. Previously it was honored only when the chart
// path resolved to "." or "/", and a random suffix was appended
// unconditionally, which made --release-name appear to be ignored (#198).
release = releaseName
} else {
release = util.SanitizeName(fmt.Sprintf("%s-%s", release, randomSuffix), maxNameLength)
}
namespace = util.SanitizeName(fmt.Sprintf("%s-%s", namespace, randomSuffix), maxNameLength)
return
}
Expand Down
20 changes: 20 additions & 0 deletions pkg/chart/chart_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -569,3 +569,23 @@ func TestChart_AdditionalCommandsAreRun(t *testing.T) {
})
}
}

func TestChart_CreateInstallParams(t *testing.T) {
chrt, err := NewChart("test_charts/simple-deployment")
assert.Nil(t, err)

// An explicit release name (--release-name) must be used verbatim, with no
// random suffix appended, so the resulting release name is stable and
// predictable (#198).
release, namespace := chrt.CreateInstallParams("build-id", "my-release")
assert.Equal(t, "my-release", release)
// The namespace is still derived from the chart directory and randomized,
// independent of --release-name.
assert.True(t, strings.HasPrefix(namespace, "simple-deployment-build-id-"))
assert.NotEqual(t, "my-release", namespace)

// Without a release name the release keeps its historical randomized form.
release, _ = chrt.CreateInstallParams("", "")
assert.True(t, strings.HasPrefix(release, "simple-deployment-"))
assert.NotEqual(t, "simple-deployment", release)
}