feat: add --take-ownership flag to helm diff and related config
Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
		
							parent
							
								
									6b5f1496a8
								
							
						
					
					
						commit
						286a99cd10
					
				|  | @ -52,6 +52,7 @@ func NewDiffCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.StringArrayVar(&diffOptions.Suppress, "suppress", nil, "suppress specified Kubernetes objects in the output. Can be provided multiple times. For example: --suppress KeycloakClient --suppress VaultSecret") | ||||
| 	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.TakeOwnership, "take-ownership", false, "add --take-ownership flag to helm") | ||||
| 	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"`) | ||||
| 	f.StringArrayVar(&diffOptions.SuppressOutputLineRegex, "suppress-output-line-regex", nil, "a list of regex patterns to suppress output lines from the diff output") | ||||
|  |  | |||
|  | @ -1390,6 +1390,7 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) { | |||
| 		PostRendererArgs:        c.PostRendererArgs(), | ||||
| 		SkipSchemaValidation:    c.SkipSchemaValidation(), | ||||
| 		SuppressOutputLineRegex: c.SuppressOutputLineRegex(), | ||||
| 		TakeOwnership:           c.TakeOwnership(), | ||||
| 	} | ||||
| 
 | ||||
| 	infoMsg, releasesToBeUpdated, releasesToBeDeleted, errs := r.diff(false, detailedExitCode, c, diffOpts) | ||||
|  | @ -1634,6 +1635,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) | |||
| 			PostRendererArgs:        c.PostRendererArgs(), | ||||
| 			SkipSchemaValidation:    c.SkipSchemaValidation(), | ||||
| 			SuppressOutputLineRegex: c.SuppressOutputLineRegex(), | ||||
| 			TakeOwnership:           c.TakeOwnership(), | ||||
| 		} | ||||
| 
 | ||||
