Add convert router logic 55/8155/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Mon, 21 Aug 2017 11:42:48 +0000 (19:42 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Mon, 21 Aug 2017 11:42:48 +0000 (19:42 +0800)
After parse the nsd package, add get_all_router
function to convert the router info.

Change-Id: I6be26d8b12fe41176c2d9148b68fc106636ae9bb
Issue-ID: VFC-123
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
lcm/pub/utils/toscaparser/nsdmodel.py

index ae902df..7ea68a0 100644 (file)
@@ -21,7 +21,7 @@ class EtsiNsdInfoModel(BaseInfoModel):
         self.pnfs = self._get_all_pnf(nodeTemplates)
         self.vls = self.get_all_vl(nodeTemplates)
         self.cps = self.get_all_cp(nodeTemplates)
-        self.routers = self.get_all_router(nodeTemplates)
+        self.routers = self.get_all_router(nodeTemplates)
         # self.fps = self._get_all_fp(nodeTemplates)
         # self.vnffgs = self._get_all_vnffg(tosca.topology_template.groups)
         # self.server_groups = self.get_all_server_group(tosca.topology_template.groups)
@@ -168,4 +168,37 @@ class EtsiNsdInfoModel(BaseInfoModel):
             node = self.get_node_by_name(node_templates, node_id)
             if self.isPnf(node):
                 return node_id
-        return ""
\ No newline at end of file
+        return ""
+
+    def get_all_router(self, nodeTemplates):
+        rets = []
+        for node in nodeTemplates:
+            if self._isRouter(node):
+                ret = {}
+                ret['router_id'] = node['name']
+                ret['description'] = node['description']
+                ret['properties'] = node['properties']
+                ret['external_vl_id'] = self._get_router_external_vl_id(node)
+                ret['external_ip_addresses'] = self._get_external_ip_addresses(node)
+
+                rets.append(ret)
+        return rets
+
+    def _isRouter(self, node):
+        return node['nodeType'].upper().find('.ROUTER.') >= 0 or node['nodeType'].upper().endswith('.ROUTER')
+
+    def _get_router_external_vl(self, node):
+        return self.getRequirementByName(node, 'external_virtual_link')
+
+    def _get_router_external_vl_id(self, node):
+        ids = map(lambda x: self.get_requirement_node_name(x), self._get_router_external_vl(node))
+        if len(ids) > 0:
+            return ids[0]
+        return ""
+
+    def _get_external_ip_addresses(self, node):
+        external_vls = self._get_router_external_vl(node)
+        if len(external_vls) > 0:
+            if 'relationship' in external_vls[0] and 'properties' in external_vls[0]['relationship'] and 'router_ip_address' in external_vls[0]['relationship']['properties']:
+                return external_vls[0]['relationship']['properties']['router_ip_address']
+        return []
\ No newline at end of file