summaryrefslogtreecommitdiffstats
path: root/src/lib/Client/Tools/DebInit.py
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2006-10-06 21:06:16 +0000
committerNarayan Desai <desai@mcs.anl.gov>2006-10-06 21:06:16 +0000
commit7beb2f08d8dab26d9fe34235c91c1b2a7a2794bd (patch)
tree92510fa0a9bb4de4c589b8a2f406aa097e0ab3d2 /src/lib/Client/Tools/DebInit.py
parent53a983ba616d1c2292e1f4117084f85a1db9454f (diff)
downloadbcfg2-7beb2f08d8dab26d9fe34235c91c1b2a7a2794bd.tar.gz
bcfg2-7beb2f08d8dab26d9fe34235c91c1b2a7a2794bd.tar.bz2
bcfg2-7beb2f08d8dab26d9fe34235c91c1b2a7a2794bd.zip
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
Diffstat (limited to 'src/lib/Client/Tools/DebInit.py')
-rw-r--r--src/lib/Client/Tools/DebInit.py65
1 files changed, 65 insertions, 0 deletions
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<name>\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')))