Groovy web console

subscribe to the feed Subscribe
to this
site

vs-merge-fuckup

Published 2 months ago by vs
Actions Execute script  ▶ Edit in console Back to console Show/hide line numbers View recent scripts
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"])