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
This commit is contained in:
Derek Higgins 2012-05-09 21:17:41 +00:00
parent 0b8ed78eb8
commit 6c5f7d9e10
3 changed files with 13 additions and 0 deletions

View File

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

View File

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

View File

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