diff --git a/pkg/app/app.go b/pkg/app/app.go index cc7d87cb..a4becfc2 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -1322,7 +1322,7 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) { st := r.state helm := r.helm - helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) + helm.SetExtraArgs(GetArgs(c.Args(), r.state)...) selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, c.IncludeTransitiveNeeds()) if err != nil { @@ -1368,21 +1368,15 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) { SkipDiffOnInstall: c.SkipDiffOnInstall(), ReuseValues: c.ReuseValues(), ResetValues: c.ResetValues(), + DiffArgs: c.DiffArgs(), PostRenderer: c.PostRenderer(), } - // join --args and --diff-args together to one string. - args := strings.Join([]string{c.Args(), c.DiffArgs()}, " ") - argsOpts := &argparser.GetArgsOptions{WithDiffArgs: true} - helm.SetExtraArgs(argparser.GetArgs(args, r.state, argsOpts)...) - infoMsg, releasesToBeUpdated, releasesToBeDeleted, errs := r.diff(false, detailedExitCode, c, diffOpts) if len(errs) > 0 { return false, false, errs } - helm.SetExtraArgs() - var toDelete []state.ReleaseSpec for _, r := range releasesToBeDeleted { toDelete = append(toDelete, r) @@ -1570,7 +1564,7 @@ Do you really want to delete? `, strings.Join(names, "\n")) interactive := c.Interactive() if !interactive || interactive && r.askForConfirmation(msg) { - r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) + r.helm.SetExtraArgs(GetArgs(c.Args(), r.state)...) if len(releasesToDelete) > 0 { _, deletionErrs := withDAG(st, helm, a.Logger, state.PlanOptions{SelectedReleases: toDelete, Reverse: true, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { @@ -1595,10 +1589,6 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) ok, errs := a.withNeeds(r, c, true, func(st *state.HelmState) []error { helm := r.helm - args := strings.Join([]string{c.Args(), c.DiffArgs()}, " ") - argsOpts := &argparser.GetArgsOptions{WithDiffArgs: true} - helm.SetExtraArgs(argparser.GetArgs(args, r.state, argsOpts)...) - var errs []error opts := &state.DiffOpts{ @@ -1607,6 +1597,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) Color: c.Color(), NoColor: c.NoColor(), Set: c.Set(), + DiffArgs: c.DiffArgs(), SkipDiffOnInstall: c.SkipDiffOnInstall(), ReuseValues: c.ReuseValues(), ResetValues: c.ResetValues(), @@ -1621,7 +1612,6 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) } infoMsg, updated, deleted, errs = filtered.diff(true, c.DetailedExitcode(), c, opts) - helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, argsOpts)...) return errs }) @@ -1634,7 +1624,7 @@ func (a *App) lint(r *Run, c LintConfigProvider) (bool, []error, []error) { ok, errs := a.withNeeds(r, c, false, func(st *state.HelmState) []error { helm := r.helm - args := argparser.GetArgs(c.Args(), st, nil) + args := GetArgs(c.Args(), st) // Reset the extra args if already set, not to break `helm fetch` by adding the args intended for `lint` helm.SetExtraArgs() @@ -1695,7 +1685,7 @@ func (a *App) status(r *Run, c StatusesConfigProvider) (bool, []error) { // Traverse DAG of all the releases so that we don't suffer from false-positive missing dependencies st.Releases = allReleases - args := argparser.GetArgs(c.Args(), st, nil) + args := GetArgs(c.Args(), st) // Reset the extra args if already set, not to break `helm fetch` by adding the args intended for `lint` helm.SetExtraArgs() @@ -1828,7 +1818,7 @@ Do you really want to sync? var errs []error - r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) + r.helm.SetExtraArgs(GetArgs(c.Args(), r.state)...) // Traverse DAG of all the releases so that we don't suffer from false-positive missing dependencies st.Releases = selectedAndNeededReleases @@ -1895,7 +1885,7 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) { return a.withNeeds(r, c, false, func(st *state.HelmState) []error { helm := r.helm - args := argparser.GetArgs(c.Args(), st, nil) + args := GetArgs(c.Args(), st) // Reset the extra args if already set, not to break `helm fetch` by adding the args intended for `lint` helm.SetExtraArgs() @@ -2018,7 +2008,7 @@ func (a *App) test(r *Run, c TestConfigProvider) []error { // with conditions and selectors st.Releases = toTest - r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) + r.helm.SetExtraArgs(GetArgs(c.Args(), r.state)...) return st.TestReleases(r.helm, cleanup, timeout, concurrency, state.Logs(c.Logs())) } @@ -2223,3 +2213,18 @@ func (a *App) CleanCacheDir(c CacheConfigProvider) error { return nil } + +func GetArgs(args string, state *state.HelmState) []string { + baseArgs := []string{} + stateArgs := []string{} + if len(args) > 0 { + baseArgs = argparser.CollectArgs(args) + } + + if len(state.HelmDefaults.Args) > 0 { + stateArgs = argparser.CollectArgs(strings.Join(state.HelmDefaults.Args, " ")) + } + state.HelmDefaults.Args = append(baseArgs, stateArgs...) + + return state.HelmDefaults.Args +} diff --git a/pkg/app/app_test.go b/pkg/app/app_test.go index d0e5746c..99f200e2 100644 --- a/pkg/app/app_test.go +++ b/pkg/app/app_test.go @@ -17,6 +17,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/helmfile/vals" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.uber.org/zap" "helm.sh/helm/v3/pkg/chart" @@ -4269,3 +4270,42 @@ func location() string { _, fn, line, _ := goruntime.Caller(1) return fmt.Sprintf("%s:%d", filepath.Base(fn), line) } + +func TestGetArgs(t *testing.T) { + tests := []struct { + args string + expected string + defaultArgs []string + }{ + { + args: "-f a.yaml -f b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false", + defaultArgs: []string{"--recreate-pods", "--force"}, + expected: "-f a.yaml -f b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false --recreate-pods --force", + }, + { + args: "-e a.yaml -d b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false", + defaultArgs: []string{"-q www", "-w"}, + expected: "-e a.yaml -d b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false -q www -w", + }, + { + args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false", + expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false", + }, + { + args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true", + defaultArgs: []string{"--recreate-pods", "--force"}, + expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true --recreate-pods --force", + }, + } + for _, test := range tests { + Helmdefaults := state.HelmSpec{KubeContext: "test", Args: test.defaultArgs} + testState := &state.HelmState{ + ReleaseSetSpec: state.ReleaseSetSpec{ + HelmDefaults: Helmdefaults, + }, + } + receivedArgs := GetArgs(test.args, testState) + + require.Equalf(t, test.expected, strings.Join(receivedArgs, " "), "expected args %s, received args %s", test.expected, strings.Join(receivedArgs, " ")) + } +} diff --git a/pkg/app/run.go b/pkg/app/run.go index e9c277ca..6a184aa6 100644 --- a/pkg/app/run.go +++ b/pkg/app/run.go @@ -6,7 +6,6 @@ import ( "sort" "strings" - "github.com/helmfile/helmfile/pkg/argparser" "github.com/helmfile/helmfile/pkg/helmexec" "github.com/helmfile/helmfile/pkg/state" ) @@ -105,13 +104,13 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare } func (r *Run) Deps(c DepsConfigProvider) []error { - r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) + r.helm.SetExtraArgs(GetArgs(c.Args(), r.state)...) return r.state.UpdateDeps(r.helm, c.IncludeTransitiveNeeds()) } func (r *Run) Repos(c ReposConfigProvider) error { - r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...) + r.helm.SetExtraArgs(GetArgs(c.Args(), r.state)...) return r.ctx.SyncReposOnce(r.state, r.helm) } diff --git a/pkg/argparser/args.go b/pkg/argparser/args.go index ca10bc86..5ec2105a 100644 --- a/pkg/argparser/args.go +++ b/pkg/argparser/args.go @@ -3,8 +3,6 @@ package argparser import ( "fmt" "strings" - - "github.com/helmfile/helmfile/pkg/state" ) type keyVal struct { @@ -16,9 +14,6 @@ type argMap struct { m map[string][]*keyVal flags []string } -type GetArgsOptions struct { - WithDiffArgs bool -} // isNewFlag checks if the given arg is a new flag func isNewFlag(flag string) bool { @@ -86,23 +81,10 @@ func analyzeArgs(am *argMap, args string) { } } -func GetArgs(args string, state *state.HelmState, opts *GetArgsOptions) []string { +func CollectArgs(args string) []string { argsMap := newArgMap() - - if len(args) > 0 { - analyzeArgs(argsMap, args) - } - - if len(state.HelmDefaults.Args) > 0 { - analyzeArgs(argsMap, strings.Join(state.HelmDefaults.Args, " ")) - } - - if len(state.HelmDefaults.DiffArgs) > 0 && opts != nil && opts.WithDiffArgs { - analyzeArgs(argsMap, strings.Join(state.HelmDefaults.DiffArgs, " ")) - } - + analyzeArgs(argsMap, args) var argArr []string - for _, flag := range argsMap.flags { val := argsMap.m[flag] @@ -118,8 +100,5 @@ func GetArgs(args string, state *state.HelmState, opts *GetArgsOptions) []string } } } - - state.HelmDefaults.Args = argArr - - return state.HelmDefaults.Args + return argArr } diff --git a/pkg/argparser/args_test.go b/pkg/argparser/args_test.go index ec55de4c..89238019 100644 --- a/pkg/argparser/args_test.go +++ b/pkg/argparser/args_test.go @@ -1,61 +1,11 @@ package argparser import ( - "strings" "testing" "github.com/stretchr/testify/require" - - "github.com/helmfile/helmfile/pkg/state" ) -// TestGetArgs tests the GetArgs function -func TestGetArgs(t *testing.T) { - tests := []struct { - args string - expected string - defaultArgs []string - defaultDiffArgs []string - opts *GetArgsOptions - }{ - { - args: "-f a.yaml -f b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false", - defaultArgs: []string{"--recreate-pods", "--force"}, - defaultDiffArgs: []string{"--suppress", "Deployment"}, - opts: &GetArgsOptions{WithDiffArgs: true}, - expected: "-f a.yaml -f b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false --recreate-pods --force --suppress Deployment", - }, - { - args: "-e a.yaml -d b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false", - defaultArgs: []string{"-q www", "-w"}, - defaultDiffArgs: []string{}, - expected: "-e a.yaml -d b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false -q www -w", - }, - { - args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false", - expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false", - }, - { - args: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true", - defaultArgs: []string{"--recreate-pods", "--force"}, - defaultDiffArgs: []string{"--suppress", "Deployment"}, - opts: &GetArgsOptions{}, - expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true --recreate-pods --force", - }, - } - for _, test := range tests { - Helmdefaults := state.HelmSpec{KubeContext: "test", Args: test.defaultArgs, DiffArgs: test.defaultDiffArgs} - testState := &state.HelmState{ - ReleaseSetSpec: state.ReleaseSetSpec{ - HelmDefaults: Helmdefaults, - }, - } - receivedArgs := GetArgs(test.args, testState, test.opts) - - require.Equalf(t, test.expected, strings.Join(receivedArgs, " "), "expected args %s, received args %s", test.expected, strings.Join(receivedArgs, " ")) - } -} - // TestIsNewFlag tests the isNewFlag function func TestIsNewFlag(t *testing.T) { tests := []struct { diff --git a/pkg/state/state.go b/pkg/state/state.go index 14e6d79c..8c3a196a 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -25,6 +25,7 @@ import ( "go.uber.org/zap" "helm.sh/helm/v3/pkg/cli" + "github.com/helmfile/helmfile/pkg/argparser" "github.com/helmfile/helmfile/pkg/environment" "github.com/helmfile/helmfile/pkg/event" "github.com/helmfile/helmfile/pkg/filesystem" @@ -2446,6 +2447,16 @@ func (st *HelmState) appendConnectionFlags(flags []string, release *ReleaseSpec) return flags } +func (st *HelmState) appendExtraDiffFlags(flags []string, opt *DiffOpts) []string { + switch { + case opt != nil && opt.DiffArgs != "": + flags = append(flags, argparser.CollectArgs(opt.DiffArgs)...) + case st.HelmDefaults.DiffArgs != nil: + flags = append(flags, argparser.CollectArgs(strings.Join(st.HelmDefaults.DiffArgs, " "))...) + } + return flags +} + // appendKeyringFlags append all the helm command-line flags related to keyring func (st *HelmState) appendKeyringFlags(flags []string, release *ReleaseSpec) []string { switch { @@ -2646,6 +2657,8 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec, if err != nil { return nil, files, err } + flags = st.appendExtraDiffFlags(flags, opt) + return append(flags, common...), files, nil } diff --git a/test/integration/run.sh b/test/integration/run.sh index 99c4b85c..52800b35 100755 --- a/test/integration/run.sh +++ b/test/integration/run.sh @@ -76,12 +76,13 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes # TEST CASES---------------------------------------------------------------------------------------------------------- +. ${dir}/test-cases/happypath.sh . ${dir}/test-cases/chartify-with-non-chart-dir.sh +. ${dir}/test-cases/diff-args.sh . ${dir}/test-cases/helmfile-double-fetch.sh . ${dir}/test-cases/skip-diff-output.sh . ${dir}/test-cases/v1-subhelmfile-multi-bases-with-array-values.sh . ${dir}/test-cases/kustomized-fetch.sh -. ${dir}/test-cases/happypath.sh . ${dir}/test-cases/regression.sh . ${dir}/test-cases/secretssops.sh . ${dir}/test-cases/yaml-overwrite.sh diff --git a/test/integration/test-cases/cli-overwrite-environment-values.sh b/test/integration/test-cases/cli-overwrite-environment-values.sh index d06071ce..2835b849 100644 --- a/test/integration/test-cases/cli-overwrite-environment-values.sh +++ b/test/integration/test-cases/cli-overwrite-environment-values.sh @@ -1,5 +1,5 @@ -cli-overwrite-environment-values_input_dir="${cases_dir}/cli-overwrite-environment-values/input" -cli-overwrite-environment-values_output_dir="${cases_dir}/cli-overwrite-environment-values/output" +cli_overwrite_environment_values_input_dir="${cases_dir}/cli-overwrite-environment-values/input" +cli_overwrite_environment_values_output_dir="${cases_dir}/cli-overwrite-environment-values/output" cli_overwrite_environment_values_tmp=$(mktemp -d) cli_overwrite_environment_values_reverse=${cli_overwrite_environment_values_tmp}/cli.environment.override.build.yaml @@ -8,21 +8,21 @@ case_title="cli overwrite environment values" if [[ ${HELMFILE_V1MODE} = true ]]; then test_start "$case_title for v1" - info "Comparing ${case_title} for v1 output ${cli_overwrite_environment_values_reverse} with ${cli-overwrite-environment-values_output_dir}/overwritten.yaml" + info "Comparing ${case_title} for v1 output ${cli_overwrite_environment_values_reverse} with ${cli_overwrite_environment_values_output_dir}/overwritten.yaml" for i in $(seq 10); do info "Comparing build/cli-overwrite-environment-values #$i" - ${helmfile} -f ${cli-overwrite-environment-values_input_dir}/input_v1.yaml.gotmpl template --state-values-set ns=test3 > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail" - diff -u ${cli-overwrite-environment-values_output_dir}/output_v1.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent" + ${helmfile} -f ${cli_overwrite_environment_values_input_dir}/input_v1.yaml.gotmpl template --state-values-set ns=test3 > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail" + diff -u ${cli_overwrite_environment_values_output_dir}/output_v1.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent" echo code=$? done test_pass "cli overwrite environment values for v1" else test_start "${case_title}" - info "Comparing ${case_title} output ${cli_overwrite_environment_values_reverse} with ${cli-overwrite-environment-values_output_dir}/overwritten.yaml" + info "Comparing ${case_title} output ${cli_overwrite_environment_values_reverse} with ${cli_overwrite_environment_values_output_dir}/overwritten.yaml" for i in $(seq 10); do info "Comparing build/cli-overwrite-environment-values #$i" - ${helmfile} -f ${cli-overwrite-environment-values_input_dir}/input_v1.yaml.gotmpl template --state-values-set ns=test3 > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail" - diff -u ${cli-overwrite-environment-values_output_dir}/output_v1.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent" + ${helmfile} -f ${cli_overwrite_environment_values_input_dir}/input_v1.yaml.gotmpl template --state-values-set ns=test3 > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail" + diff -u ${cli_overwrite_environment_values_output_dir}/output_v1.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent" echo code=$? done test_pass "${case_title}" diff --git a/test/integration/test-cases/cli-overwrite-environment-values/input/config.yaml b/test/integration/test-cases/cli-overwrite-environment-values/input/config.yaml deleted file mode 100644 index 117ef847..00000000 --- a/test/integration/test-cases/cli-overwrite-environment-values/input/config.yaml +++ /dev/null @@ -1,5 +0,0 @@ -chartifyTempDir: environment_overwrite_values -helmfileArgs: -- template -- --state-values-set -- ns=test3 \ No newline at end of file diff --git a/test/integration/test-cases/diff-args.sh b/test/integration/test-cases/diff-args.sh new file mode 100644 index 00000000..834c23ed --- /dev/null +++ b/test/integration/test-cases/diff-args.sh @@ -0,0 +1,28 @@ +diff_args_input_dir="${cases_dir}/diff-args/input" +diff_args_output_dir="${cases_dir}/diff-args/output" + +diff_args_tmp=$(mktemp -d) +diff_args_reverse=${diff_args_tmp}/diff.args.build.yaml + +case_title="diff args" +diff_out_file=${diff_args_output_dir}/diff +apply_out_file=${diff_args_output_dir}/apply +if [[ $EXTRA_HELMFILE_FLAGS == *--enable-live-output* ]]; then + apply_out_file=${diff_args_output_dir}/apply-live + diff_out_file=${diff_args_output_dir}/diff-live +fi + +test_start "$case_title" +info "Comparing ${case_title} diff for output ${diff_args_reverse} with ${diff_out_file}" +for i in $(seq 10); do + info "Comparing diff-args diff log #$i" + ${helmfile} -f ${diff_args_input_dir}/helmfile.yaml diff > ${diff_args_reverse} || fail "\"helmfile diff\" shouldn't fail" + diff -u ${diff_out_file} ${diff_args_reverse} || fail "\"helmfile diff\" should be consistent" + echo code=$? +done +info "Comparing ${case_title} apply for output ${diff_args_reverse} with ${apply_out_file}" +${helmfile} -f ${diff_args_input_dir}/helmfile.yaml apply | grep -vE "^(LAST DEPLOYED|installed)" > ${diff_args_reverse} || fail "\"helmfile apply\" shouldn't fail" +diff -u ${apply_out_file} ${diff_args_reverse} || fail "\"helmfile apply\" should be consistent" +echo "clean up diff args resources" +${helmfile} -f ${diff_args_input_dir}/helmfile.yaml destroy || fail "\"helmfile destroy\" shouldn't fail" +test_pass "$case_title" \ No newline at end of file diff --git a/test/integration/test-cases/diff-args/input/helmfile.yaml b/test/integration/test-cases/diff-args/input/helmfile.yaml new file mode 100644 index 00000000..5849649b --- /dev/null +++ b/test/integration/test-cases/diff-args/input/helmfile.yaml @@ -0,0 +1,10 @@ +helmDefaults: + diffArgs: + - "--three-way-merge" +releases: + - name: uninstalled + chart: ../../../charts/httpbin + installed: false + - name: installed + chart: ../../../charts/httpbin + installed: true \ No newline at end of file diff --git a/test/integration/test-cases/diff-args/output/apply b/test/integration/test-cases/diff-args/output/apply new file mode 100644 index 00000000..91a167e0 --- /dev/null +++ b/test/integration/test-cases/diff-args/output/apply @@ -0,0 +1,77 @@ +Comparing release=installed, chart=../../../charts/httpbin +******************** + + Release was not present in Helm. Diff will show entire contents as new. + +******************** +helmfile-tests, installed-httpbin, Deployment (apps) has been added: +- ++ apiVersion: apps/v1 ++ kind: Deployment ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ replicas: 1 ++ selector: ++ matchLabels: ++ app: httpbin ++ strategy: {} ++ template: ++ metadata: ++ labels: ++ app: httpbin ++ release: installed ++ spec: ++ containers: ++ - image: docker.io/citizenstig/httpbin:latest ++ imagePullPolicy: IfNotPresent ++ livenessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ name: httpbin ++ ports: ++ - containerPort: 8000 ++ readinessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ resources: {} ++ status: {} +helmfile-tests, installed-httpbin, Service (v1) has been added: +- ++ apiVersion: v1 ++ kind: Service ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ ports: ++ - name: httpbin ++ port: 8000 ++ protocol: TCP ++ targetPort: 8000 ++ selector: ++ app: httpbin ++ release: installed ++ type: LoadBalancer + +Release "installed" does not exist. Installing it now. +NAME: installed +NAMESPACE: helmfile-tests +STATUS: deployed +REVISION: 1 +TEST SUITE: None + + diff --git a/test/integration/test-cases/diff-args/output/apply-live b/test/integration/test-cases/diff-args/output/apply-live new file mode 100644 index 00000000..4c72388a --- /dev/null +++ b/test/integration/test-cases/diff-args/output/apply-live @@ -0,0 +1,77 @@ +******************** + + Release was not present in Helm. Diff will show entire contents as new. + +******************** +helmfile-tests, installed-httpbin, Deployment (apps) has been added: +- ++ apiVersion: apps/v1 ++ kind: Deployment ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ replicas: 1 ++ selector: ++ matchLabels: ++ app: httpbin ++ strategy: {} ++ template: ++ metadata: ++ labels: ++ app: httpbin ++ release: installed ++ spec: ++ containers: ++ - image: docker.io/citizenstig/httpbin:latest ++ imagePullPolicy: IfNotPresent ++ livenessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ name: httpbin ++ ports: ++ - containerPort: 8000 ++ readinessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ resources: {} ++ status: {} +helmfile-tests, installed-httpbin, Service (v1) has been added: +- ++ apiVersion: v1 ++ kind: Service ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ ports: ++ - name: httpbin ++ port: 8000 ++ protocol: TCP ++ targetPort: 8000 ++ selector: ++ app: httpbin ++ release: installed ++ type: LoadBalancer +Error: identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled) +Error: plugin "diff" exited with error +Comparing release=installed, chart=../../../charts/httpbin +Release "installed" does not exist. Installing it now. +NAME: installed +NAMESPACE: helmfile-tests +STATUS: deployed +REVISION: 1 +TEST SUITE: None + diff --git a/test/integration/test-cases/diff-args/output/diff b/test/integration/test-cases/diff-args/output/diff new file mode 100644 index 00000000..8c296ce4 --- /dev/null +++ b/test/integration/test-cases/diff-args/output/diff @@ -0,0 +1,69 @@ +Comparing release=installed, chart=../../../charts/httpbin +******************** + + Release was not present in Helm. Diff will show entire contents as new. + +******************** +helmfile-tests, installed-httpbin, Deployment (apps) has been added: +- ++ apiVersion: apps/v1 ++ kind: Deployment ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ replicas: 1 ++ selector: ++ matchLabels: ++ app: httpbin ++ strategy: {} ++ template: ++ metadata: ++ labels: ++ app: httpbin ++ release: installed ++ spec: ++ containers: ++ - image: docker.io/citizenstig/httpbin:latest ++ imagePullPolicy: IfNotPresent ++ livenessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ name: httpbin ++ ports: ++ - containerPort: 8000 ++ readinessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ resources: {} ++ status: {} +helmfile-tests, installed-httpbin, Service (v1) has been added: +- ++ apiVersion: v1 ++ kind: Service ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ ports: ++ - name: httpbin ++ port: 8000 ++ protocol: TCP ++ targetPort: 8000 ++ selector: ++ app: httpbin ++ release: installed ++ type: LoadBalancer + diff --git a/test/integration/test-cases/diff-args/output/diff-live b/test/integration/test-cases/diff-args/output/diff-live new file mode 100644 index 00000000..3922f515 --- /dev/null +++ b/test/integration/test-cases/diff-args/output/diff-live @@ -0,0 +1,68 @@ +******************** + + Release was not present in Helm. Diff will show entire contents as new. + +******************** +helmfile-tests, installed-httpbin, Deployment (apps) has been added: +- ++ apiVersion: apps/v1 ++ kind: Deployment ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ replicas: 1 ++ selector: ++ matchLabels: ++ app: httpbin ++ strategy: {} ++ template: ++ metadata: ++ labels: ++ app: httpbin ++ release: installed ++ spec: ++ containers: ++ - image: docker.io/citizenstig/httpbin:latest ++ imagePullPolicy: IfNotPresent ++ livenessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ name: httpbin ++ ports: ++ - containerPort: 8000 ++ readinessProbe: ++ httpGet: ++ path: / ++ port: 8000 ++ resources: {} ++ status: {} +helmfile-tests, installed-httpbin, Service (v1) has been added: +- ++ apiVersion: v1 ++ kind: Service ++ metadata: ++ labels: ++ app: httpbin ++ chart: httpbin-0.1.0 ++ heritage: Helm ++ release: installed ++ name: installed-httpbin ++ namespace: helmfile-tests ++ spec: ++ ports: ++ - name: httpbin ++ port: 8000 ++ protocol: TCP ++ targetPort: 8000 ++ selector: ++ app: httpbin ++ release: installed ++ type: LoadBalancer +Comparing release=installed, chart=../../../charts/httpbin diff --git a/test/integration/test-cases/diff-args/readme.md b/test/integration/test-cases/diff-args/readme.md new file mode 100644 index 00000000..2cf36976 --- /dev/null +++ b/test/integration/test-cases/diff-args/readme.md @@ -0,0 +1 @@ +https://github.com/helmfile/helmfile/issues/1095 \ No newline at end of file