summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Higgins <derekh@redhat.com>2012-05-09 21:17:41 +0000
committerDerek Higgins <derekh@redhat.com>2012-05-11 16:27:58 +0100
commit6c5f7d9e10f059e2bc1e56ea2d4e32a7e4cadc8b (patch)
tree374d786de1eb22c45bf11b3f39ffae62d6b74468
parent0b8ed78eb8738045bf0ba74f964b08f4d2f81701 (diff)
downloadkeystone-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-xbin/keystone-all8
-rw-r--r--etc/keystone.conf.sample4
-rw-r--r--keystone/config.py1
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