}
edge_obj.update(optional)
- if edge_obj not in graph_object['edges']:
- graph_object['edges'].append(edge_obj)
+ #if edge_obj not in graph_object['edges']:
+ # graph_object['edges'].append(edge_obj)
+ graph_object['edges'].append(edge_obj)
def add_node(self, id, type, group, positions, graph_object, optional={}):
if id is None:
return graph
+ def vnfd_to_graph(self, vnfd_catalog):
+ graph = {'vertices': [], 'edges': [], 'model': {
+ "layer": {
+ "vnfd": {
+ "nodes": {
+ "vdu": {
+ "addable": {
+ "callback": "addNode"
+ },
+ "removable": {
+ "callback": "removeNode"
+ }
+ },
+ "cp": {
+ "addable": {
+ "callback": "addNode"
+ },
+ "removable": {
+ "callback": "removeNode"
+ }
+ },
+ "int_cp": {
+ "removable": {
+ "callback": "removeNode"
+ }
+ },
+ "vnf_vl": {
+ "addable": {
+ "callback": "addNode"
+ },
+ "removable": {
+ "callback": "removeNode"
+ }
+ }
+ },
+ "allowed_edges": {
+ "vdu": {
+ "destination": {
+ "cp": {
+ "callback": "addLink",
+ "direct_edge": False,
+ "removable": {}
+ },
+ "vnf_vl": {
+ "callback": "addLink",
+ "direct_edge": False,
+ "removable": {}
+ }
+ }
+ },
+ "cp": {
+ "destination": {
+ "vdu": {
+ "callback": "addLink",
+ "direct_edge": False,
+ "removable": {}
+ }
+ }
+ },
+ # "int_cp": {
+ # "destination": {
+ # "vdu": {
+ # "direct_edge": False,
+ # },
+ # "vnf_vl": {
+ # "direct_edge": False,
+ # }
+ # }
+ # },
+ "vnf_vl": {
+ "destination": {
+ "int_cp": {
+ "direct_edge": False
+ },
+ "vdu": {
+ "callback": "addLink",
+ "direct_edge": False,
+ "removable": {}
+ }
+ }
+ }
+ }
+ },
+ "name": "OSM",
+ "version": 1,
+ "description": "osm"
+ }, "callback": {"addNode": {"class": "OSMController"}, "removeNode": {"class": "OSMController"},
+ "removeLink": {"class": "OSMController"}, "addLink": {"class": "OSMController"}}
+ }, 'graph_parameters': {'view': {'vnfd': {}}}}
+ if 'vnfd-catalog' in vnfd_catalog:
+ vnfd = vnfd_catalog['vnfd-catalog']['vnfd'][0]
+ elif 'vnfd:vnfd-catalog' in vnfd_catalog:
+ vnfd = vnfd_catalog['vnfd:vnfd-catalog']['vnfd'][0]
+ else:
+ return graph
+ vnfd_graph_param = graph['graph_parameters']['view']['vnfd']
+ vnfd_graph_param['id'] = vnfd['id'] if 'id' in vnfd else None
+ vnfd_graph_param['name'] = vnfd['name'] if 'name' in vnfd else None
+ vnfd_graph_param['short-name'] = vnfd['short-name'] if 'short-name' in vnfd else None
+ vnfd_graph_param['description'] = vnfd['description'] if 'description' in vnfd else None
+ vnfd_graph_param['version'] = vnfd['version'] if 'version' in vnfd else None
+ vnfd_graph_param['vendor'] = vnfd['vendor'] if 'vendor' in vnfd else None
+ if 'connection-point' in vnfd:
+ for extCp in vnfd['connection-point']:
+ self.add_node(extCp['name'], 'cp', vnfd['id'], None, graph,
+ {'property': {'custom_label': extCp['name']}, 'osm': extCp})
+ if 'vdu' in vnfd:
+ for vdu in vnfd['vdu']:
+ self.add_node(vdu['id'], 'vdu', vnfd['id'], None, graph,
+ {'property': {'custom_label': vdu['id']}, 'osm': vdu})
+ if 'internal-connection-point' in vdu:
+ for intCp in vdu['internal-connection-point']:
+ self.add_node(intCp['id'], 'int_cp', vnfd['id'], None, graph,
+ {'property': {'custom_label': intCp['id']}, 'osm': intCp})
+ if 'interface' in vdu:
+ for interface in vdu['interface']:
+ if interface['type'] == "EXTERNAL":
+ self.add_link(vdu['id'], interface['external-connection-point-ref'], 'vnfd', vnfd['id'], graph)
+ elif interface['type'] == "INTERNAL":
+ self.add_link(vdu['id'], interface['internal-connection-point-ref'], 'vnfd', vnfd['id'], graph, {'short': True})
+ if 'internal-vld' in vnfd:
+ for intVl in vnfd['internal-vld']:
+ self.add_node(intVl['id'], 'vnf_vl', intVl['id'], None, graph,
+ {'property': {'custom_label': intVl['id']}, 'osm': intVl})
+ for intCp in intVl['internal-connection-point']:
+ self.add_link(intVl['id'], intCp['id-ref'], 'vnfd', vnfd['id'], graph)
+
+ return graph
+
+ def nsd_to_graph(self, nsd_catalog):
+ graph = {'vertices': [], 'edges': [], 'model': {
+ "layer": {
+ "nsd": {
+ "nodes": {
+ "vnf": {
+ "addable": {"callback": "addNode"},
+ "removable": {"callback": "removeNode"}
+ },
+ "cp": {},
+ "ns_vl": {
+ "addable": {
+ "callback": "addNode"
+ },
+ "removable": {
+ "callback": "removeNode"
+ }
+ }
+ },
+ "allowed_edges": {
+ "cp": {
+ "destination": {
+ "vnfd": {
+ "direct_edge": False,
+ }
+ }
+ },
+ "vnf":{
+ "destination": {
+ "ns_vl": {
+ "direct_edge": False,
+ "callback": "addLink",
+ "removable" : {
+ "callback": "removeLink",
+ }
+ }
+ }
+ },
+ "ns_vl": {
+ "destination": {
+ "vnf": {
+ "direct_edge": False,
+ "callback": "addLink",
+ "removable": {
+ "callback": "removeLink",
+ }
+ }
+ }
+ }
+ }
+ },
+ "vnfd": {
+ "nodes": {
+ "vdu": {},
+ "cp": {},
+ "int_cp": {},
+ "vnf_vl": {}
+ },
+ "allowed_edges": {
+ "vdu": {
+ "destination": {
+ "cp": {
+ "direct_edge": False,
+ },
+ "int_cp": {
+ "direct_edge": False,
+ },
+ "vnf_vl": {
+ "direct_edge": False,
+ }
+ }
+ },
+ "cp": {
+ "destination": {
+ "vdu": {
+ "direct_edge": False,
+ }
+ }
+ },
+ "int_cp": {
+ "destination": {
+ "vdu": {
+ "direct_edge": False,
+ },
+ "vnf_vl": {
+ "direct_edge": False,
+ }
+ }
+ },
+ "vnf_vl": {
+ "destination": {
+ "vdu": {
+ "direct_edge": False
+ }
+ }
+ }
+ }
+ },
+ "name": "OSM",
+ "version": 1,
+ "description": "osm"
+ }, "callback": {"addNode": {"class": "OSMController"}, "removeNode": {"class": "OSMController"},
+ "removeLink": {"class": "OSMController"}, "addLink": {"class": "OSMController"}}
+ }, 'graph_parameters': {'view': {'nsd': {}}}}
+ if 'nsd-catalog' in nsd_catalog:
+ nsd = nsd_catalog['nsd-catalog']['nsd'][0]
+ elif 'nsd:nsd-catalog' in nsd_catalog:
+ nsd = nsd_catalog['nsd:nsd-catalog']['nsd'][0]
+ else:
+ return graph
+
+ nsd_graph_param = graph['graph_parameters']['view']['nsd']
+ nsd_graph_param['id'] = nsd['id'] if 'id' in nsd else None
+ nsd_graph_param['name'] = nsd['name'] if 'name' in nsd else None
+ nsd_graph_param['short-name'] = nsd['short-name'] if 'short-name' in nsd else None
+ nsd_graph_param['description'] = nsd['description'] if 'description' in nsd else None
+ nsd_graph_param['version'] = nsd['version'] if 'version' in nsd else None
+ nsd_graph_param['vendor'] = nsd['vendor'] if 'vendor' in nsd else None
+
+ if 'constituent-vnfd' in nsd:
+ for vnfd in nsd['constituent-vnfd']:
+ costinuent_id = vnfd['vnfd-id-ref']+":"+str(vnfd['member-vnf-index'])
+ self.add_node(costinuent_id, 'vnf', None, None, graph,
+ {'property': {'custom_label': costinuent_id}, 'osm': vnfd})
+
+ if 'vld' in nsd:
+ for vld in nsd['vld']:
+ self.add_node(vld['id'], 'ns_vl', None, None, graph,
+ {'property': {'custom_label': vld['id']}, 'osm': vld})
+ if 'vnfd-connection-point-ref' in vld:
+ for cp_ref in vld['vnfd-connection-point-ref']:
+ vnfd_id = cp_ref['vnfd-id-ref'] + ':' + str(cp_ref['member-vnf-index-ref'])
+ self.add_link(vld['id'], vnfd_id, 'nsd', None, graph)
+ return graph
+
if __name__ == '__main__':
parser = OsmParser()