Add "PostRendererArgs" option to be passed to helm (#1133)
* Add "PostRendererArgs" option to be passed to helm This allows using PowerShell scripts on Windows as Post Renderer. Signed-off-by: Maarten Boekhold <maarten.boekhold@finastra.com>
This commit is contained in:
		
							parent
							
								
									b764b4ceed
								
							
						
					
					
						commit
						d0b8d7ee5e
					
				|  | @ -66,6 +66,7 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||||
| 	f.BoolVar(&applyOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`) | 	f.BoolVar(&applyOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`) | ||||||
| 	f.BoolVar(&applyOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`) | 	f.BoolVar(&applyOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`) | ||||||
| 	f.StringVar(&applyOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | 	f.StringVar(&applyOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||||
|  | 	f.StringArrayVar(&applyOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||||
| 	f.StringVar(&applyOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | 	f.StringVar(&applyOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | ||||||
| 
 | 
 | ||||||
| 	return cmd | 	return cmd | ||||||
|  |  | ||||||
|  | @ -53,6 +53,7 @@ func NewDiffCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||||
| 	f.BoolVar(&diffOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reuse-values"`) | 	f.BoolVar(&diffOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reuse-values"`) | ||||||
| 	f.BoolVar(&diffOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reset-values"`) | 	f.BoolVar(&diffOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reset-values"`) | ||||||
| 	f.StringVar(&diffOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | 	f.StringVar(&diffOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||||
|  | 	f.StringArrayVar(&diffOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||||
| 
 | 
 | ||||||
| 	return cmd | 	return cmd | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -45,6 +45,7 @@ func NewSyncCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||||
| 	f.BoolVar(&syncOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`) | 	f.BoolVar(&syncOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`) | ||||||
| 	f.BoolVar(&syncOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`) | 	f.BoolVar(&syncOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`) | ||||||
| 	f.StringVar(&syncOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | 	f.StringVar(&syncOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||||
|  | 	f.StringArrayVar(&syncOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||||
| 	f.StringVar(&syncOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | 	f.StringVar(&syncOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background") | ||||||
| 
 | 
 | ||||||
| 	return cmd | 	return cmd | ||||||
|  |  | ||||||
|  | @ -45,6 +45,7 @@ func NewTemplateCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||||
| 	f.BoolVar(&templateOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`) | 	f.BoolVar(&templateOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`) | ||||||
| 	f.BoolVar(&templateOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security") | 	f.BoolVar(&templateOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security") | ||||||
| 	f.StringVar(&templateOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | 	f.StringVar(&templateOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||||
|  | 	f.StringArrayVar(&templateOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`) | ||||||
| 	f.StringVar(&templateOptions.KubeVersion, "kube-version", "", `pass --kube-version to "helm template". Overrides kubeVersion in helmfile.yaml`) | 	f.StringVar(&templateOptions.KubeVersion, "kube-version", "", `pass --kube-version to "helm template". Overrides kubeVersion in helmfile.yaml`) | ||||||
| 
 | 
 | ||||||
| 	return cmd | 	return cmd | ||||||
|  |  | ||||||
|  | @ -211,6 +211,12 @@ helmDefaults: | ||||||
|   reuseValues: false |   reuseValues: false | ||||||
|   # propagate `--post-renderer` to helmv3 template and helm install |   # propagate `--post-renderer` to helmv3 template and helm install | ||||||
|   postRenderer: "path/to/postRenderer" |   postRenderer: "path/to/postRenderer" | ||||||
|  |   # propagate `--post-renderer-args` to helmv3 template and helm install. This allows using Powershell | ||||||
|  |   # scripts on Windows as a post renderer | ||||||
|  |   postRendererArgs: | ||||||
|  |   - PowerShell | ||||||
|  |   - "-Command" | ||||||
|  |   - "theScript.ps1" | ||||||
|   #	cascade `--cascade` to helmv3 delete, available values: background, foreground, or orphan, default: background |   #	cascade `--cascade` to helmv3 delete, available values: background, foreground, or orphan, default: background | ||||||
|   cascade: "background" |   cascade: "background" | ||||||
|   # insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart |   # insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart | ||||||
|  | @ -314,6 +320,12 @@ releases: | ||||||
|     skipDeps: false |     skipDeps: false | ||||||
|     # propagate `--post-renderer` to helmv3 template and helm install |     # propagate `--post-renderer` to helmv3 template and helm install | ||||||
|     postRenderer: "path/to/postRenderer" |     postRenderer: "path/to/postRenderer" | ||||||
|  |     # propagate `--post-renderer-args` to helmv3 template and helm install. This allows using Powershell | ||||||
|  |     # scripts on Windows as a post renderer | ||||||
|  |     postRendererArgs: | ||||||
|  |     - PowerShell | ||||||
|  |     - "-Command" | ||||||
|  |     - "theScript.ps1" | ||||||
|     # cascade `--cascade` to helmv3 delete, available values: background, foreground, or orphan, default: background |     # cascade `--cascade` to helmv3 delete, available values: background, foreground, or orphan, default: background | ||||||
|     cascade: "background" |     cascade: "background" | ||||||
|     # insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart |     # insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart | ||||||
|  |  | ||||||
|  | @ -1370,6 +1370,7 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) { | ||||||
| 		ResetValues:       c.ResetValues(), | 		ResetValues:       c.ResetValues(), | ||||||
| 		DiffArgs:          c.DiffArgs(), | 		DiffArgs:          c.DiffArgs(), | ||||||
| 		PostRenderer:      c.PostRenderer(), | 		PostRenderer:      c.PostRenderer(), | ||||||
|  | 		PostRendererArgs:  c.PostRendererArgs(), | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	infoMsg, releasesToBeUpdated, releasesToBeDeleted, errs := r.diff(false, detailedExitCode, c, diffOpts) | 	infoMsg, releasesToBeUpdated, releasesToBeDeleted, errs := r.diff(false, detailedExitCode, c, diffOpts) | ||||||
|  | @ -1472,14 +1473,15 @@ Do you really want to apply? | ||||||
| 				subst.Releases = rs | 				subst.Releases = rs | ||||||
| 
 | 
 | ||||||
| 				syncOpts := &state.SyncOpts{ | 				syncOpts := &state.SyncOpts{ | ||||||
| 					Set:          c.Set(), | 					Set:              c.Set(), | ||||||
| 					SkipCleanup:  c.RetainValuesFiles() || c.SkipCleanup(), | 					SkipCleanup:      c.RetainValuesFiles() || c.SkipCleanup(), | ||||||
| 					SkipCRDs:     c.SkipCRDs(), | 					SkipCRDs:         c.SkipCRDs(), | ||||||
| 					Wait:         c.Wait(), | 					Wait:             c.Wait(), | ||||||
| 					WaitForJobs:  c.WaitForJobs(), | 					WaitForJobs:      c.WaitForJobs(), | ||||||
| 					ReuseValues:  c.ReuseValues(), | 					ReuseValues:      c.ReuseValues(), | ||||||
| 					ResetValues:  c.ResetValues(), | 					ResetValues:      c.ResetValues(), | ||||||
| 					PostRenderer: c.PostRenderer(), | 					PostRenderer:     c.PostRenderer(), | ||||||
|  | 					PostRendererArgs: c.PostRendererArgs(), | ||||||
| 				} | 				} | ||||||
| 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), syncOpts) | 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), syncOpts) | ||||||
| 			})) | 			})) | ||||||
|  | @ -1604,6 +1606,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) | ||||||
| 			ReuseValues:       c.ReuseValues(), | 			ReuseValues:       c.ReuseValues(), | ||||||
| 			ResetValues:       c.ResetValues(), | 			ResetValues:       c.ResetValues(), | ||||||
| 			PostRenderer:      c.PostRenderer(), | 			PostRenderer:      c.PostRenderer(), | ||||||
|  | 			PostRendererArgs:  c.PostRendererArgs(), | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		filtered := &Run{ | 		filtered := &Run{ | ||||||
|  | @ -1863,13 +1866,14 @@ Do you really want to sync? | ||||||
| 				subst.Releases = rs | 				subst.Releases = rs | ||||||
| 
 | 
 | ||||||
| 				opts := &state.SyncOpts{ | 				opts := &state.SyncOpts{ | ||||||
| 					Set:          c.Set(), | 					Set:              c.Set(), | ||||||
| 					SkipCRDs:     c.SkipCRDs(), | 					SkipCRDs:         c.SkipCRDs(), | ||||||
| 					Wait:         c.Wait(), | 					Wait:             c.Wait(), | ||||||
| 					WaitForJobs:  c.WaitForJobs(), | 					WaitForJobs:      c.WaitForJobs(), | ||||||
| 					ReuseValues:  c.ReuseValues(), | 					ReuseValues:      c.ReuseValues(), | ||||||
| 					ResetValues:  c.ResetValues(), | 					ResetValues:      c.ResetValues(), | ||||||
| 					PostRenderer: c.PostRenderer(), | 					PostRenderer:     c.PostRenderer(), | ||||||
|  | 					PostRendererArgs: c.PostRendererArgs(), | ||||||
| 				} | 				} | ||||||
| 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts) | 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts) | ||||||
| 			})) | 			})) | ||||||
|  | @ -1903,6 +1907,7 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) { | ||||||
| 			SkipCleanup:       c.SkipCleanup(), | 			SkipCleanup:       c.SkipCleanup(), | ||||||
| 			SkipTests:         c.SkipTests(), | 			SkipTests:         c.SkipTests(), | ||||||
| 			PostRenderer:      c.PostRenderer(), | 			PostRenderer:      c.PostRenderer(), | ||||||
|  | 			PostRendererArgs:  c.PostRendererArgs(), | ||||||
| 			KubeVersion:       c.KubeVersion(), | 			KubeVersion:       c.KubeVersion(), | ||||||
| 		} | 		} | ||||||
| 		return st.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts) | 		return st.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts) | ||||||
|  |  | ||||||
|  | @ -2181,6 +2181,10 @@ func (c configImpl) PostRenderer() string { | ||||||
| 	return "" | 	return "" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (c configImpl) PostRendererArgs() []string { | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c configImpl) KubeVersion() string { | func (c configImpl) KubeVersion() string { | ||||||
| 	return c.kubeVersion | 	return c.kubeVersion | ||||||
| } | } | ||||||
|  | @ -2222,6 +2226,7 @@ type applyConfig struct { | ||||||
| 	waitForJobs            bool | 	waitForJobs            bool | ||||||
| 	reuseValues            bool | 	reuseValues            bool | ||||||
| 	postRenderer           string | 	postRenderer           string | ||||||
|  | 	postRendererArgs       []string | ||||||
| 	kubeVersion            string | 	kubeVersion            string | ||||||
| 
 | 
 | ||||||
| 	// template-only options
 | 	// template-only options
 | ||||||
|  | @ -2383,6 +2388,10 @@ func (a applyConfig) PostRenderer() string { | ||||||
| 	return a.postRenderer | 	return a.postRenderer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (a applyConfig) PostRendererArgs() []string { | ||||||
|  | 	return a.postRendererArgs | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (a applyConfig) KubeVersion() string { | func (a applyConfig) KubeVersion() string { | ||||||
| 	return a.kubeVersion | 	return a.kubeVersion | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -48,6 +48,7 @@ type ReposConfigProvider interface { | ||||||
| type ApplyConfigProvider interface { | type ApplyConfigProvider interface { | ||||||
| 	Args() string | 	Args() string | ||||||
| 	PostRenderer() string | 	PostRenderer() string | ||||||
|  | 	PostRendererArgs() []string | ||||||
| 	Cascade() string | 	Cascade() string | ||||||
| 
 | 
 | ||||||
| 	Values() []string | 	Values() []string | ||||||
|  | @ -93,6 +94,7 @@ type ApplyConfigProvider interface { | ||||||
| type SyncConfigProvider interface { | type SyncConfigProvider interface { | ||||||
| 	Args() string | 	Args() string | ||||||
| 	PostRenderer() string | 	PostRenderer() string | ||||||
|  | 	PostRendererArgs() []string | ||||||
| 	Cascade() string | 	Cascade() string | ||||||
| 
 | 
 | ||||||
| 	Values() []string | 	Values() []string | ||||||
|  | @ -118,6 +120,7 @@ type SyncConfigProvider interface { | ||||||
| type DiffConfigProvider interface { | type DiffConfigProvider interface { | ||||||
| 	Args() string | 	Args() string | ||||||
| 	PostRenderer() string | 	PostRenderer() string | ||||||
|  | 	PostRendererArgs() []string | ||||||
| 
 | 
 | ||||||
| 	Values() []string | 	Values() []string | ||||||
| 	Set() []string | 	Set() []string | ||||||
|  | @ -209,6 +212,7 @@ type FetchConfigProvider interface { | ||||||
| type TemplateConfigProvider interface { | type TemplateConfigProvider interface { | ||||||
| 	Args() string | 	Args() string | ||||||
| 	PostRenderer() string | 	PostRenderer() string | ||||||
|  | 	PostRendererArgs() []string | ||||||
| 
 | 
 | ||||||
| 	Values() []string | 	Values() []string | ||||||
| 	Set() []string | 	Set() []string | ||||||
|  |  | ||||||
|  | @ -164,6 +164,10 @@ func (a diffConfig) PostRenderer() string { | ||||||
| 	return "" | 	return "" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (a diffConfig) PostRendererArgs() []string { | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestDiff(t *testing.T) { | func TestDiff(t *testing.T) { | ||||||
| 	type flags struct { | 	type flags struct { | ||||||
| 		skipNeeds    bool | 		skipNeeds    bool | ||||||
|  |  | ||||||
|  | @ -58,6 +58,8 @@ type ApplyOptions struct { | ||||||
| 	ResetValues bool | 	ResetValues bool | ||||||
| 	// Propagate '--post-renderer' to helmv3 template and helm install
 | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
| 	PostRenderer string | 	PostRenderer string | ||||||
|  | 	// Propagate '--post-renderer-args' to helmv3 template and helm install
 | ||||||
|  | 	PostRendererArgs []string | ||||||
| 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | ||||||
| 	Cascade string | 	Cascade string | ||||||
| } | } | ||||||
|  | @ -222,6 +224,11 @@ func (a *ApplyImpl) PostRenderer() string { | ||||||
| 	return a.ApplyOptions.PostRenderer | 	return a.ApplyOptions.PostRenderer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // PostRendererArgs returns the PostRendererArgs.
 | ||||||
|  | func (a *ApplyImpl) PostRendererArgs() []string { | ||||||
|  | 	return a.ApplyOptions.PostRendererArgs | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Cascade returns cascade flag
 | // Cascade returns cascade flag
 | ||||||
| func (a *ApplyImpl) Cascade() string { | func (a *ApplyImpl) Cascade() string { | ||||||
| 	return a.ApplyOptions.Cascade | 	return a.ApplyOptions.Cascade | ||||||
|  |  | ||||||
|  | @ -42,6 +42,8 @@ type DiffOptions struct { | ||||||
| 	ResetValues bool | 	ResetValues bool | ||||||
| 	// Propagate '--post-renderer' to helmv3 template and helm install
 | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
| 	PostRenderer string | 	PostRenderer string | ||||||
|  | 	// Propagate '--post-renderer-args' to helmv3 template and helm install
 | ||||||
|  | 	PostRendererArgs []string | ||||||
| 	// DiffArgs is the list of arguments to pass to helm-diff.
 | 	// DiffArgs is the list of arguments to pass to helm-diff.
 | ||||||
| 	DiffArgs string | 	DiffArgs string | ||||||
| } | } | ||||||
|  | @ -185,3 +187,8 @@ func (t *DiffImpl) ResetValues() bool { | ||||||
| func (t *DiffImpl) PostRenderer() string { | func (t *DiffImpl) PostRenderer() string { | ||||||
| 	return t.DiffOptions.PostRenderer | 	return t.DiffOptions.PostRenderer | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // PostRendererArgs returns the PostRendererArgs.
 | ||||||
|  | func (t *DiffImpl) PostRendererArgs() []string { | ||||||
|  | 	return t.DiffOptions.PostRendererArgs | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -28,6 +28,8 @@ type SyncOptions struct { | ||||||
| 	ResetValues bool | 	ResetValues bool | ||||||
| 	// Propagate '--post-renderer' to helmv3 template and helm install
 | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
| 	PostRenderer string | 	PostRenderer string | ||||||
|  | 	// Propagate '--post-renderer-args' to helmv3 template and helm install
 | ||||||
|  | 	PostRendererArgs []string | ||||||
| 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | ||||||
| 	Cascade string | 	Cascade string | ||||||
| } | } | ||||||
|  | @ -121,6 +123,11 @@ func (t *SyncImpl) PostRenderer() string { | ||||||
| 	return t.SyncOptions.PostRenderer | 	return t.SyncOptions.PostRenderer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // PostRendererArgs returns the PostRendererArgs.
 | ||||||
|  | func (t *SyncImpl) PostRendererArgs() []string { | ||||||
|  | 	return t.SyncOptions.PostRendererArgs | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Cascade returns cascade flag
 | // Cascade returns cascade flag
 | ||||||
| func (t *SyncImpl) Cascade() string { | func (t *SyncImpl) Cascade() string { | ||||||
| 	return t.SyncOptions.Cascade | 	return t.SyncOptions.Cascade | ||||||
|  |  | ||||||
|  | @ -34,6 +34,8 @@ type TemplateOptions struct { | ||||||
| 	SkipCleanup bool | 	SkipCleanup bool | ||||||
| 	// Propagate '--post-renderer' to helmv3 template and helm install
 | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
| 	PostRenderer string | 	PostRenderer string | ||||||
|  | 	// Propagate '--post-renderer-args' to helmv3 template and helm install
 | ||||||
|  | 	PostRendererArgs []string | ||||||
| 	// KubeVersion is the kube-version flag
 | 	// KubeVersion is the kube-version flag
 | ||||||
| 	KubeVersion string | 	KubeVersion string | ||||||
| } | } | ||||||
|  | @ -126,6 +128,11 @@ func (t *TemplateImpl) PostRenderer() string { | ||||||
| 	return t.TemplateOptions.PostRenderer | 	return t.TemplateOptions.PostRenderer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // PostRendererArgs returns the PostRendererArgs.
 | ||||||
|  | func (t *TemplateImpl) PostRendererArgs() []string { | ||||||
|  | 	return t.TemplateOptions.PostRendererArgs | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // KubeVersion returns the the KubeVersion.
 | // KubeVersion returns the the KubeVersion.
 | ||||||
| func (t *TemplateImpl) KubeVersion() string { | func (t *TemplateImpl) KubeVersion() string { | ||||||
| 	return t.TemplateOptions.KubeVersion | 	return t.TemplateOptions.KubeVersion | ||||||
|  |  | ||||||
|  | @ -39,6 +39,31 @@ func (st *HelmState) appendPostRenderFlags(flags []string, release *ReleaseSpec, | ||||||
| 	return flags | 	return flags | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // append post-renderer-args flags to helm flags
 | ||||||
|  | func (st *HelmState) appendPostRenderArgsFlags(flags []string, release *ReleaseSpec, postRendererArgs []string) []string { | ||||||
|  | 	switch { | ||||||
|  | 	case len(release.PostRendererArgs) != 0: | ||||||
|  | 		for _, arg := range release.PostRendererArgs { | ||||||
|  | 			if arg != "" { | ||||||
|  | 				flags = append(flags, "--post-renderer-args", arg) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	case len(postRendererArgs) != 0: | ||||||
|  | 		for _, arg := range postRendererArgs { | ||||||
|  | 			if arg != "" { | ||||||
|  | 				flags = append(flags, "--post-renderer-args", arg) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	case len(st.HelmDefaults.PostRendererArgs) != 0: | ||||||
|  | 		for _, arg := range st.HelmDefaults.PostRendererArgs { | ||||||
|  | 			if arg != "" { | ||||||
|  | 				flags = append(flags, "--post-renderer-args", arg) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return flags | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (st *HelmState) appendWaitForJobsFlags(flags []string, release *ReleaseSpec, ops *SyncOpts) []string { | func (st *HelmState) appendWaitForJobsFlags(flags []string, release *ReleaseSpec, ops *SyncOpts) []string { | ||||||
| 	switch { | 	switch { | ||||||
| 	case release.WaitForJobs != nil && *release.WaitForJobs: | 	case release.WaitForJobs != nil && *release.WaitForJobs: | ||||||
|  |  | ||||||
|  | @ -183,6 +183,8 @@ type HelmSpec struct { | ||||||
| 	ReuseValues bool `yaml:"reuseValues"` | 	ReuseValues bool `yaml:"reuseValues"` | ||||||
| 	// Propagate '--post-renderer' to helmv3 template and helm install
 | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
| 	PostRenderer *string `yaml:"postRenderer,omitempty"` | 	PostRenderer *string `yaml:"postRenderer,omitempty"` | ||||||
|  | 	// Propagate '--post-renderer-args' to helmv3 template and helm install
 | ||||||
|  | 	PostRendererArgs []string `yaml:"postRendererArgs,omitempty"` | ||||||
| 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | ||||||
| 	Cascade *string `yaml:"cascade,omitempty"` | 	Cascade *string `yaml:"cascade,omitempty"` | ||||||
| 
 | 
 | ||||||
|  | @ -357,6 +359,9 @@ type ReleaseSpec struct { | ||||||
| 	// Propagate '--post-renderer' to helmv3 template and helm install
 | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
| 	PostRenderer *string `yaml:"postRenderer,omitempty"` | 	PostRenderer *string `yaml:"postRenderer,omitempty"` | ||||||
| 
 | 
 | ||||||
|  | 	// Propagate '--post-renderer-args' to helmv3 template and helm install
 | ||||||
|  | 	PostRendererArgs []string `yaml:"postRendererArgs,omitempty"` | ||||||
|  | 
 | ||||||
| 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | 	// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
 | ||||||
| 	Cascade *string `yaml:"cascade,omitempty"` | 	Cascade *string `yaml:"cascade,omitempty"` | ||||||
| 
 | 
 | ||||||
|  | @ -711,14 +716,15 @@ func (st *HelmState) DetectReleasesToBeDeleted(helm helmexec.Interface, releases | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type SyncOpts struct { | type SyncOpts struct { | ||||||
| 	Set          []string | 	Set              []string | ||||||
| 	SkipCleanup  bool | 	SkipCleanup      bool | ||||||
| 	SkipCRDs     bool | 	SkipCRDs         bool | ||||||
| 	Wait         bool | 	Wait             bool | ||||||
| 	WaitForJobs  bool | 	WaitForJobs      bool | ||||||
| 	ReuseValues  bool | 	ReuseValues      bool | ||||||
| 	ResetValues  bool | 	ResetValues      bool | ||||||
| 	PostRenderer string | 	PostRenderer     string | ||||||
|  | 	PostRendererArgs []string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type SyncOpt interface{ Apply(*SyncOpts) } | type SyncOpt interface{ Apply(*SyncOpts) } | ||||||
|  | @ -1393,6 +1399,7 @@ type TemplateOpts struct { | ||||||
| 	IncludeCRDs       bool | 	IncludeCRDs       bool | ||||||
| 	SkipTests         bool | 	SkipTests         bool | ||||||
| 	PostRenderer      string | 	PostRenderer      string | ||||||
|  | 	PostRendererArgs  []string | ||||||
| 	KubeVersion       string | 	KubeVersion       string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1914,6 +1921,7 @@ type DiffOpts struct { | ||||||
| 	ReuseValues       bool | 	ReuseValues       bool | ||||||
| 	ResetValues       bool | 	ResetValues       bool | ||||||
| 	PostRenderer      string | 	PostRenderer      string | ||||||
|  | 	PostRendererArgs  []string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (o *DiffOpts) Apply(opts *DiffOpts) { | func (o *DiffOpts) Apply(opts *DiffOpts) { | ||||||
|  | @ -2567,6 +2575,12 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp | ||||||
| 	} | 	} | ||||||
| 	flags = st.appendPostRenderFlags(flags, release, postRenderer) | 	flags = st.appendPostRenderFlags(flags, release, postRenderer) | ||||||
| 
 | 
 | ||||||
|  | 	var postRendererArgs []string | ||||||
|  | 	if opt != nil { | ||||||
|  | 		postRendererArgs = opt.PostRendererArgs | ||||||
|  | 	} | ||||||
|  | 	flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs) | ||||||
|  | 
 | ||||||
| 	common, clean, err := st.namespaceAndValuesFlags(helm, release, workerIndex) | 	common, clean, err := st.namespaceAndValuesFlags(helm, release, workerIndex) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, clean, err | 		return nil, clean, err | ||||||
|  | @ -2582,12 +2596,15 @@ func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseS | ||||||
| 	flags = st.appendHelmXFlags(flags, release) | 	flags = st.appendHelmXFlags(flags, release) | ||||||
| 
 | 
 | ||||||
| 	postRenderer := "" | 	postRenderer := "" | ||||||
|  | 	var postRendererArgs []string | ||||||
| 	kubeVersion := "" | 	kubeVersion := "" | ||||||
| 	if opt != nil { | 	if opt != nil { | ||||||
| 		postRenderer = opt.PostRenderer | 		postRenderer = opt.PostRenderer | ||||||
|  | 		postRendererArgs = opt.PostRendererArgs | ||||||
| 		kubeVersion = opt.KubeVersion | 		kubeVersion = opt.KubeVersion | ||||||
| 	} | 	} | ||||||
| 	flags = st.appendPostRenderFlags(flags, release, postRenderer) | 	flags = st.appendPostRenderFlags(flags, release, postRenderer) | ||||||
|  | 	flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs) | ||||||
| 	flags = st.appendApiVersionsFlags(flags, release, kubeVersion) | 	flags = st.appendApiVersionsFlags(flags, release, kubeVersion) | ||||||
| 	flags = st.appendChartDownloadTLSFlags(flags, release) | 	flags = st.appendChartDownloadTLSFlags(flags, release) | ||||||
| 
 | 
 | ||||||
|  | @ -2653,6 +2670,12 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec, | ||||||
| 	} | 	} | ||||||
| 	flags = st.appendPostRenderFlags(flags, release, postRenderer) | 	flags = st.appendPostRenderFlags(flags, release, postRenderer) | ||||||
| 
 | 
 | ||||||
|  | 	var postRendererArgs []string | ||||||
|  | 	if opt != nil { | ||||||
|  | 		postRendererArgs = opt.PostRendererArgs | ||||||
|  | 	} | ||||||
|  | 	flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs) | ||||||
|  | 
 | ||||||
| 	common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex) | 	common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, files, err | 		return nil, files, err | ||||||
|  |  | ||||||
|  | @ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) { | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "baseline", | 		subject: "baseline", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||||
| 		want:    "foo-values-6749dfb776", | 		want:    "foo-values-c7464bdc5", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different bytes content", | 		subject: "different bytes content", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||||
| 		data:    []byte(`{"k":"v"}`), | 		data:    []byte(`{"k":"v"}`), | ||||||
| 		want:    "foo-values-84f9645959", | 		want:    "foo-values-79f8658596", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different map content", | 		subject: "different map content", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||||
| 		data:    map[string]any{"k": "v"}, | 		data:    map[string]any{"k": "v"}, | ||||||
| 		want:    "foo-values-7774fccb4f", | 		want:    "foo-values-7996cc88d6", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different chart", | 		subject: "different chart", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"}, | 		release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"}, | ||||||
| 		want:    "foo-values-5cdf68c495", | 		want:    "foo-values-7cdb6bd8b6", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different name", | 		subject: "different name", | ||||||
| 		release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"}, | ||||||
| 		want:    "bar-values-758d78db87", | 		want:    "bar-values-59cd6576c4", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "specific ns", | 		subject: "specific ns", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"}, | ||||||
| 		want:    "myns-foo-values-6888c4f5bf", | 		want:    "myns-foo-values-5d5d46c98d", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	for id, n := range ids { | 	for id, n := range ids { | ||||||
|  |  | ||||||
|  | @ -27,7 +27,7 @@ test_start "postrender diff" | ||||||
| info "Comparing postrender diff output ${postrender_diff_reverse} with ${postrender_case_output_dir}/result.yaml" | info "Comparing postrender diff output ${postrender_diff_reverse} with ${postrender_case_output_dir}/result.yaml" | ||||||
| for i in $(seq 10); do | for i in $(seq 10); do | ||||||
|     info "Comparing build/postrender-diff #$i" |     info "Comparing build/postrender-diff #$i" | ||||||
|     ${helmfile} -f ${postrender_case_input_dir}/${config_file} diff --concurrency 1 --post-renderer ./add-cm1.bash &> ${postrender_diff_reverse} || fail "\"helmfile diff\" shouldn't fail" |     ${helmfile} -f ${postrender_case_input_dir}/${config_file} diff --concurrency 1 --post-renderer ./add-cm.bash --post-renderer-args cm1 &> ${postrender_diff_reverse} || fail "\"helmfile diff\" shouldn't fail" | ||||||
|     diff -u  ${postrender_diff_out_file} ${postrender_diff_reverse} || fail "\"helmfile diff\" should be consistent" |     diff -u  ${postrender_diff_out_file} ${postrender_diff_reverse} || fail "\"helmfile diff\" should be consistent" | ||||||
|     echo code=$? |     echo code=$? | ||||||
| done | done | ||||||
|  | @ -37,7 +37,7 @@ test_start "postrender template" | ||||||
| info "Comparing postrender template output ${postrender_template_reverse} with ${postrender_case_output_dir}/result.yaml" | info "Comparing postrender template output ${postrender_template_reverse} with ${postrender_case_output_dir}/result.yaml" | ||||||
| for i in $(seq 10); do | for i in $(seq 10); do | ||||||
|     info "Comparing build/postrender-diff #$i" |     info "Comparing build/postrender-diff #$i" | ||||||
|     ${helmfile} -f ${postrender_case_input_dir}/${config_file} template --concurrency 1 --post-renderer ./add-cm1.bash &> ${postrender_template_reverse} || fail "\"helmfile template\" shouldn't fail" |     ${helmfile} -f ${postrender_case_input_dir}/${config_file} template --concurrency 1 --post-renderer ./add-cm.bash --post-renderer-args cm1 &> ${postrender_template_reverse} || fail "\"helmfile template\" shouldn't fail" | ||||||
|     diff -u  ${postrender_template_out_file} ${postrender_template_reverse} || fail "\"helmfile template\" should be consistent" |     diff -u  ${postrender_template_out_file} ${postrender_template_reverse} || fail "\"helmfile template\" should be consistent" | ||||||
|     echo code=$? |     echo code=$? | ||||||
| done | done | ||||||
|  |  | ||||||
|  | @ -1,13 +1,13 @@ | ||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
| 
 | configmap_name=$1 | ||||||
| cat $1 | cat | ||||||
| echo "---" | echo "---" | ||||||
| 
 | 
 | ||||||
| cat <<EOS | cat <<EOS | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ConfigMap | kind: ConfigMap | ||||||
| data: | data: | ||||||
|   one: ONE |   name: ${configmap_name}  | ||||||
| metadata: | metadata: | ||||||
|   name: cm1 |   name: ${configmap_name}  | ||||||
| EOS | EOS | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| cat $1 |  | ||||||
| echo "---" |  | ||||||
| 
 |  | ||||||
| cat <<EOS |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: ConfigMap |  | ||||||
| data: |  | ||||||
|   two: TWO |  | ||||||
| metadata: |  | ||||||
|   name: cm2 |  | ||||||
| EOS |  | ||||||
|  | @ -21,7 +21,9 @@ releases: | ||||||
|           namespace: {{`{{ .Release.Namespace }}`}} |           namespace: {{`{{ .Release.Namespace }}`}} | ||||||
|         data: |         data: | ||||||
|           bar: BAR |           bar: BAR | ||||||
|   postRenderer: ./add-cm2.bash |   postRenderer: ./add-cm.bash | ||||||
|  |   postRendererArgs:  | ||||||
|  |     - cm2 | ||||||
| - name: baz | - name: baz | ||||||
|   chart: ../../../charts/raw |   chart: ../../../charts/raw | ||||||
|   values: |   values: | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ helmfile-tests, cm2, ConfigMap (v1) has been added: | ||||||
| + apiVersion: v1 | + apiVersion: v1 | ||||||
| + kind: ConfigMap | + kind: ConfigMap | ||||||
| + data: | + data: | ||||||
| +   two: TWO | +   name: cm2  | ||||||
| + metadata: | + metadata: | ||||||
| +   name: cm2 | +   name: cm2 | ||||||
| helmfile-tests, foo-1, ConfigMap (v1) has been added: | helmfile-tests, foo-1, ConfigMap (v1) has been added: | ||||||
|  | @ -46,7 +46,7 @@ helmfile-tests, cm1, ConfigMap (v1) has been added: | ||||||
| + apiVersion: v1 | + apiVersion: v1 | ||||||
| + kind: ConfigMap | + kind: ConfigMap | ||||||
| + data: | + data: | ||||||
| +   one: ONE | +   name: cm1  | ||||||
| + metadata: | + metadata: | ||||||
| +   name: cm1 | +   name: cm1 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ helmfile-tests, cm2, ConfigMap (v1) has been added: | ||||||
| + apiVersion: v1 | + apiVersion: v1 | ||||||
| + kind: ConfigMap | + kind: ConfigMap | ||||||
| + data: | + data: | ||||||
| +   two: TWO | +   name: cm2  | ||||||
| + metadata: | + metadata: | ||||||
| +   name: cm2 | +   name: cm2 | ||||||
| helmfile-tests, foo-1, ConfigMap (v1) has been added: | helmfile-tests, foo-1, ConfigMap (v1) has been added: | ||||||
|  | @ -44,7 +44,7 @@ helmfile-tests, cm1, ConfigMap (v1) has been added: | ||||||
| + apiVersion: v1 | + apiVersion: v1 | ||||||
| + kind: ConfigMap | + kind: ConfigMap | ||||||
| + data: | + data: | ||||||
| +   one: ONE | +   name: cm1  | ||||||
| + metadata: | + metadata: | ||||||
| +   name: cm1 | +   name: cm1 | ||||||
| Comparing release=foo, chart=../../../charts/raw | Comparing release=foo, chart=../../../charts/raw | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ data: | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ConfigMap | kind: ConfigMap | ||||||
| data: | data: | ||||||
|   two: TWO |   name: cm2  | ||||||
| metadata: | metadata: | ||||||
|   name: cm2 |   name: cm2 | ||||||
| 
 | 
 | ||||||
|  | @ -32,7 +32,7 @@ data: | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ConfigMap | kind: ConfigMap | ||||||
| data: | data: | ||||||
|   one: ONE |   name: cm1  | ||||||
| metadata: | metadata: | ||||||
|   name: cm1 |   name: cm1 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ data: | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ConfigMap | kind: ConfigMap | ||||||
| data: | data: | ||||||
|   two: TWO |   name: cm2  | ||||||
| metadata: | metadata: | ||||||
|   name: cm2 |   name: cm2 | ||||||
| 
 | 
 | ||||||
|  | @ -33,7 +33,7 @@ data: | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ConfigMap | kind: ConfigMap | ||||||
| data: | data: | ||||||
|   one: ONE |   name: cm1  | ||||||
| metadata: | metadata: | ||||||
|   name: cm1 |   name: cm1 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue