3 from lcm.pub.utils.toscaparser.basemodel import BaseInfoModel
6 class EtsiNsdInfoModel(BaseInfoModel):
8 def __init__(self, path, params):
9 tosca = self.buildToscaTemplate(path, params)
10 self.parseModel(tosca)
12 def parseModel(self, tosca):
13 self.buidMetadata(tosca)
14 if hasattr(tosca, 'topology_template') and hasattr(tosca.topology_template, 'inputs'):
15 self.inputs = self.buildInputs(tosca.topology_template.inputs)
17 nodeTemplates = map(functools.partial(self.buildNode, inputs=tosca.inputs, parsed_params=tosca.parsed_params),
20 self.vnfs = self._get_all_vnf(nodeTemplates)
21 self.pnfs = self._get_all_pnf(nodeTemplates)
22 self.vls = self.get_all_vl(nodeTemplates)
23 self.cps = self.get_all_cp(nodeTemplates)
24 # self.routers = self.get_all_router(nodeTemplates)
25 # self.fps = self._get_all_fp(nodeTemplates)
26 # self.vnffgs = self._get_all_vnffg(tosca.topology_template.groups)
27 # self.server_groups = self.get_all_server_group(tosca.topology_template.groups)
28 # self.ns_exposed = self.get_all_endpoint_exposed(tosca.topology_template)
29 # self.policies = self._get_policies_scaling(tosca.topology_template.policies)
30 # self.ns_flavours = self.get_all_flavour(tosca.topology_template.groups)
31 # self.nested_ns = self.get_all_nested_ns(nodeTemplates)
33 def buildInputs(self, top_inputs):
35 for tmpinput in top_inputs:
37 tmp['type'] = tmpinput.type
38 tmp['description'] = tmpinput.description
39 tmp['default'] = tmpinput.default
41 ret[tmpinput.name] = tmp
44 def buildNode(self, nodeTemplate, inputs, parsed_params):
46 ret['name'] = nodeTemplate.name
47 ret['nodeType'] = nodeTemplate.type
48 if 'description' in nodeTemplate.entity_tpl:
49 ret['description'] = nodeTemplate.entity_tpl['description']
51 ret['description'] = ''
52 props = self.buildProperties(nodeTemplate, parsed_params)
53 ret['properties'] = self.verify_properties(props, inputs, parsed_params)
54 ret['requirements'] = self.build_requirements(nodeTemplate)
55 self.buildCapabilities(nodeTemplate, inputs, ret)
56 self.buildArtifacts(nodeTemplate, inputs, ret)
57 interfaces = self.build_interfaces(nodeTemplate)
58 if interfaces: ret['interfaces'] = interfaces
61 def _get_all_vnf(self, nodeTemplates):
63 for node in nodeTemplates:
66 vnf['vnf_id'] = node['name']
67 vnf['description'] = node['description']
68 vnf['properties'] = node['properties']
69 vnf['dependencies'] = map(lambda x: self.get_requirement_node_name(x), self.getNodeDependencys(node))
70 vnf['networks'] = self.get_networks(node)
75 def _get_all_pnf(self, nodeTemplates):
77 for node in nodeTemplates:
80 pnf['pnf_id'] = node['name']
81 pnf['description'] = node['description']
82 pnf['properties'] = node['properties']
83 pnf['cps'] = self.getVirtalBindingCpIds(node, nodeTemplates)
88 def getVirtalBindingCpIds(self, node, nodeTemplates):
89 return map(lambda x: x['name'], self.getVirtalBindingCps(node, nodeTemplates))
91 def getVirtalBindingCps(self, node, nodeTemplates):
93 for tmpnode in nodeTemplates:
94 if 'requirements' in tmpnode:
95 for item in tmpnode['requirements']:
96 for key, value in item.items():
97 if key.upper().startswith('VIRTUALBINDING'):
98 req_node_name = self.get_requirement_node_name(value)
99 if req_node_name != None and req_node_name == node['name']:
103 def get_all_vl(self, nodeTemplates):
105 for node in nodeTemplates:
108 vl['vl_id'] = node['name']
109 vl['description'] = node['description']
110 vl['properties'] = node['properties']
111 vl['route_external'] = False
112 vl['route_id'] = self._get_vl_route_id(node)
114 if self._isExternalVL(node):
116 vl['vl_id'] = node['name']
117 vl['description'] = node['description']
118 vl['properties'] = node['properties']
119 vl['route_external'] = True
123 def _get_vl_route_id(self, node):
124 route_ids = map(lambda x: self.get_requirement_node_name(x),
125 self.getRequirementByName(node, 'virtual_route'))
126 if len(route_ids) > 0:
130 def _isExternalVL(self, node):
131 return node['nodeType'].upper().find('.ROUTEEXTERNALVL') >= 0
133 def get_all_cp(self, nodeTemplates):
135 for node in nodeTemplates:
138 cp['cp_id'] = node['name']
139 cp['cpd_id'] = node['name']
140 cp['description'] = node['description']
141 cp['properties'] = node['properties']
142 cp['vl_id'] = self.get_node_vl_id(node)
143 binding_node_ids = map(lambda x: self.get_requirement_node_name(x), self.getVirtualbindings(node))
144 # cp['vnf_id'] = self._filter_vnf_id(binding_node_ids, nodeTemplates)
145 cp['pnf_id'] = self._filter_pnf_id(binding_node_ids, nodeTemplates)
146 vls = self.buil_cp_vls(node)
152 def buil_cp_vls(self, node):
153 return map(lambda x: self._build_cp_vl(x), self.getVirtualLinks(node))
155 def _build_cp_vl(self, req):
157 cp_vl['vl_id'] = self.get_prop_from_obj(req, 'node')
158 relationship = self.get_prop_from_obj(req, 'relationship')
159 if relationship != None:
160 properties = self.get_prop_from_obj(relationship, 'properties')
161 if properties != None and isinstance(properties, dict):
162 for key, value in properties.items():
166 def _filter_pnf_id(self, node_ids, node_templates):
167 for node_id in node_ids:
168 node = self.get_node_by_name(node_templates, node_id)