Allow combining valuesTemplate and values, same for setTemplate (#938)
* Allow combining valuesTemplate and values, same for setTemplate * Add testcase for valuesTemplate and setTemplate
This commit is contained in:
		
							parent
							
								
									990d31c667
								
							
						
					
					
						commit
						b99daa3605
					
				|  | @ -3596,6 +3596,64 @@ myrelease4	         	true     	id:myrelease1 | ||||||
| 	assert.Equal(t, expected, out) | 	assert.Equal(t, expected, out) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestSetValuesTemplate(t *testing.T) { | ||||||
|  | 	files := map[string]string{ | ||||||
|  | 		"/path/to/helmfile.yaml": ` | ||||||
|  | releases: | ||||||
|  | - name: zipkin | ||||||
|  |   chart: stable/zipkin | ||||||
|  |   values: | ||||||
|  |   - val2: "val2" | ||||||
|  |   valuesTemplate: | ||||||
|  |   - val1: '{{"{{ .Release.Name }}"}}' | ||||||
|  |   set: | ||||||
|  |   - name: "name" | ||||||
|  |     value: "val" | ||||||
|  |   setTemplate: | ||||||
|  |   - name: name-{{"{{ .Release.Name }}"}} | ||||||
|  |     value: val-{{"{{ .Release.Name }}"}} | ||||||
|  | `, | ||||||
|  | 	} | ||||||
|  | 	expectedValues := []interface{}{ | ||||||
|  | 		map[interface{}]interface{}{"val1": "zipkin"}, | ||||||
|  | 		map[interface{}]interface{}{"val2": "val2"}} | ||||||
|  | 	expectedSetValues := []state.SetValue{ | ||||||
|  | 		state.SetValue{Name: "name-zipkin", Value: "val-zipkin"}, | ||||||
|  | 		state.SetValue{Name: "name", Value: "val"}} | ||||||
|  | 
 | ||||||
|  | 	app := appWithFs(&App{ | ||||||
|  | 		KubeContext: "default", | ||||||
|  | 		Logger:      helmexec.NewLogger(os.Stderr, "debug"), | ||||||
|  | 		Env:         "default", | ||||||
|  | 	}, files) | ||||||
|  | 
 | ||||||
|  | 	var specs []state.ReleaseSpec | ||||||
|  | 	collectReleases := func(st *state.HelmState, helm helmexec.Interface) []error { | ||||||
|  | 		specs = append(specs, st.Releases...) | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err := app.VisitDesiredStatesWithReleasesFiltered( | ||||||
|  | 		"helmfile.yaml", collectReleases, | ||||||
|  | 	) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("unexpected error: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if len(specs) != 1 { | ||||||
|  | 		t.Fatalf("expected 1 release; got %d releases", len(specs)) | ||||||
|  | 	} | ||||||
|  | 	actualValues := specs[0].Values | ||||||
|  | 	actualSetValues := specs[0].SetValues | ||||||
|  | 
 | ||||||
|  | 	if !reflect.DeepEqual(expectedValues, actualValues) { | ||||||
|  | 		t.Errorf("expected values: %v; got values: %v", expectedValues, actualValues) | ||||||
|  | 	} | ||||||
|  | 	if !reflect.DeepEqual(expectedSetValues, actualSetValues) { | ||||||
|  | 		t.Errorf("expected set: %v; got set: %v", expectedValues, actualValues) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func location() string { | func location() string { | ||||||
| 	_, fn, line, _ := runtime.Caller(1) | 	_, fn, line, _ := runtime.Caller(1) | ||||||
| 	return fmt.Sprintf("%s:%d", filepath.Base(fn), line) | 	return fmt.Sprintf("%s:%d", filepath.Base(fn), line) | ||||||
|  |  | ||||||
|  | @ -93,7 +93,7 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R | ||||||
| 		result.Labels[key] = s.String() | 		result.Labels[key] = s.String() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if result.ValuesTemplate != nil && len(result.ValuesTemplate) > 0 { | 	if len(result.ValuesTemplate) > 0 { | ||||||
| 		for i, t := range result.ValuesTemplate { | 		for i, t := range result.ValuesTemplate { | ||||||
| 			switch ts := t.(type) { | 			switch ts := t.(type) { | ||||||
| 			case map[interface{}]interface{}: | 			case map[interface{}]interface{}: | ||||||
|  | @ -117,7 +117,9 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		result.Values = result.ValuesTemplate | 		var newvals []interface{} | ||||||
|  | 		newvals = append(newvals, result.ValuesTemplate...) | ||||||
|  | 		result.Values = append(newvals, result.Values...) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for i, t := range result.Values { | 	for i, t := range result.Values { | ||||||
|  | @ -139,7 +141,7 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R | ||||||
| 		result.Secrets[i] = s.String() | 		result.Secrets[i] = s.String() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if result.SetValuesTemplate != nil && len(result.SetValuesTemplate) > 0 { | 	if len(result.SetValuesTemplate) > 0 { | ||||||
| 		for i, val := range result.SetValuesTemplate { | 		for i, val := range result.SetValuesTemplate { | ||||||
| 			{ | 			{ | ||||||
| 				// name
 | 				// name
 | ||||||
|  | @ -178,7 +180,9 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		result.SetValues = result.SetValuesTemplate | 		var newvals []SetValue | ||||||
|  | 		newvals = append(newvals, result.SetValuesTemplate...) | ||||||
|  | 		result.SetValues = append(newvals, result.SetValues...) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return result, nil | 	return result, nil | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue