From 46d6b9306c26f36bc2d490afd9fcab30aa4725f5 Mon Sep 17 00:00:00 2001 From: Alan Pevec Date: Tue, 6 May 2014 21:48:59 +0200 Subject: [PATCH] Refactor service readiness notification Build upon cceda95a35f18f5f7b52daaf0662a4cd3768b3ac apply Oslo systemd module. It was imported in aef33d2d716c064f1f571c334fd36b1ea5928d5c. It also drops heat.common.systemd and deprecates onready configuration parameter. Oslo commit 53e1214c092f09e3851b1a1b55289a93a72b09ec Change-Id: I80f325c9be9c171c2dc8d5526570bf64f0f87c78 --- bin/heat-api | 4 ++-- bin/heat-api-cfn | 5 +++-- bin/heat-api-cloudwatch | 5 +++-- bin/heat-engine | 3 +-- etc/heat/heat.conf.sample | 7 +----- heat/common/config.py | 7 +----- heat/common/notify.py | 40 ---------------------------------- heat/common/systemd.py | 45 --------------------------------------- 8 files changed, 11 insertions(+), 105 deletions(-) delete mode 100644 heat/common/notify.py delete mode 100644 heat/common/systemd.py diff --git a/bin/heat-api b/bin/heat-api index a321cd00fe..caeed6f2b8 100755 --- a/bin/heat-api +++ b/bin/heat-api @@ -34,10 +34,10 @@ from oslo.config import cfg from heat.common import config from heat.common import messaging -from heat.common import notify from heat.common import wsgi from heat.openstack.common import gettextutils from heat.openstack.common import log as logging +from heat.openstack.common import systemd gettextutils.enable_lazy() gettextutils.install('heat', lazy=True) @@ -63,7 +63,7 @@ if __name__ == '__main__': {'host': host, 'port': port}) server = wsgi.Server() server.start(app, cfg.CONF.heat_api, default_port=port) - notify.startup_notify(cfg.CONF.onready) + systemd.notify_once() server.wait() except RuntimeError as e: sys.exit("ERROR: %s" % e) diff --git a/bin/heat-api-cfn b/bin/heat-api-cfn index 6818463e9b..cdc4354811 100755 --- a/bin/heat-api-cfn +++ b/bin/heat-api-cfn @@ -36,10 +36,11 @@ from oslo.config import cfg from heat.common import config from heat.common import messaging -from heat.common import notify from heat.common import wsgi from heat.openstack.common import gettextutils + from heat.openstack.common import log as logging +from heat.openstack.common import systemd gettextutils.enable_lazy() gettextutils.install('heat', lazy=True) @@ -65,7 +66,7 @@ if __name__ == '__main__': {'host': host, 'port': port}) server = wsgi.Server() server.start(app, cfg.CONF.heat_api_cfn, default_port=port) - notify.startup_notify(cfg.CONF.onready) + systemd.notify_once() server.wait() except RuntimeError as e: sys.exit("ERROR: %s" % e) diff --git a/bin/heat-api-cloudwatch b/bin/heat-api-cloudwatch index 9a34909c47..d1b600b9ff 100755 --- a/bin/heat-api-cloudwatch +++ b/bin/heat-api-cloudwatch @@ -36,10 +36,11 @@ from oslo.config import cfg from heat.common import config from heat.common import messaging -from heat.common import notify from heat.common import wsgi from heat.openstack.common import gettextutils + from heat.openstack.common import log as logging +from heat.openstack.common import systemd gettextutils.enable_lazy() gettextutils.install('heat', lazy=True) @@ -65,7 +66,7 @@ if __name__ == '__main__': {'host': host, 'port': port}) server = wsgi.Server() server.start(app, cfg.CONF.heat_api_cloudwatch, default_port=port) - notify.startup_notify(cfg.CONF.onready) + systemd.notify_once() server.wait() except RuntimeError as e: sys.exit("ERROR: %s" % e) diff --git a/bin/heat-engine b/bin/heat-engine index 7042e6d577..7563a76798 100755 --- a/bin/heat-engine +++ b/bin/heat-engine @@ -35,10 +35,10 @@ if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')): from oslo.config import cfg from heat.common import messaging -from heat.common import notify from heat.openstack.common import gettextutils from heat.openstack.common import log as logging from heat.openstack.common import service + from heat.rpc import api as rpc_api gettextutils.enable_lazy() @@ -65,5 +65,4 @@ if __name__ == '__main__': # We create the periodic tasks here, which mean they are created # only in the parent process when num_engine_workers>1 is specified srv.create_periodic_tasks() - notify.startup_notify(cfg.CONF.onready) launcher.wait() diff --git a/etc/heat/heat.conf.sample b/etc/heat/heat.conf.sample index 60de078ba3..ac9446a7f0 100644 --- a/etc/heat/heat.conf.sample +++ b/etc/heat/heat.conf.sample @@ -66,12 +66,7 @@ # stack locking. (integer value) #engine_life_check_timeout=2 -# onready allows you to send a notification when the heat -# processes are ready to serve. This is either a module with -# the notify() method or a shell command. To enable -# notifications with systemd, one may use the 'systemd-notify -# --ready' shell command or the 'heat.common.systemd' -# notification module. (string value) +# Deprecated. (string value) #onready= diff --git a/heat/common/config.py b/heat/common/config.py index f9f962b029..17d1157474 100644 --- a/heat/common/config.py +++ b/heat/common/config.py @@ -126,12 +126,7 @@ engine_opts = [ help=_('RPC timeout for the engine liveness check that is used' ' for stack locking.')), cfg.StrOpt('onready', - help=_('onready allows you to send a notification when the' - ' heat processes are ready to serve. This is either a' - ' module with the notify() method or a shell command. ' - ' To enable notifications with systemd, one may use' - ' the \'systemd-notify --ready\' shell command or' - ' the \'heat.common.systemd\' notification module.'))] + help=_('Deprecated.'))] rpc_opts = [ cfg.StrOpt('host', diff --git a/heat/common/notify.py b/heat/common/notify.py deleted file mode 100644 index db0a6fee1d..0000000000 --- a/heat/common/notify.py +++ /dev/null @@ -1,40 +0,0 @@ -# -# Copyright 2014 Red Hat, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -""" -Startup notification using a shell script or systemd NOTIFY_SOCKET -style notification -""" - - -from heat.openstack.common import importutils -from heat.openstack.common import log as logging -from heat.openstack.common import processutils - -LOG = logging.getLogger(__name__) - - -def startup_notify(notify_param): - if not notify_param or notify_param == "": - return - try: - notifier = importutils.import_module(notify_param) - except ImportError: - try: - processutils.execute(notify_param, shell=True) - except Exception as e: - LOG.error(_('Failed to execute onready command: %s') % e) - else: - notifier.notify() diff --git a/heat/common/systemd.py b/heat/common/systemd.py deleted file mode 100644 index cc8aa7247c..0000000000 --- a/heat/common/systemd.py +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright 2012 Red Hat, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -""" -Helper module for systemd start-up completion notification. -Used for "onready" configuration parameter in heat.conf -""" - -import os -import socket - -from heat.openstack.common import log as logging - -LOG = logging.getLogger(__name__) - - -def _sd_notify(msg): - sysd = os.getenv('NOTIFY_SOCKET') - if sysd: - sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) - if sysd.startswith('@'): - # abstract namespace socket - sysd = '\0%s' % sysd[1:] - sock.connect(sysd) - sock.sendall(msg) - sock.close() - else: - LOG.warning(_('Unable to notify systemd of startup completion:' - ' NOTIFY_SOCKET not set')) - - -def notify(): - _sd_notify('READY=1')