Re-add Release.Namespace in release values.yaml templates (#1466)
It was accidentally removed in #1424, and had been unexpectedly unavailable between v0.126.0 and v0.128.1. Fixes #1464
This commit is contained in:
		
							parent
							
								
									1d2c8b8a3a
								
							
						
					
					
						commit
						832dcf47a5
					
				|  | @ -101,10 +101,14 @@ bar: {{ readFile "bar.txt" }} | ||||||
| 
 | 
 | ||||||
| 	valuesFile := "/example/path/to/values.yaml.gotmpl" | 	valuesFile := "/example/path/to/values.yaml.gotmpl" | ||||||
| 	valuesContent := []byte(`env: {{ .Environment.Name }} | 	valuesContent := []byte(`env: {{ .Environment.Name }} | ||||||
| releaseName: {{ .Release.Name }}`) | releaseName: {{ .Release.Name }} | ||||||
|  | releaseNamespace: {{ .Release.Namespace }} | ||||||
|  | `) | ||||||
| 
 | 
 | ||||||
| 	expectedValues := `env: production | 	expectedValues := `env: production | ||||||
| releaseName: myrelease` | releaseName: myrelease | ||||||
|  | releaseNamespace: mynamespace | ||||||
|  | ` | ||||||
| 
 | 
 | ||||||
| 	testFs := testhelper.NewTestFs(map[string]string{ | 	testFs := testhelper.NewTestFs(map[string]string{ | ||||||
| 		fooYamlFile: string(fooYamlContent), | 		fooYamlFile: string(fooYamlContent), | ||||||
|  | @ -126,9 +130,96 @@ releaseName: myrelease` | ||||||
| 		t.Errorf("unexpected environment values: expected=%v, actual=%v", expected, actual) | 		t.Errorf("unexpected environment values: expected=%v, actual=%v", expected, actual) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var release = ReleaseSpec{ | 	release := state.Releases[0] | ||||||
| 		Name: "myrelease", | 
 | ||||||
|  | 	state.ApplyOverrides(&release) | ||||||
|  | 
 | ||||||
|  | 	actualValuesData, err := state.RenderReleaseValuesFileToBytes(&release, valuesFile) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Errorf("unexpected error: %v", err) | ||||||
| 	} | 	} | ||||||
|  | 	actualValues := string(actualValuesData) | ||||||
|  | 
 | ||||||
|  | 	if !reflect.DeepEqual(expectedValues, actualValues) { | ||||||
|  | 		t.Errorf("unexpected values: expected=%v, actual=%v", expectedValues, actualValues) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestReadFromYaml_OverrideNamespace(t *testing.T) { | ||||||
|  | 	yamlFile := "/example/path/to/helmfile.yaml" | ||||||
|  | 	yamlContent := []byte(`environments: | ||||||
|  |   production: | ||||||
|  |     values: | ||||||
|  |     - foo.yaml | ||||||
|  |     - bar.yaml.gotmpl | ||||||
|  | 
 | ||||||
|  | # A.k.a helmfile apply --namespace myns | ||||||
|  | namespace: myns | ||||||
|  | 
 | ||||||
|  | releases: | ||||||
|  | - name: myrelease | ||||||
|  |   namespace: mynamespace | ||||||
|  |   chart: mychart | ||||||
|  |   values: | ||||||
|  |   - values.yaml.gotmpl | ||||||
|  | `) | ||||||
|  | 
 | ||||||
|  | 	fooYamlFile := "/example/path/to/foo.yaml" | ||||||
|  | 	fooYamlContent := []byte(`foo: foo | ||||||
|  | # As this file doesn't have an file extension ".gotmpl", this template expression should not be evaluated | ||||||
|  | baz: "{{ readFile \"baz.txt\" }}"`) | ||||||
|  | 
 | ||||||
|  | 	barYamlFile := "/example/path/to/bar.yaml.gotmpl" | ||||||
|  | 	barYamlContent := []byte(`foo: FOO | ||||||
|  | bar: {{ readFile "bar.txt" }} | ||||||
|  | `) | ||||||
|  | 
 | ||||||
|  | 	barTextFile := "/example/path/to/bar.txt" | ||||||
|  | 	barTextContent := []byte("BAR") | ||||||
|  | 
 | ||||||
|  | 	expected := map[string]interface{}{ | ||||||
|  | 		"foo": "FOO", | ||||||
|  | 		"bar": "BAR", | ||||||
|  | 		// As the file doesn't have an file extension ".gotmpl", this template expression should not be evaluated
 | ||||||
|  | 		"baz": "{{ readFile \"baz.txt\" }}", | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	valuesFile := "/example/path/to/values.yaml.gotmpl" | ||||||
|  | 	valuesContent := []byte(`env: {{ .Environment.Name }} | ||||||
|  | releaseName: {{ .Release.Name }} | ||||||
|  | releaseNamespace: {{ .Release.Namespace }} | ||||||
|  | overrideNamespace: {{ .Namespace }} | ||||||
|  | `) | ||||||
|  | 
 | ||||||
|  | 	expectedValues := `env: production | ||||||
|  | releaseName: myrelease | ||||||
|  | releaseNamespace: myns | ||||||
|  | overrideNamespace: myns | ||||||
|  | ` | ||||||
|  | 
 | ||||||
|  | 	testFs := testhelper.NewTestFs(map[string]string{ | ||||||
|  | 		fooYamlFile: string(fooYamlContent), | ||||||
|  | 		barYamlFile: string(barYamlContent), | ||||||
|  | 		barTextFile: string(barTextContent), | ||||||
|  | 		valuesFile:  string(valuesContent), | ||||||
|  | 	}) | ||||||
|  | 	testFs.Cwd = "/example/path/to" | ||||||
|  | 
 | ||||||
|  | 	r := remote.NewRemote(logger, testFs.Cwd, testFs.ReadFile, testFs.DirectoryExistsAt, testFs.FileExistsAt) | ||||||
|  | 	state, err := NewCreator(logger, testFs.ReadFile, testFs.FileExists, testFs.Abs, testFs.Glob, nil, nil, "", r). | ||||||
|  | 		ParseAndLoad(yamlContent, filepath.Dir(yamlFile), yamlFile, "production", true, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("unexpected error: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	actual := state.Env.Values | ||||||
|  | 	if !reflect.DeepEqual(actual, expected) { | ||||||
|  | 		t.Errorf("unexpected environment values: expected=%v, actual=%v", expected, actual) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	release := state.Releases[0] | ||||||
|  | 
 | ||||||
|  | 	state.ApplyOverrides(&release) | ||||||
| 
 | 
 | ||||||
| 	actualValuesData, err := state.RenderReleaseValuesFileToBytes(&release, valuesFile) | 	actualValuesData, err := state.RenderReleaseValuesFileToBytes(&release, valuesFile) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ func (st *HelmState) Values() (map[string]interface{}, error) { | ||||||
| func (st *HelmState) createReleaseTemplateData(release *ReleaseSpec, vals map[string]interface{}) releaseTemplateData { | func (st *HelmState) createReleaseTemplateData(release *ReleaseSpec, vals map[string]interface{}) releaseTemplateData { | ||||||
| 	return releaseTemplateData{ | 	return releaseTemplateData{ | ||||||
| 		Environment: st.Env, | 		Environment: st.Env, | ||||||
|  | 		Namespace:   st.OverrideNamespace, | ||||||
| 		Values:      vals, | 		Values:      vals, | ||||||
| 		Release: releaseTemplateDataRelease{ | 		Release: releaseTemplateDataRelease{ | ||||||
| 			Name:      release.Name, | 			Name:      release.Name, | ||||||
|  |  | ||||||
|  | @ -29,6 +29,10 @@ type releaseTemplateData struct { | ||||||
| 	Release releaseTemplateDataRelease | 	Release releaseTemplateDataRelease | ||||||
| 	// Values is accessible as `.Values` and it contains default state values overrode by environment values and override values.
 | 	// Values is accessible as `.Values` and it contains default state values overrode by environment values and override values.
 | ||||||
| 	Values map[string]interface{} | 	Values map[string]interface{} | ||||||
|  | 	// Namespace is HelmState.OverrideNamespace.
 | ||||||
|  | 	// You should better use Release.Namespace as it might work as you'd expect even if OverrideNamespace is not set.
 | ||||||
|  | 	// See releaseTemplateDataRelease.Namespace for more information.
 | ||||||
|  | 	Namespace string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type releaseTemplateDataRelease struct { | type releaseTemplateDataRelease struct { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue