mirror of
https://github.com/k3s-io/k3s.git
synced 2024-06-07 19:41:36 +00:00
Enable FindString to search dotD config files (#7323)
* Enable FindString to search dotD config files * Address multiple arg cases Signed-off-by: Derek Nola <derek.nola@suse.com>
This commit is contained in:
parent
132b41c3bf
commit
e1d4cff14c
@ -98,28 +98,46 @@ func (p *Parser) stripInvalidFlags(command string, args []string) ([]string, err
|
||||
|
||||
func (p *Parser) FindString(args []string, target string) (string, error) {
|
||||
configFile, isSet := p.findConfigFileFlag(args)
|
||||
var lastVal string
|
||||
if configFile != "" {
|
||||
bytes, err := readConfigFileData(configFile)
|
||||
|
||||
_, err := os.Stat(configFile)
|
||||
if !isSet && os.IsNotExist(err) {
|
||||
return "", nil
|
||||
} else if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
data := yaml.MapSlice{}
|
||||
if err := yaml.Unmarshal(bytes, &data); err != nil {
|
||||
files, err := dotDFiles(configFile)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
files = append([]string{configFile}, files...)
|
||||
for _, file := range files {
|
||||
bytes, err := readConfigFileData(file)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
for _, i := range data {
|
||||
k, v := convert.ToString(i.Key), convert.ToString(i.Value)
|
||||
if k == target {
|
||||
return v, nil
|
||||
data := yaml.MapSlice{}
|
||||
if err := yaml.Unmarshal(bytes, &data); err != nil {
|
||||
return "", err
|
||||
}
|
||||
for _, i := range data {
|
||||
k, v := convert.ToString(i.Key), convert.ToString(i.Value)
|
||||
isAppend := strings.HasSuffix(k, "+")
|
||||
k = strings.TrimSuffix(k, "+")
|
||||
if k == target {
|
||||
if isAppend {
|
||||
lastVal = lastVal + "," + v
|
||||
} else {
|
||||
lastVal = v
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "", nil
|
||||
return lastVal, nil
|
||||
}
|
||||
|
||||
func (p *Parser) findConfigFileFlag(args []string) (string, bool) {
|
||||
|
@ -221,6 +221,7 @@ func Test_UnitParser_findConfigFileFlag(t *testing.T) {
|
||||
func Test_UnitParser_Parse(t *testing.T) {
|
||||
testDataOutput := []string{
|
||||
"--foo-bar=bar-foo",
|
||||
"--alice=bob",
|
||||
"--a-slice=1",
|
||||
"--a-slice=1.5",
|
||||
"--a-slice=2",
|
||||
@ -237,6 +238,7 @@ func Test_UnitParser_Parse(t *testing.T) {
|
||||
"--c-slice=three",
|
||||
"--d-slice=three",
|
||||
"--d-slice=four",
|
||||
"--f-string=beta",
|
||||
"--e-slice=one",
|
||||
"--e-slice=two",
|
||||
}
|
||||
@ -376,7 +378,7 @@ func Test_UnitParser_FindString(t *testing.T) {
|
||||
want: "",
|
||||
},
|
||||
{
|
||||
name: "A custom config yaml exists, target exists",
|
||||
name: "A custom config exists, target exists",
|
||||
fields: fields{
|
||||
FlagNames: []string{"-c", "--config"},
|
||||
EnvName: "_TEST_ENV",
|
||||
@ -384,12 +386,12 @@ func Test_UnitParser_FindString(t *testing.T) {
|
||||
},
|
||||
args: args{
|
||||
osArgs: []string{"-c", "./testdata/data.yaml"},
|
||||
target: "foo-bar",
|
||||
target: "alice",
|
||||
},
|
||||
want: "baz",
|
||||
want: "bob",
|
||||
},
|
||||
{
|
||||
name: "A custom config yaml exists, target does not exist",
|
||||
name: "A custom config exists, target does not exist",
|
||||
fields: fields{
|
||||
FlagNames: []string{"-c", "--config"},
|
||||
EnvName: "_TEST_ENV",
|
||||
@ -401,6 +403,45 @@ func Test_UnitParser_FindString(t *testing.T) {
|
||||
},
|
||||
want: "",
|
||||
},
|
||||
{
|
||||
name: "Multiple custom configs exist, target exists in a secondary config",
|
||||
fields: fields{
|
||||
FlagNames: []string{"-c", "--config"},
|
||||
EnvName: "_TEST_ENV",
|
||||
DefaultConfig: "./testdata/data.yaml",
|
||||
},
|
||||
args: args{
|
||||
osArgs: []string{"-c", "./testdata/data.yaml"},
|
||||
target: "f-string",
|
||||
},
|
||||
want: "beta",
|
||||
},
|
||||
{
|
||||
name: "Multiple custom configs exist, multiple targets exist in multiple secondary config, replacement",
|
||||
fields: fields{
|
||||
FlagNames: []string{"-c", "--config"},
|
||||
EnvName: "_TEST_ENV",
|
||||
DefaultConfig: "./testdata/data.yaml",
|
||||
},
|
||||
args: args{
|
||||
osArgs: []string{"-c", "./testdata/data.yaml"},
|
||||
target: "foo-bar",
|
||||
},
|
||||
want: "bar-foo",
|
||||
},
|
||||
{
|
||||
name: "Multiple custom configs exist, multiple targets exist in multiple secondary config, appending",
|
||||
fields: fields{
|
||||
FlagNames: []string{"-c", "--config"},
|
||||
EnvName: "_TEST_ENV",
|
||||
DefaultConfig: "./testdata/data.yaml",
|
||||
},
|
||||
args: args{
|
||||
osArgs: []string{"-c", "./testdata/data.yaml"},
|
||||
target: "b-string",
|
||||
},
|
||||
want: "one,two",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
1
pkg/configfilearg/testdata/data.yaml
vendored
1
pkg/configfilearg/testdata/data.yaml
vendored
@ -1,4 +1,5 @@
|
||||
foo-bar: baz
|
||||
alice: bob
|
||||
a-slice:
|
||||
- 1
|
||||
- "2"
|
||||
|
@ -11,4 +11,5 @@ c-slice:
|
||||
- two
|
||||
d-slice:
|
||||
- one
|
||||
- two
|
||||
- two
|
||||
f-string: beta
|
Loading…
Reference in New Issue
Block a user