fix: ValuesTemplate quote issue (#787)
* fix: ValuesTemplate quote issue Signed-off-by: yxxhero <aiopsclub@163.com> * optimize goccy yaml options Signed-off-by: yxxhero <aiopsclub@163.com> * add more options Signed-off-by: yxxhero <aiopsclub@163.com> * fix tests Signed-off-by: yxxhero <aiopsclub@163.com> * fix tests Signed-off-by: yxxhero <aiopsclub@163.com> --------- Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
		
							parent
							
								
									219602ebc7
								
							
						
					
					
						commit
						7c72e2ba3e
					
				|  | @ -0,0 +1,45 @@ | ||||||
|  | package state | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
|  | 
 | ||||||
|  | 	"github.com/helmfile/helmfile/pkg/filesystem" | ||||||
|  | 	"github.com/helmfile/helmfile/pkg/runtime" | ||||||
|  | 	"github.com/helmfile/helmfile/pkg/tmpl" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestExecuteTemplateExpressions(t *testing.T) { | ||||||
|  | 	render := tmpl.NewFileRenderer(filesystem.DefaultFileSystem(), "", map[string]interface{}{ | ||||||
|  | 		"Values": map[string]interface{}{ | ||||||
|  | 			"foo": map[string]interface{}{ | ||||||
|  | 				"releaseName": "foo", | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"Release": map[string]interface{}{ | ||||||
|  | 			"Name": "foo", | ||||||
|  | 		}, | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	v := runtime.GoccyGoYaml | ||||||
|  | 	runtime.GoccyGoYaml = true | ||||||
|  | 	t.Cleanup(func() { | ||||||
|  | 		runtime.GoccyGoYaml = v | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	rs := ReleaseSpec{ | ||||||
|  | 		Name:      "foo", | ||||||
|  | 		Chart:     "bar", | ||||||
|  | 		Namespace: "baz", | ||||||
|  | 		ValuesTemplate: []interface{}{ | ||||||
|  | 			map[string]interface{}{ | ||||||
|  | 				"fullnameOverride": "{{ .Values | get (printf \"%s.releaseName\" .Release.Name) .Release.Name }}", | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	result, err := rs.ExecuteTemplateExpressions(render) | ||||||
|  | 
 | ||||||
|  | 	require.NoErrorf(t, err, "failed to execute template expressions: %v", err) | ||||||
|  | 	require.Equalf(t, result.ValuesTemplate[0].(map[string]interface{})["fullnameOverride"], "foo", "failed to execute template expressions") | ||||||
|  | } | ||||||
|  | @ -67,6 +67,8 @@ func Marshal(v interface{}) ([]byte, error) { | ||||||
| 		yamlEncoder := yaml.NewEncoder( | 		yamlEncoder := yaml.NewEncoder( | ||||||
| 			&b, | 			&b, | ||||||
| 			yaml.Indent(2), | 			yaml.Indent(2), | ||||||
|  | 			yaml.UseSingleQuote(true), | ||||||
|  | 			yaml.UseLiteralStyleIfMultiline(true), | ||||||
| 		) | 		) | ||||||
| 		err := yamlEncoder.Encode(v) | 		err := yamlEncoder.Encode(v) | ||||||
| 		defer func() { | 		defer func() { | ||||||
|  |  | ||||||
|  | @ -11,6 +11,13 @@ import ( | ||||||
| func testYamlMarshal(t *testing.T, goccyGoYaml bool) { | func testYamlMarshal(t *testing.T, goccyGoYaml bool) { | ||||||
| 	t.Helper() | 	t.Helper() | ||||||
| 
 | 
 | ||||||
|  | 	var yamlLibraryName string | ||||||
|  | 	if goccyGoYaml { | ||||||
|  | 		yamlLibraryName = "goccy/go-yaml" | ||||||
|  | 	} else { | ||||||
|  | 		yamlLibraryName = "gopkg.in/yaml.v2" | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	v := runtime.GoccyGoYaml | 	v := runtime.GoccyGoYaml | ||||||
| 	runtime.GoccyGoYaml = goccyGoYaml | 	runtime.GoccyGoYaml = goccyGoYaml | ||||||
| 	t.Cleanup(func() { | 	t.Cleanup(func() { | ||||||
|  | @ -25,7 +32,7 @@ func testYamlMarshal(t *testing.T, goccyGoYaml bool) { | ||||||
| 			Annotation string `yaml:"annotation"` | 			Annotation string `yaml:"annotation"` | ||||||
| 		} `yaml:"info"` | 		} `yaml:"info"` | ||||||
| 
 | 
 | ||||||
| 		expected string | 		expected map[string]string | ||||||
| 	}{ | 	}{ | ||||||
| 		{ | 		{ | ||||||
| 			Name: "John", | 			Name: "John", | ||||||
|  | @ -41,14 +48,17 @@ func testYamlMarshal(t *testing.T, goccyGoYaml bool) { | ||||||
| 				// - https://github.com/helmfile/helmfile/pull/675
 | 				// - https://github.com/helmfile/helmfile/pull/675
 | ||||||
| 				Annotation: "on", | 				Annotation: "on", | ||||||
| 			}}, | 			}}, | ||||||
| 			expected: "name: John\ninfo:\n- age: 20\n  address: New York\n  annotation: \"on\"\n", | 			expected: map[string]string{ | ||||||
|  | 				"goccy/go-yaml":    "name: John\ninfo:\n- age: 20\n  address: New York\n  annotation: 'on'\n", | ||||||
|  | 				"gopkg.in/yaml.v2": "name: John\ninfo:\n- age: 20\n  address: New York\n  annotation: \"on\"\n", | ||||||
|  | 			}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, tt := range tests { | 	for _, tt := range tests { | ||||||
| 		actual, err := Marshal(tt) | 		actual, err := Marshal(tt) | ||||||
| 		require.NoError(t, err) | 		require.NoError(t, err) | ||||||
| 		require.Equal(t, tt.expected, string(actual)) | 		require.Equal(t, tt.expected[yamlLibraryName], string(actual)) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue