From: maopengzhang Date: Mon, 15 Oct 2018 09:10:24 +0000 (+0800) Subject: add lcm Async task in workflow X-Git-Tag: 1.2.0^2~8 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=e55a91f6c983c417d76e253857450dc10f32161c;p=vfc%2Fnfvo%2Flcm.git add lcm Async task in workflow add lcm Async task in workflow to support NS Change-Id: I8c9a70558851cc40fb7ff03eee5d66b5247e3ec7 Issue-ID: VFC-1041 Signed-off-by: maopengzhang --- diff --git a/lcm/workflows/graphflow/task/lcm_async_rest_task.py b/lcm/workflows/graphflow/task/lcm_async_rest_task.py new file mode 100644 index 00000000..2e3b6061 --- /dev/null +++ b/lcm/workflows/graphflow/task/lcm_async_rest_task.py @@ -0,0 +1,56 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# 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 logging +import json +from lcm.workflows.graphflow.task.async_rest_task import ASyncRestTask +from lcm.pub.utils import restcall + +logger = logging.getLogger(__name__) + + +class LcmASyncRestTask(ASyncRestTask): + + METHOD_GET_JOB_STATUS = "status" + + def __init__(self, *args): + super(LcmASyncRestTask, self).__init__(*args) + self.job_url = "/api/nslcm/v1/jobs/%s" + + def call_rest(self, url, method, content=None): + ret = restcall.req_by_msb(url, method, content) + return ret[2], json.JSONDecoder().decode(ret[1]) + + def get_ext_status(self): + job_id = self.parse_job_id() + logger.debug("get_ext_status %s", self.key) + job_status = None + if job_id: + url = "/api/nslcm/v1/jobs/%s" % job_id + status, job_result = self.call_rest(url, self.GET) + if status in self.STATUS_OK: + progress = job_result["responseDescriptor"]["progress"] + if progress == 100: + job_status = self.FINISHED + elif progress == 255: + job_status = self.ERROR + else: + job_status = self.PROCESSING + return job_status + + def parse_job_id(self): + if self.output: + return self.output["jobId"] if "jobId" in self.output else None + else: + return None