summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lcm/lcm/nf/biz/change_ext_conn.py29
-rw-r--r--lcm/lcm/nf/biz/operate_vnf_lcm_op_occ.py8
-rw-r--r--lcm/lcm/nf/const.py19
3 files changed, 56 insertions, 0 deletions
diff --git a/lcm/lcm/nf/biz/change_ext_conn.py b/lcm/lcm/nf/biz/change_ext_conn.py
index 3cde0cf7..1b3f9479 100644
--- a/lcm/lcm/nf/biz/change_ext_conn.py
+++ b/lcm/lcm/nf/biz/change_ext_conn.py
@@ -20,12 +20,14 @@ from lcm.nf.biz.common import port_save
from lcm.nf.biz.grant_vnf import grant_resource
from lcm.nf.const import RESOURCE_MAP, GRANT_TYPE, OPERATION_STATE_TYPE
from lcm.nf.const import VNF_STATUS, OPERATION_TASK, OPERATION_TYPE
+from lcm.nf.const import SUB_OPERATION_TASK
from lcm.pub.database.models import VmInstModel, NfInstModel, PortInstModel
from lcm.pub.utils.notificationsutil import NotificationsUtil, prepare_notification
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.vimapi import adaptor
from .operate_vnf_lcm_op_occ import VnfLcmOpOcc
@@ -48,6 +50,7 @@ class ChangeExtConn(Thread):
operation=OPERATION_TYPE.CHANGE_EXT_CONN,
task=OPERATION_TASK.CHANGE_EXT_CONN
)
+ self.pre_deal()
def run(self):
try:
@@ -64,6 +67,10 @@ class ChangeExtConn(Thread):
50,
"Start to change ext conn."
)
+ 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',
@@ -75,6 +82,10 @@ class ChangeExtConn(Thread):
100,
"Change ext conn 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_ext_conn_failed_handle(e.message)
@@ -83,6 +94,16 @@ class ChangeExtConn(Thread):
logger.error(traceback.format_exc())
self.change_ext_conn_failed_handle(e.message)
+ def pre_deal(self):
+ logger.debug("Start pre deal for VNF change_ext_conn 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):
vdus = VmInstModel.objects.filter(instid=self.nf_inst_id)
apply_result = grant_resource(
@@ -287,3 +308,11 @@ class ChangeExtConn(Thread):
)
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
+ }
+ )
diff --git a/lcm/lcm/nf/biz/operate_vnf_lcm_op_occ.py b/lcm/lcm/nf/biz/operate_vnf_lcm_op_occ.py
index 919a3461..8285f7da 100644
--- a/lcm/lcm/nf/biz/operate_vnf_lcm_op_occ.py
+++ b/lcm/lcm/nf/biz/operate_vnf_lcm_op_occ.py
@@ -93,6 +93,14 @@ class VnfLcmOpOcc:
raise NFLCMExceptionNotFound('Occurrence(%s) does not exist.' % self.lcm_op_id)
return lcm_op_occ_obj
+ def is_in_processing(self):
+ lcm_op_occ = VNFLcmOpOccModel.objects.filter(vnf_instance_id=self.vnf_inst_id)
+
+ for occ in lcm_op_occ:
+ if occ.operation_state not in const.FINAL_STATE_RANGE:
+ return True, occ.operation
+ return False, None
+
def notify_lcm(self, operation_state, error=''):
data = prepare_notification(nfinstid=self.vnf_inst_id,
jobid=self.lcm_op_id,
diff --git a/lcm/lcm/nf/const.py b/lcm/lcm/nf/const.py
index 8c434342..e961bb3e6 100644
--- a/lcm/lcm/nf/const.py
+++ b/lcm/lcm/nf/const.py
@@ -75,6 +75,25 @@ OPERATION_TASK = enum(
TERMINATE="terminate"
)
+SUB_OPERATION_TASK = enum(
+ RETRY="retry",
+ ROLLBACK="rollback",
+ FAIL="fail",
+ CANCEL="cancel",
+ ERROR="error",
+ SUCCESS="success",
+ GRANTED="granted",
+ UNRESOLVABLE_ERROR="unresolvable_error",
+ AUTO_ROLLBACK="auto_rollback",
+)
+
+SUB_OPERATION_TUPLE = (
+ SUB_OPERATION_TASK.RETRY,
+ SUB_OPERATION_TASK.ROLLBACK,
+ SUB_OPERATION_TASK.FAIL,
+ SUB_OPERATION_TASK.CANCEL
+)
+
INSTANTIATION_STATE = enum(
NOT_INSTANTIATED="NOT_INSTANTIATED",
INSTANTIATED="INSTANTIATED"