コード例 #1
0
    def _wait_for_active(self, server):
        """Wait for the node to be marked as ACTIVE in Ironic."""
        server.refresh()
        if server.status in (states.DELETING, states.ERROR, states.DELETED):
            raise exception.ServerDeployAborted(
                _("Server %s provisioning was aborted") % server.uuid)

        node = self._validate_server_and_node(server)
        if node.provision_state == ironic_states.ACTIVE:
            # job is done
            LOG.debug("Ironic node %(node)s is now ACTIVE",
                      dict(node=node.uuid),
                      server=server)
            raise loopingcall.LoopingCallDone()

        if node.target_provision_state in (ironic_states.DELETED,
                                           ironic_states.AVAILABLE):
            # ironic is trying to delete it now
            raise exception.ServerNotFound(server=server.uuid)

        if node.provision_state in (ironic_states.NOSTATE,
                                    ironic_states.AVAILABLE):
            # ironic already deleted it
            raise exception.ServerNotFound(server=server.uuid)

        if node.provision_state == ironic_states.DEPLOYFAIL:
            # ironic failed to deploy
            msg = (_("Failed to provision server %(server)s: %(reason)s") % {
                'server': server.uuid,
                'reason': node.last_error
            })
            raise exception.ServerDeployFailure(msg)

        _log_ironic_polling('become ACTIVE', node, server)
コード例 #2
0
    def _do_update_server(self, context, server_id, values):
        with _session_for_write():
            query = model_query(context, models.Server)
            query = add_identity_filter(query, server_id)
            try:
                ref = query.with_lockmode('update').one()
            except NoResultFound:
                raise exception.ServerNotFound(server=server_id)

            ref.update(values)
        return ref
コード例 #3
0
    def _validate_server_and_node(self, server):
        """Get the node associated with the server.

        Check with the Ironic service that this server is associated with a
        node, and return the node.
        """
        try:
            return self.ironicclient.call('node.get_by_instance_uuid',
                                          server.uuid,
                                          fields=_NODE_FIELDS)
        except ironic_exc.NotFound:
            raise exception.ServerNotFound(server=server.uuid)
コード例 #4
0
    def server_destroy(self, context, server_id):
        with _session_for_write():
            query = model_query(context, models.Server)
            query = add_identity_filter(query, server_id)

            nics_query = model_query(
                context, models.ServerNic).filter_by(server_uuid=server_id)
            nics_query.delete()

            faults_query = model_query(
                context, models.ServerFault).filter_by(server_uuid=server_id)
            faults_query.delete()
            count = query.delete()
            if count != 1:
                raise exception.ServerNotFound(server=server_id)
コード例 #5
0
 def server_get(self, context, server_id):
     query = model_query(context, models.Server).filter_by(uuid=server_id)
     try:
         return query.one()
     except NoResultFound:
         raise exception.ServerNotFound(server=server_id)
コード例 #6
0
ファイル: test_manager.py プロジェクト: liuluyang/mogan
 def failer(engine_manager, context, server):
     raise exception.ServerNotFound(server=server['uuid'])
コード例 #7
0
ファイル: api.py プロジェクト: weizai118/mogan
 def _check_server_exists(self, context, server_id):
     if not model_query(context, models.Server)\
             .filter_by(id=server_id).scalar():
         raise exception.ServerNotFound(server=server_id)