diff --git a/reddwarf/guestagent/manager.py b/reddwarf/guestagent/manager.py index 3b6bb4822f..2d5f06785b 100644 --- a/reddwarf/guestagent/manager.py +++ b/reddwarf/guestagent/manager.py @@ -28,12 +28,15 @@ import functools import logging import traceback +from reddwarf.common import config from reddwarf.common import exception from reddwarf.common import utils from reddwarf.common import service LOG = logging.getLogger(__name__) +CONFIG = config.Config +GUEST_SERVICES = {'mysql': 'reddwarf.guestagent.dbaas.DBaaSAgent'} class GuestManager(service.Manager): @@ -41,10 +44,19 @@ class GuestManager(service.Manager): """Manages the tasks within a Guest VM.""" def __init__(self, guest_drivers=None, *args, **kwargs): - if not guest_drivers: - #TODO(hub-cap): fix this, maybe make it a flag - guest_drivers = ['reddwarf.guestagent.dbaas.DBaaSAgent', - 'reddwarf.guestagent.pkg.PkgAgent'] + try: + service_impl = GUEST_SERVICES[CONFIG.get('service_type')] + except KeyError as e: + LOG.error(_("Could not create guest, no impl for key - %s") % + service_type) + raise e + LOG.info("Create guest driver %s" % service_impl) + self.create_guest_driver(service_impl) + super(GuestManager, self).__init__(*args, **kwargs) + + def create_guest_driver(self, service_impl): + guest_drivers = [service_impl, + 'reddwarf.guestagent.pkg.PkgAgent'] classes = [] for guest_driver in guest_drivers: LOG.info(guest_driver) @@ -58,7 +70,6 @@ class GuestManager(service.Manager): "following classes: " + str(classes) + \ " Exception=" + str(te) raise TypeError(msg) - super(GuestManager, self).__init__(*args, **kwargs) def init_host(self): """Method for any service initialization""" diff --git a/reddwarf/instance/models.py b/reddwarf/instance/models.py index 9c023b2cd4..3e36e2ec14 100644 --- a/reddwarf/instance/models.py +++ b/reddwarf/instance/models.py @@ -140,13 +140,16 @@ class Instance(object): raise rd_exceptions.ReddwarfError() @classmethod - def create(cls, context, name, flavor_ref, image_id, databases): + def create(cls, context, name, flavor_ref, image_id, + databases, service_type): db_info = DBInstance.create(name=name, task_status=InstanceTasks.NONE) LOG.debug(_("Created new Reddwarf instance %s...") % db_info.id) client = create_nova_client(context) + files = {"/etc/guest_info": "guest_id=%s\nservice_type=%s\n" % + (db_info.id, service_type)} server = client.servers.create(name, image_id, flavor_ref, - files={"/etc/guest_info": "guest_id=%s" % db_info.id}) + files=files) LOG.debug(_("Created new compute instance %s.") % server.id) db_info.compute_instance_id = server.id db_info.save() diff --git a/reddwarf/instance/service.py b/reddwarf/instance/service.py index 1ade375b2a..2fa007271b 100644 --- a/reddwarf/instance/service.py +++ b/reddwarf/instance/service.py @@ -251,7 +251,7 @@ class InstanceController(BaseController): if databases is None: databases = [] instance = models.Instance.create(context, name, flavor_ref, - image_id, databases) + image_id, databases, service_type) return wsgi.Result(views.InstanceDetailView(instance).data(), 200)