check cp type with all parent types 83/39583/7
authorHuang Haibin <haibin.huang@intel.com>
Wed, 28 Mar 2018 18:27:42 +0000 (02:27 +0800)
committerHuang Haibin <haibin.huang@intel.com>
Thu, 29 Mar 2018 17:01:27 +0000 (01:01 +0800)
Change-Id: I01dad5e188be6db859d58661f9492a98851dc0df
Issue-ID: VFC-858
Signed-off-by: Huang Haibin <haibin.huang@intel.com>
catalog/pub/utils/toscaparser/basemodel.py
catalog/pub/utils/toscaparser/nsdmodel.py
catalog/pub/utils/toscaparser/vnfdmodel.py

index 205bdb4..20a990b 100644 (file)
@@ -29,6 +29,10 @@ from catalog.pub.utils.toscaparser.dataentityext import DataEntityExt
 
 logger = logging.getLogger(__name__)
 
+# TOSCA template key names
+SECTIONS = (CP_TYPE) = \
+           ('tosca.nodes.nfv.Cp')
+
 
 class BaseInfoModel(object):
 
@@ -231,6 +235,15 @@ class BaseInfoModel(object):
             return node_template.entity_tpl['interfaces']
         return None
 
+    def isNodeTypeX(self, node, nodeTypes, x):
+        node_type = node['nodeType']
+        while node_type.upper().find(x) == -1:
+            node_type_derived = node_type
+            node_type = nodeTypes[node_type]['derived_from']
+            if node_type == "tosca.nodes.Root" or node_type == node_type_derived:
+                return False
+        return True
+
     def isVnf(self, node):
         # return node['nodeType'].upper().find('.VNF.') >= 0 or node['nodeType'].upper().endswith('.VNF')
         return node['nodeType'].upper().find('.VF.') >= 0 or node['nodeType'].upper().endswith('.VF')
@@ -238,8 +251,8 @@ class BaseInfoModel(object):
     def isPnf(self, node):
         return node['nodeType'].upper().find('.PNF.') >= 0 or node['nodeType'].upper().endswith('.PNF')
 
-    def isCp(self, node):
-        return node['nodeType'].upper().find('.CP.') >= 0 or node['nodeType'].upper().endswith('.CP')
+    def isCp(self, node, node_types):
+        return self.isNodeTypeX(node, node_types, CP_TYPE)
 
     def isVl(self, node):
         isvl = node['nodeType'].upper().find('.VIRTUALLINK.') >= 0 or node['nodeType'].upper().find('.VL.') >= 0
index 7bf2bc6..37d1c11 100644 (file)
@@ -30,11 +30,11 @@ class EtsiNsdInfoModel(BaseInfoModel):
 
         nodeTemplates = map(functools.partial(self.buildNode, inputs=tosca.inputs, parsed_params=tosca.parsed_params),
                             tosca.nodetemplates)
-
+        node_types = tosca.topology_template.custom_defs
         self.vnfs = self._get_all_vnf(nodeTemplates)
         self.pnfs = self._get_all_pnf(nodeTemplates)
         self.vls = self.get_all_vl(nodeTemplates)
-        self.cps = self.get_all_cp(nodeTemplates)
+        self.cps = self.get_all_cp(nodeTemplates, node_types)
         self.routers = self.get_all_router(nodeTemplates)
         self.fps = self._get_all_fp(nodeTemplates)
         self.vnffgs = self._get_all_vnffg(tosca.topology_template.groups)
@@ -166,10 +166,10 @@ class EtsiNsdInfoModel(BaseInfoModel):
     def _isExternalVL(self, node):
         return node['nodeType'].upper().find('.ROUTEEXTERNALVL') >= 0
 
-    def get_all_cp(self, nodeTemplates):
+    def get_all_cp(self, nodeTemplates, node_types):
         cps = []
         for node in nodeTemplates:
-            if self.isCp(node):
+            if self.isCp(node, node_types):
                 cp = {}
                 cp['cp_id'] = node['name']
                 cp['cpd_id'] = node['name']
index 80722f7..a2c24cf 100644 (file)
@@ -29,7 +29,7 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
 
         nodeTemplates = map(functools.partial(self.buildNode, inputs=tosca.inputs, parsed_params=tosca.parsed_params),
                             tosca.nodetemplates)
-
+        node_types = tosca.topology_template.custom_defs
         self.services = self._get_all_services(nodeTemplates)
         self.vcloud = self._get_all_vcloud(nodeTemplates)
         self.vcenter = self._get_all_vcenter(nodeTemplates)
@@ -38,7 +38,7 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
         self.volume_storages = self._get_all_volume_storage(nodeTemplates)
         self.vdus = self._get_all_vdu(nodeTemplates)
         self.vls = self.get_all_vl(nodeTemplates)
-        self.cps = self.get_all_cp(nodeTemplates)
+        self.cps = self.get_all_cp(nodeTemplates, node_types)
         self.plugins = self.get_all_plugin(nodeTemplates)
         self.routers = self.get_all_router(nodeTemplates)
         self.server_groups = self.get_all_server_group(tosca.topology_template.groups)
@@ -241,10 +241,10 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
                 rets.append(ret)
         return rets
 
-    def get_all_cp(self, nodeTemplates):
+    def get_all_cp(self, nodeTemplates, node_types):
         cps = []
         for node in nodeTemplates:
-            if self.isCp(node):
+            if self.isCp(node, node_types):
                 cp = {}
                 cp['cp_id'] = node['name']
                 cp['cpd_id'] = node['name']