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)
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
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)
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)
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)
def failer(engine_manager, context, server): raise exception.ServerNotFound(server=server['uuid'])
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)