From 1adb38741baa7baed3c9630207952b6a2471ac57 Mon Sep 17 00:00:00 2001 From: Huang Haibin Date: Thu, 29 Mar 2018 02:27:42 +0800 Subject: check cp type with all parent types Change-Id: I01dad5e188be6db859d58661f9492a98851dc0df Issue-ID: VFC-858 Signed-off-by: Huang Haibin --- catalog/pub/utils/toscaparser/basemodel.py | 17 +++++++++++++++-- catalog/pub/utils/toscaparser/nsdmodel.py | 8 ++++---- catalog/pub/utils/toscaparser/vnfdmodel.py | 8 ++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/catalog/pub/utils/toscaparser/basemodel.py b/catalog/pub/utils/toscaparser/basemodel.py index 205bdb4e..20a990ba 100644 --- a/catalog/pub/utils/toscaparser/basemodel.py +++ b/catalog/pub/utils/toscaparser/basemodel.py @@ -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 diff --git a/catalog/pub/utils/toscaparser/nsdmodel.py b/catalog/pub/utils/toscaparser/nsdmodel.py index 7bf2bc60..37d1c117 100644 --- a/catalog/pub/utils/toscaparser/nsdmodel.py +++ b/catalog/pub/utils/toscaparser/nsdmodel.py @@ -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'] diff --git a/catalog/pub/utils/toscaparser/vnfdmodel.py b/catalog/pub/utils/toscaparser/vnfdmodel.py index 80722f7f..a2c24cfc 100644 --- a/catalog/pub/utils/toscaparser/vnfdmodel.py +++ b/catalog/pub/utils/toscaparser/vnfdmodel.py @@ -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'] -- cgit 1.2.3-korg