Making the guest more extensible for services

* Added a map for guest impls in the guest
* Added service_type to the /etc/guest_info file
This commit is contained in:
Michael Basnight 2012-04-13 09:39:56 -05:00
parent 3b2d3ac2d2
commit f48daff6bd
3 changed files with 22 additions and 8 deletions

View File

@ -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"""

View File

@ -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()

View File

@ -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)