diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index e8143caabc..ac2423760c 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -17,10 +17,6 @@ limitations under the License. package config import ( - "encoding/json" - "fmt" - "io" - "os" "strings" "github.com/golang/glog" @@ -302,7 +298,7 @@ func AddToConfigMap(name string, images []string) error { return err } // Set the values - configFile, err := config.ReadConfig() + cfg, err := config.ReadConfig() if err != nil { return err } @@ -310,16 +306,16 @@ func AddToConfigMap(name string, images []string) error { for _, image := range images { newImages[image] = nil } - if values, ok := configFile[name].(map[string]interface{}); ok { + if values, ok := cfg[name].(map[string]interface{}); ok { for key := range values { newImages[key] = nil } } - if err = s.setMap(configFile, name, newImages); err != nil { + if err = s.setMap(cfg, name, newImages); err != nil { return err } // Write the values - return WriteConfig(configFile) + return config.WriteConfig(constants.ConfigFile, cfg) } // DeleteFromConfigMap deletes entries from a map in the config file @@ -329,45 +325,20 @@ func DeleteFromConfigMap(name string, images []string) error { return err } // Set the values - configFile, err := config.ReadConfig() + cfg, err := config.ReadConfig() if err != nil { return err } - values, ok := configFile[name] + values, ok := cfg[name] if !ok { return nil } for _, image := range images { delete(values.(map[string]interface{}), image) } - if err = s.setMap(configFile, name, values.(map[string]interface{})); err != nil { + if err = s.setMap(cfg, name, values.(map[string]interface{})); err != nil { return err } // Write the values - return WriteConfig(configFile) -} - -// WriteConfig writes a minikube config to the JSON file -func WriteConfig(m config.MinikubeConfig) error { - f, err := os.Create(constants.ConfigFile) - if err != nil { - return fmt.Errorf("create %s: %s", constants.ConfigFile, err) - } - defer f.Close() - err = encode(f, m) - if err != nil { - return fmt.Errorf("encode %s: %s", constants.ConfigFile, err) - } - return nil -} - -func encode(w io.Writer, m config.MinikubeConfig) error { - b, err := json.MarshalIndent(m, "", " ") - if err != nil { - return err - } - - _, err = w.Write(b) - - return err + return config.WriteConfig(constants.ConfigFile, cfg) } diff --git a/cmd/minikube/cmd/config/config_test.go b/cmd/minikube/cmd/config/config_test.go index 07388fef4e..56a84b28d0 100644 --- a/cmd/minikube/cmd/config/config_test.go +++ b/cmd/minikube/cmd/config/config_test.go @@ -20,46 +20,8 @@ import ( "bytes" "fmt" "testing" - - "k8s.io/minikube/pkg/minikube/constants" ) -type configTestCase struct { - data string - config map[string]interface{} -} - -var configTestCases = []configTestCase{ - { - data: `{ - "memory": 2 -}`, - config: map[string]interface{}{ - "memory": 2, - }, - }, - { - data: `{ - "ReminderWaitPeriodInHours": 99, - "cpus": 4, - "disk-size": "20g", - "log_dir": "/etc/hosts", - "show-libmachine-logs": true, - "v": 5, - "vm-driver": "kvm2" -}`, - config: map[string]interface{}{ - "vm-driver": constants.DriverKvm2, - "cpus": 4, - "disk-size": "20g", - "v": 5, - "show-libmachine-logs": true, - "log_dir": "/etc/hosts", - "ReminderWaitPeriodInHours": 99, - }, - }, -} - func TestHiddenPrint(t *testing.T) { testCases := []struct { TestString string @@ -90,17 +52,3 @@ func TestHiddenPrint(t *testing.T) { } } } - -func TestWriteConfig(t *testing.T) { - var b bytes.Buffer - for _, tt := range configTestCases { - err := encode(&b, tt.config) - if err != nil { - t.Errorf("Error encoding: %v", err) - } - if b.String() != tt.data { - t.Errorf("Did not write config correctly, \n\n expected:\n %+v \n\n actual:\n %+v", tt.data, b.String()) - } - b.Reset() - } -} diff --git a/cmd/minikube/cmd/config/set.go b/cmd/minikube/cmd/config/set.go index 096473a151..3019c793e2 100644 --- a/cmd/minikube/cmd/config/set.go +++ b/cmd/minikube/cmd/config/set.go @@ -19,6 +19,7 @@ package config import ( "github.com/spf13/cobra" pkgConfig "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/exit" ) @@ -71,5 +72,5 @@ func Set(name string, value string) error { } // Write the value - return WriteConfig(config) + return pkgConfig.WriteConfig(constants.ConfigFile, config) } diff --git a/cmd/minikube/cmd/config/unset.go b/cmd/minikube/cmd/config/unset.go index 39b90b0a99..fc91390ed8 100644 --- a/cmd/minikube/cmd/config/unset.go +++ b/cmd/minikube/cmd/config/unset.go @@ -19,6 +19,7 @@ package config import ( "github.com/spf13/cobra" pkgConfig "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/exit" ) @@ -48,5 +49,5 @@ func Unset(name string) error { return err } delete(m, name) - return WriteConfig(m) + return pkgConfig.WriteConfig(constants.ConfigFile, m) } diff --git a/pkg/minikube/config/config.go b/pkg/minikube/config/config.go index 84d8c9c704..11268ec138 100644 --- a/pkg/minikube/config/config.go +++ b/pkg/minikube/config/config.go @@ -74,6 +74,20 @@ func get(name string, config MinikubeConfig) (string, error) { return "", ErrKeyNotFound } +// WriteConfig writes a minikube config to the JSON file +func WriteConfig(configFile string, m MinikubeConfig) error { + f, err := os.Create(configFile) + if err != nil { + return fmt.Errorf("create %s: %s", configFile, err) + } + defer f.Close() + err = encode(f, m) + if err != nil { + return fmt.Errorf("encode %s: %s", configFile, err) + } + return nil +} + // ReadConfig reads in the JSON minikube config func ReadConfig() (MinikubeConfig, error) { return readConfig(constants.ConfigFile) @@ -103,6 +117,17 @@ func decode(r io.Reader) (MinikubeConfig, error) { return data, err } +func encode(w io.Writer, m MinikubeConfig) error { + b, err := json.MarshalIndent(m, "", " ") + if err != nil { + return err + } + + _, err = w.Write(b) + + return err +} + // GetMachineName gets the machine name for the VM func GetMachineName() string { // REFACTOR NECESSARY: This function should not rely on globals. diff --git a/pkg/minikube/config/config_test.go b/pkg/minikube/config/config_test.go index 7a92291e41..b6390a2ae3 100644 --- a/pkg/minikube/config/config_test.go +++ b/pkg/minikube/config/config_test.go @@ -18,6 +18,8 @@ package config import ( "bytes" + "io/ioutil" + "os" "reflect" "testing" @@ -46,7 +48,7 @@ var configTestCases = []configTestCase{ "log_dir": "/etc/hosts", "show-libmachine-logs": true, "v": 5, - "vm-driver": "kvm" + "vm-driver": "kvm2" }`, config: map[string]interface{}{ "vm-driver": constants.DriverKvm2, @@ -141,3 +143,47 @@ func Test_readConfig(t *testing.T) { t.Errorf("Did not read config correctly,\n\n wanted %+v, \n\n got %+v", expectedConfig, mkConfig) } } + +func TestWriteConfig(t *testing.T) { + configFile, err := ioutil.TempFile("/tmp", "configTest") + if err != nil { + t.Fatalf("Error not expected but got %v", err) + } + + cfg := map[string]interface{}{ + "vm-driver": constants.DriverKvm2, + "cpus": 4, + "disk-size": "20g", + "show-libmachine-logs": true, + "log_dir": "/etc/hosts", + } + + err = WriteConfig(configFile.Name(), cfg) + if err != nil { + t.Fatalf("Error not expected but got %v", err) + } + defer os.Remove(configFile.Name()) + + mkConfig, err := readConfig(configFile.Name()) + if err != nil { + t.Fatalf("Error not expected but got %v", err) + } + + if reflect.DeepEqual(cfg, mkConfig) || err != nil { + t.Errorf("Did not read config correctly,\n\n wanted %+v, \n\n got %+v", cfg, mkConfig) + } +} + +func Test_encode(t *testing.T) { + var b bytes.Buffer + for _, tt := range configTestCases { + err := encode(&b, tt.config) + if err != nil { + t.Errorf("Error encoding: %v", err) + } + if b.String() != tt.data { + t.Errorf("Did not write config correctly, \n\n expected:\n %+v \n\n actual:\n %+v", tt.data, b.String()) + } + b.Reset() + } +}