| 		filtered := &Run{ | ||||
|  |  | |||
|  | @ -157,6 +157,7 @@ type DiffConfigProvider interface { | |||
| 	NoColor() bool | ||||
| 	Context() int | ||||
| 	DiffOutput() string | ||||
| 	TakeOwnership() bool | ||||
| 
 | ||||
| 	concurrencyConfig | ||||
| 	valuesControlMode | ||||
|  |  | |||
|  | @ -46,6 +46,7 @@ type diffConfig struct { | |||
| 	skipSchemaValidation    bool | ||||
| 	reuseValues             bool | ||||
| 	logger                  *zap.SugaredLogger | ||||
| 	takeOwnership           bool | ||||
| } | ||||
| 
 | ||||
| func (a diffConfig) Args() string { | ||||
|  | @ -183,6 +184,9 @@ func (a diffConfig) SkipSchemaValidation() bool { | |||
| func (a diffConfig) SuppressOutputLineRegex() []string { | ||||
| 	return a.suppressOutputLineRegex | ||||
| } | ||||
| func (a diffConfig) TakeOwnership() bool { | ||||
| 	return a.takeOwnership | ||||
| } | ||||
| 
 | ||||
| func TestDiff(t *testing.T) { | ||||
| 	type flags struct { | ||||
|  |  | |||
|  | @ -269,6 +269,7 @@ func (a *ApplyImpl) TakeOwnership() bool { | |||
| 	return a.ApplyOptions.TakeOwnership | ||||
| } | ||||
| 
 | ||||
| // SyncReleaseLabels returns the SyncReleaseLabels.
 | ||||
| func (a *ApplyImpl) SyncReleaseLabels() bool { | ||||
| 	return a.ApplyOptions.SyncReleaseLabels | ||||
| } | ||||
|  |  | |||
|  | @ -49,6 +49,8 @@ type DiffOptions struct { | |||
| 	// SuppressOutputLineRegex is a list of regexes to suppress output lines
 | ||||
| 	SuppressOutputLineRegex []string | ||||
| 	SkipSchemaValidation    bool | ||||
| 	// TakeOwnership is true if the ownership should be taken
 | ||||
| 	TakeOwnership bool | ||||
| } | ||||
| 
 | ||||
| // NewDiffOptions creates a new Apply
 | ||||
|  | @ -201,6 +203,12 @@ func (t *DiffImpl) SuppressOutputLineRegex() []string { | |||
| 	return t.DiffOptions.SuppressOutputLineRegex | ||||
| } | ||||
| 
 | ||||
| // SkipSchemaValidation returns the SkipSchemaValidation.
 | ||||
| func (t *DiffImpl) SkipSchemaValidation() bool { | ||||
| 	return t.DiffOptions.SkipSchemaValidation | ||||
| } | ||||
| 
 | ||||
| // TakeOwnership returns the TakeOwnership.
 | ||||
| func (t *DiffImpl) TakeOwnership() bool { | ||||
| 	return t.DiffOptions.TakeOwnership | ||||
| } | ||||
|  |  | |||
|  | @ -54,7 +54,7 @@ func formatLabels(labels map[string]string) string { | |||
| 
 | ||||
| // append labels flags to helm flags, starting from helm v3.13.0
 | ||||
| func (st *HelmState) appendLabelsFlags(flags []string, helm helmexec.Interface, release *ReleaseSpec, syncReleaseLabels bool) []string { | ||||
| 	if helm.IsVersionAtLeast("3.13.0") && (syncReleaseLabels || release.SyncReleaseLabels) { | ||||
| 	if helm.IsVersionAtLeast("3.13.0") && (syncReleaseLabels || st.HelmDefaults.SyncReleaseLabels || release.SyncReleaseLabels) { | ||||
| 		labels := formatLabels(release.Labels) | ||||
| 		if labels != "" { | ||||
| 			flags = append(flags, "--labels", labels) | ||||
|  |  | |||
|  | @ -209,6 +209,8 @@ type HelmSpec struct { | |||
| 	DeleteTimeout int `yaml:"deleteTimeout"` | ||||
| 	// SyncReleaseLabels is true if the release labels should be synced with the helmfile labels
 | ||||
| 	SyncReleaseLabels bool `yaml:"syncReleaseLabels"` | ||||
| 	// TakeOwnership is true if the helmfile should take ownership of the release
 | ||||
| 	TakeOwnership bool `yaml:"takeOwnership"` | ||||
| } | ||||
| 
 | ||||
| // RepositorySpec that defines values for a helm repo
 | ||||
|  | @ -413,6 +415,8 @@ type ReleaseSpec struct { | |||
| 	DeleteTimeout *int `yaml:"deleteTimeout,omitempty"` | ||||
| 	// SyncReleaseLabels is true if the release labels should be synced with the helmfile labels
 | ||||
| 	SyncReleaseLabels bool `yaml:"syncReleaseLabels"` | ||||
| 	// TakeOwnership is true if the release should take ownership of the resources
 | ||||
| 	TakeOwnership bool `yaml:"takeOwnership"` | ||||
| } | ||||
| 
 | ||||
| func (r *Inherits) UnmarshalYAML(unmarshal func(any) error) error { | ||||
|  | @ -2040,6 +2044,7 @@ type DiffOpts struct { | |||
| 	PostRendererArgs        []string | ||||
| 	SuppressOutputLineRegex []string | ||||
| 	SkipSchemaValidation    bool | ||||
| 	TakeOwnership           bool | ||||
| } | ||||
| 
 | ||||
| func (o *DiffOpts) Apply(opts *DiffOpts) { | ||||
|  | @ -2969,6 +2974,19 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec, | |||
| 		flags = st.appendSuppressOutputLineRegexFlags(flags, release, suppressOutputLineRegex) | ||||
| 	} | ||||
| 
 | ||||
| 	if opt.TakeOwnership || st.HelmDefaults.TakeOwnership || release.TakeOwnership { | ||||
| 		diffVersion, err := helmexec.GetPluginVersion("diff", settings.PluginsDirectory) | ||||
| 		if err != nil { | ||||
| 			return nil, nil, err | ||||
| 		} | ||||
| 		dv, _ := semver.NewVersion("v3.11.0") | ||||
| 
 | ||||
| 		if diffVersion.LessThan(dv) { | ||||
| 			return nil, nil, fmt.Errorf("take-ownership is not supported by helm-diff plugin version %s, please use at least v3.11.0", diffVersion) | ||||
| 		} | ||||
| 		flags = append(flags, "--take-ownership") | ||||
| 	} | ||||
| 
 | ||||
| 	common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex) | ||||
| 	if err != nil { | ||||
| 		return nil, files, err | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue