Use namespace for release unicity with helm3 (#1213) (#1235)

This is for #1213 so that the releases are considered scoped to their namespace and not to tiller namespace.

Fixes #1213
This commit is contained in:
Victor Noël
2020-05-02 09:35:51 +09:00
committed by GitHub
parent a0e30c5193
commit 923bd54db0
3 changed files with 204 additions and 8 deletions
+11 -7
View File
@@ -699,7 +699,7 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg
return a.visitStates(fileOrDir, opts, converge)
}
func processFilteredReleases(st *state.HelmState, converge func(st *state.HelmState) []error) (bool, []error) {
func processFilteredReleases(st *state.HelmState, helm helmexec.Interface, converge func(st *state.HelmState) []error) (bool, []error) {
if len(st.Selectors) > 0 {
err := st.FilterReleases()
if err != nil {
@@ -713,11 +713,15 @@ func processFilteredReleases(st *state.HelmState, converge func(st *state.HelmSt
releaseNameCounts := map[Key]int{}
for _, r := range st.Releases {
tillerNamespace := st.HelmDefaults.TillerNamespace
if r.TillerNamespace != "" {
tillerNamespace = r.TillerNamespace
namespace := r.Namespace
if !helm.IsHelm3() {
if r.TillerNamespace != "" {
namespace = r.TillerNamespace
} else {
namespace = st.HelmDefaults.TillerNamespace
}
}
releaseNameCounts[Key{tillerNamespace, r.Name}]++
releaseNameCounts[Key{namespace, r.Name}]++
}
for name, c := range releaseNameCounts {
if c > 1 {
@@ -734,7 +738,7 @@ func processFilteredReleases(st *state.HelmState, converge func(st *state.HelmSt
func (a *App) Wrap(converge func(*state.HelmState, helmexec.Interface) []error) func(st *state.HelmState, helm helmexec.Interface) (bool, []error) {
return func(st *state.HelmState, helm helmexec.Interface) (bool, []error) {
return processFilteredReleases(st, func(st *state.HelmState) []error {
return processFilteredReleases(st, helm, func(st *state.HelmState) []error {
return converge(st, helm)
})
}
@@ -742,7 +746,7 @@ func (a *App) Wrap(converge func(*state.HelmState, helmexec.Interface) []error)
func (a *App) VisitDesiredStatesWithReleasesFiltered(fileOrDir string, converge func(*state.HelmState) []error, o ...LoadOption) error {
return a.visitStatesWithSelectorsAndRemoteSupport(fileOrDir, func(st *state.HelmState) (bool, []error) {
return processFilteredReleases(st, converge)
return processFilteredReleases(st, a.getHelm(st), converge)
}, o...)
}