Add option to suppress diff on apply (#1092)
* Add option to suppress diff on apply Add --supress-diff option on apply. Usable for fresh installs when a lot of output is produces by diff. Resolves #458 * fix tests for suppress-diff
This commit is contained in:
parent
757e748e3f
commit
05add478c1
8
main.go
8
main.go
|
|
@ -338,6 +338,10 @@ func main() {
|
||||||
Name: "suppress-secrets",
|
Name: "suppress-secrets",
|
||||||
Usage: "suppress secrets in the diff output. highly recommended to specify on CI/CD use-cases",
|
Usage: "suppress secrets in the diff output. highly recommended to specify on CI/CD use-cases",
|
||||||
},
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "suppress-diff",
|
||||||
|
Usage: "suppress diff in the output. Usable in new installs",
|
||||||
|
},
|
||||||
cli.BoolFlag{
|
cli.BoolFlag{
|
||||||
Name: "skip-deps",
|
Name: "skip-deps",
|
||||||
Usage: "skip running `helm repo update` and `helm dependency build`",
|
Usage: "skip running `helm repo update` and `helm dependency build`",
|
||||||
|
|
@ -538,6 +542,10 @@ func (c configImpl) SuppressSecrets() bool {
|
||||||
return c.c.Bool("suppress-secrets")
|
return c.c.Bool("suppress-secrets")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c configImpl) SuppressDiff() bool {
|
||||||
|
return c.c.Bool("suppress-diff")
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteConfig
|
// DeleteConfig
|
||||||
|
|
||||||
func (c configImpl) Purge() bool {
|
func (c configImpl) Purge() bool {
|
||||||
|
|
|
||||||
|
|
@ -701,7 +701,7 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, []error) {
|
||||||
|
|
||||||
// TODO Better way to detect diff on only filtered releases
|
// TODO Better way to detect diff on only filtered releases
|
||||||
{
|
{
|
||||||
changedReleases, planningErrs = st.DiffReleases(helm, c.Values(), c.Concurrency(), detailedExitCode, c.SuppressSecrets(), false, diffOpts)
|
changedReleases, planningErrs = st.DiffReleases(helm, c.Values(), c.Concurrency(), detailedExitCode, c.SuppressSecrets(), c.SuppressDiff(), false, diffOpts)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
deletingReleases, err = st.DetectReleasesToBeDeletedForSync(helm, st.Releases)
|
deletingReleases, err = st.DetectReleasesToBeDeletedForSync(helm, st.Releases)
|
||||||
|
|
|
||||||
|
|
@ -1895,6 +1895,7 @@ type applyConfig struct {
|
||||||
set []string
|
set []string
|
||||||
skipDeps bool
|
skipDeps bool
|
||||||
suppressSecrets bool
|
suppressSecrets bool
|
||||||
|
suppressDiff bool
|
||||||
noColor bool
|
noColor bool
|
||||||
context int
|
context int
|
||||||
concurrency int
|
concurrency int
|
||||||
|
|
@ -1922,6 +1923,10 @@ func (a applyConfig) SuppressSecrets() bool {
|
||||||
return a.suppressSecrets
|
return a.suppressSecrets
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a applyConfig) SuppressDiff() bool {
|
||||||
|
return a.suppressDiff
|
||||||
|
}
|
||||||
|
|
||||||
func (a applyConfig) NoColor() bool {
|
func (a applyConfig) NoColor() bool {
|
||||||
return a.noColor
|
return a.noColor
|
||||||
}
|
}
|
||||||
|
|
@ -2004,7 +2009,7 @@ func (helm *mockHelmExec) UpdateRepo() error {
|
||||||
func (helm *mockHelmExec) SyncRelease(context helmexec.HelmContext, name, chart string, flags ...string) error {
|
func (helm *mockHelmExec) SyncRelease(context helmexec.HelmContext, name, chart string, flags ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (helm *mockHelmExec) DiffRelease(context helmexec.HelmContext, name, chart string, flags ...string) error {
|
func (helm *mockHelmExec) DiffRelease(context helmexec.HelmContext, name, chart string, suppressDiff bool, flags ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (helm *mockHelmExec) ReleaseStatus(context helmexec.HelmContext, release string, flags ...string) error {
|
func (helm *mockHelmExec) ReleaseStatus(context helmexec.HelmContext, release string, flags ...string) error {
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ type ApplyConfigProvider interface {
|
||||||
SkipDeps() bool
|
SkipDeps() bool
|
||||||
|
|
||||||
SuppressSecrets() bool
|
SuppressSecrets() bool
|
||||||
|
SuppressDiff() bool
|
||||||
|
|
||||||
NoColor() bool
|
NoColor() bool
|
||||||
Context() int
|
Context() int
|
||||||
|
|
@ -69,6 +70,7 @@ type DiffConfigProvider interface {
|
||||||
SkipDeps() bool
|
SkipDeps() bool
|
||||||
|
|
||||||
SuppressSecrets() bool
|
SuppressSecrets() bool
|
||||||
|
SuppressDiff() bool
|
||||||
|
|
||||||
DetailedExitcode() bool
|
DetailedExitcode() bool
|
||||||
NoColor() bool
|
NoColor() bool
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ func (r *Run) Diff(c DiffConfigProvider) []error {
|
||||||
NoColor: c.NoColor(),
|
NoColor: c.NoColor(),
|
||||||
Set: c.Set(),
|
Set: c.Set(),
|
||||||
}
|
}
|
||||||
_, errs := st.DiffReleases(helm, c.Values(), c.Concurrency(), c.DetailedExitcode(), c.SuppressSecrets(), true, opts)
|
_, errs := st.DiffReleases(helm, c.Values(), c.Concurrency(), c.DetailedExitcode(), c.SuppressSecrets(), c.SuppressDiff(), true, opts)
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart string,
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (helm *Helm) DiffRelease(context helmexec.HelmContext, name, chart string, flags ...string) error {
|
func (helm *Helm) DiffRelease(context helmexec.HelmContext, name, chart string, suppressDiff bool, flags ...string) error {
|
||||||
if helm.DiffMutex != nil {
|
if helm.DiffMutex != nil {
|
||||||
helm.DiffMutex.Lock()
|
helm.DiffMutex.Lock()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,7 @@ func (helm *execer) TemplateRelease(name string, chart string, flags ...string)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (helm *execer) DiffRelease(context HelmContext, name, chart string, flags ...string) error {
|
func (helm *execer) DiffRelease(context HelmContext, name, chart string, suppressDiff bool, flags ...string) error {
|
||||||
helm.logger.Infof("Comparing release=%v, chart=%v", name, chart)
|
helm.logger.Infof("Comparing release=%v, chart=%v", name, chart)
|
||||||
preArgs := context.GetTillerlessArgs(helm)
|
preArgs := context.GetTillerlessArgs(helm)
|
||||||
env := context.getTillerlessEnv()
|
env := context.getTillerlessEnv()
|
||||||
|
|
@ -273,11 +273,13 @@ func (helm *execer) DiffRelease(context HelmContext, name, chart string, flags .
|
||||||
switch e := err.(type) {
|
switch e := err.(type) {
|
||||||
case ExitError:
|
case ExitError:
|
||||||
if e.ExitStatus() == 2 {
|
if e.ExitStatus() == 2 {
|
||||||
helm.write(out)
|
if !(suppressDiff) {
|
||||||
|
helm.write(out)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if !(suppressDiff) {
|
||||||
helm.write(out)
|
helm.write(out)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -246,7 +246,7 @@ func Test_DiffRelease(t *testing.T) {
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
logger := NewLogger(&buffer, "debug")
|
logger := NewLogger(&buffer, "debug")
|
||||||
helm := MockExecer(logger, "dev")
|
helm := MockExecer(logger, "dev")
|
||||||
helm.DiffRelease(HelmContext{}, "release", "chart", "--timeout 10", "--wait")
|
helm.DiffRelease(HelmContext{}, "release", "chart", false, "--timeout 10", "--wait")
|
||||||
expected := `Comparing release=release, chart=chart
|
expected := `Comparing release=release, chart=chart
|
||||||
exec: helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev
|
exec: helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev
|
||||||
exec: helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev:
|
exec: helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev:
|
||||||
|
|
@ -256,7 +256,7 @@ exec: helm diff upgrade --reset-values --allow-unreleased release chart --timeou
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.Reset()
|
buffer.Reset()
|
||||||
helm.DiffRelease(HelmContext{}, "release", "chart")
|
helm.DiffRelease(HelmContext{}, "release", "chart", false)
|
||||||
expected = `Comparing release=release, chart=chart
|
expected = `Comparing release=release, chart=chart
|
||||||
exec: helm diff upgrade --reset-values --allow-unreleased release chart --kube-context dev
|
exec: helm diff upgrade --reset-values --allow-unreleased release chart --kube-context dev
|
||||||
exec: helm diff upgrade --reset-values --allow-unreleased release chart --kube-context dev:
|
exec: helm diff upgrade --reset-values --allow-unreleased release chart --kube-context dev:
|
||||||
|
|
@ -270,7 +270,7 @@ func Test_DiffReleaseTillerless(t *testing.T) {
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
logger := NewLogger(&buffer, "debug")
|
logger := NewLogger(&buffer, "debug")
|
||||||
helm := MockExecer(logger, "dev")
|
helm := MockExecer(logger, "dev")
|
||||||
helm.DiffRelease(HelmContext{Tillerless: true}, "release", "chart", "--timeout 10", "--wait")
|
helm.DiffRelease(HelmContext{Tillerless: true}, "release", "chart", false, "--timeout 10", "--wait")
|
||||||
expected := `Comparing release=release, chart=chart
|
expected := `Comparing release=release, chart=chart
|
||||||
exec: helm tiller run -- helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev
|
exec: helm tiller run -- helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev
|
||||||
exec: helm tiller run -- helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev:
|
exec: helm tiller run -- helm diff upgrade --reset-values --allow-unreleased release chart --timeout 10 --wait --kube-context dev:
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ type Interface interface {
|
||||||
BuildDeps(name, chart string) error
|
BuildDeps(name, chart string) error
|
||||||
UpdateDeps(chart string) error
|
UpdateDeps(chart string) error
|
||||||
SyncRelease(context HelmContext, name, chart string, flags ...string) error
|
SyncRelease(context HelmContext, name, chart string, flags ...string) error
|
||||||
DiffRelease(context HelmContext, name, chart string, flags ...string) error
|
DiffRelease(context HelmContext, name, chart string, suppressDiff bool, flags ...string) error
|
||||||
TemplateRelease(name, chart string, flags ...string) error
|
TemplateRelease(name, chart string, flags ...string) error
|
||||||
Fetch(chart string, flags ...string) error
|
Fetch(chart string, flags ...string) error
|
||||||
Lint(name, chart string, flags ...string) error
|
Lint(name, chart string, flags ...string) error
|
||||||
|
|
|
||||||
|
|
@ -1094,7 +1094,7 @@ type DiffOpt interface{ Apply(*DiffOpts) }
|
||||||
|
|
||||||
// DiffReleases wrapper for executing helm diff on the releases
|
// DiffReleases wrapper for executing helm diff on the releases
|
||||||
// It returns releases that had any changes
|
// It returns releases that had any changes
|
||||||
func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []string, workerLimit int, detailedExitCode, suppressSecrets bool, triggerCleanupEvents bool, opt ...DiffOpt) ([]ReleaseSpec, []error) {
|
func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []string, workerLimit int, detailedExitCode, suppressSecrets bool, suppressDiff bool, triggerCleanupEvents bool, opt ...DiffOpt) ([]ReleaseSpec, []error) {
|
||||||
opts := &DiffOpts{}
|
opts := &DiffOpts{}
|
||||||
for _, o := range opt {
|
for _, o := range opt {
|
||||||
o.Apply(opts)
|
o.Apply(opts)
|
||||||
|
|
@ -1124,7 +1124,7 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st
|
||||||
for prep := range jobQueue {
|
for prep := range jobQueue {
|
||||||
flags := prep.flags
|
flags := prep.flags
|
||||||
release := prep.release
|
release := prep.release
|
||||||
if err := helm.DiffRelease(st.createHelmContext(release, workerIndex), release.Name, normalizeChart(st.basePath, release.Chart), flags...); err != nil {
|
if err := helm.DiffRelease(st.createHelmContext(release, workerIndex), release.Name, normalizeChart(st.basePath, release.Chart), suppressDiff, flags...); err != nil {
|
||||||
switch e := err.(type) {
|
switch e := err.(type) {
|
||||||
case helmexec.ExitError:
|
case helmexec.ExitError:
|
||||||
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood
|
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood
|
||||||
|
|
|
||||||
|
|
@ -1391,7 +1391,7 @@ func TestHelmState_DiffReleases(t *testing.T) {
|
||||||
logger: logger,
|
logger: logger,
|
||||||
valsRuntime: valsRuntime,
|
valsRuntime: valsRuntime,
|
||||||
}
|
}
|
||||||
_, errs := state.DiffReleases(tt.helm, []string{}, 1, false, false, false)
|
_, errs := state.DiffReleases(tt.helm, []string{}, 1, false, false, false, false)
|
||||||
if errs != nil && len(errs) > 0 {
|
if errs != nil && len(errs) > 0 {
|
||||||
t.Errorf("unexpected error: %v", errs)
|
t.Errorf("unexpected error: %v", errs)
|
||||||
}
|
}
|
||||||
|
|
@ -1556,7 +1556,7 @@ func TestHelmState_DiffReleasesCleanup(t *testing.T) {
|
||||||
`,
|
`,
|
||||||
})
|
})
|
||||||
state = injectFs(state, testfs)
|
state = injectFs(state, testfs)
|
||||||
if _, errs := state.DiffReleases(tt.helm, []string{}, 1, false, false, false); errs != nil && len(errs) > 0 {
|
if _, errs := state.DiffReleases(tt.helm, []string{}, 1, false, false, false, false); errs != nil && len(errs) > 0 {
|
||||||
t.Errorf("unexpected errors: %v", errs)
|
t.Errorf("unexpected errors: %v", errs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue