Beispiel #1
0
    def post(self, request, job_id):
        job_result_ok = {'result': 'ok'}

        logger.debug("Enter JobView:post, %s, %s ", job_id, request.data)
        jobs = JobUtil.query_job_status(job_id)
        if len(jobs) > 0 and jobs[-1].errcode == '255':
            return Response(data=job_result_ok)

        request_serializer = PostJobRequestSerializer(data=request.data)
        validataion_error = self.handleValidatonError(request_serializer, True)
        if not validataion_error:
            return validataion_error

        requestData = request_serializer.data
        progress = ignore_case_get(requestData, "progress")
        desc = ignore_case_get(requestData, "desc", '%s' % progress)
        errcode = '0' if ignore_case_get(
            requestData, 'errcode') in ('true', 'active') else '255'
        logger.debug("errcode=%s", errcode)
        JobUtil.add_job_status(job_id, progress, desc, error_code=errcode)

        response_serializer = PostJobResponseResultSerializer(
            data=job_result_ok)
        validataion_error = self.handleValidatonError(response_serializer,
                                                      False)
        if validataion_error:
            return validataion_error

        return Response(data=response_serializer.data,
                        status=status.HTTP_202_ACCEPTED)
Beispiel #2
0
 def test_query_job_status(self):
     job_id = "1"
     JobStatusModel.objects.filter().delete()
     JobStatusModel(
         indexid=1,
         jobid=job_id,
         status="success",
         progress=10
     ).save()
     JobStatusModel(
         indexid=2,
         jobid=job_id,
         status="success",
         progress=50
     ).save()
     JobStatusModel(
         indexid=3,
         jobid=job_id,
         status="success",
         progress=100
     ).save()
     jobs = JobUtil.query_job_status(job_id)
     self.assertEqual(1, len(jobs))
     self.assertEqual(3, jobs[0].indexid)
     jobs = JobUtil.query_job_status(job_id, 1)
     self.assertEqual(2, len(jobs))
     self.assertEqual(3, jobs[0].indexid)
     self.assertEqual(2, jobs[1].indexid)
     JobStatusModel.objects.filter().delete()
Beispiel #3
0
 def run(self):
     try:
         self.delete_csar()
     except GenericparserException as e:
         JobUtil.add_job_status(self.job_id, JOB_ERROR, e.args[0])
     except Exception as e:
         logger.error(e.args[0])
         logger.error(traceback.format_exc())
         logger.error(str(sys.exc_info()))
         JobUtil.add_job_status(self.job_id, JOB_ERROR, "Failed to delete CSAR(%s)" % self.csar_id)
Beispiel #4
0
 def test_clear_job_status(self):
     job_id = "1"
     JobStatusModel.objects.filter().delete()
     JobStatusModel(
         indexid=1,
         jobid=job_id,
         status="success",
         progress=10
     ).save()
     JobUtil.clear_job_status(job_id)
     self.assertEqual(0, len(JobStatusModel.objects.filter(jobid=job_id)))
Beispiel #5
0
 def test_clear_job(self):
     job_id = "1"
     JobModel.objects.filter().delete()
     JobModel(
         jobid=job_id,
         jobtype="1",
         jobaction="2",
         resid="3",
         status=0
     ).save()
     JobUtil.clear_job(job_id)
     self.assertEqual(0, len(JobModel.objects.filter(jobid=job_id)))
Beispiel #6
0
 def test_create_job(self):
     job_id = "5"
     JobModel.objects.filter().delete()
     JobUtil.create_job(
         inst_type="1",
         jobaction="2",
         inst_id="3",
         user="******",
         job_id=5,
         res_name="6")
     self.assertEqual(1, len(JobModel.objects.filter(jobid=job_id)))
     JobModel.objects.filter().delete()
Beispiel #7
0
    def on_distribute(self):
        JobUtil.create_job(
            inst_type='nf',
            jobaction='on_distribute',
            inst_id=self.csar_id,
            job_id=self.job_id)
        JobUtil.add_job_status(self.job_id, 5, "Start CSAR(%s) distribute." % self.csar_id)

        if VnfPackageModel.objects.filter(vnfPackageId=self.csar_id):
            err_msg = "NF CSAR(%s) already exists." % self.csar_id
            JobUtil.add_job_status(self.job_id, JOB_ERROR, err_msg)
            return

        artifact = sdc.get_artifact(sdc.ASSETTYPE_RESOURCES, self.csar_id)
        local_path = os.path.join(GENERICPARSER_ROOT_PATH, self.csar_id)
        csar_name = "%s.csar" % artifact.get("name", self.csar_id)
        local_file_name = sdc.download_artifacts(artifact["toscaModelURL"], local_path, csar_name)
        if local_file_name.endswith(".csar") or local_file_name.endswith(".zip"):
            artifact_vnf_file = fileutil.unzip_file(local_file_name, local_path, "Artifacts/Deployment/OTHER/vnf.csar")
            if os.path.exists(artifact_vnf_file):
                local_file_name = artifact_vnf_file

        vnfd_json = toscaparsers.parse_vnfd(local_file_name)
        vnfd = json.JSONDecoder().decode(vnfd_json)

        if not vnfd.get("vnf"):
            raise GenericparserException("VNF properties and metadata in VNF Package(id=%s) are empty." % self.csar_id)

        vnfd_id = vnfd["vnf"]["properties"].get("descriptor_id", "")
        if VnfPackageModel.objects.filter(vnfdId=vnfd_id):
            logger.error("VNF package(%s) already exists.", vnfd_id)
            raise GenericparserException("VNF package(%s) already exists." % vnfd_id)
        JobUtil.add_job_status(self.job_id, 30, "Save CSAR(%s) to database." % self.csar_id)
        vnfd_ver = vnfd["vnf"]["properties"].get("descriptor_version", "")
        vnf_provider = vnfd["vnf"]["properties"].get("provider", "")
        vnf_software_version = vnfd["vnf"]["properties"].get("software_version", "")
        vnfd_product_name = vnfd["vnf"]["properties"].get("product_name", "")
        VnfPackageModel(
            vnfPackageId=self.csar_id,
            vnfdId=vnfd_id,
            vnfVendor=vnf_provider,
            vnfdProductName=vnfd_product_name,
            vnfdVersion=vnfd_ver,
            vnfSoftwareVersion=vnf_software_version,
            vnfdModel=vnfd_json,
            localFilePath=local_file_name,
            vnfPackageUri=csar_name,
            onboardingState=PKG_STATUS.ONBOARDED,
            operationalState=PKG_STATUS.ENABLED,
            usageState=PKG_STATUS.NOT_IN_USE
        ).save()
        JobUtil.add_job_status(self.job_id, 100, "CSAR(%s) distribute successfully." % self.csar_id)
Beispiel #8
0
 def test_get_unfinished_jobs(self):
     JobModel.objects.filter().delete()
     JobModel(
         jobid="11",
         jobtype="InstVnf",
         jobaction="2",
         resid="3",
         status=0
     ).save()
     JobModel(
         jobid="22",
         jobtype="InstVnf",
         jobaction="2",
         resid="3",
         status=0
     ).save()
     JobModel(
         jobid="33",
         jobtype="InstVnf",
         jobaction="2",
         resid="3",
         status=0
     ).save()
     progresses = JobUtil.get_unfinished_jobs(
         url_prefix="/vnfinst",
         inst_id="3",
         inst_type="InstVnf"
     )
     expect_progresses = ['/vnfinst/11', '/vnfinst/22', '/vnfinst/33']
     self.assertEqual(expect_progresses, progresses)
     JobModel.objects.filter().delete()
Beispiel #9
0
 def do_biz(self):
     logger.debug("[getjob]job_id=%s, response_id=%s", self.job_id,
                  self.response_id)
     jobs = JobUtil.query_job_status(self.job_id, self.response_id)
     if not jobs:
         return {"jobId": self.job_id}
     ret = {
         "jobId": self.job_id,
         "responseDescriptor": {
             "status":
             jobs[0].status,
             "progress":
             jobs[0].progress,
             "statusDescription":
             jobs[0].descp,
             "errorCode":
             jobs[0].errcode,
             "responseId":
             jobs[0].indexid,
             "responseHistoryList": [{
                 "status": job.status,
                 "progress": job.progress,
                 "statusDescription": job.descp,
                 "errorCode": job.errcode,
                 "responseId": job.indexid
             } for job in jobs[1:]]
         }
     }
     return ret
Beispiel #10
0
 def test_add_job_status_normal(self):
     job_id = "1"
     JobModel.objects.filter().delete()
     JobStatusModel.objects.filter().delete()
     JobModel(
         jobid=job_id,
         jobtype="1",
         jobaction="2",
         resid="3",
         status=0
     ).save()
     JobUtil.add_job_status(
         job_id="1",
         progress=1,
         status_decs="2",
         error_code="0"
     )
     self.assertEqual(1, len(JobStatusModel.objects.filter(jobid=job_id)))
     JobStatusModel.objects.filter().delete()
     JobModel.objects.filter().delete()
Beispiel #11
0
 def test_is_job_exists(self):
     job_id = "1"
     JobModel.objects.filter().delete()
     JobModel(
         jobid=job_id,
         jobtype="1",
         jobaction="2",
         resid="3",
         status=0
     ).save()
     self.assertTrue(JobUtil.is_job_exists(job_id))
     JobModel.objects.filter().delete()
Beispiel #12
0
    def delete_csar(self):
        JobUtil.create_job(
            inst_type='nf',
            jobaction='delete',
            inst_id=self.csar_id,
            job_id=self.job_id)
        JobUtil.add_job_status(self.job_id, 5, "Start to delete CSAR(%s)." % self.csar_id)

        VnfPackageModel.objects.filter(vnfPackageId=self.csar_id).delete()

        JobUtil.add_job_status(self.job_id, 50, "Delete local CSAR(%s) file." % self.csar_id)

        csar_save_path = os.path.join(GENERICPARSER_ROOT_PATH, self.csar_id)
        fileutil.delete_dirs(csar_save_path)

        JobUtil.add_job_status(self.job_id, 100, "Delete CSAR(%s) successfully." % self.csar_id)