diff --git a/pkg/crc/api/handlers.go b/pkg/crc/api/handlers.go index 5d00432f8a..13341daaf4 100644 --- a/pkg/crc/api/handlers.go +++ b/pkg/crc/api/handlers.go @@ -191,6 +191,7 @@ func (h *Handler) SetConfig(c *context) error { if len(multiError.Errors) != 0 { return multiError } + crcConfig.UpdateDefaults(h.Config) return c.JSON(http.StatusOK, client.SetOrUnsetConfigResult{ Properties: successProps, }) @@ -219,6 +220,7 @@ func (h *Handler) UnsetConfig(c *context) error { if len(multiError.Errors) != 0 { return multiError } + crcConfig.UpdateDefaults(h.Config) return c.JSON(http.StatusOK, client.SetOrUnsetConfigResult{ Properties: successProps, }) diff --git a/pkg/crc/config/config.go b/pkg/crc/config/config.go index 87b49ff0f7..958320066d 100644 --- a/pkg/crc/config/config.go +++ b/pkg/crc/config/config.go @@ -95,6 +95,17 @@ func (c *Config) Set(key string, value interface{}) (string, error) { return "", fmt.Errorf(invalidType, value, key) } + // Make sure if user try to set same value which + // is default then just unset the value which + // anyway make it default and don't update it + // ~/.crc/crc.json (viper config) file. + if setting.defaultValue == castValue { + if _, err := c.Unset(key); err != nil { + return "", err + } + return "", nil + } + if setting.isSecret { if err := c.secretStorage.Set(key, castValue); err != nil { return "", err diff --git a/pkg/crc/config/viper_config_test.go b/pkg/crc/config/viper_config_test.go index a5f738b9dc..0fc551f9ef 100644 --- a/pkg/crc/config/viper_config_test.go +++ b/pkg/crc/config/viper_config_test.go @@ -115,13 +115,14 @@ func TestViperConfigLoadDefaultValue(t *testing.T) { Value: 4, IsDefault: true, }, config.Get(cpus)) - _, err = config.Set(cpus, 4) assert.NoError(t, err) bin, err := os.ReadFile(configFile) assert.NoError(t, err) - assert.JSONEq(t, `{"cpus":4}`, string(bin)) + // Setting default value will not update + // write to the config so expected would be {} + assert.JSONEq(t, `{}`, string(bin)) assert.Equal(t, SettingValue{ Value: 4,