X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=deploy%2Fdeploy-config.py;h=8896080dbb9b84d328bfc06852fba0e2e558ad88;hb=refs%2Fchanges%2F89%2F20989%2F3;hp=d87103b6c2e07f981a85f1ac714f00608e6b689e;hpb=2c8231be1aebe869297aa5ca15870da70338bd68;p=fuel.git diff --git a/deploy/deploy-config.py b/deploy/deploy-config.py index d87103b6c..8896080db 100644 --- a/deploy/deploy-config.py +++ b/deploy/deploy-config.py @@ -131,23 +131,10 @@ def merge_fuel_plugin_version_list(list1, list2): return final_list -def merge_lists(list1, list2): - if list1 and list2: - if isinstance(list1[0], dict): - if 'plugin_version' in list1[0].get('metadata', {}): - return merge_fuel_plugin_version_list(list1, list2) - else: - warning("Lists with dictionary inside are not mergeable! " - "List2 will overwrite List1. " - "List1: %s\nList2: %s" - % (list1, list2)) - return list2 - else: - return list2 - elif list1: - return list1 - else: - return list2 +def merge_networks(list_1, list_2): + new_nets = {x.get('name'): x for x in list_2} + + return [new_nets.get(net.get('name'), net) for net in list_1] def merge_dicts(dict1, dict2): @@ -155,17 +142,24 @@ def merge_dicts(dict1, dict2): if k in dict1 and k in dict2: if isinstance(dict1[k], dict) and isinstance(dict2[k], dict): yield (k, dict(merge_dicts(dict1[k], dict2[k]))) - elif isinstance(dict1[k], list) and isinstance(dict2[k], list): - yield (k, merge_lists(dict1[k], dict2[k])) - else: - # If one of the values is not a dict nor a list, - # you can't continue merging it. - # Value from second dict overrides one in first and we move on. - yield (k, dict2[k]) - elif k in dict1: - yield (k, dict1[k]) - else: + continue + if isinstance(dict1[k], list) and isinstance(dict2[k], list): + if k == 'versions': + yield (k, + merge_fuel_plugin_version_list(dict1[k], dict2[k])) + continue + if k == 'networks': + yield (k, + merge_networks(dict1[k], dict2[k])) + continue + + # If one of the values is not a dict nor a list, + # you can't continue merging it. + # Value from second dict overrides one in first if exists. + if k in dict2: yield (k, dict2[k]) + else: + yield (k, dict1[k]) setup_yaml() @@ -187,6 +181,7 @@ dea_base_sha = sha_uri(kwargs["dea_base_uri"]) dea_base_comment = dea_base_conf['dea-base-config-metadata']['comment'] dea_base_conf.pop('dea-base-config-metadata') final_dea_conf = dea_base_conf +dea_pod_override_nodes = None # Fetch dea-pod-override, extract and purge meta-data, merge with previous dea data structure print('Parsing the dea-pod-override from: ' + kwargs["dea_pod_override_uri"] + "....") @@ -200,6 +195,9 @@ if dea_pod_override_conf: dea_pod_comment = dea_pod_override_conf['dea-pod-override-config-metadata']['comment'] print('Merging dea-base and dea-pod-override configuration ....') dea_pod_override_conf.pop('dea-pod-override-config-metadata') + # Copy the list of original nodes, which holds info on their transformations + if 'nodes' in dea_pod_override_conf: + dea_pod_override_nodes = list(dea_pod_override_conf['nodes']) if dea_pod_override_conf: final_dea_conf = dict(merge_dicts(final_dea_conf, dea_pod_override_conf)) @@ -285,6 +283,25 @@ if deploy_scenario_conf["stack-extensions"]: dea_scenario_module_override_conf['settings']['editable'][module["module"]] = scenario_module_override_conf final_dea_conf = dict(merge_dicts(final_dea_conf, dea_scenario_module_override_conf)) +def get_node_ifaces_and_trans(nodes, nid): + for node in nodes: + if node['id'] == nid: + if 'transformations' in node and 'interfaces' in node: + return (node['interfaces'], node['transformations']) + else: + return None + + return None + +if dea_pod_override_nodes: + for node in final_dea_conf['nodes']: + data = get_node_ifaces_and_trans(dea_pod_override_nodes, node['id']) + if data: + print ("Honoring original interfaces and transformations for " + "node %d to %s, %s" % (node['id'], data[0], data[1])) + node['interfaces'] = data[0] + node['transformations'] = data[1] + # Dump final dea.yaml including configuration management meta-data to argument provided # directory if not os.path.exists(kwargs["output_path"]):