Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reset values flag #602

Merged
merged 6 commits into from
Jan 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command {
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"`)
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.StringVar(&applyOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)

return cmd
Expand Down
1 change: 1 addition & 0 deletions cmd/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ func NewDiffCmd(globalCfg *config.GlobalImpl) *cobra.Command {
f.BoolVar(&diffOptions.SuppressSecrets, "suppress-secrets", false, "suppress secrets in the output. highly recommended to specify on CI/CD use-cases")
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"`)

return cmd
}
1 change: 1 addition & 0 deletions cmd/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ func NewSyncCmd(globalCfg *config.GlobalImpl) *cobra.Command {
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"`)
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"`)

return cmd
Expand Down
3 changes: 2 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ helmDefaults:
# When set to `true`, skips running `helm dep up` and `helm dep build` on this release's chart.
# Useful when the chart is broken, like seen in https://github.com/roboll/helmfile/issues/1547
skipDeps: false
# if set to true, reuses the last release's values and merges them with ones provided in helmfile.
# If set to true, reuses the last release's values and merges them with ones provided in helmfile.
# This attribute, can be overriden in CLI with --reset/reuse-values flag of apply/sync/diff subcommands
reuseValues: false
# propagate `--post-renderer` to helmv3 template and helm install
postRenderer: "path/to/postRenderer"
Expand Down
4 changes: 4 additions & 0 deletions pkg/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -1326,6 +1326,7 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) {
SkipCleanup: c.RetainValuesFiles() || c.SkipCleanup(),
SkipDiffOnInstall: c.SkipDiffOnInstall(),
ReuseValues: c.ReuseValues(),
ResetValues: c.ResetValues(),
}

infoMsg, releasesToBeUpdated, releasesToBeDeleted, errs := r.diff(false, detailedExitCode, c, diffOpts)
Expand Down Expand Up @@ -1437,6 +1438,7 @@ Do you really want to apply?
Wait: c.Wait(),
WaitForJobs: c.WaitForJobs(),
ReuseValues: c.ReuseValues(),
ResetValues: c.ResetValues(),
}
return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), syncOpts)
}))
Expand Down Expand Up @@ -1558,6 +1560,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error)
Set: c.Set(),
SkipDiffOnInstall: c.SkipDiffOnInstall(),
ReuseValues: c.ReuseValues(),
ResetValues: c.ResetValues(),
}

filtered := &Run{
Expand Down Expand Up @@ -1823,6 +1826,7 @@ Do you really want to sync?
Wait: c.Wait(),
WaitForJobs: c.WaitForJobs(),
ReuseValues: c.ReuseValues(),
ResetValues: c.ResetValues(),
}
return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts)
}))
Expand Down
4 changes: 4 additions & 0 deletions pkg/app/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2479,6 +2479,10 @@ func (a applyConfig) ReuseValues() bool {
return a.reuseValues
}

func (a applyConfig) ResetValues() bool {
return !a.reuseValues
}

