Fix deduplication AAI resource issues 43/99943/3
authoryangyan <yangyanyj@chinamobile.com>
Tue, 31 Dec 2019 01:35:45 +0000 (09:35 +0800)
committeryangyan <yangyanyj@chinamobile.com>
Mon, 6 Jan 2020 08:11:35 +0000 (16:11 +0800)
Change-Id: I2c140abda7f71bbde785cb2a922c0d88c67ea77f
Issue-ID: VFC-1595
Signed-off-by: yangyan <yangyanyj@chinamobile.com>
lcm/ns_vnfs/biz/handle_notification.py
lcm/pub/exceptions.py
lcm/pub/msapi/aai.py

index a66946d..4e957d1 100644 (file)
@@ -16,6 +16,7 @@ import logging
 import traceback
 import uuid
 
+
 from rest_framework import status
 from rest_framework.response import Response
 
@@ -23,7 +24,7 @@ from lcm.ns_vnfs.enum import INST_TYPE
 from lcm.pub.config.config import REPORT_TO_AAI
 from lcm.pub.database.models import (CPInstModel, NfInstModel, PortInstModel,
                                      VLInstModel, VmInstModel, VNFCInstModel)
-from lcm.pub.exceptions import NSLCMException
+from lcm.pub.exceptions import NSLCMException, RequestException
 from lcm.pub.msapi.aai import (create_network_aai, create_vserver_aai,
                                delete_network_aai, delete_vserver_aai,
                                query_network_aai, query_vserver_aai)
@@ -216,12 +217,15 @@ class HandleVnfLcmOocNotification(object):
         try:
             # query network in aai, get resource_version
             customer_info = query_network_aai(vlInstanceId)
-            resource_version = customer_info["resource-version"]
-
-            # delete network from aai
-            resp_data, resp_status = delete_network_aai(vlInstanceId, resource_version)
-            logger.debug("Success to delete network[%s] from aai, resp_status: [%s]."
-                         % (vlInstanceId, resp_status))
+            if customer_info:
+                resource_version = customer_info["resource-version"]
+
+                # delete network from aai
+                resp_data, resp_status = delete_network_aai(vlInstanceId, resource_version)
+                logger.debug("Success to delete network[%s] from aai, resp_status: [%s]."
+                             % (vlInstanceId, resp_status))
+        except RequestException:
+            logger.debug("Network has been delted in aai")
         except NSLCMException as e:
             logger.debug("Fail to delete network[%s] to aai, detail message: %s" % (vlInstanceId, e.args[0]))
         except:
@@ -277,15 +281,18 @@ class HandleVnfLcmOocNotification(object):
 
             # 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)
-            logger.debug(
-                "Success to delete vserver instance[%s] from aai, resp_status: [%s]." %
-                (vserver_id, resp_status))
-            logger.debug("delete_vserver_in_aai end!")
+            if vserver_info:
+                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)
+                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 RequestException:
+            logger.debug("Vserver has been deleted from aai")
         except NSLCMException as e:
             logger.debug("Fail to delete vserver from aai, detail message: %s" % e.args[0])
         except:
index 798a8ab..9b71f2b 100644 (file)
@@ -26,6 +26,10 @@ class BadRequestException(BaseException):
     pass
 
 
+class RequestException(BaseException):
+    pass
+
+
 class NSLCMException(BaseException):
     pass
 
index 7c81448..e6fe545 100644 (file)
@@ -17,7 +17,7 @@ import logging
 import uuid
 
 from lcm.pub.config.config import AAI_BASE_URL, AAI_USER, AAI_PASSWD
-from lcm.pub.exceptions import NSLCMException
+from lcm.pub.exceptions import NSLCMException, RequestException
 from lcm.pub.utils import restcall
 
 
@@ -230,6 +230,9 @@ def delete_vserver_aai(cloud_owner, cloud_region_id, tenant_id, vserver_id, reso
     if ret[0] != 0:
         logger.error("Status code is %s, detail is %s.", ret[2], ret[1])
         raise NSLCMException("Vserver delete exception in AAI")
+    if ret[2] == 404:
+        logger.error("Vserver has been deleted in aai")
+        raise RequestException("Vserver delete exception in AAI")
     return json.JSONDecoder().decode(ret[1]) if ret[1] else ret[1], ret[2]
 
 
@@ -283,6 +286,9 @@ def delete_network_aai(network_id, resource_version=""):
     if ret[0] != 0:
         logger.error("Status code is %s, detail is %s.", ret[2], ret[1])
         raise NSLCMException("Network delete exception in AAI")
+    if ret[2] == 404:
+        logger.error("Network has been deleted in aai")
+        raise RequestException("Network delete exception in AAI")
     return json.JSONDecoder().decode(ret[1]) if ret[1] else ret[1], ret[2]