Add diffArgs to helmDefaults (#1019)
* Add diffArgs to helmDefaults Signed-off-by: Yuuki Takahashi <20282867+yktakaha4@users.noreply.github.com>
This commit is contained in:
parent
c6721de6a5
commit
430a825b12
|
|
@ -182,6 +182,8 @@ helmDefaults:
|
|||
# additional and global args passed to helm (default "")
|
||||
args:
|
||||
- "--set k=v"
|
||||
diffArgs:
|
||||
- "--suppress-secrets"
|
||||
# verify the chart before upgrading (only works with packaged charts not directories) (default false)
|
||||
verify: true
|
||||
keyring: path/to/keyring.gpg
|
||||
|
|
|
|||
|
|
@ -1323,7 +1323,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)...)
|
||||
helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...)
|
||||
|
||||
selectedReleases, selectedAndNeededReleases, err := a.getSelectedReleases(r, c.IncludeTransitiveNeeds())
|
||||
if err != nil {
|
||||
|
|
@ -1374,7 +1374,8 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) {
|
|||
|
||||
// join --args and --diff-args together to one string.
|
||||
args := strings.Join([]string{c.Args(), c.DiffArgs()}, " ")
|
||||
helm.SetExtraArgs(argparser.GetArgs(args, r.state)...)
|
||||
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 {
|
||||
|
|
@ -1570,7 +1571,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)...)
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...)
|
||||
|
||||
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 {
|
||||
|
|
@ -1596,7 +1597,8 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error)
|
|||
helm := r.helm
|
||||
|
||||
args := strings.Join([]string{c.Args(), c.DiffArgs()}, " ")
|
||||
helm.SetExtraArgs(argparser.GetArgs(args, r.state)...)
|
||||
argsOpts := &argparser.GetArgsOptions{WithDiffArgs: true}
|
||||
helm.SetExtraArgs(argparser.GetArgs(args, r.state, argsOpts)...)
|
||||
|
||||
var errs []error
|
||||
|
||||
|
|
@ -1620,7 +1622,7 @@ 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)...)
|
||||
helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, argsOpts)...)
|
||||
return errs
|
||||
})
|
||||
|
||||
|
|
@ -1633,7 +1635,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)
|
||||
args := argparser.GetArgs(c.Args(), st, nil)
|
||||
|
||||
// Reset the extra args if already set, not to break `helm fetch` by adding the args intended for `lint`
|
||||
helm.SetExtraArgs()
|
||||
|
|
@ -1694,7 +1696,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)
|
||||
args := argparser.GetArgs(c.Args(), st, nil)
|
||||
|
||||
// Reset the extra args if already set, not to break `helm fetch` by adding the args intended for `lint`
|
||||
helm.SetExtraArgs()
|
||||
|
|
@ -1827,7 +1829,7 @@ Do you really want to sync?
|
|||
|
||||
var errs []error
|
||||
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...)
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...)
|
||||
|
||||
// Traverse DAG of all the releases so that we don't suffer from false-positive missing dependencies
|
||||
st.Releases = selectedAndNeededReleases
|
||||
|
|
@ -1894,7 +1896,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)
|
||||
args := argparser.GetArgs(c.Args(), st, nil)
|
||||
|
||||
// Reset the extra args if already set, not to break `helm fetch` by adding the args intended for `lint`
|
||||
helm.SetExtraArgs()
|
||||
|
|
@ -2017,7 +2019,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)...)
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...)
|
||||
|
||||
return st.TestReleases(r.helm, cleanup, timeout, concurrency, state.Logs(c.Logs()))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,13 +105,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)...)
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...)
|
||||
|
||||
return r.state.UpdateDeps(r.helm, c.IncludeTransitiveNeeds())
|
||||
}
|
||||
|
||||
func (r *Run) Repos(c ReposConfigProvider) error {
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...)
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state, nil)...)
|
||||
|
||||
return r.ctx.SyncReposOnce(r.state, r.helm)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ 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 {
|
||||
|
|
@ -83,7 +86,7 @@ func analyzeArgs(am *argMap, args string) {
|
|||
}
|
||||
}
|
||||
|
||||
func GetArgs(args string, state *state.HelmState) []string {
|
||||
func GetArgs(args string, state *state.HelmState, opts *GetArgsOptions) []string {
|
||||
argsMap := newArgMap()
|
||||
|
||||
if len(args) > 0 {
|
||||
|
|
@ -94,6 +97,10 @@ func GetArgs(args string, state *state.HelmState) []string {
|
|||
analyzeArgs(argsMap, strings.Join(state.HelmDefaults.Args, " "))
|
||||
}
|
||||
|
||||
if len(state.HelmDefaults.DiffArgs) > 0 && opts != nil && opts.WithDiffArgs {
|
||||
analyzeArgs(argsMap, strings.Join(state.HelmDefaults.DiffArgs, " "))
|
||||
}
|
||||
|
||||
var argArr []string
|
||||
|
||||
for _, flag := range argsMap.flags {
|
||||
|
|
|
|||
|
|
@ -15,15 +15,20 @@ func TestGetArgs(t *testing.T) {
|
|||
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"},
|
||||
expected: "-f a.yaml -f b.yaml -i --set app1.bootstrap=true --set app2.bootstrap=false --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",
|
||||
},
|
||||
{
|
||||
|
|
@ -33,17 +38,19 @@ func TestGetArgs(t *testing.T) {
|
|||
{
|
||||
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}
|
||||
Helmdefaults := state.HelmSpec{KubeContext: "test", Args: test.defaultArgs, DiffArgs: test.defaultDiffArgs}
|
||||
testState := &state.HelmState{
|
||||
ReleaseSetSpec: state.ReleaseSetSpec{
|
||||
HelmDefaults: Helmdefaults,
|
||||
},
|
||||
}
|
||||
receivedArgs := GetArgs(test.args, testState)
|
||||
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, " "))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ type SubhelmfileEnvironmentSpec struct {
|
|||
type HelmSpec struct {
|
||||
KubeContext string `yaml:"kubeContext,omitempty"`
|
||||
Args []string `yaml:"args,omitempty"`
|
||||
DiffArgs []string `yaml:"diffArgs,omitempty"`
|
||||
Verify bool `yaml:"verify"`
|
||||
Keyring string `yaml:"keyring,omitempty"`
|
||||
// EnableDNS, when set to true, enable DNS lookups when rendering templates
|
||||
|
|
|
|||
Loading…
Reference in New Issue