Minor tweaks while trying to get Instance.load to work.

* Removed service name fields from service_statuses table and made all fields non-nullable.
* Fixed bug in load_server_or_raise.
* Moved guest prepare call into Instance model.
This commit is contained in:
Tim Simpson 2012-03-20 18:33:39 -05:00
parent 1e505aeea9
commit 7de0423b34
4 changed files with 12 additions and 15 deletions

View File

@ -34,10 +34,9 @@ meta = MetaData()
service_statuses = Table('service_statuses', meta, service_statuses = Table('service_statuses', meta,
Column('id', String(36), primary_key=True, nullable=False), Column('id', String(36), primary_key=True, nullable=False),
Column('instance_id', String(36)), Column('instance_id', String(36), nullable=False),
Column('service_name', String(64)), Column('status_id', Integer(), nullable=False),
Column('status_id', Integer()), Column('status_description', String(64), nullable=False))
Column('status_description', String(64)))
def upgrade(migrate_engine): def upgrade(migrate_engine):

View File

@ -23,6 +23,7 @@ import netaddr
from reddwarf import db from reddwarf import db
from reddwarf.common import config from reddwarf.common import config
from reddwarf.guestagent import api as guest_api
from reddwarf.common import exception as rd_exceptions from reddwarf.common import exception as rd_exceptions
from reddwarf.common import utils from reddwarf.common import utils
from reddwarf.instance.tasks import InstanceTask from reddwarf.instance.tasks import InstanceTask
@ -47,7 +48,7 @@ def load_server_or_raise(client, uuid):
raise rd_exceptions.NotFound(uuid=uuid) raise rd_exceptions.NotFound(uuid=uuid)
except nova_exceptions.ClientException, e: except nova_exceptions.ClientException, e:
raise rd_exceptions.ReddwarfError(str(e)) raise rd_exceptions.ReddwarfError(str(e))
return Instance(context, uuid, server) return server
def delete_server_or_raise(server): def delete_server_or_raise(server):
@ -81,8 +82,7 @@ class Instance(object):
server = load_server_or_raise(client, server = load_server_or_raise(client,
instance_info.compute_instance_id) instance_info.compute_instance_id)
task_status = instance_info.task_status task_status = instance_info.task_status
service_status = InstanceServiceStatus.find_by( service_status = InstanceServiceStatus.find_by(instance_id=uuid)
instance_id=uuid, service_name=service_name)
return Instance(context, uuid, server, task_status, service_status) return Instance(context, uuid, server, task_status, service_status)
@classmethod @classmethod
@ -97,8 +97,10 @@ class Instance(object):
db_info = DBInstance.create(name=name, db_info = DBInstance.create(name=name,
compute_instance_id=server.id, compute_instance_id=server.id,
task_status=InstanceTasks.BUILDING) task_status=InstanceTasks.BUILDING)
service_status = InstanceServiceStatus(name="MySQL", service_status = InstanceServiceStatus(instance_id=db_info.id,
instance_id=db_info.id, status=ServiceStatuses.NEW) status=ServiceStatuses.NEW)
# Now wait for the response from the create to do additional work
guest_api.API().prepare(context, db_info.id, [], 512)
return Instance(context, db_info, server, service_status) return Instance(context, db_info, server, service_status)
@property @property
@ -247,8 +249,7 @@ class ServiceImage(DatabaseModelBase):
class InstanceServiceStatus(DatabaseModelBase): class InstanceServiceStatus(DatabaseModelBase):
_data_fields = ['instance_id', 'service_name', 'status_id', _data_fields = ['instance_id', 'status_id', 'status_description']
'status_description']
def __init__(self, status=None, **kwargs): def __init__(self, status=None, **kwargs):
kwargs["status_id"] = status.code kwargs["status_id"] = status.code

View File

@ -24,7 +24,6 @@ from reddwarf.common import context as rd_context
from reddwarf.common import exception from reddwarf.common import exception
from reddwarf.common import utils from reddwarf.common import utils
from reddwarf.common import wsgi from reddwarf.common import wsgi
from reddwarf.guestagent import api as guest_api
from reddwarf.instance import models, views from reddwarf.instance import models, views
CONFIG = config.Config CONFIG = config.Config
@ -139,8 +138,6 @@ class InstanceController(BaseController):
flavor_ref = body['instance']['flavorRef'] flavor_ref = body['instance']['flavorRef']
instance = models.Instance.create(context, name, flavor_ref, image_id) instance = models.Instance.create(context, name, flavor_ref, image_id)
# Now wait for the response from the create to do additional work
guest_api.API().prepare(context, server['id'], [], 512)
#TODO(cp16net): need to set the return code correctly #TODO(cp16net): need to set the return code correctly
return wsgi.Result(views.InstanceView(instance).data(), 201) return wsgi.Result(views.InstanceView(instance).data(), 201)

View File

@ -33,7 +33,7 @@ class InstanceView(object):
} }
if not self.instance.is_building: if not self.instance.is_building:
instance_dict["addresses"] = self.instance.addresses instance_dict["addresses"] = self.instance.addresses
return { "instance": instance_dict } return {"instance": instance_dict}
class InstancesView(object): class InstancesView(object):