From b1698707344ff63603959d4c657efeee8ab4dd7a Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 26 Jan 2012 09:55:11 -0500 Subject: track service restarts to prevent a service from being restarted multiple times by a single bcfg2 run (#853) --- src/lib/Client/Tools/__init__.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/lib/Client/Tools/__init__.py b/src/lib/Client/Tools/__init__.py index 0c0aa6b8e..af872c8b4 100644 --- a/src/lib/Client/Tools/__init__.py +++ b/src/lib/Client/Tools/__init__.py @@ -288,6 +288,10 @@ class SvcTool(Tool): """This class defines basic Service behavior""" name = 'SvcTool' + def __init__(self, logger, setup, config): + Tool.__init__(self, logger, setup, config) + self.restarted = [] + def get_svc_command(self, service, action): """Return the basename of the command used to start/stop services.""" return '/etc/init.d/%s %s' % (service.get('name'), action) @@ -323,17 +327,19 @@ class SvcTool(Tool): for entry in [ent for ent in bundle if self.handlesEntry(ent)]: mode = entry.get('mode', 'default') - if mode == 'manual' or \ - (mode == 'interactive_only' and not self.setup['interactive']): + if (mode == 'manual' or + (mode == 'interactive_only' and + not self.setup['interactive'])): continue # need to handle servicemode = (build|default) # need to handle mode = (default|supervised) if entry.get('status') == 'on': if self.setup['servicemode'] == 'build': rc = self.stop_service(entry) - else: + elif entry.get('name') not in self.restarted: if self.setup['interactive']: - prompt = 'Restart service %s?: (y/N): ' % entry.get('name') + prompt = ('Restart service %s?: (y/N): ' % + entry.get('name')) # py3k compatibility try: ans = raw_input(prompt) @@ -342,8 +348,10 @@ class SvcTool(Tool): if ans not in ['y', 'Y']: continue rc = self.restart_service(entry) + if not rc: + self.restarted.append(entry.get('name')) else: rc = self.stop_service(entry) if rc: - self.logger.error("Failed to manipulate service %s" % \ + self.logger.error("Failed to manipulate service %s" % (entry.get('name'))) -- cgit v1.2.3-1-g7c22