Created Bootstrapper to handle Nova bootstrapping logic.

This commit is contained in:
Brian Lamar
2011-06-23 21:31:00 -04:00
parent 792052e884
commit c45dcfb026
3 changed files with 41 additions and 37 deletions

View File

@@ -25,17 +25,18 @@ Starts both the EC2 and OpenStack APIs in separate processes.
import sys import sys
import nova.log
import nova.service import nova.service
import nova.utils
def main(): def main():
"""Launch EC2 and OSAPI services.""" """Launch EC2 and OSAPI services."""
launcher = nova.service.Launcher(sys.argv) nova.utils.Bootstrapper.bootstrap_binary(sys.argv)
ec2 = nova.service.WSGIService("ec2") ec2 = nova.service.WSGIService("ec2")
osapi = nova.service.WSGIService("osapi") osapi = nova.service.WSGIService("osapi")
launcher = nova.service.Launcher()
launcher.launch_service(ec2) launcher.launch_service(ec2)
launcher.launch_service(osapi) launcher.launch_service(osapi)

View File

@@ -60,47 +60,13 @@ flags.DEFINE_string('api_paste_config', "api-paste.ini",
class Launcher(object): class Launcher(object):
"""Launch one or more services and wait for them to complete.""" """Launch one or more services and wait for them to complete."""
def __init__(self, flags=None): def __init__(self):
"""Initialize the service launcher. """Initialize the service launcher.
:param flags: Flags to use for the services we're going to load.
:returns: None :returns: None
""" """
self._services = [] self._services = []
self._version = version.version_string_with_vcs()
self._flags = flags
self._setup_flags()
self._setup_logging()
self._log_flags()
def _setup_logging(self):
"""Logic to ensure logging is going to work correctly for services.
:returns: None
"""
logging.setup()
logging.audit(_("Nova Version (%(_version)s)") % self.__dict__)
def _setup_flags(self):
"""Logic to ensure flags/configuration are correctly set.
:returns: None
"""
utils.default_flagfile(args=self._flags)
FLAGS(self._flags or [])
flags.DEFINE_flag(flags.HelpFlag())
flags.DEFINE_flag(flags.HelpshortFlag())
flags.DEFINE_flag(flags.HelpXMLFlag())
FLAGS.ParseNewFlags()
def _log_flags(self):
LOG.debug(_("Full set of FLAGS:"))
for flag in FLAGS:
flag_get = FLAGS.get(flag, None)
LOG.debug("%(flag)s : %(flag_get)s" % locals())
@staticmethod @staticmethod
def run_service(service): def run_service(service):

View File

@@ -743,3 +743,40 @@ def is_uuid_like(val):
if not isinstance(val, basestring): if not isinstance(val, basestring):
return False return False
return (len(val) == 36) and (val.count('-') == 4) return (len(val) == 36) and (val.count('-') == 4)
class Bootstrapper(object):
"""Provides environment bootstrapping capabilities for entry points."""
@staticmethod
def bootstrap_binary(argv):
"""Initialize the Nova environment using command line arguments."""
Bootstrapper.setup_flags(argv)
Bootstrapper.setup_logging()
Bootstrapper.log_flags()
@staticmethod
def setup_logging():
"""Initialize logging and log a message indicating the Nova version."""
logging.setup()
logging.audit(_("Nova Version (%s)") %
version.version_string_with_vcs())
@staticmethod
def setup_flags(input_flags):
"""Initialize flags, load flag file, and print help if needed."""
default_flagfile(args=input_flags)
FLAGS(input_flags or [])
flags.DEFINE_flag(flags.HelpFlag())
flags.DEFINE_flag(flags.HelpshortFlag())
flags.DEFINE_flag(flags.HelpXMLFlag())
FLAGS.ParseNewFlags()
@staticmethod
def log_flags():
"""Log the list of all active flags being used."""
logging.audit(_("Currently active flags:"))
for key in FLAGS:
value = FLAGS.get(key, None)
logging.audit(_("%(key)s : %(value)s" % locals()))