summaryrefslogtreecommitdiffstats
path: root/openstack
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-08-20 08:47:58 +0000
committerGerrit Code Review <review@openstack.org>2012-08-20 08:47:58 +0000
commita3af744743746f796cb6746d5038c7650b2dfe11 (patch)
treec14e466f047bd90bf86dc162d5a8e3017d1481d8 /openstack
parentddd11473740e15eeac759238a3737a4089baf9f9 (diff)
parentb2408dcedbc4c036c50a0df87a634c8946a08c7c (diff)
downloadoslo-a3af744743746f796cb6746d5038c7650b2dfe11.tar.gz
oslo-a3af744743746f796cb6746d5038c7650b2dfe11.tar.xz
oslo-a3af744743746f796cb6746d5038c7650b2dfe11.zip
Merge "Basic service launching infrastructure"
Diffstat (limited to 'openstack')
-rw-r--r--openstack/common/service.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/openstack/common/service.py b/openstack/common/service.py
index a0a8e5a..9c712c6 100644
--- a/openstack/common/service.py
+++ b/openstack/common/service.py
@@ -19,6 +19,64 @@
"""Generic Node base class for all workers that run on hosts."""
+import sys
+import eventlet
+import greenlet
+
+
+class Launcher(object):
+ """Launch one or more services and wait for them to complete."""
+
+ def __init__(self):
+ """Initialize the service launcher.
+
+ :returns: None
+
+ """
+ self._services = []
+
+ @staticmethod
+ def run_service(service):
+ """Start and wait for a service to finish.
+
+ :param service: service to run and wait for.
+ :returns: None
+
+ """
+ service.start()
+ service.wait()
+
+ def launch_service(self, service):
+ """Load and start the given service.
+
+ :param service: The service you would like to start.
+ :returns: None
+
+ """
+ gt = eventlet.spawn(self.run_service, service)
+ self._services.append(gt)
+
+ def stop(self):
+ """Stop all services which are currently running.
+
+ :returns: None
+
+ """
+ for service in self._services:
+ service.kill()
+
+ def wait(self):
+ """Waits until all services have been stopped, and then returns.
+
+ :returns: None
+
+ """
+ for service in self._services:
+ try:
+ service.wait()
+ except greenlet.GreenletExit:
+ pass
+
class Service(object):
"""Service object for binaries running on hosts.
@@ -28,3 +86,18 @@ class Service(object):
def __init__(self, host, manager, *args, **kwargs):
self.host = host
self.manager = manager
+
+ def start(self):
+ if self.manager:
+ self.manager.init_host()
+
+ def stop(self):
+ pass
+
+ def wait(self):
+ pass
+
+
+def launcher(service):
+ l = Launcher()
+ l.launch_service(service)