From ee99cfb4139b25e2235abd9c773ff180bc93a2ca Mon Sep 17 00:00:00 2001 From: Joey Hagedorn Date: Tue, 2 Jan 2007 22:29:42 +0000 Subject: Initial commit of launchd service support. git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@2616 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Client/Tools/launchd.py | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/lib/Client/Tools/launchd.py diff --git a/src/lib/Client/Tools/launchd.py b/src/lib/Client/Tools/launchd.py new file mode 100644 index 000000000..eb925dd5c --- /dev/null +++ b/src/lib/Client/Tools/launchd.py @@ -0,0 +1,55 @@ +'''launchd support for Bcfg2''' +__revision__ = '$Revision: 2596 $' + +import glob, os +import Bcfg2.Client.Tools + +class LaunchD(Bcfg2.Client.Tools.Tool): + '''Support for Mac OS X Launchd Services''' + __handles__ = [('Service', 'launchd')] + __execs__ = ['/bin/launchctl', '/usr/bin/defaults'] + __name__ = 'LaunchD' + __req__ = {'Service':['name', 'status', 'plist']} + + #currently requires the path to the plist to load/unload, and Name is acually a reverse-fqdn (or the label) + + def VerifyService(self, entry, _): + '''Verify Launchd Service Entry''' + + try: + services = self.cmd.run("/bin/launchctl list") + except IndexError:#happens when no services are running (should be never) + services = [] + if entry.get('name') in services:#doesn't check if non-spawning services are Started + return entry.get('status') == 'on' + else: + self.logger.debug("Didn't find service Loaded (LaunchD running under same user as bcfg)") + return entry.get('status') == 'off' + + try: #Perhaps add the "-w" flag to load and unload to modify the file itself! + self.cmd.run("/bin/launchtl load %s" % entry.get('plist')) + except IndexError: + return "on" + return "off" + + + def InstallService(self, entry): + '''Install SMF Service Entry''' + pass + + def Remove(self, svcs): + '''Remove Extra SMF entries''' + pass + + def FindExtra(self): + '''Find Extra LaunchD Services''' + allsrv = self.cmd.run("/bin/launchctl list") + + [allsrv.remove(svc) for svc in self.getSupportedEntries() if svc in allsrv] + return [Bcfg2.Client.XML.Element("Service", type='launchd', name=name) \ + for name in allsrv] + + def BundleUpdated(self, bundle): + '''Reload LaunchD plist''' + pass + -- cgit v1.2.3-1-g7c22