From 7beb2f08d8dab26d9fe34235c91c1b2a7a2794bd Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 6 Oct 2006 21:06:16 +0000 Subject: Merge of the client/refactor branch (revisions r2218-r2400) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@2401 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Client/Tools/DebInit.py | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/lib/Client/Tools/DebInit.py (limited to 'src/lib/Client/Tools/DebInit.py') diff --git a/src/lib/Client/Tools/DebInit.py b/src/lib/Client/Tools/DebInit.py new file mode 100644 index 000000000..5cfabb4f0 --- /dev/null +++ b/src/lib/Client/Tools/DebInit.py @@ -0,0 +1,65 @@ +'''Debian Init Support for Bcfg2''' +__revision__ = '$Revision$' + +import glob, os, re +import Bcfg2.Client.Tools + +class DebInit(Bcfg2.Client.Tools.SvcTool): + '''Debian Service Support for Bcfg2''' + __name__ = 'DebInit' + __execs__ = ['/usr/sbin/update-rc.d'] + __handles__ = [('Service', 'deb')] + __req__ = {'Service': ['name', 'status']} + svcre = re.compile("/etc/.*/[SK]\d\d(?P\S+)") + + # implement entry (Verify|Install) ops + def VerifyService(self, entry, _): + '''Verify Service status for entry''' + rawfiles = glob.glob("/etc/rc*.d/*%s" % (entry.get('name'))) + files = [filename for filename in rawfiles if \ + self.svcre.match(filename).group('name') == entry.get('name')] + if entry.get('status') == 'off': + if files: + entry.set('current_status', 'on') + return False + else: + return True + else: + if files: + return True + else: + entry.set('current_status', 'off') + return False + + def InstallService(self, entry): + '''Install Service for entry''' + self.logger.info("Installing Service %s" % (entry.get('name'))) + try: + os.stat('/etc/init.d/%s' % entry.get('name')) + except OSError: + self.logger.debug("Init script for service %s does not exist" % entry.get('name')) + return False + + if entry.get('status') == 'off': + self.cmd.run("/etc/init.d/%s stop" % (entry.get('name'))) + cmdrc = self.cmd.run("/usr/sbin/update-rc.d -f %s remove" % entry.get('name'))[0] + else: + cmdrc = self.cmd.run("/usr/sbin/update-rc.d %s defaults" % \ + (entry.get('name')))[0] + return cmdrc == 0 + + def FindExtra(self): + '''Find Extra Debian Service Entries''' + specified = [entry.get('name') for entry in self.getSupportedEntries()] + extra = [self.svcre.match(fname).group('name') for fname in + glob.glob("/etc/rc[12345].d/S*") \ + if self.svcre.match(fname).group('name') not in specified] + return [Bcfg2.Client.XML.Element('Service', name=name, type='deb') for name \ + in extra] + + def Remove(self, entries): + '''Remove extra service entries''' + self.logger.info('Removing services:') + self.logger.info([entry.get('name') for entry in entries]) + for entry in entries: + self.cmd.run("rm -f /etc/rc*.d/S??%s" % (entry.get('name'))) -- cgit v1.2.3-1-g7c22