Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 4
0
 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
Esempio n. 5
0
 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