From a14efc5804d95f586c51e3946cb8185ce9266270 Mon Sep 17 00:00:00 2001 From: Mikhail Scherba <41360396+miklezzzz@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:03:50 +0300 Subject: [PATCH] fix configmap update (#557) Signed-off-by: Mikhail Scherba --- .../backend/configmap/configmap.go | 33 +++++++--------- pkg/kube_config_manager/config/config.go | 38 ------------------- pkg/utils/values.go | 14 ------- 3 files changed, 14 insertions(+), 71 deletions(-) diff --git a/pkg/kube_config_manager/backend/configmap/configmap.go b/pkg/kube_config_manager/backend/configmap/configmap.go index 0d22364c..d4c1ada1 100644 --- a/pkg/kube_config_manager/backend/configmap/configmap.go +++ b/pkg/kube_config_manager/backend/configmap/configmap.go @@ -74,12 +74,9 @@ func (b Backend) SaveConfigValues(ctx context.Context, key string, values utils. } func (b Backend) saveGlobalConfigValues(ctx context.Context, values utils.Values) ( /*checksum*/ string, error) { - globalKubeConfig, err := config.ParseGlobalKubeConfigFromValues(values) - if err != nil { - return "", err - } - if globalKubeConfig == nil { - return "", nil + globalKubeConfig := &config.GlobalKubeConfig{ + Values: values, + Checksum: values.Checksum(), } if b.isDebugEnabled(ctx) { @@ -90,7 +87,7 @@ func (b Backend) saveGlobalConfigValues(ctx context.Context, values utils.Values b.logger.Info("Save global values to ConfigMap", slog.String("name", b.name)) } - err = b.mergeValues(ctx, globalKubeConfig.GetValuesWithGlobalName()) + err := b.mergeValues(ctx, "global", globalKubeConfig.GetValues()) return globalKubeConfig.Checksum, err } @@ -107,10 +104,9 @@ func (b Backend) isDebugEnabled(ctx context.Context) bool { // saveModuleConfigValues updates module section in ConfigMap. // It uses knownChecksums to prevent KubeConfigChanged event on self-update. func (b Backend) saveModuleConfigValues(ctx context.Context, moduleName string, values utils.Values) ( /*checksum*/ string, error) { - moduleKubeConfig := config.ParseModuleKubeConfigFromValues(moduleName, values) - - if moduleKubeConfig == nil { - return "", nil + moduleKubeConfig := &config.ModuleKubeConfig{ + ModuleConfig: *utils.NewModuleConfig(moduleName, values), + Checksum: values.Checksum(), } if b.isDebugEnabled(ctx) { @@ -124,7 +120,7 @@ func (b Backend) saveModuleConfigValues(ctx context.Context, moduleName string, slog.String("configMapName", b.name)) } - err := b.mergeValues(ctx, moduleKubeConfig.GetValuesWithModuleName()) //nolint: staticcheck,nolintlint + err := b.mergeValues(ctx, utils.ModuleNameToValuesKey(moduleName), moduleKubeConfig.GetValues()) //nolint: staticcheck,nolintlint return moduleKubeConfig.Checksum, err } @@ -282,15 +278,14 @@ func fromConfigMapData(moduleName string, configData map[string]string) (*utils. return mc.LoadFromValues(configValues) } -func (b Backend) mergeValues(ctx context.Context, values utils.Values) error { - cmData, err := values.AsConfigMapData() - if err != nil { - return err - } +func (b Backend) mergeValues(ctx context.Context, moduleName string, values utils.Values) error { return b.updateConfigMap(ctx, func(obj *v1.ConfigMap) error { - for k, v := range cmData { - obj.Data[k] = v + data, err := yaml.Marshal(values) + if err != nil { + return err } + + obj.Data[moduleName] = string(data) return nil }) } diff --git a/pkg/kube_config_manager/config/config.go b/pkg/kube_config_manager/config/config.go index e99bf9cf..a402fa99 100644 --- a/pkg/kube_config_manager/config/config.go +++ b/pkg/kube_config_manager/config/config.go @@ -14,12 +14,6 @@ type GlobalKubeConfig struct { Checksum string } -// GetValuesWithGlobalName -// Deprecated: use GetValues instead -func (gkc GlobalKubeConfig) GetValuesWithGlobalName() utils.Values { - return gkc.Values -} - // GetValues returns global values, enrich them with top level key 'global' func (gkc GlobalKubeConfig) GetValues() utils.Values { if len(gkc.Values) == 0 { @@ -64,35 +58,3 @@ const ( KubeConfigChanged KubeConfigType = "Changed" KubeConfigInvalid KubeConfigType = "Invalid" ) - -func ParseGlobalKubeConfigFromValues(values utils.Values) (*GlobalKubeConfig, error) { - if !values.HasGlobal() { - return nil, nil - } - - globalValues := values.Global() - - checksum := globalValues.Checksum() - - return &GlobalKubeConfig{ - Values: globalValues, - Checksum: checksum, - }, nil -} - -func ParseModuleKubeConfigFromValues(moduleName string, values utils.Values) *ModuleKubeConfig { - valuesKey := utils.ModuleNameToValuesKey(moduleName) - if !values.HasKey(valuesKey) { - return nil - } - - //nolint: staticcheck,nolintlint - moduleValues := values.SectionByKey(valuesKey) - - checksum := moduleValues.Checksum() - - return &ModuleKubeConfig{ - ModuleConfig: *utils.NewModuleConfig(moduleName, moduleValues), - Checksum: checksum, - } -} diff --git a/pkg/utils/values.go b/pkg/utils/values.go index 13760e91..95dca13e 100644 --- a/pkg/utils/values.go +++ b/pkg/utils/values.go @@ -168,20 +168,6 @@ func (v Values) AsString(format string) string { return string(b) } -// AsConfigMapData returns values as map that can be used as a 'data' field in the ConfigMap. -func (v Values) AsConfigMapData() (map[string]string, error) { - res := make(map[string]string) - - for k, value := range v { - dump, err := yaml.Marshal(value) - if err != nil { - return nil, err - } - res[k] = string(dump) - } - return res, nil -} - func (v Values) JsonString() string { return v.AsString("json") }