diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-04-12 13:03:39 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-04-12 13:10:18 +0200 |
commit | 9d7e3f9d1da45323b49a0d592adc71934f6a32ff (patch) | |
tree | 7071f09c319b94ec082dd3613db3a3d34fabc155 /client | |
parent | 929401b9e48226c6f98ae09066a72fd07138c6b8 (diff) |
Ensure that config get includes local-only options
Diffstat (limited to 'client')
-rw-r--r-- | client/go/cmd/config.go | 21 | ||||
-rw-r--r-- | client/go/cmd/config_test.go | 23 |
2 files changed, 38 insertions, 6 deletions
diff --git a/client/go/cmd/config.go b/client/go/cmd/config.go index b3a0c8133c1..726676ce476 100644 --- a/client/go/cmd/config.go +++ b/client/go/cmd/config.go @@ -10,6 +10,7 @@ import ( "log" "os" "path/filepath" + "sort" "strconv" "strings" "time" @@ -210,14 +211,14 @@ $ vespa config get --local RunE: func(cmd *cobra.Command, args []string) error { config := cli.config if localArg { - if cli.config.local == nil { + if cli.config.local.isEmpty() { cli.printWarning("no local configuration present") return nil } config = cli.config.local } if len(args) == 0 { // Print all values - for _, option := range config.list() { + for _, option := range config.list(!localArg) { config.printOption(option) } } else { @@ -486,7 +487,21 @@ func (c *Config) applicationFilePath(app vespa.ApplicationID, name string) (stri return filepath.Join(appDir, name), nil } -func (c *Config) list() []string { return c.config.Keys() } +func (c *Config) isEmpty() bool { return len(c.config.Keys()) == 0 } + +// list returns the options that have been set in this configuration. If includeUnset is true, also return options that +// haven't been set. +func (c *Config) list(includeUnset bool) []string { + if !includeUnset { + return c.config.Keys() + } + var flags []string + for k := range c.flags { + flags = append(flags, k) + } + sort.Strings(flags) + return flags +} // flagValue returns the set value and default value of the named flag. func (c *Config) flagValue(name string) (string, string) { diff --git a/client/go/cmd/config_test.go b/client/go/cmd/config_test.go index 3a8766aae13..f89e752f82d 100644 --- a/client/go/cmd/config_test.go +++ b/client/go/cmd/config_test.go @@ -85,6 +85,7 @@ func TestLocalConfig(t *testing.T) { require.Nil(t, err) t.Cleanup(func() { os.Chdir(wd) }) require.Nil(t, os.Chdir(rootDir)) + assertConfigCommandStdErr(t, configHome, "Warning: no local configuration present\n", "config", "get", "--local") assertConfigCommand(t, configHome, "", "config", "set", "--local", "instance", "foo") assertConfigCommand(t, configHome, "instance = foo\n", "config", "get", "instance") assertConfigCommand(t, configHome, "instance = bar\n", "config", "get", "--instance", "bar", "instance") // flag overrides local config @@ -95,10 +96,21 @@ func TestLocalConfig(t *testing.T) { // get reads global option if unset locally assertConfigCommand(t, configHome, "target = cloud\n", "config", "get", "target") + // get merges settings from local and global config + assertConfigCommand(t, configHome, "", "config", "set", "--local", "application", "t1.a1") + assertConfigCommand(t, configHome, `application = t1.a1.default +color = auto +instance = foo +quiet = false +target = cloud +wait = 0 +zone = <unset> +`, "config", "get") + // Only locally set options are written localConfig, err := os.ReadFile(filepath.Join(rootDir, ".vespa", "config.yaml")) require.Nil(t, err) - assert.Equal(t, "instance: foo\n", string(localConfig)) + assert.Equal(t, "application: t1.a1.default\ninstance: foo\n", string(localConfig)) // Changing back to original directory reads from global config require.Nil(t, os.Chdir(wd)) @@ -120,12 +132,17 @@ func assertEnvConfigCommand(t *testing.T, configHome, expected string, env []str assert.Equal(t, expected, stdout.String()) } -func assertConfigCommandErr(t *testing.T, configHome, expected string, args ...string) { +func assertConfigCommandStdErr(t *testing.T, configHome, expected string, args ...string) error { t.Helper() cli, _, stderr := newTestCLI(t) err := cli.Run(args...) - assert.NotNil(t, err) assert.Equal(t, expected, stderr.String()) + return err +} + +func assertConfigCommandErr(t *testing.T, configHome, expected string, args ...string) { + t.Helper() + assert.NotNil(t, assertConfigCommandStdErr(t, configHome, expected, args...)) } func TestUseAPIKey(t *testing.T) { |