1 from rift
.mano
.tosca_translator
.rwmano
.syntax
.mano_resource
import ManoResource
5 TARGET_CLASS_NAME
= 'ToscaForwardingPath'
6 class ToscaForwardingPath(ManoResource
):
7 '''Translate TOSCA node type tosca.nodes.nfv.FP'''
9 toscatype
= 'tosca.nodes.nfv.FP'
12 def __init__(self
, log
, node
, metadata
=None):
13 super(ToscaForwardingPath
, self
).__init
__(log
, node
, type_
='forwarding_path', metadata
=metadata
)
14 self
.metadata
= metadata
15 self
.classifier
= None
20 def handle_forwarding_path_dependencies(self
, nodes
, vnf_type_to_capability_substitution_mapping
):
22 def get_classifier(specs
):
24 classifier_prop
['name'] = 'VNFFG -' + str(self
.name
)
25 classifier_prop
['id'] = self
.id
27 classifier_prop
['match_attributes'] = []
28 policy
= specs
['policy']
29 if 'criteria' in policy
:
31 match_prop
['id'] = str(uuid
.uuid1())
32 for criteria
in policy
['criteria']:
33 if 'ip_dst_prefix' in criteria
:
34 match_prop
['destination_ip_address'] = criteria
['ip_dst_prefix']
35 if 'ip_proto' in criteria
:
36 match_prop
['ip_proto'] = criteria
['ip_proto']
37 if 'source_port_range' in criteria
:
38 match_prop
['source_port'] = int(criteria
['source_port_range'])
39 if 'destination_port_range' in criteria
:
40 match_prop
['destination_port'] = int(criteria
['destination_port_range'])
41 classifier_prop
['match_attributes'].append(match_prop
)
43 cp_node_name
= specs
['cp']['capability']
44 cp_node
= self
.get_node_with_name(cp_node_name
, nodes
)
46 classifier_prop
['vnfd_connection_point_ref'] = cp_node
.cp_name
48 vnf_node_name
= specs
['cp']['forwarder']
49 vnf_node
= self
.get_node_with_name(vnf_node_name
, nodes
)
51 classifier_prop
['vnfd_id_ref'] = vnf_node
.id
52 classifier_prop
['member_vnf_index_ref'] = vnf_node
.get_member_vnf_index()
53 return classifier_prop
57 rsp
['id'] = str(uuid
.uuid1())
58 rsp
['name'] = 'VNFFG-RSP-' + str(self
.name
)
59 rsp
['vnfd_connection_point_ref'] = []
61 fp_connection_point
= []
65 for rsp_item
in specs
['path']:
66 vnf_node_name
= rsp_item
['forwarder']
67 conn_forwarder
= rsp_item
['capability']
68 vnf_node
= self
.get_node_with_name(vnf_node_name
, nodes
)
70 for subs_mapping
in vnf_type_to_capability_substitution_mapping
[vnf_node
.vnf_type
]:
72 if conn_forwarder
in subs_mapping
:
73 fp_connection_point
.append(subs_mapping
[conn_forwarder
])
74 cp_node_name
= subs_mapping
[conn_forwarder
]
75 cp_node
= self
.get_node_with_name(cp_node_name
, nodes
)
76 if cp_node
.cp_name
not in visited_cps
:
77 prop
['vnfd_connection_point_ref'] = cp_node
.cp_name
78 prop
['vnfd_id_ref'] = vnf_node
.id
79 prop
['member_vnf_index_ref'] = vnf_node
.get_member_vnf_index()
80 prop
['order'] = order_index
81 rsp
['vnfd_connection_point_ref'].append(prop
)
82 vnf_index
= vnf_index
+ 1
83 order_index
= order_index
+ 1
84 visited_cps
.append(cp_node
.cp_name
)
87 tosca_props
= self
.get_tosca_props()
88 self
.classifier
= get_classifier(tosca_props
)
89 self
.rsp
= get_rsp(tosca_props
)
90 if self
.classifier
and self
.rsp
:
91 self
.classifier
['rsp_id_ref'] = self
.rsp
['id']