mirror of
https://github.com/FairwindsOps/polaris.git
synced 2026-08-19 04:06:29 +00:00
* add config merge support * fix indentation * Update cmd/polaris/root.go Co-authored-by: Andy Suderman <andy@fairwinds.com> --------- Co-authored-by: Andy Suderman <andy@fairwinds.com>
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package config
|
|
|
|
import (
|
|
"gopkg.in/yaml.v3" // do not change the yaml import
|
|
)
|
|
|
|
func mergeYaml(defaultConfig, overridesConfig []byte) ([]byte, error) {
|
|
var defaultData, overrideConfig map[string]any
|
|
|
|
err := yaml.Unmarshal([]byte(defaultConfig), &defaultData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = yaml.Unmarshal([]byte(overridesConfig), &overrideConfig)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
mergedData := mergeYAMLMaps(defaultData, overrideConfig)
|
|
|
|
mergedConfig, err := yaml.Marshal(mergedData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return mergedConfig, nil
|
|
}
|
|
|
|
func mergeYAMLMaps(defaults, overrides map[string]any) map[string]any {
|
|
for k, v := range overrides {
|
|
if vMap, ok := v.(map[string]any); ok {
|
|
// if the key exists in defaults and is a map, recursively merge
|
|
if mv1, ok := defaults[k].(map[string]any); ok {
|
|
defaults[k] = mergeYAMLMaps(mv1, vMap)
|
|
} else {
|
|
defaults[k] = vMap
|
|
}
|
|
} else {
|
|
// add or overwrite the value in defaults
|
|
defaults[k] = v
|
|
}
|
|
}
|
|
return defaults
|
|
}
|