fix: Check needs with context and namespace (#1986)
* fix: Check needs with context and namespace Signed-off-by: André Arnqvist <andrearnqvist@gmail.com> * fix: Ensure releases have overrides Signed-off-by: André Arnqvist <andrearnqvist@gmail.com> * fix: Run go fmt Signed-off-by: André Arnqvist <andrearnqvist@gmail.com> * fix: Add tests checking needs with same name in different namespaces Signed-off-by: André Arnqvist <andrearnqvist@gmail.com> * fix: Simplify setting overrides Signed-off-by: André Arnqvist <andrearnqvist@gmail.com> --------- Signed-off-by: André Arnqvist <andrearnqvist@gmail.com>
This commit is contained in:
parent
2076515c5d
commit
c9a2e76200
|
|
@ -3219,6 +3219,35 @@ releases:
|
||||||
{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}},
|
{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "upgrade when ns1/foo needs ns1/bar and ns2/bar is disabled",
|
||||||
|
loc: location(),
|
||||||
|
files: map[string]string{
|
||||||
|
"/path/to/helmfile.yaml": `
|
||||||
|
releases:
|
||||||
|
- name: bar
|
||||||
|
chart: stable/mychart2
|
||||||
|
namespace: ns1
|
||||||
|
- name: bar
|
||||||
|
chart: stable/mychart2
|
||||||
|
namespace: ns2
|
||||||
|
installed: false
|
||||||
|
- name: foo
|
||||||
|
chart: stable/mychart1
|
||||||
|
namespace: ns1
|
||||||
|
needs:
|
||||||
|
- ns1/bar
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
diffs: map[exectest.DiffKey]error{
|
||||||
|
{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
|
||||||
|
{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
|
||||||
|
},
|
||||||
|
upgraded: []exectest.Release{
|
||||||
|
{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}},
|
||||||
|
{Name: "foo", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
//
|
//
|
||||||
// deletes: deleting all releases in the correct order
|
// deletes: deleting all releases in the correct order
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -533,6 +533,34 @@ releases:
|
||||||
},
|
},
|
||||||
upgraded: []exectest.Release{},
|
upgraded: []exectest.Release{},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "upgrade when ns1/foo needs ns1/bar and ns2/bar is disabled",
|
||||||
|
loc: location(),
|
||||||
|
files: map[string]string{
|
||||||
|
"/path/to/helmfile.yaml": `
|
||||||
|
releases:
|
||||||
|
- name: bar
|
||||||
|
chart: mychart2
|
||||||
|
namespace: ns1
|
||||||
|
- name: bar
|
||||||
|
chart: mychart2
|
||||||
|
namespace: ns2
|
||||||
|
installed: false
|
||||||
|
- name: foo
|
||||||
|
chart: mychart1
|
||||||
|
namespace: ns1
|
||||||
|
needs:
|
||||||
|
- ns1/bar
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
detailedExitcode: true,
|
||||||
|
error: "Identified at least one change",
|
||||||
|
diffs: map[exectest.DiffKey]error{
|
||||||
|
{Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
|
||||||
|
{Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
|
||||||
|
},
|
||||||
|
upgraded: []exectest.Release{},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "upgrade when tns1 ns1 foo needs tns2 ns2 bar",
|
name: "upgrade when tns1 ns1 foo needs tns2 ns2 bar",
|
||||||
loc: location(),
|
loc: location(),
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
processing file "helmfile.yaml" in directory "."
|
||||||
|
changing working directory to "/path/to"
|
||||||
|
merged environment: &{default map[] map[]}
|
||||||
|
3 release(s) found in helmfile.yaml
|
||||||
|
|
||||||
|
processing 2 groups of releases in this order:
|
||||||
|
GROUP RELEASES
|
||||||
|
1 default/ns1/bar
|
||||||
|
2 default/ns1/foo
|
||||||
|
|
||||||
|
processing releases in group 1/2: default/ns1/bar
|
||||||
|
processing releases in group 2/2: default/ns1/foo
|
||||||
|
Affected releases are:
|
||||||
|
bar (mychart2) DELETED
|
||||||
|
bar (mychart2) UPDATED
|
||||||
|
foo (mychart1) UPDATED
|
||||||
|
|
||||||
|
changing working directory back to "/path/to"
|
||||||
43
pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns1/bar_and_ns2/bar_is_disabled/log
vendored
Normal file
43
pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns1/bar_and_ns2/bar_is_disabled/log
vendored
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
processing file "helmfile.yaml" in directory "."
|
||||||
|
changing working directory to "/path/to"
|
||||||
|
merged environment: &{default map[] map[]}
|
||||||
|
3 release(s) found in helmfile.yaml
|
||||||
|
|
||||||
|
Affected releases are:
|
||||||
|
bar (stable/mychart2) DELETED
|
||||||
|
bar (stable/mychart2) UPDATED
|
||||||
|
foo (stable/mychart1) UPDATED
|
||||||
|
|
||||||
|
invoking preapply hooks for 2 groups of releases in this order:
|
||||||
|
GROUP RELEASES
|
||||||
|
1 default/ns1/foo
|
||||||
|
2 default/ns1/bar, default/ns2/bar
|
||||||
|
|
||||||
|
invoking preapply hooks for releases in group 1/2: default/ns1/foo
|
||||||
|
invoking preapply hooks for releases in group 2/2: default/ns1/bar, default/ns2/bar
|
||||||
|
processing 1 groups of releases in this order:
|
||||||
|
GROUP RELEASES
|
||||||
|
1 default/ns2/bar
|
||||||
|
|
||||||
|
processing releases in group 1/1: default/ns2/bar
|
||||||
|
processing 2 groups of releases in this order:
|
||||||
|
GROUP RELEASES
|
||||||
|
1 default/ns1/bar
|
||||||
|
2 default/ns1/foo
|
||||||
|
|
||||||
|
processing releases in group 1/2: default/ns1/bar
|
||||||
|
getting deployed release version failed: Failed to get the version for: mychart2
|
||||||
|
processing releases in group 2/2: default/ns1/foo
|
||||||
|
getting deployed release version failed: Failed to get the version for: mychart1
|
||||||
|
|
||||||
|
UPDATED RELEASES:
|
||||||
|
NAME NAMESPACE CHART VERSION DURATION
|
||||||
|
bar ns1 stable/mychart2 0s
|
||||||
|
foo ns1 stable/mychart1 0s
|
||||||
|
|
||||||
|
|
||||||
|
DELETED RELEASES:
|
||||||
|
NAME NAMESPACE DURATION
|
||||||
|
bar ns2 0s
|
||||||
|
|
||||||
|
changing working directory back to "/path/to"
|
||||||
|
|
@ -488,7 +488,17 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string {
|
||||||
var needs []string
|
var needs []string
|
||||||
releaseInstalledInfo := make(map[string]bool)
|
releaseInstalledInfo := make(map[string]bool)
|
||||||
for _, r := range st.OrginReleases {
|
for _, r := range st.OrginReleases {
|
||||||
releaseInstalledInfo[r.Name] = r.Desired()
|
kubecontext := r.KubeContext
|
||||||
|
namespace := r.Namespace
|
||||||
|
|
||||||
|
if st.OverrideKubeContext != "" {
|
||||||
|
kubecontext = st.OverrideKubeContext
|
||||||
|
}
|
||||||
|
if st.OverrideNamespace != "" {
|
||||||
|
namespace = st.OverrideNamespace
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseInstalledInfo[fmt.Sprintf("%s/%s/%s", kubecontext, namespace, r.Name)] = r.Desired()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since the representation differs between needs and id,
|
// Since the representation differs between needs and id,
|
||||||
|
|
@ -501,9 +511,6 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string {
|
||||||
components := strings.Split(n, "/")
|
components := strings.Split(n, "/")
|
||||||
|
|
||||||
name = components[len(components)-1]
|
name = components[len(components)-1]
|
||||||
if spec.Desired() && !releaseInstalledInfo[name] {
|
|
||||||
st.logger.Warnf("WARNING: %s", fmt.Sprintf("release %s needs %s, but %s is not installed due to installed: false. Either mark %s as installed or remove %s from %s's needs", spec.Name, name, name, name, name, spec.Name))
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(components) > 1 {
|
if len(components) > 1 {
|
||||||
ns = components[len(components)-2]
|
ns = components[len(components)-2]
|
||||||
|
|
@ -519,6 +526,10 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string {
|
||||||
kubecontext = spec.KubeContext
|
kubecontext = spec.KubeContext
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if spec.Desired() && !releaseInstalledInfo[fmt.Sprintf("%s/%s/%s", kubecontext, ns, name)] {
|
||||||
|
st.logger.Warnf("WARNING: %s", fmt.Sprintf("release %s needs %s, but %s is not installed due to installed: false. Either mark %s as installed or remove %s from %s's needs", spec.Name, name, name, name, name, spec.Name))
|
||||||
|
}
|
||||||
|
|
||||||
var componentsAfterOverride []string
|
var componentsAfterOverride []string
|
||||||
|
|
||||||
if kubecontext != "" {
|
if kubecontext != "" {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue