mirror of
https://github.com/argoproj/argo-cd
synced 2026-04-21 17:07:16 +00:00
Merge 88edd362ff into e0e827dab0
This commit is contained in:
commit
7c4c520bfc
2 changed files with 67 additions and 27 deletions
|
|
@ -11,7 +11,7 @@ import (
|
|||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var flags map[string]string
|
||||
var flags map[string][]string
|
||||
|
||||
func init() {
|
||||
err := LoadFlags()
|
||||
|
|
@ -21,7 +21,7 @@ func init() {
|
|||
}
|
||||
|
||||
func LoadFlags() error {
|
||||
flags = make(map[string]string)
|
||||
flags = make(map[string][]string)
|
||||
|
||||
opts, err := shellquote.Split(os.Getenv("ARGOCD_OPTS"))
|
||||
if err != nil {
|
||||
|
|
@ -33,29 +33,26 @@ func LoadFlags() error {
|
|||
switch {
|
||||
case strings.HasPrefix(opt, "--"):
|
||||
if key != "" {
|
||||
flags[key] = "true"
|
||||
flags[key] = append(flags[key], "true")
|
||||
}
|
||||
key = strings.TrimPrefix(opt, "--")
|
||||
// pkg shellquota doesn't recognize `=` so that the opts in format `foo=bar` could not work.
|
||||
// issue ref: https://github.com/argoproj/argo-cd/issues/6822
|
||||
if strings.Contains(key, "=") {
|
||||
kv := strings.SplitN(key, "=", 2)
|
||||
actualKey, actualValue := kv[0], kv[1]
|
||||
flags[actualKey] = append(flags[actualKey], actualValue)
|
||||
key = ""
|
||||
}
|
||||
case key != "":
|
||||
flags[key] = opt
|
||||
flags[key] = append(flags[key], opt)
|
||||
key = ""
|
||||
default:
|
||||
return errors.New("ARGOCD_OPTS invalid at '" + opt + "'")
|
||||
}
|
||||
}
|
||||
if key != "" {
|
||||
flags[key] = "true"
|
||||
}
|
||||
// pkg shellquota doesn't recognize `=` so that the opts in format `foo=bar` could not work.
|
||||
// issue ref: https://github.com/argoproj/argo-cd/issues/6822
|
||||
for k, v := range flags {
|
||||
if strings.Contains(k, "=") && v == "true" {
|
||||
kv := strings.SplitN(k, "=", 2)
|
||||
actualKey, actualValue := kv[0], kv[1]
|
||||
if _, ok := flags[actualKey]; !ok {
|
||||
flags[actualKey] = actualValue
|
||||
}
|
||||
}
|
||||
flags[key] = append(flags[key], "true")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -63,7 +60,7 @@ func LoadFlags() error {
|
|||
func GetFlag(key, fallback string) string {
|
||||
val, ok := flags[key]
|
||||
if ok {
|
||||
return val
|
||||
return val[len(val)-1]
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
|
|
@ -78,7 +75,7 @@ func GetIntFlag(key string, fallback int) int {
|
|||
return fallback
|
||||
}
|
||||
|
||||
v, err := strconv.Atoi(val)
|
||||
v, err := strconv.Atoi(val[len(val)-1])
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
|
@ -86,19 +83,26 @@ func GetIntFlag(key string, fallback int) int {
|
|||
}
|
||||
|
||||
func GetStringSliceFlag(key string, fallback []string) []string {
|
||||
val, ok := flags[key]
|
||||
vals, ok := flags[key]
|
||||
if !ok {
|
||||
return fallback
|
||||
}
|
||||
|
||||
if val == "" {
|
||||
var result []string
|
||||
for _, val := range vals {
|
||||
if val == "" {
|
||||
continue
|
||||
}
|
||||
stringReader := strings.NewReader(val)
|
||||
csvReader := csv.NewReader(stringReader)
|
||||
v, err := csvReader.Read()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
result = append(result, v...)
|
||||
}
|
||||
if len(result) == 0 && vals[len(vals)-1] == "" {
|
||||
return []string{}
|
||||
}
|
||||
stringReader := strings.NewReader(val)
|
||||
csvReader := csv.NewReader(stringReader)
|
||||
v, err := csvReader.Read()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return v
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,6 +113,42 @@ func TestStringSliceFlagAtEnd(t *testing.T) {
|
|||
assert.Equal(t, "Strict-Transport-Security: max-age=31536000", strings[0])
|
||||
}
|
||||
|
||||
func TestMultipleStringSliceFlag(t *testing.T) {
|
||||
loadOpts(t, "--header='CF-Access-Client-Id: foo' --header='CF-Access-Client-Secret: bar' --header 'And-Another: baz'")
|
||||
strings := GetStringSliceFlag("header", []string{})
|
||||
|
||||
assert.Len(t, strings, 3)
|
||||
assert.Equal(t, "CF-Access-Client-Id: foo", strings[0])
|
||||
assert.Equal(t, "CF-Access-Client-Secret: bar", strings[1])
|
||||
assert.Equal(t, "And-Another: baz", strings[2])
|
||||
}
|
||||
|
||||
func TestMultipleStringSliceFlagWithEquals(t *testing.T) {
|
||||
loadOpts(t, "--header='CF-Access-Client-Id: foo' --header='CF-Access-Client-Secret: bar' --header='And-Another: baz'")
|
||||
strings := GetStringSliceFlag("header", []string{})
|
||||
|
||||
assert.Len(t, strings, 3)
|
||||
assert.Equal(t, "CF-Access-Client-Id: foo", strings[0])
|
||||
assert.Equal(t, "CF-Access-Client-Secret: bar", strings[1])
|
||||
assert.Equal(t, "And-Another: baz", strings[2])
|
||||
}
|
||||
|
||||
func TestMultipleStringSliceFlagWithEmptyValue(t *testing.T) {
|
||||
loadOpts(t, "--header='foo' --header='' --header='bar'")
|
||||
strings := GetStringSliceFlag("header", []string{})
|
||||
|
||||
assert.Len(t, strings, 2)
|
||||
assert.Equal(t, "foo", strings[0])
|
||||
assert.Equal(t, "bar", strings[1])
|
||||
}
|
||||
|
||||
func TestStringSliceFlagWithOnlyEmptyValue(t *testing.T) {
|
||||
loadOpts(t, "--header=''")
|
||||
strings := GetStringSliceFlag("header", []string{"fallback"})
|
||||
|
||||
assert.Empty(t, strings)
|
||||
}
|
||||
|
||||
func TestFlagAtStart(t *testing.T) {
|
||||
loadOpts(t, "--foo bar")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue