feat(kontemplate): defaults can now have nested values
See https://b.tvl.fyi/issues/409 for details. Change-Id: Ibb54fab7a78e0e5f708c2a7dc8bb26ac0b2b4689 Signed-off-by: Armin Schlegel <a.schlegel@gridx.de> Reviewed-on: https://cl.tvl.fyi/c/depot/+/11972 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
2beabe968c
commit
2357079891
2 changed files with 23 additions and 1 deletions
|
@ -29,13 +29,29 @@ func Merge(in1 *map[string]interface{}, in2 *map[string]interface{}) *map[string
|
|||
return in1
|
||||
}
|
||||
|
||||
// The maps are map[string]interface{} with unknown depth.
|
||||
// Loop over both maps into every level and merge them.
|
||||
new := make(map[string]interface{})
|
||||
|
||||
for k, v := range *in1 {
|
||||
new[k] = v
|
||||
}
|
||||
|
||||
for k, v := range *in2 {
|
||||
new[k] = v
|
||||
if existing, ok := new[k]; ok {
|
||||
// If both values are maps, merge them recursively
|
||||
if existingMap, ok := existing.(map[string]interface{}); ok {
|
||||
if newMap, ok := v.(map[string]interface{}); ok {
|
||||
new[k] = *Merge(&existingMap, &newMap)
|
||||
} else {
|
||||
new[k] = v
|
||||
}
|
||||
} else {
|
||||
new[k] = v
|
||||
}
|
||||
} else {
|
||||
new[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
return &new
|
||||
|
|
|
@ -47,6 +47,9 @@ func TestMergeWithNilMap(t *testing.T) {
|
|||
func TestMergeMaps(t *testing.T) {
|
||||
map1 := map[string]interface{}{
|
||||
"foo": "bar",
|
||||
"baz": map[string]interface{}{
|
||||
"qux": "quux",
|
||||
},
|
||||
}
|
||||
|
||||
map2 := map[string]interface{}{
|
||||
|
@ -56,6 +59,9 @@ func TestMergeMaps(t *testing.T) {
|
|||
result := Merge(&map1, &map2)
|
||||
expected := map[string]interface{}{
|
||||
"foo": "bar",
|
||||
"baz": map[string]interface{}{
|
||||
"qux": "quux",
|
||||
},
|
||||
"bar": "baz",
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue