Fix vfc-catalog/swagger pep8 issue.
[vfc/nfvo/lcm.git] / lcm / ns / ns_instant.py
index b140555..24a8d31 100644 (file)
@@ -21,9 +21,9 @@ import uuid
 from rest_framework import status
 
 from lcm.pub.database.models import DefPkgMappingModel, ServiceBaseInfoModel, InputParamMappingModel
-from lcm.pub.database.models import NSInstModel, NfPackageModel, VNFFGInstModel
-from lcm.pub.msapi.catalog import get_process_id, get_download_url_from_catalog
-from lcm.pub.msapi.catalog import query_rawdata_from_catalog, get_servicetemplate_id, get_servicetemplate
+from lcm.pub.database.models import NSInstModel, NfPackageModel, VNFFGInstModel, WFPlanModel
+from lcm.pub.msapi.catalog import get_process_id, query_rawdata_from_catalog
+from lcm.pub.msapi.catalog import get_servicetemplate_id, get_servicetemplate
 from lcm.pub.msapi.wso2bpel import workflow_run
 from lcm.pub.msapi.extsys import select_vnfm
 from lcm.pub.utils.jobutil import JobUtil
@@ -32,6 +32,8 @@ from lcm.pub.utils.values import ignore_case_get
 from lcm.pub.exceptions import NSLCMException
 from lcm.pub.config.config import WORKFLOW_OPTION
 from lcm.workflows import build_in
+from lcm.pub.msapi import activiti
+from lcm.pub.msapi import sdc_run_catalog
 
 logger = logging.getLogger(__name__)
 
@@ -58,11 +60,16 @@ class InstantNSService(object):
             location_constraints = []
             if 'locationConstraints' in self.req_data:
                 location_constraints = self.req_data['locationConstraints']
-            
+
             JobUtil.add_job_status(job_id, 5, 'Start query nsd(%s)' % ns_inst.nspackage_id)
-            src_plan = query_rawdata_from_catalog(ns_inst.nspackage_id, input_parameters)
-            dst_plan = toscautil.convert_nsd_model(src_plan["rawData"])
+            dst_plan = None
+            if WORKFLOW_OPTION == "wso2":
+                src_plan = query_rawdata_from_catalog(ns_inst.nspackage_id, input_parameters)
+                dst_plan = toscautil.convert_nsd_model(src_plan["rawData"])
+            else:
+                dst_plan = sdc_run_catalog.parse_nsd(ns_inst.nspackage_id, input_parameters)
             logger.debug('tosca plan dest:%s' % dst_plan)
+
             NSInstModel.objects.filter(id=self.ns_inst_id).update(nsd_model=dst_plan)
 
             params_json = json.JSONEncoder().encode(self.req_data["additionalParamForNs"])
@@ -109,13 +116,17 @@ class InstantNSService(object):
                                  active_status='--',
                                  status=ns_inst.status,
                                  creator='--',
-                                 create_time=int(time.time()*1000)).save()
+                                 create_time=int(time.time() * 1000)).save()
 
-            service_tpl = get_servicetemplate(ns_inst.nsd_id)
-            DefPkgMappingModel(service_id=self.ns_inst_id,
-                               service_def_id=service_tpl['csarId'],
-                               template_name=service_tpl['templateName'],
-                               template_id=service_tpl['serviceTemplateId']).save()
+            if WORKFLOW_OPTION == "wso2":
+                service_tpl = get_servicetemplate(ns_inst.nsd_id)
+                DefPkgMappingModel(service_id=self.ns_inst_id,
+                                   service_def_id=service_tpl['csarId'],
+                                   template_name=service_tpl['templateName'],
+                                   template_id=service_tpl['serviceTemplateId']).save()
+            else:
+                # TODO:
+                pass
 
             for key, val in self.req_data['additionalParamForNs'].items():
                 InputParamMappingModel(service_id=self.ns_inst_id,
@@ -148,16 +159,31 @@ class InstantNSService(object):
 
         ret = workflow_run(data)
         logger.info("ns-instant(%s) workflow result:%s" % (self.ns_inst_id, ret))
-        JobUtil.add_job_status(job_id, 10, 'NS inst(%s) workflow started: %s' % (
+        JobUtil.add_job_status(job_id, 10, 'NS inst(%s) wso2 workflow started: %s' % (
             self.ns_inst_id, ret.get('status')))
         if ret.get('status') == 1:
             return dict(data={'jobId': job_id}, status=status.HTTP_200_OK)
         return dict(data={'error': ret['message']}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 
-    def start_activiti_workflow(self):
-        pass
+    def start_activiti_workflow(self, job_id, plan_input):
+        plans = WFPlanModel.objects.filter()
+        if not plans:
+            raise NSLCMException("No plan is found, you should deploy plan first!")
+        data = {
+            "processId": plans[0].process_id, 
+            "params": plan_input 
+        }
+        ret = activiti.exec_workflow(data)
+        logger.info("ns-instant(%s) workflow result:%s" % (self.ns_inst_id, ret))
+        JobUtil.add_job_status(job_id, 10, 'NS inst(%s) activiti workflow started: %s' % (
+            self.ns_inst_id, ret.get('status')))
+        if ret.get('status') == 1:
+            return dict(data={'jobId': job_id}, status=status.HTTP_200_OK)
+        return dict(data={'error': ret['message']}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)      
 
     def start_buildin_workflow(self, job_id, plan_input):
+        JobUtil.add_job_status(job_id, 10, 'NS inst(%s) buildin workflow started.' % 
+            self.ns_inst_id)
         build_in.run_ns_instantiate(plan_input)
         return dict(data={'jobId': job_id}, status=status.HTTP_200_OK)