Add svnfm-driver query vnfm_info from nslcm
[vfc/nfvo/driver/vnfm/svnfm.git] / zte / vmanager / driver / interfaces / views.py
index af316f0..3f4a4ba 100644 (file)
@@ -21,7 +21,7 @@ from rest_framework.decorators import api_view
 from rest_framework.response import Response
 
 from driver.pub.utils import restcall
-from driver.pub.utils.restcall import req_by_msb
+from driver.pub.utils.restcall import req_by_msb, call_aai
 
 logger = logging.getLogger(__name__)
 
@@ -51,24 +51,28 @@ def mapping_conv(keyword_map, rest_return):
     return resp_data
 
 
-query_vnfd_url = "openoapi/nslcm/v1/vnfpackage/%s"
-query_vnfm_url = "openoapi/extsys/v1/vnfms/%s"
-query_package_url = "openoapi/nslcm/v1/vnfpackage/%s"
+query_vnfd_url = "api/nslcm/v1/vnfpackage/%s"
+query_vnfm_url = "api/extsys/v1/vnfms/%s"
+query_package_url = "api/nslcm/v1/vnfpackage/%s"
 
+#Query vnfm_info from nslcm
+def get_vnfminfo_from_nslcm(vnfmid):
+    ret = req_by_msb("api/nslcm/v1/vnfms/%s" % vnfmid, "GET")
+    return ret
 
-# Query VNFM by VNFMID
+# Query vnfm_info from esr
 def vnfm_get(vnfmid):
-    ret = req_by_msb("openoapi/extsys/v1/vnfms/%s" % vnfmid, "GET")
+    ret = call_aai("api/aai-esr-server/v1/vnfms/%s" % vnfmid, "GET")
     return ret
 
-
+# Query vnfd_info from nslcm
 def vnfd_get(vnfpackageid):
-    ret = req_by_msb("openoapi/nslcm/v1/vnfpackage/%s" % vnfpackageid, "GET")
+    ret = req_by_msb("api/nslcm/v1/vnfpackage/%s" % vnfpackageid, "GET")
     return ret
 
-
+# Query vnfpackage_info from nslcm
 def vnfpackage_get(csarid):
-    ret = req_by_msb("openoapi/nslcm/v1/vnfpackage/%s" % csarid, "GET")
+    ret = req_by_msb("api/nslcm/v1/vnfpackage/%s" % csarid, "GET")
     return ret
 
 
@@ -95,7 +99,7 @@ def instantiate_vnf(request, *args, **kwargs):
     try:
         logger.debug("[%s] request.data=%s", fun_name(), request.data)
         vnfm_id = ignorcase_get(kwargs, "vnfmid")
-        ret = vnfm_get(vnfm_id)
+        ret = get_vnfminfo_from_nslcm(vnfm_id)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
         vnfm_info = json.JSONDecoder().decode(ret[1])
@@ -116,23 +120,14 @@ def instantiate_vnf(request, *args, **kwargs):
         data = {}
         data["NFVOID"] = 1
         data["VNFMID"] = vnfm_id
-        # data["VNFD"] = ignorcase_get(packageInfo, "downloadUri")
-        # data["VNFURL"] = ignorcase_get(packageInfo, "downloadUri")
         vnfdId = ignorcase_get(packageInfo, "vnfdId")
+        # TODO  convert sdc vnf package to vnf vender package
         from urlparse import urlparse
         vnfm_ip = urlparse(ignorcase_get(vnfm_info, "url")).netloc.split(':')[0]
-        if "vCSCF_NF_ZTE" == vnfdId:
-            data["VNFD"] = "ftp://VMVERSION:vmversion@" + "192.168.128.159" + ":21/CSCF"
-            data["VNFURL"] = "ftp://VMVERSION:vmversion@" + "192.168.128.159" + ":21/CSCF"
-        elif "vPCRF_NF_ZTE" == vnfdId:
-            data["VNFD"] = "ftp://VMVERSION:vmversion@" + "192.168.128.159" + ":21/PCRF"
-            data["VNFURL"] = "ftp://VMVERSION:vmversion@" + "192.168.128.159" + ":21/PCRF"
-        elif "vTAS_NF_ZTE" == vnfdId:
-            data["VNFD"] = "ftp://VMVERSION:vmversion@" + "192.168.128.159" + ":21/SSS"
-            data["VNFURL"] = "ftp://VMVERSION:vmversion@" + "192.168.128.159" + ":21/SSS"
-        elif "vSPGW_NF_ZTE" == vnfdId:
-            data["VNFD"] = "ftp://VMVERSION:vmversion@" + "192.168.237.159" + ":21/vgw31"
-            data["VNFURL"] = "ftp://VMVERSION:vmversion@" + "192.168.237.159" + ":21/vgw31"
+        VNFS = ["SPGW", "MME"]
+        if vnfdId in VNFS:
+            data["VNFD"] = "ftp://VMVERSION:vmversion@" + vnfm_ip + ":21/" + vnfdId
+            data["VNFURL"] = "ftp://VMVERSION:vmversion@" + vnfm_ip + ":21/" + vnfdId
         else:
             data["VNFD"] = ignorcase_get(packageInfo, "downloadUri")
             data["VNFURL"] = ignorcase_get(packageInfo, "downloadUri")
@@ -151,6 +146,7 @@ def instantiate_vnf(request, *args, **kwargs):
         data["extension"]["vnfid"] = data["VNFD"]
         data["extension"]["multivim"] = 0
         logger.debug("[%s] call_req data=%s", fun_name(), data)
