From 6f0c98954a8ba004736a5fb449998bb9629bc99d Mon Sep 17 00:00:00 2001 From: Jake Hyde Date: Mon, 26 Sep 2022 16:20:31 -0400 Subject: [PATCH] Convert config/vars to map[string]any --- cmd/config/vars/set.go | 24 ++++++++++------- cmd/config/vars/set_test.go | 51 ++++++++++++++++++++++++++++++++++++ cmd/config/vars/vars.go | 4 +-- cmd/config/vars/vars_test.go | 14 +++++----- pkg/config/config.go | 2 +- 5 files changed, 75 insertions(+), 20 deletions(-) create mode 100644 cmd/config/vars/set_test.go diff --git a/cmd/config/vars/set.go b/cmd/config/vars/set.go index eb02f01..d6f14a3 100644 --- a/cmd/config/vars/set.go +++ b/cmd/config/vars/set.go @@ -2,7 +2,7 @@ package vars import ( "github.com/rancherlabs/corral/pkg/config" - "github.com/sirupsen/logrus" + "github.com/rancherlabs/corral/pkg/vars" "github.com/spf13/cobra" ) @@ -12,21 +12,25 @@ func NewCommandSet() *cobra.Command { Short: "Create or update global variable.", Long: "Create or update global variable.", Args: cobra.ExactArgs(2), - Run: func(cmd *cobra.Command, args []string) { - createVar(args[0], args[1]) + RunE: func(cmd *cobra.Command, args []string) error { + cfg := config.MustLoad() + err := CreateVar(&cfg, args[0], args[1]) + if err != nil { + return err + } + return cfg.Save() }, } return cmd } -func createVar(key, value string) { - cfg := config.MustLoad() - - cfg.Vars[key] = value - - err := cfg.Save() +func CreateVar(cfg *config.Config, key, value string) error { + v, err := vars.FromJson(value) if err != nil { - logrus.Fatalf("%e", err) + return err } + + cfg.Vars[key] = v + return nil } diff --git a/cmd/config/vars/set_test.go b/cmd/config/vars/set_test.go new file mode 100644 index 0000000..5fb768e --- /dev/null +++ b/cmd/config/vars/set_test.go @@ -0,0 +1,51 @@ +package vars_test + +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/rancherlabs/corral/cmd/config/vars" + "github.com/rancherlabs/corral/pkg/config" +) + +var _ = Describe("Set", func() { + When("a string is passed", func() { + It("returns that string", func() { + cfg := &config.Config{Vars: map[string]any{}} + err := vars.CreateVar(cfg, "test", "test") + Expect(err).To(BeNil()) + Expect(cfg.Vars["test"]).To(Equal("test")) + }) + }) + When("a number is passed", func() { + It("returns a number", func() { + cfg := &config.Config{Vars: map[string]any{}} + err := vars.CreateVar(cfg, "test", "1") + Expect(err).To(BeNil()) + Expect(cfg.Vars["test"]).To(Equal(1.)) + }) + }) + When("a number is passed in quotes", func() { + It("returns a string", func() { + cfg := &config.Config{Vars: map[string]any{}} + err := vars.CreateVar(cfg, "test", `"1"`) + Expect(err).To(BeNil()) + Expect(cfg.Vars["test"]).To(Equal("1")) + }) + }) + When("a json list is passed", func() { + It("returns a slice", func() { + cfg := &config.Config{Vars: map[string]any{}} + err := vars.CreateVar(cfg, "test", "[1,2,3]") + Expect(err).To(BeNil()) + Expect(cfg.Vars["test"]).To(Equal([]any{1., 2., 3.})) + }) + }) + When("a json object is passed", func() { + It("returns a map", func() { + cfg := &config.Config{Vars: map[string]any{}} + err := vars.CreateVar(cfg, "test", `{"a":"1","b":2,"c":[1,2,3]}`) + Expect(err).To(BeNil()) + Expect(cfg.Vars["test"]).To(Equal(map[string]any{"a": "1", "b": 2., "c": []any{1., 2., 3.}})) + }) + }) +}) diff --git a/cmd/config/vars/vars.go b/cmd/config/vars/vars.go index 6b44b96..11b32fc 100644 --- a/cmd/config/vars/vars.go +++ b/cmd/config/vars/vars.go @@ -36,10 +36,10 @@ func NewVarsCommand() *cobra.Command { func ListVars(cfg config.Config, output pkgcmd.OutputFormat, args ...string) (string, error) { if len(args) == 1 { - return cfg.Vars[args[0]], nil + return fmt.Sprintf("%v", cfg.Vars[args[0]]), nil } - vars := map[string]string{} + vars := map[string]any{} if len(args) > 1 { for _, k := range args { vars[k] = cfg.Vars[k] diff --git a/cmd/config/vars/vars_test.go b/cmd/config/vars/vars_test.go index 6c269af..15f9ac8 100644 --- a/cmd/config/vars/vars_test.go +++ b/cmd/config/vars/vars_test.go @@ -12,21 +12,21 @@ var _ = Describe("Vars", func() { When("only one variable is passed", func() { When("the output format is table", func() { It("returns only one variable", func() { - v, err := vars.ListVars(config.Config{Vars: map[string]string{"test": "test1"}}, pkgcmd.OutputFormatTable, "test") + v, err := vars.ListVars(config.Config{Vars: map[string]any{"test": "test1"}}, pkgcmd.OutputFormatTable, "test") Expect(err).To(BeNil()) Expect(v).To(Equal("test1")) }) }) When("the output format is json", func() { It("returns only one variable", func() { - v, err := vars.ListVars(config.Config{Vars: map[string]string{"test": "test1"}}, pkgcmd.OutputFormatJSON, "test") + v, err := vars.ListVars(config.Config{Vars: map[string]any{"test": "test1"}}, pkgcmd.OutputFormatJSON, "test") Expect(err).To(BeNil()) Expect(v).To(Equal("test1")) }) }) When("the output format is yaml", func() { It("returns only one variable", func() { - v, err := vars.ListVars(config.Config{Vars: map[string]string{"test": "test1"}}, pkgcmd.OutputFormatYAML, "test") + v, err := vars.ListVars(config.Config{Vars: map[string]any{"test": "test1"}}, pkgcmd.OutputFormatYAML, "test") Expect(err).To(BeNil()) Expect(v).To(Equal("test1")) }) @@ -34,28 +34,28 @@ var _ = Describe("Vars", func() { }) When("an unsupported output format is passed", func() { It("returns an error", func() { - _, err := vars.ListVars(config.Config{Vars: map[string]string{}}, "a") + _, err := vars.ListVars(config.Config{Vars: map[string]any{}}, "a") Expect(err).Should(MatchError(pkgcmd.ErrUnknownOutputFormat)) }) }) When("no variables are passed", func() { When("the output format is table", func() { It("has the expected output", func() { - v, err := vars.ListVars(config.Config{Vars: map[string]string{"test": "test1"}}, pkgcmd.OutputFormatTable) + v, err := vars.ListVars(config.Config{Vars: map[string]any{"test": "test1"}}, pkgcmd.OutputFormatTable) Expect(err).To(BeNil()) Expect(v).To(Equal("+------+-------+\n| NAME | VALUE |\n+------+-------+\n| test | test1 |\n+------+-------+")) }) }) When("the output format is json", func() { It("has the expected output", func() { - v, err := vars.ListVars(config.Config{Vars: map[string]string{"test": "test1"}}, pkgcmd.OutputFormatJSON) + v, err := vars.ListVars(config.Config{Vars: map[string]any{"test": "test1"}}, pkgcmd.OutputFormatJSON) Expect(err).To(BeNil()) Expect(v).To(Equal(`{"test":"test1"}`)) }) }) When("the output format is yaml", func() { It("has the expected output", func() { - v, err := vars.ListVars(config.Config{Vars: map[string]string{"test": "test1"}}, pkgcmd.OutputFormatYAML) + v, err := vars.ListVars(config.Config{Vars: map[string]any{"test": "test1"}}, pkgcmd.OutputFormatYAML) Expect(err).To(BeNil()) Expect(v).To(Equal("test: test1")) }) diff --git a/pkg/config/config.go b/pkg/config/config.go index 4ef69d6..fdda9a8 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -23,7 +23,7 @@ type Config struct { Version string `yaml:"version"` - Vars map[string]string `yaml:"vars"` + Vars map[string]any `yaml:"vars"` } func MustLoad() Config {