Merge "Add pep8 check for vfc-nfvo-lcm"
[vfc/nfvo/lcm.git] / lcm / workflows / build_in.py
index 3d06984..e1e3cdd 100644 (file)
@@ -11,6 +11,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+import json
 import logging
 import traceback
 from threading import Thread
@@ -31,19 +32,22 @@ g_jobs_status = {}
 """
 format of input_data
 {
-    "jobId": uuid of job, 
+    "jobId": uuid of job,
     "nsInstanceId": id of ns instance,
     "object_context": json format of nsd,
     "object_additionalParamForNs": json format of additional parameters for ns,
     "object_additionalParamForVnf": json format of additional parameters for vnf,
     "vlCount": int type of VL count,
     "vnfCount: int type of VNF count,
-    "sfcCount": int type of SFC count, 
+    "sfcCount": int type of SFC count,
     "sdnControllerId": uuid of SDN controller
 }
 """
+
+
 def run_ns_instantiate(input_data):
     logger.debug("Enter %s, input_data is %s", fun_name(), input_data)
+    ns_instantiate_ok = False
     job_id = ignore_case_get(input_data, "jobId")
     ns_inst_id = ignore_case_get(input_data, "nsInstanceId")
     nsd_json = ignore_case_get(input_data, "object_context")
@@ -60,13 +64,14 @@ def run_ns_instantiate(input_data):
             create_vl(ns_inst_id, i + 1, nsd_json, ns_param_json)
 
         update_job(job_id, 30, "0", "Start to create VNF")
-        jobs = [create_vnf(ns_inst_id, i + 1, vnf_param_json) for i in range(vnf_count)] 
+        jobs = [create_vnf(ns_inst_id, i + 1, vnf_param_json) for i in range(vnf_count)]
         wait_until_jobs_done(job_id, jobs)
 
         [confirm_vnf_status(inst_id) for inst_id, _, _ in jobs]
 
         update_job(job_id, 70, "0", "Start to create SFC")
-        jobs = [create_sfc(ns_inst_id, i + 1, nsd_json, sdnc_id) for i in range(sfc_count)] 
+        g_jobs_status[job_id] = [1 for i in range(sfc_count)]
+        jobs = [create_sfc(ns_inst_id, i + 1, nsd_json, sdnc_id) for i in range(sfc_count)]
         wait_until_jobs_done(job_id, jobs)
 
         [confirm_sfc_status(inst_id) for inst_id, _, _ in jobs]
@@ -75,6 +80,7 @@ def run_ns_instantiate(input_data):
         post_deal(ns_inst_id, "true")
 
         update_job(job_id, 100, "0", "Create NS successfully.")
+        ns_instantiate_ok = True
     except NSLCMException as e:
         logger.error("Failded to Create NS: %s", e.message)
         update_job(job_id, JOB_ERROR, "255", "Failded to Create NS.")
@@ -85,6 +91,7 @@ def run_ns_instantiate(input_data):
         post_deal(ns_inst_id, "false")
     finally:
         g_jobs_status.pop(job_id)
+    return ns_instantiate_ok
 
 
 def create_vl(ns_inst_id, vl_index, nsd, ns_param):
@@ -100,6 +107,7 @@ def create_vl(ns_inst_id, vl_index, nsd, ns_param):
     if ret[0] != 0:
         logger.error("Failed to call create_vl(%s): %s", vl_index, ret[1])
         raise NSLCMException("Failed to call create_vl(index is %s)" % vl_index)
+    ret[1] = json.JSONDecoder().decode(ret[1])
 
     result = str(ret[1]["result"])
     detail = ret[1]["detail"]
@@ -110,8 +118,9 @@ def create_vl(ns_inst_id, vl_index, nsd, ns_param):
 
     logger.debug("Create VL(%s) successfully.", vl_id)
 
+
 def create_vnf(ns_inst_id, vnf_index, nf_param):
