From 154c97c06501ef66e0a103644731ed53d1096fc3 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 23 Jan 2009 02:57:34 +0000 Subject: 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 --- src/lib/Client/Tools/__init__.py | 59 +++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 16 deletions(-) (limited to 'src/lib/Client/Tools/__init__.py') 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'))) -- cgit v1.2.3-1-g7c22