 |
Subscribe to this site |
|
vs-merge-fuckup

Published 2 months ago
by
vs
def mergeMaps(Map onto, Map... overrides){
if (!overrides){
return onto
}
else if (overrides.length == 1) {
overrides[0]?.each { k, v ->
if (k in onto.keySet()) {
if (v in Map && onto[k] in Map){
mergeMaps((Map) onto[k], (Map) v)
} else if (v in List) {
onto[k] += v
} else {
onto[k] = v
}
} else {
onto[k] = v
}
}
return onto
}
return overrides.inject(onto, { acc, override -> mergeMaps(acc, override ?: [:]) })
}
a=["spec": ["features":["database":["backup":["enabled":false, "sync_remote":["enabled":true, "remotes":["openstack_rgw":["path":
"s3backup", "conf":["type":"s3", "provider":"Ceph", "endpoint":"https://openstack-store.it.just.works/",
"access_key_id":"change_access_key", "secret_access_key":"change_secret_key"]]]]]]]]]
b=["spec":["features":["database":["backup":["sync_remote":["remotes":["openstack_rgw":
["conf":["access_key_id":["value_from":["secret_key_ref":["name":"osh-dev-mariadb-s3-hidden", "key":"access_key"]]],
"secret_access_key":["value_from":["secret_key_ref":["name":"osh-dev-mariadb-s3-hidden", "key":"secret_key"]]]]]]]]]]]]
s3Remote="openstack_rgw"
mariaDBspecData = ["spec": ["features": ["database": ["backup": ["sync_remote": ["remotes": ["${s3Remote}": ["conf": ["access_key_id": "ak", "secret_access_key": "sk"]]]]]]]]]
mergeMaps(a, mariaDBspecData)
print(a["spec"]["features"]["database"]["backup"]["sync_remote"])