func (a applyConfig) PostRenderer() string {
return a.postRenderer
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/app/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,8 @@ type InitConfigProvider interface {
Force() bool
}

// when enable reuse-values, reuse the last release's values and merge in any overrides values.
// reset/reuse values helm cli flags handling for apply/sync/diff
type valuesControlMode interface {
ReuseValues() bool
ResetValues() bool
}
4 changes: 4 additions & 0 deletions pkg/app/diff_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,10 @@ func (a diffConfig) ReuseValues() bool {
return a.reuseValues
}

func (a diffConfig) ResetValues() bool {
return !a.reuseValues
}

func TestDiff(t *testing.T) {
type flags struct {
skipNeeds bool
Expand Down
11 changes: 10 additions & 1 deletion pkg/config/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ type ApplyOptions struct {
WaitForJobs bool
// ReuseValues is true if the helm command should reuse the values
ReuseValues bool
// ResetValues is true if helm command should reset values to charts' default
ResetValues bool
// Propagate '--post-renderer' to helmv3 template and helm install
PostRenderer string
}
Expand Down Expand Up @@ -193,7 +195,14 @@ func (a *ApplyImpl) WaitForJobs() bool {

// ReuseValues returns the ReuseValues.
func (a *ApplyImpl) ReuseValues() bool {
return a.ApplyOptions.ReuseValues
if !a.ResetValues() {
return a.ApplyOptions.ReuseValues
}
return false
}

func (a *ApplyImpl) ResetValues() bool {
return a.ApplyOptions.ResetValues
}

// PostRenderer returns the PostRenderer.
Expand Down
11 changes: 10 additions & 1 deletion pkg/config/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ type DiffOptions struct {
Output string
// ReuseValues is true if the helm command should reuse the values
ReuseValues bool
// ResetValues is true if helm command should reset values to charts' default
ResetValues bool
}

// NewDiffOptions creates a new Apply
Expand Down Expand Up @@ -160,5 +162,12 @@ func (t *DiffImpl) SuppressSecrets() bool {

// ReuseValues returns the ReuseValues.
func (t *DiffImpl) ReuseValues() bool {
return t.DiffOptions.ReuseValues
if !t.ResetValues() {
return t.DiffOptions.ReuseValues
}
return false
}

func (t *DiffImpl) ResetValues() bool {
return t.DiffOptions.ResetValues
}
10 changes: 9 additions & 1 deletion pkg/config/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ type SyncOptions struct {
WaitForJobs bool
// ReuseValues is true if the helm command should reuse the values
ReuseValues bool
// ResetValues is true if helm command should reset values to charts' default
ResetValues bool
// Propagate '--post-renderer' to helmv3 template and helm install
PostRenderer string
}
Expand Down Expand Up @@ -110,7 +112,13 @@ func (t *SyncImpl) WaitForJobs() bool {

// ReuseValues returns the ReuseValues.
func (t *SyncImpl) ReuseValues() bool {
return t.SyncOptions.ReuseValues
if !t.ResetValues() {
return t.SyncOptions.ReuseValues
}
return false
}
yxxhero marked this conversation as resolved.
Show resolved Hide resolved
func (t *SyncImpl) ResetValues() bool {
return t.SyncOptions.ResetValues
}

// PostRenderer returns the PostRenderer.
Expand Down
24 changes: 14 additions & 10 deletions pkg/state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -619,11 +619,7 @@ func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValu
flags = append(flags, "--wait-for-jobs")
}

if opts.ReuseValues || st.HelmDefaults.ReuseValues {
flags = append(flags, "--reuse-values")
} else {
flags = append(flags, "--reset-values")
}
flags = st.appendValuesControlModeFlag(flags, opts.ReuseValues, opts.ResetValues)

if len(errs) > 0 {
results <- syncPrepareResult{errors: errs, files: files}
Expand Down Expand Up @@ -702,6 +698,7 @@ type SyncOpts struct {
Wait bool
WaitForJobs bool
ReuseValues bool
ResetValues bool
}

type SyncOpt interface{ Apply(*SyncOpts) }
Expand Down Expand Up @@ -1706,11 +1703,7 @@ func (st *HelmState) commonDiffFlags(detailedExitCode bool, includeTests bool, s
flags = append(flags, "--output", opt.Output)
}

if opt.ReuseValues || st.HelmDefaults.ReuseValues {
flags = append(flags, "--reuse-values")
} else {
flags = append(flags, "--reset-values")
}
flags = st.appendValuesControlModeFlag(flags, opt.ReuseValues, opt.ResetValues)

if opt.Set != nil {
for _, s := range opt.Set {
Expand Down Expand Up @@ -1897,6 +1890,7 @@ type DiffOpts struct {
SkipCleanup bool
SkipDiffOnInstall bool
ReuseValues bool
ResetValues bool
}

func (o *DiffOpts) Apply(opts *DiffOpts) {
Expand Down Expand Up @@ -2633,6 +2627,16 @@ func (st *HelmState) chartVersionFlags(release *ReleaseSpec) []string {
return flags
}

func (st *HelmState) appendValuesControlModeFlag(flags []string, reuseValues bool, resetValues bool) []string {
if !resetValues && (st.HelmDefaults.ReuseValues || reuseValues) {
flags = append(flags, "--reuse-values")
} else {
flags = append(flags, "--reset-values")
}

return flags
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add unittest for the func. @kkoralsky


func (st *HelmState) appendApiVersionsFlags(flags []string, r *ReleaseSpec) []string {
if len(r.ApiVersions) != 0 {
for _, a := range r.ApiVersions {
Expand Down
60 changes: 60 additions & 0 deletions pkg/state/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2729,6 +2729,36 @@ func TestDiffpareSyncReleases(t *testing.T) {
ReuseValues: true,
},
},
{
name: "force-reset-values",
flags: []string{"--reset-values"},
diffOptions: &DiffOpts{
ResetValues: true,
},
helmDefaults: &HelmSpec{
ReuseValues: true,
},
},
{
name: "both-reset-reuse-values",
flags: []string{"--reset-values"},
diffOptions: &DiffOpts{
ReuseValues: true,
ResetValues: true,
},
helmDefaults: &HelmSpec{},
},
{
name: "both-reset-reuse-default-reuse-values",
flags: []string{"--reset-values"},
diffOptions: &DiffOpts{
ReuseValues: true,
ResetValues: true,
},
helmDefaults: &HelmSpec{
ReuseValues: true,
},
},
}

for _, tt := range tests {
Expand Down Expand Up @@ -2789,6 +2819,36 @@ func TestPrepareSyncReleases(t *testing.T) {
ReuseValues: true,
},
},
{
name: "force-reset-values",
flags: []string{"--reset-values"},
syncOptions: &SyncOpts{
ResetValues: true,
},
helmDefaults: &HelmSpec{
ReuseValues: true,
},
},
kkoralsky marked this conversation as resolved.
Show resolved Hide resolved
{
name: "both-reset-reuse-values",
flags: []string{"--reset-values"},
syncOptions: &SyncOpts{
ReuseValues: true,
ResetValues: true,
},
helmDefaults: &HelmSpec{},
},
{
name: "both-reset-reuse-default-reuse-values",
flags: []string{"--reset-values"},
syncOptions: &SyncOpts{
ReuseValues: true,
ResetValues: true,
},
helmDefaults: &HelmSpec{
ReuseValues: true,
},
},
}

for _, tt := range tests {
Expand Down