return [new_nets.get(net.get('name'), net) for net in list_1]
-
def merge_dicts(dict1, dict2):
for k in set(dict1).union(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):
+ 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]))
- 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 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()
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"] + "....")
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))
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"]):