aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Nygaard <eirik.nygaard@yahooinc.com>2022-04-08 13:03:07 +0200
committerGitHub <noreply@github.com>2022-04-08 13:03:07 +0200
commit186dd791b7170f66759428b743cff2c8a0d5667f (patch)
tree5b74553abfca1171c9c59902c493e58c0e7bde91
parent303b95e25fe95c7ede922dcc4342e3277ecef2cd (diff)
parent6ad813e5fa2c9a94b2237d0e80e51196c76c076f (diff)
Merge pull request #22047 from vespa-engine/mpolden/fix-fallback
Fix fallback to global config
-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) {