summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-04-08 11:32:42 +0200
committerMartin Polden <mpolden@mpolden.no>2022-04-08 11:32:42 +0200
commit6ad813e5fa2c9a94b2237d0e80e51196c76c076f (patch)
tree4e7ad7baa69a679a58f4e615d42eb57b403e62d3 /client
parent6a6687ca516a3912cdb4669c36268b1bb5fb856b (diff)
Fix fallback to global config
Diffstat (limited to 'client')
-rw-r--r--client/go/cmd/config.go9
-rw-r--r--client/go/cmd/config_test.go15
2 files changed, 17 insertions, 7 deletions
diff --git a/client/go/cmd/config.go b/client/go/cmd/config.go
index 50d302b1e5d..f274bf7fc33 100644
--- a/client/go/cmd/config.go
+++ b/client/go/cmd/config.go
@@ -476,10 +476,15 @@ func (c *Config) list() []string {
return options
}
+func (c *Config) isSet(option string) bool { return c.viper.IsSet(option) }
+
func (c *Config) get(option string) (string, bool) {
if c.local != nil {
- if value, ok := c.local.get(option); ok {
- return value, ok
+ // when reading from local config, the option must be explicitly set to be considered
+ if c.local.isSet(option) {
+ if value, ok := c.local.get(option); ok {
+ return value, ok
+ }
}
}
value := c.viper.GetString(option)
diff --git a/client/go/cmd/config_test.go b/client/go/cmd/config_test.go
index 7059bfa78cc..58e70893619 100644
--- a/client/go/cmd/config_test.go
+++ b/client/go/cmd/config_test.go
@@ -47,9 +47,11 @@ func TestConfig(t *testing.T) {
func TestLocalConfig(t *testing.T) {
configHome := t.TempDir()
+ // Write a few global options
assertConfigCommand(t, configHome, "", "config", "set", "instance", "main")
+ assertConfigCommand(t, configHome, "", "config", "set", "target", "cloud")
- // Change directory to an application package and write local configuration
+ // Change directory to an application package and write local options
_, rootDir := mock.ApplicationPackageDir(t, false, false)
wd, err := os.Getwd()
require.Nil(t, err)
@@ -60,17 +62,20 @@ func TestLocalConfig(t *testing.T) {
assertConfigCommand(t, configHome, "instance = bar\n", "config", "get", "--instance", "bar", "instance") // flag overrides local config
// get --local prints only options set in local config
- assertConfigCommand(t, configHome, "", "config", "set", "--local", "target", "hosted")
- assertConfigCommand(t, configHome, "instance = foo\ntarget = hosted\n", "config", "get", "--local")
+ assertConfigCommand(t, configHome, "instance = foo\n", "config", "get", "--local")
+
+ // get reads global option if unset locally
+ assertConfigCommand(t, configHome, "target = cloud\n", "config", "get", "target")
- // only locally set options are written
+ // 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\ntarget: hosted\n", string(localConfig))
+ assert.Equal(t, "instance: foo\n", string(localConfig))
// Changing back to original directory reads from global config
require.Nil(t, os.Chdir(wd))
assertConfigCommand(t, configHome, "instance = main\n", "config", "get", "instance")
+ assertConfigCommand(t, configHome, "target = cloud\n", "config", "get", "target")
}
func assertConfigCommand(t *testing.T, configHome, expected string, args ...string) {