def _delete_vnf_pre(self, context, vnf_id, force_delete=False): with context.session.begin(subtransactions=True): nss_db = context.session.query(ns_db.NS).filter( ns_db.NS.vnf_ids.like("%" + vnf_id + "%")).first() if not force_delete: if (nss_db is not None and nss_db.status not in [constants.PENDING_DELETE, constants.ERROR]): raise vnfm.VNFInUse(vnf_id=vnf_id) vnf_db = self._update_vnf_status_db(context, vnf_id, _ACTIVE_UPDATE_ERROR_DEAD, constants.PENDING_DELETE) else: vnf_db = self._update_vnf_status_db_no_check( context, vnf_id, _ACTIVE_UPDATE_ERROR_DEAD, constants.PENDING_DELETE) deleted_vnf_db = self._make_vnf_dict(vnf_db) details = "VNF delete initiated" if not force_delete else \ "VNF force delete initiated" self._cos_db_plg.create_event(context, res_id=vnf_id, res_type=constants.RES_TYPE_VNF, res_state=deleted_vnf_db['status'], evt_type=constants.RES_EVT_DELETE, tstamp=timeutils.utcnow(), details=details) return deleted_vnf_db
def _delete_vnf_pre(self, context, vnf_id, force_delete=False): with context.session.begin(subtransactions=True): nss_db = context.session.query(ns_db.NS).filter( ns_db.NS.vnf_ids.like("%" + vnf_id + "%")).first() if not force_delete: # If vnf is deleted by NFVO, then vnf_id would # exist in the nss_db otherwise it should be queried from # vnf db table. if nss_db is not None: if nss_db.status not in [ constants.PENDING_DELETE, constants.ERROR ]: raise vnfm.VNFInUse(vnf_id=vnf_id) else: vnf_db = self._get_vnf_db(context, vnf_id, _ACTIVE_UPDATE_ERROR_DEAD) if (vnf_db is not None and vnf_db.status == constants.PENDING_CREATE): raise vnfm.VNFInUse( message="Operation on PENDING_CREATE VNF is not " "permitted.") vnf_db = self._update_vnf_status_db( context, vnf_id, _ACTIVE_UPDATE_ERROR_DEAD, constants.PENDING_DELETE, vnf_db=vnf_db) else: vnf_db = self._update_vnf_status_db_no_check( context, vnf_id, _ACTIVE_UPDATE_ERROR_DEAD, constants.PENDING_DELETE) deleted_vnf_db = self._make_vnf_dict(vnf_db) details = "VNF delete initiated" if not force_delete else \ "VNF force delete initiated" self._cos_db_plg.create_event(context, res_id=vnf_id, res_type=constants.RES_TYPE_VNF, res_state=deleted_vnf_db['status'], evt_type=constants.RES_EVT_DELETE, tstamp=timeutils.utcnow(), details=details) return deleted_vnf_db
def check_vnf_status_legality(vnf_db, vnf_id): if vnf_db.status == constants.PENDING_DELETE: error_reason = _("Operation on PENDING_DELETE VNF " "is not permited. Please contact your " "Administrator.") raise vnfm.VNFDeleteFailed(reason=error_reason) if vnf_db.status == constants.PENDING_UPDATE: raise vnfm.VNFInUse(vnf_id=vnf_id) return True
def _get_vnf_db(self, context, vnf_id, current_statuses, new_status): try: vnf_db = (self._model_query(context, VNF).filter( VNF.id == vnf_id).filter(VNF.status.in_( current_statuses)).with_lockmode('update').one()) except orm_exc.NoResultFound: raise vnfm.VNFNotFound(vnf_id=vnf_id) if vnf_db.status == constants.PENDING_UPDATE: raise vnfm.VNFInUse(vnf_id=vnf_id) vnf_db.update({'status': new_status}) return vnf_db
def _get_vnf_db(self, context, vnf_id, current_statuses, new_status): try: vnf_db = (self._model_query(context, VNF).filter( VNF.id == vnf_id).filter(VNF.status.in_( current_statuses)).with_lockmode('update').one()) except orm_exc.NoResultFound: raise vnfm.VNFNotFound(vnf_id=vnf_id) if vnf_db.status == constants.PENDING_DELETE: error_reason = _("Operation on PENDING_DELETE VNF " "is not permited. Please contact your " "Administrator.") raise vnfm.VNFDeleteFailed(reason=error_reason) if vnf_db.status == constants.PENDING_UPDATE: raise vnfm.VNFInUse(vnf_id=vnf_id) # TODO(dkushwaha): status check/update will be moved out from here. vnf_db.update({'status': new_status}) return vnf_db