github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/configuration/patch_merger.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package configuration 21 22 import ( 23 appsv1alpha1 "github.com/1aal/kubeblocks/apis/apps/v1alpha1" 24 "github.com/1aal/kubeblocks/pkg/configuration/core" 25 intctrlutil "github.com/1aal/kubeblocks/pkg/controllerutil" 26 ) 27 28 func DoMerge(baseData map[string]string, patch map[string]appsv1alpha1.ConfigParams, cc *appsv1alpha1.ConfigConstraint, configSpec appsv1alpha1.ComponentConfigSpec) (map[string]string, error) { 29 var ( 30 updatedFiles = make(map[string]string, len(patch)) 31 updatedParams = make([]core.ParamPairs, 0, len(patch)) 32 ) 33 34 for key, params := range patch { 35 if params.Content != nil { 36 updatedFiles[key] = *params.Content 37 } 38 if len(params.Parameters) > 0 { 39 updatedParams = append(updatedParams, core.ParamPairs{ 40 Key: key, 41 UpdatedParams: core.FromStringMap(params.Parameters), 42 }) 43 } 44 } 45 return mergeUpdatedParams(baseData, updatedFiles, updatedParams, cc, configSpec) 46 } 47 48 func mergeUpdatedParams(base map[string]string, 49 updatedFiles map[string]string, 50 updatedParams []core.ParamPairs, 51 cc *appsv1alpha1.ConfigConstraint, 52 tpl appsv1alpha1.ComponentConfigSpec) (map[string]string, error) { 53 updatedConfig := base 54 55 // merge updated files into configmap 56 if len(updatedFiles) != 0 { 57 updatedConfig = core.MergeUpdatedConfig(base, updatedFiles) 58 } 59 if cc == nil { 60 return updatedConfig, nil 61 } 62 return intctrlutil.MergeAndValidateConfigs(cc.Spec, updatedConfig, tpl.Keys, updatedParams) 63 }