mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-18 23:59:16 +02:00
Add the SyncArgs option and --sync-args flag (#1375)
* add the SyncArgs option Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> * add syncArgs to helmDefaults and update index.md Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> * add --sync-args flags to helmfile sync Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> * add tests for appendExtraDiffFlags and appendExtraSyncFlags Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> --------- Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com>
This commit is contained in:
@@ -152,6 +152,7 @@ type HelmSpec struct {
|
||||
KubeContext string `yaml:"kubeContext,omitempty"`
|
||||
Args []string `yaml:"args,omitempty"`
|
||||
DiffArgs []string `yaml:"diffArgs,omitempty"`
|
||||
SyncArgs []string `yaml:"syncArgs,omitempty"`
|
||||
Verify bool `yaml:"verify"`
|
||||
Keyring string `yaml:"keyring,omitempty"`
|
||||
// EnableDNS, when set to true, enable DNS lookups when rendering templates
|
||||
@@ -740,6 +741,7 @@ type SyncOpts struct {
|
||||
ResetValues bool
|
||||
PostRenderer string
|
||||
PostRendererArgs []string
|
||||
SyncArgs string
|
||||
}
|
||||
|
||||
type SyncOpt interface{ Apply(*SyncOpts) }
|
||||
@@ -2517,6 +2519,20 @@ func (st *HelmState) appendExtraDiffFlags(flags []string, opt *DiffOpts) []strin
|
||||
return flags
|
||||
}
|
||||
|
||||
// appendExtraSyncFlags appends extra diff flags to the given flags slice based on the provided options.
|
||||
// If opt is not nil and opt.SyncArgs is not empty, it collects the arguments from opt.SyncArgs and appends them to flags.
|
||||
// If st.HelmDefaults.SyncArgs is not nil, it joins the arguments with a space and appends them to flags.
|
||||
// The updated flags slice is returned.
|
||||
func (st *HelmState) appendExtraSyncFlags(flags []string, opt *SyncOpts) []string {
|
||||
switch {
|
||||
case opt != nil && opt.SyncArgs != "":
|
||||
flags = append(flags, argparser.CollectArgs(opt.SyncArgs)...)
|
||||
case st.HelmDefaults.SyncArgs != nil:
|
||||
flags = append(flags, argparser.CollectArgs(strings.Join(st.HelmDefaults.SyncArgs, " "))...)
|
||||
}
|
||||
return flags
|
||||
}
|
||||
|
||||
// appendKeyringFlags append all the helm command-line flags related to keyring
|
||||
func (st *HelmState) appendKeyringFlags(flags []string, release *ReleaseSpec) []string {
|
||||
switch {
|
||||
@@ -2633,6 +2649,8 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
|
||||
}
|
||||
flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs)
|
||||
|
||||
flags = st.appendExtraSyncFlags(flags, opt)
|
||||
|
||||
common, clean, err := st.namespaceAndValuesFlags(helm, release, workerIndex)
|
||||
if err != nil {
|
||||
return nil, clean, err
|
||||
|
||||
@@ -3477,3 +3477,99 @@ func TestHideChartURL(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_appendExtraDiffFlags(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
inputFlags []string
|
||||
inputOpts *DiffOpts
|
||||
inputDefaults []string
|
||||
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "Skipping default flags, because diffOpts is provided",
|
||||
inputFlags: []string{"aaaaa"},
|
||||
inputOpts: &DiffOpts{
|
||||
DiffArgs: "-bbbb --cccc",
|
||||
},
|
||||
inputDefaults: []string{"-dddd", "--eeee"},
|
||||
expected: []string{"aaaaa", "-bbbb", "--cccc"},
|
||||
},
|
||||
{
|
||||
name: "Use default flags, because diffOpts is not provided",
|
||||
inputFlags: []string{"aaaaa"},
|
||||
inputDefaults: []string{"-dddd", "--eeee"},
|
||||
expected: []string{"aaaaa", "-dddd", "--eeee"},
|
||||
},
|
||||
{
|
||||
name: "Don't add non-flag arguments",
|
||||
inputFlags: []string{"aaaaa"},
|
||||
inputDefaults: []string{"-d=ddd", "non-flag", "--eeee"},
|
||||
expected: []string{"aaaaa", "-d=ddd", "--eeee"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
result := (&HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
HelmDefaults: HelmSpec{
|
||||
DiffArgs: test.inputDefaults,
|
||||
},
|
||||
},
|
||||
}).appendExtraDiffFlags(test.inputFlags, test.inputOpts)
|
||||
if !reflect.DeepEqual(result, test.expected) {
|
||||
t.Errorf("For input %v %v, expected %v, but got %v", test.inputFlags, test.inputOpts, test.expected, result)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_appendExtraSyncFlags(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
inputFlags []string
|
||||
inputOpts *SyncOpts
|
||||
inputDefaults []string
|
||||
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "Skipping default flags, because diffOpts is provided",
|
||||
inputFlags: []string{"aaaaa"},
|
||||
inputOpts: &SyncOpts{
|
||||
SyncArgs: "-bbbb --cccc",
|
||||
},
|
||||
inputDefaults: []string{"-dddd", "--eeee"},
|
||||
expected: []string{"aaaaa", "-bbbb", "--cccc"},
|
||||
},
|
||||
{
|
||||
name: "Use default flags, because diffOpts is not provided",
|
||||
inputFlags: []string{"aaaaa"},
|
||||
inputDefaults: []string{"-dddd", "--eeee"},
|
||||
expected: []string{"aaaaa", "-dddd", "--eeee"},
|
||||
},
|
||||
{
|
||||
name: "Don't add non-flag arguments",
|
||||
inputFlags: []string{"aaaaa"},
|
||||
inputDefaults: []string{"-d=ddd", "non-flag", "--eeee"},
|
||||
expected: []string{"aaaaa", "-d=ddd", "--eeee"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
result := (&HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
HelmDefaults: HelmSpec{
|
||||
SyncArgs: test.inputDefaults,
|
||||
},
|
||||
},
|
||||
}).appendExtraSyncFlags(test.inputFlags, test.inputOpts)
|
||||
if !reflect.DeepEqual(result, test.expected) {
|
||||
t.Errorf("For input %v %v, expected %v, but got %v", test.inputFlags, test.inputOpts, test.expected, result)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user