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: "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
 | ||||
| 		//
 | ||||
|  |  | |||
|  | @ -533,6 +533,34 @@ releases: | |||
| 			}, | ||||
| 			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", | ||||
| 			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 | ||||
| 	releaseInstalledInfo := make(map[string]bool) | ||||
| 	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,
 | ||||
|  | @ -501,9 +511,6 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string { | |||
| 		components := strings.Split(n, "/") | ||||
| 
 | ||||
| 		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 { | ||||
| 			ns = components[len(components)-2] | ||||
|  | @ -519,6 +526,10 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string { | |||
| 			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 | ||||
| 
 | ||||
| 		if kubecontext != "" { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue