summaryrefslogtreecommitdiffstats
path: root/src/lib/Client/Tools/__init__.py
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2009-01-23 02:57:34 +0000
committerNarayan Desai <desai@mcs.anl.gov>2009-01-23 02:57:34 +0000
commit154c97c06501ef66e0a103644731ed53d1096fc3 (patch)
treeac1f97249e4209e0dc49a312d87b9b674faa6ee0 /src/lib/Client/Tools/__init__.py
parentf7f0b49a8d6e7ffef6690184bf083a678dc2e5fb (diff)
downloadbcfg2-154c97c06501ef66e0a103644731ed53d1096fc3.tar.gz
bcfg2-154c97c06501ef66e0a103644731ed53d1096fc3.tar.bz2
bcfg2-154c97c06501ef66e0a103644731ed53d1096fc3.zip
Simplify service configuration; make all services use common restart framework
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5040 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Client/Tools/__init__.py')
-rw-r--r--src/lib/Client/Tools/__init__.py59
1 files changed, 43 insertions, 16 deletions
diff --git a/src/lib/Client/Tools/__init__.py b/src/lib/Client/Tools/__init__.py
index a827e7924..d44356f9b 100644
--- a/src/lib/Client/Tools/__init__.py
+++ b/src/lib/Client/Tools/__init__.py
@@ -272,7 +272,8 @@ class PkgTool(Tool):
def FindExtraPackages(self):
'''Find extra packages'''
packages = [entry.get('name') for entry in self.getSupportedEntries()]
- extras = [data for data in self.installed.iteritems() if data[0] not in packages]
+ extras = [data for data in self.installed.iteritems() \
+ if data[0] not in packages]
return [Bcfg2.Client.XML.Element('Package', name=name, \
type=self.pkgtype, version=version) \
for (name, version) in extras]
@@ -280,21 +281,47 @@ class PkgTool(Tool):
class SvcTool(Tool):
'''This class defines basic Service behavior'''
name = 'SvcTool'
- __svcrestart__ = 'reload'
+
+ 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)
+
+ def start_service(self, service):
+ self.logger.debug('Starting service %s' % service.get('name'))
+ return self.cmd.run(self.get_svc_command(service, 'start'))[0]
+
+ def stop_service(self, service):
+ self.logger.debug('Stopping service %s' % service.get('name'))
+ return self.cmd.run(self.get_svc_command(service, 'stop'))[0]
+
+ def restart_service(self, service):
+ self.logger.debug('Restarting service %s' % service.get('name'))
+ restart_target = 'restart'
+ if service.get('mode', 'default') == 'custom':
+ restart_target = service.get('custom', 'restart')
+ return self.cmd.run(self.get_svc_command(service, restart_target))[0]
+
+ def check_service(self, service):
+ # not supported for this driver
+ return 0
def BundleUpdated(self, bundle, states):
'''The Bundle has been updated'''
- for entry in bundle:
- if self.handlesEntry(entry):
- rc = 0
- if entry.get('status') == 'on' and not self.setup['build']:
- self.logger.debug('Restarting service %s' % entry.get('name'))
- rc = self.cmd.run('/etc/init.d/%s %s' % \
- (entry.get('name'), entry.get('reload', self.__svcrestart__)))[0]
- elif not self.setup['build']:
- self.logger.debug('Stopping service %s' % entry.get('name'))
- rc = self.cmd.run('/etc/init.d/%s stop' % \
- (entry.get('name')))[0]
- if rc:
- self.logger.error("Failed to restart service %s" % \
- (entry.get('name')))
+ if self.setup['servicemode'] == 'disabled':
+ return
+
+ for entry in [ent for ent in bundle if self.handlesEntry(ent)]:
+ if entry.get('mode', 'default') == 'manual':
+ continue
+ # need to handle servicemode = (build|default)
+ # need to handle mode = (default|supervised|custom)
+ if entry.get('status') == 'on':
+ if self.setup['servicemode'] == 'build':
+ rc = self.stop_service(entry)
+ else:
+ rc = self.restart_service(entry)
+ else:
+ rc = self.stop_service(entry)
+ if rc:
+ self.logger.error("Failed to manipulate service %s" % \
+ (entry.get('name')))