Add exception protection in vfc-nfvo-lcm 19/18219/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Wed, 11 Oct 2017 09:02:43 +0000 (17:02 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Wed, 11 Oct 2017 09:02:43 +0000 (17:02 +0800)
Add exception protection in vfc-nfvo-lcm aai resource operation code

Change-Id: I346f40972dee3afd0fcf29a37d53ca0acd3bf27d
Issue-ID: VFC-525
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
lcm/ns/ns_create.py
lcm/ns/ns_delete.py
lcm/ns/vls/create_vls.py
lcm/ns/vnfs/create_vnfs.py
lcm/ns/vnfs/terminate_nfs.py

index de6bac6..ade9762 100644 (file)
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 import logging
+import traceback
 import uuid
 
 from lcm.pub.config.config import REPORT_TO_AAI
@@ -75,38 +76,43 @@ class CreateNSService(object):
 
     def create_ns_in_aai(self):
         logger.debug("CreateNSService::create_ns_in_aai::report ns instance[%s] to aai." % self.ns_inst_id)
-        # global_customer_id = "global-customer-id-" + self.ns_inst_id
-        # data = {
-        #     "global-customer-id": "global-customer-id-" + self.ns_inst_id,
-        #     "subscriber-name": "subscriber-name-" + self.ns_inst_id,
-        #     "subscriber-type": "subscriber-type-" + self.ns_inst_id,
-        #     "service-subscriptions": {
-        #         "service-subscription": [
-        #             {
-        #                 "service-type": "Network",
-        #                 "service-instances": {
-        #                     "service-instance": [
-        #                         {
-        #                             "service-instance-id": self.ns_inst_id,
-        #                             "service-instance-name": self.ns_name,
-        #                             "service-type": "Network",
-        #                             "service-role": "service-role-" + self.ns_inst_id
-        #                         }
-        #                     ]
-        #                 }
-        #             }
-        #         ]
-        #     }
-        # }
-        # resp_data, resp_status = create_customer_aai(global_customer_id, data)
-        data = {
-            "service-instance-id": self.ns_inst_id,
-            "service-instance-name": self.ns_name,
-            "service-type": "Network",
-            "service-role": "service-role-" + self.ns_inst_id
-        }
-        resp_data, resp_status = create_ns_aai(self.global_customer_id, self.service_type, self.ns_inst_id, data)
-        if resp_data:
-            logger.debug("Fail to create ns[%s] to aai: [%s].", self.ns_inst_id, resp_status)
-        else:
-            logger.debug("Success to create ns[%s] to aai: [%s].", self.ns_inst_id, resp_status)
+        try:
+            # global_customer_id = "global-customer-id-" + self.ns_inst_id
+            # data = {
+            #     "global-customer-id": "global-customer-id-" + self.ns_inst_id,
+            #     "subscriber-name": "subscriber-name-" + self.ns_inst_id,
+            #     "subscriber-type": "subscriber-type-" + self.ns_inst_id,
+            #     "service-subscriptions": {
+            #         "service-subscription": [
+            #             {
+            #                 "service-type": "Network",
+            #                 "service-instances": {
+            #                     "service-instance": [
+            #                         {
+            #                             "service-instance-id": self.ns_inst_id,
+            #                             "service-instance-name": self.ns_name,
+            #                             "service-type": "Network",
+            #                             "service-role": "service-role-" + self.ns_inst_id
+            #                         }
+            #                     ]
+            #                 }
+            #             }
+            #         ]
+            #     }
+            # }
+            # resp_data, resp_status = create_customer_aai(global_customer_id, data)
+            data = {
+                "service-instance-id": self.ns_inst_id,
+                "service-instance-name": self.ns_name,
+                "service-type": "Network",
+                "service-role": "service-role-" + self.ns_inst_id
+            }
+            resp_data, resp_status = create_ns_aai(self.global_customer_id, self.service_type, self.ns_inst_id, data)
+            if resp_data:
+                logger.debug("Fail to create ns[%s] to aai: [%s].", self.ns_inst_id, resp_status)
+            else:
+                logger.debug("Success to create ns[%s] to aai: [%s].", self.ns_inst_id, resp_status)
+        except NSLCMException as e:
+            logger.debug("Fail to createns[%s] to aai, detail message: %s" % (self.ns_inst_id, e.message))
+        except:
+            logger.error(traceback.format_exc())
index 4c10a57..a4ecab3 100644 (file)
@@ -19,6 +19,7 @@ import traceback
 from lcm.pub.config.config import REPORT_TO_AAI
 from lcm.pub.database.models import DefPkgMappingModel, InputParamMappingModel, ServiceBaseInfoModel
 from lcm.pub.database.models import NSInstModel
+from lcm.pub.exceptions import NSLCMException
 from lcm.pub.msapi.aai import query_ns_aai, delete_ns_aai
 
 logger = logging.getLogger(__name__)
@@ -51,30 +52,35 @@ class DeleteNsService(object):
 
     def delete_ns_in_aai(self):
         logger.debug("DeleteNsService::delete_ns_in_aai::delete ns instance[%s] in aai." % self.ns_inst_id)
-        # global_customer_id = "global-customer-id-" + self.ns_inst_id
-        #
-        # # query ns instance in aai, get resource_version
-        # customer_info = query_customer_aai(global_customer_id)
-        # resource_version = customer_info["resource-version"]
-        #
-        # # delete ns instance from aai
-        # resp_data, resp_status = delete_customer_aai(global_customer_id, resource_version)
+        try:
+            # global_customer_id = "global-customer-id-" + self.ns_inst_id
+            #
+            # # query ns instance in aai, get resource_version
+            # customer_info = query_customer_aai(global_customer_id)
+            # resource_version = customer_info["resource-version"]
+            #
+            # # delete ns instance from aai
+            # resp_data, resp_status = delete_customer_aai(global_customer_id, resource_version)
 
-        ns_insts = NSInstModel.objects.filter(id=self.ns_inst_id)
-        self.global_customer_id = ns_insts[0].global_customer_id
-        self.service_type = ns_insts[0].service_type
-        # query ns instance in aai, get resource_version
-        logger.debug("self.global_customer_id=[%s], self.service_type=[%s], self.ns_inst_id=[%s]"
-                     % (self.global_customer_id, self.service_type, self.ns_inst_id))
-        ns_info = query_ns_aai(self.global_customer_id, self.service_type, self.ns_inst_id)
-        resource_version = ns_info["resource-version"]
+            ns_insts = NSInstModel.objects.filter(id=self.ns_inst_id)
+            self.global_customer_id = ns_insts[0].global_customer_id
+            self.service_type = ns_insts[0].service_type
+            # query ns instance in aai, get resource_version
+            logger.debug("self.global_customer_id=[%s], self.service_type=[%s], self.ns_inst_id=[%s]"
+                         % (self.global_customer_id, self.service_type, self.ns_inst_id))
+            ns_info = query_ns_aai(self.global_customer_id, self.service_type, self.ns_inst_id)
+            resource_version = ns_info["resource-version"]
 
-        # delete ns instance from aai
-        logger.debug("ns instance resource_version=[%s]" % resource_version)
-        resp_data, resp_status = delete_ns_aai(self.global_customer_id, self.service_type,
-                                               self.ns_inst_id, resource_version)
-        if resp_data:
-            logger.debug("Fail to delete ns instance[%s] from aai, resp_status: [%s]." % (self.ns_inst_id, resp_status))
-        else:
-            logger.debug("Success to delete ns instance[%s] from aai, resp_status: [%s]."
-                         % (self.ns_inst_id, resp_status))
+            # delete ns instance from aai
+            logger.debug("ns instance resource_version=[%s]" % resource_version)
+            resp_data, resp_status = delete_ns_aai(self.global_customer_id, self.service_type,
+                                                   self.ns_inst_id, resource_version)
+            if resp_data:
+                logger.debug("Fail to delete ns[%s] from aai, resp_status: [%s]." % (self.ns_inst_id, resp_status))
+            else:
+                logger.debug("Success to delete ns[%s] from aai, resp_status: [%s]."
+                             % (self.ns_inst_id, resp_status))
+        except NSLCMException as e:
+            logger.debug("Fail to delete ns[%s] from aai, detail message: %s" % (self.ns_inst_id, e.message))
+        except:
+            logger.error(traceback.format_exc())
index 9d33838..15dee54 100644 (file)
@@ -199,10 +199,10 @@ class CreateVls(object):
         data = {
             "network-id": self.vl_inst_id,
             "network-name": self.vl_inst_name,
-            "is-bound-to-vpn": "false",
-            "is-provider-network": "true",
-            "is-shared-network": "true",
-            "is-external-network": "true",
+            "is-bound-to-vpn": False,
+            "is-provider-network": True,
+            "is-shared-network": True,
+            "is-external-network": True,
             "relationship-list": {
                 "relationship": [
                     {
index f7b9491..083131c 100644 (file)
@@ -277,80 +277,93 @@ class CreateVnfs(Thread):
 
     def create_vnf_in_aai(self):
         logger.debug("CreateVnfs::create_vnf_in_aai::report vnf instance[%s] to aai." % self.nf_inst_id)
-        data = {
-            "vnf-id": self.nf_inst_id,
-            "vnf-name": self.vnf_inst_name,
-            "vnf-type": "vnf-type-test111",
-            "service-id": self.ns_inst_id,
-            "in-maint": True,
-            "is-closed-loop-disabled": False,
-            "relationship-list": {
-                "relationship": [
-                    {
-                        "related-to": "service-instance",
-                        "relationship-data": [
-                            {
-                                "relationship-key": "customer.global-customer-id",
-                                "relationship-value": "global-customer-id-" + self.ns_inst_id
-                            },
-                            {
-                                "relationship-key": "service-subscription.service-type",
-                                "relationship-value": "Network"
-                            },
-                            {
-                                "relationship-key": "service-instance.service-instance-id",
-                                "relationship-value": self.ns_inst_id
-                            }
-                        ]
-                    }
-                ]
-            }
-        }
-        resp_data, resp_status = create_vnf_aai(self.nf_inst_id, data)
-        if resp_data:
-            logger.debug("Fail to create vnf instance[%s] to aai, vnf instance=[%s], resp_status: [%s]."
-                         % (self.nf_inst_id, self.ns_inst_id, resp_status))
-        else:
-            logger.debug("Success to create vnf instance[%s] to aai, vnf instance=[%s], resp_status: [%s]."
-                         % (self.nf_inst_id, self.ns_inst_id, resp_status))
-
-    def create_vserver_in_aai(self):
-        logger.debug("CreateVnfs::create_vserver_in_aai::report vserver instance to aai.")
-        cloud_owner, cloud_region_id = split_vim_to_owner_region(self.vim_id)
-
-        # query vim_info from aai
-        vim_info = get_vim_by_id(self.vim_id)
-        tenant_id = vim_info["tenant"]
-        vm_inst_infos = VmInstModel.objects.filter(insttype=INST_TYPE.VNF, instid=self.nf_inst_id)
-        for vm_inst_info in vm_inst_infos:
-            vserver_id = vm_inst_info.resouceid
+        try:
             data = {
-                "vserver-id": vm_inst_info.resouceid,
-                "vserver-name": vm_inst_info.vmname,
-                "prov-status": "ACTIVE",
-                "vserver-selflink": "",
+                "vnf-id": self.nf_inst_id,
+                "vnf-name": self.vnf_inst_name,
+                "vnf-type": "vnf-type-test111",
+                "service-id": self.ns_inst_id,
                 "in-maint": True,
                 "is-closed-loop-disabled": False,
                 "relationship-list": {
                     "relationship": [
                         {
-                            "related-to": "generic-vnf",
+                            "related-to": "service-instance",
                             "relationship-data": [
                                 {
-                                    "relationship-key": "generic-vnf.vnf-id",
-                                    "relationship-value": self.nf_inst_id
+                                    "relationship-key": "customer.global-customer-id",
+                                    "relationship-value": "global-customer-id-" + self.ns_inst_id
+                                },
+                                {
+                                    "relationship-key": "service-subscription.service-type",
+                                    "relationship-value": "Network"
+                                },
+                                {
+                                    "relationship-key": "service-instance.service-instance-id",
+                                    "relationship-value": self.ns_inst_id
                                 }
                             ]
                         }
                     ]
                 }
             }
-
-            # create vserver instance in aai
-            resp_data, resp_status = create_vserver_aai(cloud_owner, cloud_region_id, tenant_id, vserver_id, data)
+            resp_data, resp_status = create_vnf_aai(self.nf_inst_id, data)
             if resp_data:
-                logger.debug("Fail to create vserver instance[%s] to aai, vnf instance=[%s], resp_status: [%s]."
-                             % (vserver_id, self.nf_inst_id, resp_status))
+                logger.debug("Fail to create vnf[%s] to aai, ns instance=[%s], resp_status: [%s]."
+                             % (self.nf_inst_id, self.ns_inst_id, resp_status))
             else:
-                logger.debug("Success to create vserver instance[%s] to aai, vnf instance=[%s], resp_status: [%s]."
-                             % (vserver_id, self.nf_inst_id, resp_status))
+                logger.debug("Success to create vnf[%s] to aai, ns instance=[%s], resp_status: [%s]."
+                             % (self.nf_inst_id, self.ns_inst_id, resp_status))
+        except NSLCMException as e:
+            logger.debug("Fail to create vnf[%s] to aai, ns instance=[%s], detail message: %s"
+                         % (self.nf_inst_id, self.ns_inst_id, e.message))
+        except:
+            logger.error(traceback.format_exc())
+
+    def create_vserver_in_aai(self):
+        logger.debug("CreateVnfs::create_vserver_in_aai::report vserver instance to aai.")
+        try:
+            cloud_owner, cloud_region_id = split_vim_to_owner_region(self.vim_id)
+
+            # query vim_info from aai
+            vim_info = get_vim_by_id(self.vim_id)
+            tenant_id = vim_info["tenant"]
+            vm_inst_infos = VmInstModel.objects.filter(insttype=INST_TYPE.VNF, instid=self.nf_inst_id)
+            for vm_inst_info in vm_inst_infos:
+                vserver_id = vm_inst_info.resouceid
+                data = {
+                    "vserver-id": vm_inst_info.resouceid,
+                    "vserver-name": vm_inst_info.vmname,
+                    "prov-status": "ACTIVE",
+                    "vserver-selflink": "",
+                    "in-maint": True,
+                    "is-closed-loop-disabled": False,
+                    "relationship-list": {
+                        "relationship": [
+                            {
+                                "related-to": "generic-vnf",
+                                "relationship-data": [
+                                    {
+                                        "relationship-key": "generic-vnf.vnf-id",
+                                        "relationship-value": self.nf_inst_id
+                                    }
+                                ]
+                            }
+                        ]
+                    }
+                }
+
+                # create vserver instance in aai
+                resp_data, resp_status = create_vserver_aai(cloud_owner, cloud_region_id, tenant_id, vserver_id, data)
+                if resp_data:
+                    logger.debug("Fail to create vserver[%s] to aai, vnf instance=[%s], resp_status: [%s]."
+                                 % (vserver_id, self.nf_inst_id, resp_status))
+                else:
+                    logger.debug("Success to create vserver[%s] to aai, vnf instance=[%s], resp_status: [%s]."
+                                 % (vserver_id, self.nf_inst_id, resp_status))
+            logger.debug("Success to create all vserver to aai.")
+        except NSLCMException as e:
+            logger.debug("Fail to create vserver to aai, vnf instance=[%s], detail message: %s"
+                         % (self.nf_inst_id, e.message))
+        except:
+            logger.error(traceback.format_exc())
index d641deb..595470e 100644 (file)
@@ -135,45 +135,51 @@ class TerminateVnfs(threading.Thread):
 
     def delete_vnf_in_aai(self):
         logger.debug("TerminateVnfs::delete_vnf_in_aai::delete vnf instance[%s] in aai." % self.vnf_inst_id)
+        try:
+            # query vnf instance in aai, get resource_version
+            customer_info = query_vnf_aai(self.vnf_inst_id)
+            resource_version = customer_info["resource-version"]
 
-        # query vnf instance in aai, get resource_version
-        customer_info = query_vnf_aai(self.vnf_inst_id)
-        resource_version = customer_info["resource-version"]
-
-        # delete vnf instance from aai
-        resp_data, resp_status = delete_vnf_aai(self.vnf_inst_id, resource_version)
-        if resp_data:
-            logger.debug("Fail to delete vnf instance[%s] from aai, resp_status: [%s]."
-                         % (self.vnf_inst_id, resp_status))
-        else:
-            logger.debug(
-                "Success to delete vnf instance[%s] from aai, resp_status: [%s]." % (self.vnf_inst_id, resp_status))
-
-    def delete_vserver_in_aai(self):
-        logger.debug("delete_vserver_in_aai start!")
-
-        vm_inst_infos = VmInstModel.objects.filter(insttype=INST_TYPE.VNF, instid=self.vnf_inst_id)
-        for vm_inst_info in vm_inst_infos:
-            vserver_id = vm_inst_info.resouceid
-            vim_id = vm_inst_info.vimid
-            cloud_owner, cloud_region_id = split_vim_to_owner_region(vim_id)
-            # query vim_info from aai, get tenant
-            vim_info = get_vim_by_id(vim_id)
-            tenant_id = vim_info["tenant"]
-
-            # query vserver instance in aai, get resource_version
-            vserver_info = query_vserver_aai(cloud_owner, cloud_region_id, tenant_id, vserver_id)
-            resource_version = vserver_info["resource-version"]
-
-            # delete vserver instance from aai
-            resp_data, resp_status = delete_vserver_aai(cloud_owner, cloud_region_id,
-                                                        tenant_id, vserver_id, resource_version)
+            # delete vnf instance from aai
+            resp_data, resp_status = delete_vnf_aai(self.vnf_inst_id, resource_version)
             if resp_data:
-                logger.debug("Fail to delete vserver instance[%s] from aai, resp_status: [%s]." %
-                             (vserver_id, resp_status))
+                logger.debug("Fail to delete vnf[%s] from aai, resp_status: [%s]." % (self.vnf_inst_id, resp_status))
             else:
                 logger.debug(
-                    "Success to delete vserver instance[%s] from aai, resp_status: [%s]." %
-                    (vserver_id, resp_status))
+                    "Success to delete vnf[%s] from aai, resp_status: [%s]." % (self.vnf_inst_id, resp_status))
+        except NSLCMException as e:
+            logger.debug("Fail to delete vnf from aai[%s], detail message: %s" % (self.vnf_inst_id, e.message))
+        except:
+            logger.error(traceback.format_exc())
 
-        logger.debug("delete_vserver_in_aai end!")
+    def delete_vserver_in_aai(self):
+        logger.debug("delete_vserver_in_aai start!")
+        try:
+            vm_inst_infos = VmInstModel.objects.filter(insttype=INST_TYPE.VNF, instid=self.vnf_inst_id)
+            for vm_inst_info in vm_inst_infos:
+                vserver_id = vm_inst_info.resouceid
+                vim_id = vm_inst_info.vimid
+                cloud_owner, cloud_region_id = split_vim_to_owner_region(vim_id)
+                # query vim_info from aai, get tenant
+                vim_info = get_vim_by_id(vim_id)
+                tenant_id = vim_info["tenant"]
+
+                # query vserver instance in aai, get resource_version
+                vserver_info = query_vserver_aai(cloud_owner, cloud_region_id, tenant_id, vserver_id)
+                resource_version = vserver_info["resource-version"]
+
+                # delete vserver instance from aai
+                resp_data, resp_status = delete_vserver_aai(cloud_owner, cloud_region_id,
+                                                            tenant_id, vserver_id, resource_version)
+                if resp_data:
+                    logger.debug("Fail to delete vserver instance[%s] from aai, resp_status: [%s]." %
+                                 (vserver_id, resp_status))
+                else:
+                    logger.debug(
+                        "Success to delete vserver instance[%s] from aai, resp_status: [%s]." %
+                        (vserver_id, resp_status))
+            logger.debug("delete_vserver_in_aai end!")
+        except NSLCMException as e:
+            logger.debug("Fail to delete vserver from aai, detail message: %s" % e.message)
+        except:
+            logger.error(traceback.format_exc())