feat: add --take-ownership flag to apply and sync commands (#1863)
Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
		
							parent
							
								
									1944c2c893
								
							
						
					
					
						commit
						22ad21c1ae
					
				|  | @ -62,6 +62,7 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.BoolVar(&applyOptions.ShowSecrets, "show-secrets", false, "do not redact secret values in the diff output. should be used for debug purpose only") | ||||
| 	f.BoolVar(&applyOptions.NoHooks, "no-hooks", false, "do not diff changes made by hooks.") | ||||
| 	f.BoolVar(&applyOptions.HideNotes, "hide-notes", false, "add --hide-notes flag to helm") | ||||
| 	f.BoolVar(&applyOptions.TakeOwnership, "take-ownership", false, "add --take-ownership flag to helm") | ||||
| 	f.BoolVar(&applyOptions.SuppressDiff, "suppress-diff", false, "suppress diff in the output. Usable in new installs") | ||||
| 	f.BoolVar(&applyOptions.Wait, "wait", false, `Override helmDefaults.wait setting "helm upgrade --install --wait"`) | ||||
| 	f.BoolVar(&applyOptions.WaitForJobs, "wait-for-jobs", false, `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`) | ||||
|  |  | |||
|  | @ -42,6 +42,7 @@ func NewSyncCmd(globalCfg *config.GlobalImpl) *cobra.Command { | |||
| 	f.BoolVar(&syncOptions.IncludeNeeds, "include-needs", false, `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided`) | ||||
| 	f.BoolVar(&syncOptions.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(&syncOptions.HideNotes, "hide-notes", false, "add --hide-notes flag to helm") | ||||
| 	f.BoolVar(&syncOptions.TakeOwnership, "take-ownership", false, `add --take-ownership flag to helm`) | ||||
| 	f.BoolVar(&syncOptions.Wait, "wait", false, `Override helmDefaults.wait setting "helm upgrade --install --wait"`) | ||||
| 	f.BoolVar(&syncOptions.WaitForJobs, "wait-for-jobs", false, `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`) | ||||
| 	f.BoolVar(&syncOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`) | ||||
|  |  | |||
|  | @ -1550,6 +1550,7 @@ Do you really want to apply? | |||
| 					SkipSchemaValidation: c.SkipSchemaValidation(), | ||||
| 					SyncArgs:             c.SyncArgs(), | ||||
| 					HideNotes:            c.HideNotes(), | ||||
| 					TakeOwnership:        c.TakeOwnership(), | ||||
| 				} | ||||
| 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), syncOpts) | ||||
| 			})) | ||||
|  | @ -1945,6 +1946,7 @@ Do you really want to sync? | |||
| 					PostRendererArgs: c.PostRendererArgs(), | ||||
| 					SyncArgs:         c.SyncArgs(), | ||||
| 					HideNotes:        c.HideNotes(), | ||||
| 					TakeOwnership:    c.TakeOwnership(), | ||||
| 				} | ||||
| 				return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts) | ||||
| 			})) | ||||
|  |  | |||
|  | @ -2248,6 +2248,7 @@ type applyConfig struct { | |||
| 	suppressOutputLineRegex []string | ||||
| 	showOnly                []string | ||||
| 	hideNotes               bool | ||||
| 	takeOwnership           bool | ||||
| 
 | ||||
| 	// template-only options
 | ||||
| 	includeCRDs, skipTests       bool | ||||
|  | @ -2440,6 +2441,10 @@ func (a applyConfig) HideNotes() bool { | |||
| 	return a.hideNotes | ||||
| } | ||||
| 
 | ||||
| func (a applyConfig) TakeOwnership() bool { | ||||
| 	return a.takeOwnership | ||||
| } | ||||
| 
 | ||||
| type depsConfig struct { | ||||
| 	skipRepos              bool | ||||
| 	includeTransitiveNeeds bool | ||||
|  |  | |||
|  | @ -54,6 +54,7 @@ type ApplyConfigProvider interface { | |||
| 	SkipSchemaValidation() bool | ||||
| 	Cascade() string | ||||
| 	HideNotes() bool | ||||
| 	TakeOwnership() bool | ||||
| 	SuppressOutputLineRegex() []string | ||||
| 
 | ||||
| 	Values() []string | ||||
|  | @ -103,6 +104,7 @@ type SyncConfigProvider interface { | |||
| 	PostRenderer() string | ||||
| 	PostRendererArgs() []string | ||||
| 	HideNotes() bool | ||||
| 	TakeOwnership() bool | ||||
| 	Cascade() string | ||||
| 
 | ||||
| 	Values() []string | ||||
|  |  | |||
|  | @ -70,6 +70,9 @@ type ApplyOptions struct { | |||
| 	SyncArgs string | ||||
| 	// HideNotes is the hide notes flag
 | ||||
| 	HideNotes bool | ||||
| 
 | ||||
| 	// TakeOwnership is true if the ownership should be taken
 | ||||
| 	TakeOwnership bool | ||||
| } | ||||
| 
 | ||||
| // NewApply creates a new Apply
 | ||||
|  | @ -257,6 +260,12 @@ func (a *ApplyImpl) SyncArgs() string { | |||
| 	return a.ApplyOptions.SyncArgs | ||||
| } | ||||
| 
 | ||||
| // HideNotes returns the HideNotes.
 | ||||
| func (a *ApplyImpl) HideNotes() bool { | ||||
| 	return a.ApplyOptions.HideNotes | ||||
| } | ||||
| 
 | ||||
| // TakeOwnership returns the TakeOwnership.
 | ||||
| func (a *ApplyImpl) TakeOwnership() bool { | ||||
| 	return a.ApplyOptions.TakeOwnership | ||||
| } | ||||
|  |  | |||
|  | @ -38,6 +38,8 @@ type SyncOptions struct { | |||
| 	SyncArgs string | ||||
| 	// HideNotes is the hide notes flag
 | ||||
| 	HideNotes bool | ||||
| 	// TakeOwnership is the take ownership flag
 | ||||
| 	TakeOwnership bool | ||||
| } | ||||
| 
 | ||||
| // NewSyncOptions creates a new Apply
 | ||||
|  | @ -149,6 +151,12 @@ func (t *SyncImpl) SyncArgs() string { | |||
| 	return t.SyncOptions.SyncArgs | ||||
| } | ||||
| 
 | ||||
| // HideNotes returns the hide notes
 | ||||
| func (t *SyncImpl) HideNotes() bool { | ||||
| 	return t.SyncOptions.HideNotes | ||||
| } | ||||
| 
 | ||||
| // TakeOwnership returns the take ownership
 | ||||
| func (t *SyncImpl) TakeOwnership() bool { | ||||
| 	return t.SyncOptions.TakeOwnership | ||||
| } | ||||
|  |  | |||
|  | @ -148,6 +148,19 @@ func (st *HelmState) appendHideNotesFlags(flags []string, helm helmexec.Interfac | |||
| 	return flags | ||||
| } | ||||
| 
 | ||||
| // append take-ownership flags to helm flags
 | ||||
| func (st *HelmState) appendTakeOwnershipFlags(flags []string, helm helmexec.Interface, ops *SyncOpts) []string { | ||||
| 	// see https://github.com/helm/helm/releases/tag/v3.17.0
 | ||||
| 	if !helm.IsVersionAtLeast("3.17.0") { | ||||
| 		return flags | ||||
| 	} | ||||
| 	switch { | ||||
| 	case ops.HideNotes: | ||||
| 		flags = append(flags, "--take-ownership") | ||||
| 	} | ||||
| 	return flags | ||||
| } | ||||
| 
 | ||||
| // append show-only flags to helm flags
 | ||||
| func (st *HelmState) appendShowOnlyFlags(flags []string, showOnly []string) []string { | ||||
| 	showOnlyFlags := []string{} | ||||
|  |  | |||
|  | @ -321,3 +321,48 @@ func TestAppendHideNotesFlags(t *testing.T) { | |||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestAppendTakeOwnershipFlags(t *testing.T) { | ||||
| 	type args struct { | ||||
| 		flags    []string | ||||
| 		helm     helmexec.Interface | ||||
| 		helmSpec HelmSpec | ||||
| 		opt      *SyncOpts | ||||
| 		expected []string | ||||
| 	} | ||||
| 	tests := []struct { | ||||
| 		name string | ||||
| 		args args | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "no take-ownership when helm less than 3.17.0", | ||||
| 			args: args{ | ||||
| 				flags: []string{}, | ||||
| 				helm:  testutil.NewVersionHelmExec("3.16.0"), | ||||
| 				opt: &SyncOpts{ | ||||
| 					HideNotes: true, | ||||
| 				}, | ||||
| 				expected: []string{}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "hide-notes from cmd flag", | ||||
| 			args: args{ | ||||
| 				flags: []string{}, | ||||
| 				helm:  testutil.NewVersionHelmExec("3.17.0"), | ||||
| 				opt: &SyncOpts{ | ||||
| 					HideNotes: true, | ||||
| 				}, | ||||
| 				expected: []string{"--take-ownership"}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			st := &HelmState{} | ||||
| 			st.HelmDefaults = tt.args.helmSpec | ||||
| 			got := st.appendTakeOwnershipFlags(tt.args.flags, tt.args.helm, tt.args.opt) | ||||
| 			require.Equalf(t, tt.args.expected, got, "appendTakeOwnershipFlags() = %v, want %v", got, tt.args.expected) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -789,6 +789,7 @@ type SyncOpts struct { | |||
| 	PostRendererArgs     []string | ||||
| 	SyncArgs             string | ||||
| 	HideNotes            bool | ||||
| 	TakeOwnership        bool | ||||
| } | ||||
| 
 | ||||
| type SyncOpt interface{ Apply(*SyncOpts) } | ||||
|  | @ -2775,6 +2776,9 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp | |||
| 	// append hide-notes flag
 | ||||
| 	flags = st.appendHideNotesFlags(flags, helm, opt) | ||||
| 
 | ||||
| 	// append take-ownership flag
 | ||||
| 	flags = st.appendTakeOwnershipFlags(flags, helm, opt) | ||||
| 
 | ||||
| 	flags = st.appendExtraSyncFlags(flags, opt) | ||||
| 
 | ||||
| 	common, clean, err := st.namespaceAndValuesFlags(helm, release, workerIndex) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue