summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-01-26 09:55:11 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-01-26 09:55:11 -0500
commitb1698707344ff63603959d4c657efeee8ab4dd7a (patch)
treee5c275c8454984009503119e074d3ac33fc8b753 /src
parent1781ba4ec2ec749d9a5773adf202322381fd8bff (diff)
downloadbcfg2-b1698707344ff63603959d4c657efeee8ab4dd7a.tar.gz
bcfg2-b1698707344ff63603959d4c657efeee8ab4dd7a.tar.bz2
bcfg2-b1698707344ff63603959d4c657efeee8ab4dd7a.zip
track service restarts to prevent a service from being restarted multiple times by a single bcfg2 run (#853)
Diffstat (limited to 'src')
-rw-r--r--src/lib/Client/Tools/__init__.py18
1 files 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')))