summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-04-12 13:03:39 +0200
committerMartin Polden <mpolden@mpolden.no>2022-04-12 13:10:18 +0200
commit9d7e3f9d1da45323b49a0d592adc71934f6a32ff (patch)
tree7071f09c319b94ec082dd3613db3a3d34fabc155 /client
parent929401b9e48226c6f98ae09066a72fd07138c6b8 (diff)
Ensure that config get includes local-only options
Diffstat (limited to 'client')
-rw-r--r--client/go/cmd/config.go21
-rw-r--r--client/go/cmd/config_test.go23
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) {