X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=common%2Fpython%2Frift%2Fmano%2Ftosca_translator%2Frwmano%2Ftosca%2Ftosca_forwarding_path.py;fp=common%2Fpython%2Frift%2Fmano%2Ftosca_translator%2Frwmano%2Ftosca%2Ftosca_forwarding_path.py;h=4e39236323c7ab783b8123dd3aed2994692321eb;hb=bc183dcd09255cbe61afe64f8543824f2270634c;hp=0000000000000000000000000000000000000000;hpb=e178dc94f7ac4025f84685db11ea36e3a38a0b08;p=osm%2FSO.git diff --git a/common/python/rift/mano/tosca_translator/rwmano/tosca/tosca_forwarding_path.py b/common/python/rift/mano/tosca_translator/rwmano/tosca/tosca_forwarding_path.py new file mode 100644 index 00000000..4e392363 --- /dev/null +++ b/common/python/rift/mano/tosca_translator/rwmano/tosca/tosca_forwarding_path.py @@ -0,0 +1,86 @@ +from rift.mano.tosca_translator.rwmano.syntax.mano_resource import ManoResource +import uuid + + +TARGET_CLASS_NAME = 'ToscaForwardingPath' +class ToscaForwardingPath(ManoResource): + '''Translate TOSCA node type tosca.nodes.nfv.FP''' + + toscatype = 'tosca.nodes.nfv.FP' + + + def __init__(self, log, node, metadata=None): + super(ToscaForwardingPath, self).__init__(log, node, type_='forwarding_path', metadata=metadata) + self.metadata = metadata + self.classifier = None + self.rsp = None + self.cp = None + self.properties = {} + + def handle_forwarding_path_dependencies(self, nodes, vnf_type_to_capability_substitution_mapping): + def get_classifier(specs): + classifier_prop = {} + classifier_prop['name'] = 'VNFFG -' + str(self.name) + classifier_prop['id'] = self.id + if 'policy' in specs: + classifier_prop['match_attributes'] = [] + policy = specs['policy'] + if 'criteria' in policy: + match_prop = {} + match_prop['id'] = str(uuid.uuid1()) + for criteria in policy['criteria']: + if 'ip_dst_prefix' in criteria: + match_prop['destination_ip_address'] = criteria['ip_dst_prefix'] + if 'ip_proto' in criteria: + match_prop['ip_proto'] = criteria['ip_proto'] + if 'source_port_range' in criteria: + match_prop['source_port'] = int(criteria['source_port_range']) + if 'destination_port_range' in criteria: + match_prop['destination_port'] = int(criteria['destination_port_range']) + classifier_prop['match_attributes'].append(match_prop) + if 'cp' in specs: + cp_node_name = specs['cp']['capability'] + cp_node = self.get_node_with_name(cp_node_name, nodes) + if cp_node: + classifier_prop['vnfd_connection_point_ref'] = cp_node.cp_name + if 'cp' in specs: + vnf_node_name = specs['cp']['forwarder'] + vnf_node = self.get_node_with_name(vnf_node_name, nodes) + if vnf_node: + classifier_prop['vnfd_id_ref'] = vnf_node.id + classifier_prop['member_vnf_index_ref'] = vnf_node.get_member_vnf_index() + return classifier_prop + + def get_rsp(specs): + rsp = {} + rsp['id'] = str(uuid.uuid1()) + rsp['name'] = 'VNFFG-RSP-' + str(self.name) + rsp['vnfd_connection_point_ref'] = [] + if 'path' in specs: + fp_connection_point = [] + vnf_index = 1 + order_index = 1 + for rsp_item in specs['path']: + vnf_node_name = rsp_item['forwarder'] + conn_forwarder = rsp_item['capability'] + vnf_node = self.get_node_with_name(vnf_node_name, nodes) + for subs_mapping in vnf_type_to_capability_substitution_mapping[vnf_node.vnf_type]: + prop = {} + if conn_forwarder in subs_mapping: + fp_connection_point.append(subs_mapping[conn_forwarder]) + cp_node_name = subs_mapping[conn_forwarder] + cp_node = self.get_node_with_name(cp_node_name, nodes) + prop['vnfd_connection_point_ref'] = cp_node.cp_name + prop['vnfd_id_ref'] = vnf_node.id + prop['member_vnf_index_ref'] = vnf_index + prop['order'] = order_index + rsp['vnfd_connection_point_ref'].append(prop) + vnf_index = vnf_index + 1 + order_index = order_index + 1 + return rsp + + tosca_props = self.get_tosca_props() + self.classifier = get_classifier(tosca_props) + self.rsp = get_rsp(tosca_props) + if self.classifier and self.rsp: + self.classifier['rsp_id_ref'] = self.rsp['id']