-    uri = "/ns/vnfs"
+    uri = "api/nslcm/v1/ns/vnfs"
     data = json.JSONEncoder().encode({
         "nsInstanceId": ns_inst_id,
         "vnfIndex": vnf_index,
@@ -122,14 +131,16 @@ def create_vnf(ns_inst_id, vnf_index, nf_param):
     if ret[0] != 0:
         logger.error("Failed to call create_vnf(%s): %s", vnf_index, ret[1])
         raise NSLCMException("Failed to call create_vnf(index is %s)" % vnf_index)
+    ret[1] = json.JSONDecoder().decode(ret[1])
 
     vnf_inst_id = ret[1]["vnfInstId"]
     job_id = ret[1]["jobId"]
     logger.debug("Create VNF(%s) started.", vnf_inst_id)
     return vnf_inst_id, job_id, vnf_index - 1
 
+
 def create_sfc(ns_inst_id, fp_index, nsd_json, sdnc_id):
-    uri = "/ns/sfcs"
+    uri = "api/nslcm/v1/ns/sfcs"
     data = json.JSONEncoder().encode({
         "nsInstanceId": ns_inst_id,
         "context": nsd_json,
@@ -141,14 +152,16 @@ def create_sfc(ns_inst_id, fp_index, nsd_json, sdnc_id):
     if ret[0] != 0:
         logger.error("Failed to call create_sfc(%s): %s", fp_index, ret[1])
         raise NSLCMException("Failed to call create_sfc(index is %s)" % fp_index)
+    ret[1] = json.JSONDecoder().decode(ret[1])
 
     sfc_inst_id = ret[1]["sfcInstId"]
     job_id = ret[1]["jobId"]
     logger.debug("Create SFC(%s) started.", sfc_inst_id)
     return sfc_inst_id, job_id, fp_index - 1
 
+
 def post_deal(ns_inst_id, status):
-    uri = "/ns/{nsInstanceId}/postdeal".format(nsInstanceId=ns_inst_id) 
+    uri = "api/nslcm/v1/ns/{nsInstanceId}/postdeal".format(nsInstanceId=ns_inst_id)
     data = json.JSONEncoder().encode({
         "status": status
     })
@@ -156,7 +169,8 @@ def post_deal(ns_inst_id, status):
     ret = restcall.req_by_msb(uri, "POST", data)
     if ret[0] != 0:
         logger.error("Failed to call post_deal(%s): %s", ns_inst_id, ret[1])
-    logger.debug("Call post_deal(%s) successfully.", ns_inst_id)
+    logger.debug("Call post_deal(%s, %s) successfully.", ns_inst_id, status)
+
 
 def update_job(job_id, progress, errcode, desc):
     uri = "api/nslcm/v1/jobs/{jobId}".format(jobId=job_id)
@@ -165,17 +179,18 @@ def update_job(job_id, progress, errcode, desc):
         "errcode": errcode,
         "desc": desc
     })
-    restcall.req_by_msb(uri, "POST", data)  
+    restcall.req_by_msb(uri, "POST", data)
+
 
 class JobWaitThread(Thread):
     """
-    Job Wait 
+    Job Wait
     """
-
-    def __init__(self, inst_id, job_id, index):
+    def __init__(self, inst_id, job_id, ns_job_id, index):
         Thread.__init__(self)
         self.inst_id = inst_id
         self.job_id = job_id
+        self.ns_job_id = ns_job_id
         self.index = index
         self.retry_count = 60
         self.interval_second = 3
@@ -213,43 +228,44 @@ class JobWaitThread(Thread):
                 break
         if job_timeout:
             logger.error("Job(%s) timeout", self.job_id)
-        if self.job_id in g_jobs_status:
+        if self.ns_job_id in g_jobs_status:
             if job_end_normal:
-                g_jobs_status[self.job_id][self.index] = 0
+                g_jobs_status[self.ns_job_id][self.index] = 0
+
 
 def wait_until_jobs_done(g_job_id, jobs):
     job_threads = []
     for inst_id, job_id, index in jobs:
-        job_threads.append(JobWaitThread(inst_id, job_id, index))
+        job_threads.append(JobWaitThread(inst_id, job_id, g_job_id, index))
     for t in job_threads:
         t.start()
     for t in job_threads:
         t.join()
     if g_job_id in g_jobs_status:
         if sum(g_jobs_status[g_job_id]) > 0:
+            logger.error("g_jobs_status[%s]: %s", g_job_id, g_jobs_status[g_job_id])
             raise NSLCMException("Some jobs failed!")
 
+
 def confirm_vnf_status(vnf_inst_id):
     uri = "api/nslcm/v1/ns/vnfs/{vnfInstId}".format(vnfInstId=vnf_inst_id)
     ret = restcall.req_by_msb(uri, "GET")
     if ret[0] != 0:
         raise NSLCMException("Failed to call get_vnf(%s)" % vnf_inst_id)
+    ret[1] = json.JSONDecoder().decode(ret[1])
+
     vnf_status = ret[1]["vnfStatus"]
     if vnf_status != "active":
         raise NSLCMException("Status of VNF(%s) is not active" % vnf_inst_id)
 
+
 def confirm_sfc_status(sfc_inst_id):
     uri = "api/nslcm/v1/ns/sfcs/{sfcInstId}".format(sfcInstId=sfc_inst_id)
     ret = restcall.req_by_msb(uri, "GET")
     if ret[0] != 0:
         raise NSLCMException("Failed to call get_sfc(%s)" % sfc_inst_id)
+    ret[1] = json.JSONDecoder().decode(ret[1])
+
     sfc_status = ret[1]["sfcStatus"]
     if sfc_status != "active":
         raise NSLCMException("Status of SFC(%s) is not active" % sfc_inst_id)
-
-
-
-
-
-      
-