X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=lcm%2Flcm%2Fnf%2Fbiz%2Fchange_vnf_flavour.py;h=4563e301b0065eba8d8f59d095cb6afcc93ceab0;hb=46ad7c172411214c5432ed93fda4271288077447;hp=f4871688d3aaf7c4711e19b13cb6361c81c54a18;hpb=4bd2ff38b30e2113bd9e59ea474e33139b4d1ed5;p=vfc%2Fgvnfm%2Fvnflcm.git diff --git a/lcm/lcm/nf/biz/change_vnf_flavour.py b/lcm/lcm/nf/biz/change_vnf_flavour.py index f4871688..4563e301 100644 --- a/lcm/lcm/nf/biz/change_vnf_flavour.py +++ b/lcm/lcm/nf/biz/change_vnf_flavour.py @@ -20,12 +20,17 @@ from threading import Thread from lcm.nf.biz.grant_vnf import grant_resource from lcm.nf.const import GRANT_TYPE, CHANGE_TYPE from lcm.nf.const import VNF_STATUS +from lcm.nf.const import OPERATION_TYPE, OPERATION_TASK +from lcm.nf.const import OPERATION_STATE_TYPE +from lcm.nf.const import SUB_OPERATION_TASK from lcm.pub.utils.notificationsutil import NotificationsUtil, prepare_notification_data from lcm.pub.utils.values import ignore_case_get from lcm.pub.utils.timeutil import now_time from lcm.pub.utils.jobutil import JobUtil from lcm.pub.exceptions import NFLCMException +from lcm.pub.exceptions import NFLCMExceptionConflict from lcm.pub.database.models import NfInstModel +from .operate_vnf_lcm_op_occ import VnfLcmOpOcc logger = logging.getLogger(__name__) @@ -37,41 +42,75 @@ class ChangeVnfFlavour(Thread): self.nf_inst_id = nf_inst_id self.job_id = job_id self.vnf_insts = NfInstModel.objects.filter(nfinstid=self.nf_inst_id) + self.lcm_op_occ = VnfLcmOpOcc( + vnf_inst_id=nf_inst_id, + lcm_op_id=job_id, + operation=OPERATION_TYPE.CHANGE_FLAVOUR, + task=OPERATION_TASK.CHANGE_FLAVOUR + ) def run(self): try: - JobUtil.add_job_status(self.job_id, - 10, - "Start to apply grant.") + self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.STARTING) + JobUtil.add_job_status( + self.job_id, + 10, + "Start to apply grant." + ) self.apply_grant() - JobUtil.add_job_status(self.job_id, - 50, - "Start to change vnf flavour.") + self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.PROCESSING) + JobUtil.add_job_status( + self.job_id, + 50, + "Start to change vnf flavour." + ) + self.lcm_op_occ.upd( + sub_operation=SUB_OPERATION_TASK.GRANTED, + operation_state=OPERATION_STATE_TYPE.PROCESSING + ) self.do_operation() self.vnf_insts.update( status='INSTANTIATED', lastuptime=now_time() ) self.send_notification() - JobUtil.add_job_status(self.job_id, - 100, - "Change vnf flavour success.") + JobUtil.add_job_status( + self.job_id, + 100, + "Change vnf flavour success." + ) + self.lcm_op_occ.upd( + sub_operation=SUB_OPERATION_TASK.SUCCESS, + operation_state=OPERATION_STATE_TYPE.COMPLETED + ) except NFLCMException as e: - logger.error(e.message) - self.change_vnf_flavour_failed_handle(e.message) + logger.error(e.args[0]) + self.change_vnf_flavour_failed_handle(e.args[0]) except Exception as e: - logger.error(e.message) + logger.error(e.args[0]) logger.error(traceback.format_exc()) - self.change_vnf_flavour_failed_handle(e.message) + self.change_vnf_flavour_failed_handle(e.args[0]) + + def pre_deal(self): + logger.debug("Start pre deal for VNF change_vnf_flavour task") + + vnf_is_in_processing, vnf_op = self.lcm_op_occ.is_in_processing() + if vnf_is_in_processing: + raise NFLCMExceptionConflict('VNF(%s) %s in processing.' % ( + self.nf_inst_id, vnf_op + )) + self.lcm_op_occ.add() def apply_grant(self): logger.debug("Start change flavour apply grant") vdus = ignore_case_get(self.vnfd_info, "vdus") - grant_result = grant_resource(data=self.data, - nf_inst_id=self.nf_inst_id, - job_id=self.job_id, - grant_type=GRANT_TYPE.CHANGE_FLAVOUR, - vdus=vdus) + grant_result = grant_resource( + data=self.data, + nf_inst_id=self.nf_inst_id, + job_id=self.job_id, + grant_type=GRANT_TYPE.CHANGE_FLAVOUR, + vdus=vdus + ) logger.debug("Change flavour Grant result: %s", grant_result) def do_operation(self): @@ -80,15 +119,28 @@ class ChangeVnfFlavour(Thread): # TODO: Add operation logic def send_notification(self): - data = prepare_notification_data(nfinstid=self.nf_inst_id, - jobid=self.job_id, - changetype=CHANGE_TYPE.MODIFIED, - operation=self.op_type) + data = prepare_notification_data( + nfinstid=self.nf_inst_id, + jobid=self.job_id, + changetype=CHANGE_TYPE.MODIFIED, + operation=OPERATION_TYPE.CHANGE_FLAVOUR + ) logger.debug('Notify request data = %s' % data) NotificationsUtil().send_notification(data) def change_vnf_flavour_failed_handle(self, error_msg): logger.error('Chnage vnf flavour failed, detail message: %s', error_msg) - self.vnf_insts.update(status=VNF_STATUS.FAILED, - lastuptime=now_time()) + self.vnf_insts.update( + status=VNF_STATUS.FAILED, + lastuptime=now_time() + ) + self.lcm_op_occ.notify_lcm(OPERATION_STATE_TYPE.FAILED, error_msg) JobUtil.add_job_status(self.job_id, 255, error_msg) + self.lcm_op_occ.upd( + sub_operation=SUB_OPERATION_TASK.ERROR, + operation_state=OPERATION_STATE_TYPE.FAILED, + error={ + "status": 500, + "detail": error_msg + } + )