Merge pull request #228 from mumoshu/set-file
feat: Support for helm's --set-file
This commit is contained in:
		
						commit
						45d0f1c8e4
					
				|  | @ -69,6 +69,10 @@ releases: | ||||||
|           # Interpolate environment variable with a fixed string |           # Interpolate environment variable with a fixed string | ||||||
|           domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com |           domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com | ||||||
|           scheme: {{ env "SCHEME" | default "https" }} |           scheme: {{ env "SCHEME" | default "https" }} | ||||||
|  |     set: | ||||||
|  |     # single value load from a local file, --set-file foo.config=path/to/file | ||||||
|  |     - name: foo.config | ||||||
|  |       file: path/to/file | ||||||
|     # will attempt to decrypt it using helm-secrets plugin |     # will attempt to decrypt it using helm-secrets plugin | ||||||
|     secrets: |     secrets: | ||||||
|       - vault_secret.yaml |       - vault_secret.yaml | ||||||
|  |  | ||||||
|  | @ -81,6 +81,7 @@ type ReleaseSpec struct { | ||||||
| type SetValue struct { | type SetValue struct { | ||||||
| 	Name  string `yaml:"name"` | 	Name  string `yaml:"name"` | ||||||
| 	Value string `yaml:"value"` | 	Value string `yaml:"value"` | ||||||
|  | 	File  string `yaml:"file"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // CreateFromFile loads the helmfile from disk and processes the template
 | // CreateFromFile loads the helmfile from disk and processes the template
 | ||||||
|  | @ -757,11 +758,13 @@ func (state *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, basePat | ||||||
| 		flags = append(flags, "--values", valfile) | 		flags = append(flags, "--values", valfile) | ||||||
| 	} | 	} | ||||||
| 	if len(release.SetValues) > 0 { | 	if len(release.SetValues) > 0 { | ||||||
| 		val := []string{} |  | ||||||
| 		for _, set := range release.SetValues { | 		for _, set := range release.SetValues { | ||||||
| 			val = append(val, fmt.Sprintf("%s=%s", escape(set.Name), escape(set.Value))) | 			if set.Value != "" { | ||||||
|  | 				flags = append(flags, "--set", fmt.Sprintf("%s=%s", escape(set.Name), escape(set.Value))) | ||||||
|  | 			} else if set.File != "" { | ||||||
|  | 				flags = append(flags, "--set-file", fmt.Sprintf("%s=%s", escape(set.Name), set.File)) | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		flags = append(flags, "--set", strings.Join(val, ",")) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/*********** | 	/*********** | ||||||
|  |  | ||||||
|  | @ -704,7 +704,32 @@ func TestHelmState_SyncReleases(t *testing.T) { | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 			helm:         &mockHelmExec{}, | 			helm:         &mockHelmExec{}, | ||||||
| 			wantReleases: []mockRelease{{"releaseName", []string{"--set", "someList=a\\,b\\,c,json=\\{\"name\": \"john\"\\}"}}}, | 			wantReleases: []mockRelease{{"releaseName", []string{"--set", "someList=a\\,b\\,c", "--set", "json=\\{\"name\": \"john\"\\}"}}}, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name: "set single value from file", | ||||||
|  | 			releases: []ReleaseSpec{ | ||||||
|  | 				{ | ||||||
|  | 					Name:  "releaseName", | ||||||
|  | 					Chart: "foo", | ||||||
|  | 					SetValues: []SetValue{ | ||||||
|  | 						{ | ||||||
|  | 							Name:  "foo", | ||||||
|  | 							Value: "FOO", | ||||||
|  | 						}, | ||||||
|  | 						{ | ||||||
|  | 							Name: "bar", | ||||||
|  | 							File: "path/to/bar", | ||||||
|  | 						}, | ||||||
|  | 						{ | ||||||
|  | 							Name:  "baz", | ||||||
|  | 							Value: "BAZ", | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			helm:         &mockHelmExec{}, | ||||||
|  | 			wantReleases: []mockRelease{{"releaseName", []string{"--set", "foo=FOO", "--set-file", "bar=path/to/bar", "--set", "baz=BAZ"}}}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	for _, tt := range tests { | 	for _, tt := range tests { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue