Merge pull request #28 from TimSimpsonR/fix-load-attempt

Simple change to delete instance call.
This commit is contained in:
Nirmal Ranganathan 2012-03-22 09:41:27 -07:00
commit 8810955c47
2 changed files with 33 additions and 14 deletions

View File

@ -35,10 +35,10 @@ from reddwarf.common.models import NovaRemoteModelBase
from reddwarf.common.remote import create_nova_client
CONFIG = config.Config
LOG = logging.getLogger('reddwarf.database.models')
LOG = logging.getLogger(__name__)
def load_server_or_raise(client, uuid):
def load_server(client, uuid):
"""Loads a server or raises an exception."""
if uuid is None:
raise TypeError("Argument uuid not defined.")
@ -51,11 +51,11 @@ def load_server_or_raise(client, uuid):
return server
def delete_server_or_raise(server):
def delete_server(client, server_id):
try:
server.delete()
client.servers.delete(server_id)
except nova_exceptions.NotFound, e:
raise rd_exceptions.NotFound(uuid=uuid)
raise rd_exceptions.NotFound(uuid=server_id)
except nova_exceptions.ClientException, e:
raise rd_exceptions.ReddwarfError()
@ -79,7 +79,7 @@ class Instance(object):
raise TypeError("Argument uuid not defined.")
client = create_nova_client(context)
db_info = DBInstance.find_by(id=uuid)
server = load_server_or_raise(client,
server = load_server(client,
db_info.compute_instance_id)
task_status = db_info.task_status
service_status = InstanceServiceStatus.find_by(instance_id=uuid)
@ -87,16 +87,32 @@ class Instance(object):
@classmethod
def delete(cls, context, uuid):
instance = cls.load(context, uuid)
delete_server_or_raise(instance.server)
if context is None:
raise TypeError("Argument context not defined.")
if uuid is None:
raise TypeError("Argument uuid not defined.")
LOG.debug("Deleting instance %s..." % uuid)
LOG.debug("Creating nova client...")
client = create_nova_client(context)
instance_info = DBInstance.find_by(id=uuid)
LOG.debug(" ... deleting compute id = %s" %
instance_info.compute_instance_id)
delete_server(client, instance_info.compute_instance_id)
LOG.debug(" ... setting status to DELETING.")
instance_info.task_status = InstanceTasks.DELETING
instance_info.save()
#TODO(tim.simpson): Put this in the task manager somehow to shepard
# deletion?
@classmethod
def create(cls, context, name, flavor_ref, image_id):
client = create_nova_client(context)
server = client.servers.create(name, image_id, flavor_ref)
LOG.debug("Created new compute instance %s." % server.id)
db_info = DBInstance.create(name=name,
compute_instance_id=server.id,
task_status=InstanceTasks.BUILDING)
LOG.debug("Created new Reddwarf instance %s..." % db_info.id)
service_status = InstanceServiceStatus.create(instance_id=db_info.id,
status=ServiceStatuses.NEW)
# Now wait for the response from the create to do additional work
@ -109,7 +125,7 @@ class Instance(object):
@property
def is_building(self):
return self.status == "BUILDING"
return self.status in ["BUILDING"]
@property
def name(self):
@ -119,7 +135,10 @@ class Instance(object):
def status(self):
#TODO(tim.simpson): Introduce logic to determine status as a function
# of the current task progress, service status, and server status.
return "BUILDING"
if self.db_info.task_status == InstanceTasks.BUILDING:
return "BUILDING"
if self.db_info.task_status == InstanceTasks.DELETING:
return "SHUTDOWN"
@property
def created(self):

View File

@ -64,13 +64,13 @@ class InstanceController(BaseController):
def detail(self, req, tenant_id):
"""Return all instances."""
LOG.info("req : '%s'\n\n" % req)
LOG.info("Creating a database instance for tenant '%s'" % tenant_id)
LOG.info("Detailing a database instance for tenant '%s'" % tenant_id)
return self.index(req, tenant_id)
def index(self, req, tenant_id):
"""Return all instances."""
LOG.info("req : '%s'\n\n" % req)
LOG.info("Creating a database instance for tenant '%s'" % tenant_id)
LOG.info("Indexing a database instance for tenant '%s'" % tenant_id)
# TODO(hub-cap): turn this into middleware
context = rd_context.ReddwarfContext(
auth_tok=req.headers["X-Auth-Token"],
@ -82,7 +82,7 @@ class InstanceController(BaseController):
def show(self, req, tenant_id, id):
"""Return a single instance."""
LOG.info("req : '%s'\n\n" % req)
LOG.info("Getting a database instance for tenant '%s'" % tenant_id)
LOG.info("Showing a database instance for tenant '%s'" % tenant_id)
LOG.info("id : '%s'\n\n" % id)
# TODO(hub-cap): turn this into middleware
context = rd_context.ReddwarfContext(
@ -101,7 +101,7 @@ class InstanceController(BaseController):
def delete(self, req, tenant_id, id):
"""Delete a single instance."""
LOG.info("req : '%s'\n\n" % req)
LOG.info("Creating a database instance for tenant '%s'" % tenant_id)
LOG.info("Deleting a database instance for tenant '%s'" % tenant_id)
LOG.info("id : '%s'\n\n" % id)
# TODO(hub-cap): turn this into middleware
context = rd_context.ReddwarfContext(