Merge "edit activity workflow plan for NS INIT"
[vfc/nfvo/lcm.git] / lcm / pub / utils / toscaparser / vnfdmodel.py
index 59eab4e..a665efe 100644 (file)
@@ -37,7 +37,15 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
         self.local_storages = self._get_all_local_storage(nodeTemplates)
         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.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)
+        self.element_groups = self._get_all_element_group(tosca.topology_template.groups)
+        self.policies = self._get_policies(tosca.topology_template.policies)
+        self.vnf_exposed = self.get_all_endpoint_exposed(tosca.topology_template)
+        self.vnf_flavours = self.get_all_flavour(tosca.topology_template.groups)
 
     def _get_all_services(self, nodeTemplates):
         ret = []
@@ -168,13 +176,13 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
                 ret['dependencies'] = map(lambda x: self.get_requirement_node_name(x), self.getNodeDependencys(node))
 
                 nfv_compute = self.getCapabilityByName(node, 'nfv_compute')
-                if nfv_compute != None and 'properties' in nfv_compute:
+                if nfv_compute is not None and 'properties' in nfv_compute:
                     ret['nfv_compute'] = nfv_compute['properties']
 
                 ret['vls'] = self.get_linked_vl_ids(node, nodeTemplates)
 
                 scalable = self.getCapabilityByName(node, 'scalable')
-                if scalable != None and 'properties' in scalable:
+                if scalable is not None and 'properties' in scalable:
                     ret['scalable'] = scalable['properties']
 
                 ret['cps'] = self.getVirtalBindingCpIds(node, nodeTemplates)
@@ -232,3 +240,63 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
                     ret['deploy_path'] = ''
                 rets.append(ret)
         return rets
+
+    def get_all_cp(self, nodeTemplates):
+        cps = []
+        for node in nodeTemplates:
+            if self.isCp(node):
+                cp = {}
+                cp['cp_id'] = node['name']
+                cp['cpd_id'] = node['name']
+                cp['description'] = node['description']
+                cp['properties'] = node['properties']
+                cp['vl_id'] = self.get_node_vl_id(node)
+                cp['vdu_id'] = self.get_node_vdu_id(node)
+                vls = self.buil_cp_vls(node)
+                if len(vls) > 1:
+                    cp['vls'] = vls
+                cps.append(cp)
+        return cps
+
+    def get_all_plugin(self, node_templates):
+        plugins = []
+        for node in node_templates:
+            if self._isPlugin(node):
+                plugin = {}
+                plugin['plugin_id'] = node['name']
+                plugin['description'] = node['description']
+                plugin['properties'] = node['properties']
+                if 'interfaces' in node:
+                    plugin['interfaces'] = node['interfaces']
+
+                plugins.append(plugin)
+        return plugins
+
+    def _isPlugin(self, node):
+        return node['nodeType'].lower().find('.plugin.') >= 0 or node['nodeType'].lower().endswith('.plugin')
+
+    def _get_all_element_group(self, groups):
+        rets = []
+        for group in groups:
+            if self._isVnfdElementGroup(group):
+                ret = {}
+                ret['group_id'] = group.name
+                ret['description'] = group.description
+                if 'properties' in group.tpl:
+                    ret['properties'] = group.tpl['properties']
+                ret['members'] = group.members
+                rets.append(ret)
+        return rets
+
+    def _isVnfdElementGroup(self, group):
+        return group.type.upper().find('.VNFDELEMENTGROUP.') >= 0 or group.type.upper().endswith('.VNFDELEMENTGROUP')
+
+    def _get_policies(self, top_policies):
+        policies = []
+        scaling_policies = self.get_scaling_policies(top_policies)
+        healing_policies = self.get_healing_policies(top_policies)
+        policies.append({"scaling": scaling_policies, 'healing': healing_policies})
+        return policies
+
+    def get_healing_policies(self, top_policies):
+        return self.get_policies_by_keyword(top_policies, '.HEALING')