+
         ret = restcall.call_req(
             base_url=ignorcase_get(vnfm_info, "url"),
             user=ignorcase_get(vnfm_info, "userName"),
@@ -159,6 +155,7 @@ def instantiate_vnf(request, *args, **kwargs):
             resource=create_vnf_url,
             method='post',
             content=json.JSONEncoder().encode(data))
+
         logger.debug("[%s] call_req ret=%s", fun_name(), ret)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
@@ -186,7 +183,7 @@ def terminate_vnf(request, *args, **kwargs):
     try:
         logger.debug("[%s] request.data=%s", fun_name(), request.data)
         vnfm_id = ignorcase_get(kwargs, "vnfmid")
-        ret = vnfm_get(vnfm_id)
+        ret = get_vnfminfo_from_nslcm(vnfm_id)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
         vnfm_info = json.JSONDecoder().decode(ret[1])
@@ -225,7 +222,7 @@ def query_vnf(request, *args, **kwargs):
     try:
         logger.debug("[%s] request.data=%s", fun_name(), request.data)
         vnfm_id = ignorcase_get(kwargs, "vnfmid")
-        ret = vnfm_get(vnfm_id)
+        ret = get_vnfminfo_from_nslcm(vnfm_id)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
         vnfm_info = json.JSONDecoder().decode(ret[1])
@@ -270,7 +267,7 @@ def operation_status(request, *args, **kwargs):
     try:
         logger.debug("[%s] request.data=%s", fun_name(), request.data)
         vnfm_id = ignorcase_get(kwargs, "vnfmid")
-        ret = vnfm_get(vnfm_id)
+        ret = get_vnfminfo_from_nslcm(vnfm_id)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
         vnfm_info = json.JSONDecoder().decode(ret[1])
@@ -297,7 +294,7 @@ def operation_status(request, *args, **kwargs):
 
 
 # Grant VNF Lifecycle Operation
-grant_vnf_url = 'openoapi/nslcm/v1/ns/grantvnf'
+grant_vnf_url = 'api/nslcm/v1/ns/grantvnf'
 grant_vnf_param_map = {
     "VNFMID": "",
     "NFVOID": "",
@@ -357,7 +354,7 @@ def grantvnf(request, *args, **kwargs):
 
 
 # Notify LCM Events
-notify_url = 'openoapi/nslcm/v1/ns/{vnfmid}/vnfs/{vnfInstanceId}/Notify'
+notify_url = 'api/nslcm/v1/ns/{vnfmid}/vnfs/{vnfInstanceId}/Notify'
 notify_param_map = {
     "NFVOID": "",
     "VNFMID": "VNFMID",
@@ -442,8 +439,8 @@ def scale(request, *args, **kwargs):
         logger.info("request.data = %s", request.data)
         logger.info("requested_url = %s", request.get_full_path())
         vnfm_id = ignorcase_get(kwargs, "vnfmid")
-        nf_instance_id = ignorcase_get(kwargs, "nfInstanceId")
-        ret = vnfm_get(vnfm_id)
+        nf_instance_id = ignorcase_get(kwargs, "vnfInstanceId")
+        ret = get_vnfminfo_from_nslcm(vnfm_id)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
         vnfm_info = json.JSONDecoder().decode(ret[1])
@@ -479,7 +476,7 @@ def scale(request, *args, **kwargs):
         if ret[0] != 0:
             return Response(data={'error':'scale error'}, status=ret[2])
         resp_data = json.JSONDecoder().decode(ret[1])
-        jobId = resp_data["jobid"]
+        jobId = resp_data["jobid"]
         logger.info("resp_data=%s", resp_data)
     except Exception as e:
         logger.error("Error occurred when scaling VNF")
@@ -488,6 +485,45 @@ def scale(request, *args, **kwargs):
     return Response(data=resp_data, status=ret[2])
 
 
+nf_healing_url = '/api/v1/nf_m_i/nfs/{vnfInstanceID}/vms/operation'
+
+@api_view(http_method_names=['POST'])
+def heal(request, *args, **kwargs):
+    logger.info("====heal_vnf===")
+    try:
+        logger.info("request.data = %s", request.data)
+        logger.info("requested_url = %s", request.get_full_path())
+        vnfm_id = ignorcase_get(kwargs, "vnfmid")
+        nf_instance_id = ignorcase_get(kwargs, "vnfInstanceId")
+        ret = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret[0] != 0:
+            return Response(data={'error': ret[1]}, status=ret[2])
+        vnfm_info = json.JSONDecoder().decode(ret[1])
+        data = request.data
+        data['lifecycleoperation'] = 'operate'
+        data['isgrace'] = 'force'
+
+        logger.info("data = %s", data)
+        ret = restcall.call_req(
+            base_url=ignorcase_get(vnfm_info, "url"),
+            user=ignorcase_get(vnfm_info, "userName"),
+            passwd=ignorcase_get(vnfm_info, "password"),
+            auth_type=restcall.rest_no_auth,
+            resource=nf_healing_url.format(vnfInstanceID=nf_instance_id),
+            method='put',  # POST
+            content=json.JSONEncoder().encode(data))
+        logger.info("ret=%s", ret)
+        if ret[0] != 0:
+            return Response(data={'error': 'heal error'}, status=ret[2])
+        resp_data = json.JSONDecoder().decode(ret[1])
+        # jobId = resp_data["jobid"]
+        logger.info("resp_data=%s", resp_data)
+    except Exception as e:
+        logger.error("Error occurred when healing VNF")
+        logger.error(traceback.format_exc())
+        return Response(data={'error': 'heal expection'}, status='500')
+    return Response(data=resp_data, status=ret[2])
+
 #@staticmethod
 def get_vdus(nf_model, aspect_id):
     associated_group = ''