diff options
author | Derek Higgins <derekh@redhat.com> | 2012-05-09 21:17:41 +0000 |
---|---|---|
committer | Derek Higgins <derekh@redhat.com> | 2012-05-11 16:27:58 +0100 |
commit | 6c5f7d9e10f059e2bc1e56ea2d4e32a7e4cadc8b (patch) | |
tree | 374d786de1eb22c45bf11b3f39ffae62d6b74468 | |
parent | 0b8ed78eb8738045bf0ba74f964b08f4d2f81701 (diff) | |
download | keystone-6c5f7d9e10f059e2bc1e56ea2d4e32a7e4cadc8b.tar.gz keystone-6c5f7d9e10f059e2bc1e56ea2d4e32a7e4cadc8b.tar.xz keystone-6c5f7d9e10f059e2bc1e56ea2d4e32a7e4cadc8b.zip |
notify calling process we are ready to serve
Fixes bug 980037
Service managers starting keystone-all have no way of being notified
when the service is ready to accept connections. This commit allows
a configurable command to be called when we are ready e.g.
for systemd setting the statup type of a service unit to "notify" and setting
onready = systemd-notify --ready
in keystone.conf, would notify a waiting systemd that we are ready to
serve
In an automated envirnment (e.g. puppet) this will allow the startup of
the keystone-all service (with systemctl for example) directly followed
by usage of the keystone client without the need for a sleep (or retry)
while we are waiting for the keystone service to be ready.
Change-Id: I3f7aafe9837be60a0f35cae1a7db892f6851cc47
-rwxr-xr-x | bin/keystone-all | 8 | ||||
-rw-r--r-- | etc/keystone.conf.sample | 4 | ||||
-rw-r--r-- | keystone/config.py | 1 |
3 files changed, 13 insertions, 0 deletions
diff --git a/bin/keystone-all b/bin/keystone-all index f58c2a03..bc4ab4b8 100755 --- a/bin/keystone-all +++ b/bin/keystone-all @@ -20,6 +20,7 @@ from paste import deploy from keystone import config from keystone.common import wsgi +from keystone.common import utils CONF = config.CONF @@ -37,6 +38,13 @@ def serve(*servers): server.port) server.start() + # notify calling process we are ready to serve + if CONF.onready: + try: + utils.check_output(CONF.onready.split()) + except Exception: + logging.exception('Failed to execute onready command') + for server in servers: try: server.wait() diff --git a/etc/keystone.conf.sample b/etc/keystone.conf.sample index 4f146d91..7d3d52c8 100644 --- a/etc/keystone.conf.sample +++ b/etc/keystone.conf.sample @@ -46,6 +46,10 @@ # Format string for %(asctime)s in log records. # log_date_format = %Y-%m-%d %H:%M:%S +# onready allows you to run a command when the process is ready to serve +# for example to have it notify using systemd, one could set +# onready = systemd-notify --ready + [sql] # The SQLAlchemy connection string used to connect to the database # connection = sqlite:///keystone.db diff --git a/keystone/config.py b/keystone/config.py index 36523d22..4b50f411 100644 --- a/keystone/config.py +++ b/keystone/config.py @@ -143,6 +143,7 @@ register_str('bind_host', default='0.0.0.0') register_str('compute_port', default=8774) register_str('admin_port', default=35357) register_str('public_port', default=5000) +register_str('onready') # sql options |