summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZach Lowry <zach@mcs.anl.gov>2005-07-13 14:58:08 +0000
committerZach Lowry <zach@mcs.anl.gov>2005-07-13 14:58:08 +0000
commitce7b0bc916a2c2499f589f4b7247a4dee220848f (patch)
tree6e4b031f67f8592445220ffb417e63f1b4cfee2f /src
parent110d06aa3249e419b96c169ea3021d07d7933266 (diff)
downloadbcfg2-ce7b0bc916a2c2499f589f4b7247a4dee220848f.tar.gz
bcfg2-ce7b0bc916a2c2499f589f4b7247a4dee220848f.tar.bz2
bcfg2-ce7b0bc916a2c2499f589f4b7247a4dee220848f.zip
Add solaris express support
(Logical change 1.250) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1038 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src')
-rw-r--r--src/lib/Client/Solaris.py114
1 files changed, 112 insertions, 2 deletions
diff --git a/src/lib/Client/Solaris.py b/src/lib/Client/Solaris.py
index 04c6936e2..e1b2dcab1 100644
--- a/src/lib/Client/Solaris.py
+++ b/src/lib/Client/Solaris.py
@@ -1,9 +1,119 @@
# This is the bcfg2 support for solaris
'''This provides (vestigal) bcfg2 support for Solaris'''
-__revision__ = '$Revision$'
+__revision__ = '$Revision: 1.3 $'
+
+from os import popen, system
+from popen2 import Popen4
from Bcfg2.Client.Toolset import Toolset
class Solaris(Toolset):
'''This class implelements support for SYSV packages and standard /etc/init.d services'''
- pass
+ pkgtool = ("/usr/sbin/pkgadd -d %s -n all", ("%s", ["url"]))
+
+ def __init__(self, cfg, setup):
+ Toolset.__init__(self, cfg, setup)
+ self.cfg = cfg
+ self.pkgwork = {'add':[], 'update':[], 'remove':[]}
+ self.installed = {}
+ self.extra_services = []
+ self.Refresh()
+
+ def Refresh(self):
+ '''Refresh memory hashes of packages'''
+ self.installed = {}
+
+ # Build list of packages
+ instp = popen("/usr/bin/pkginfo -x")
+ lines = instp.readlines()
+ while (lines):
+ l1 = lines.pop()
+ l2 = lines.pop()
+ name = l2.split()[0]
+ version = l1.split()[1]
+ self.installed[name] = version
+
+ def VerifyService(self, entry):
+ '''Verify Service status for entry'''
+ try:
+ srvdata = popen("/usr/bin/svcs -H -o STA %s" % entry.attrib['name']).readlines()[0].split()
+ except IndexError:
+ # Ocurrs when no lines are returned (service not installed)
+ return False
+
+ if entry.get('status') == 'on':
+ return srvdata[0] == 'ON'
+ else:
+ return srvdata[0] == 'OFF' or srvdata[0] == 'UN' or srvdata[0] == 'MNT' or srvdata[0] == 'DIS' or srvdata[0] == 'DGD'
+
+
+ def InstallService(self, entry):
+ '''Install Service entry'''
+ system("/usr/sbin/svcadm enable -r %s" % (entry.attrib['name']))
+ self.CondPrint('verbose', "Installing Service %s" % (entry.get('name')))
+ if entry.attrib['status'] == 'off':
+ if self.setup['dryrun']:
+ print "Disabling Service %s" % (entry.get('name'))
+ else:
+ cmdrc = system("/usr/sbin/svcadm disable %s" % (entry.attrib['name']))
+ else:
+ if self.setup['dryrun']:
+ print "Enabling Service %s" % (entry.attrib['name'])
+ else:
+ cmdrc = system("/usr/sbin/svcadm enable %s" % (entry.attrib['name']))
+ if cmdrc == 0:
+ return True
+ else:
+ return False
+
+ def VerifyPackage(self, entry):
+ '''Verify Package status for entry'''
+ if not (entry.get('name') and entry.get('version')):
+ print "Can't verify package, not enough data."
+ return False
+ cmdrc = system("/usr/bin/pkginfo -q -v \"%s\" %s" % (entry.get('version'), entry.get('name')))
+ if cmdrc != 0:
+ self.CondPrint('debug', "Package %s version incorrect" % entry.get('name'))
+ else:
+ if entry.attrib.get('verify', 'true') == 'true':
+ if self.setup['quick']:
+ return True
+ verp = Popen4("/usr/sbin/pkgchk -n %s" % (entry.get('name')), bufsize=16384)
+ odata = ''
+ vstat = verp.poll()
+ while vstat == -1:
+ odata += verp.fromchild.read()
+ vstat = verp.poll()
+ output = [line for line in odata.split("\n") if line]
+ if vstat == 0:
+ return True
+ else:
+ # if len([name for name in output if name.split()[-1] not in modlist]):
+ # return True
+ # else:
+ self.CondPrint('debug', "Package %s content verification failed" % (entry.get('name')))
+ return False
+
+ def Inventory(self):
+ '''Do standard inventory plus debian extra service check'''
+ Toolset.Inventory(self)
+ allsrv = popen("/usr/bin/svcs -a -H -o SVC").readlines()
+ # for goodline [ x.strip() for x in openfile.readlines()]
+ csrv = self.cfg.findall(".//Service")
+ print csrv
+
+ def HandleExtra(self):
+ '''Deal with extra configuration detected'''
+ if len(self.pkgwork) > 0:
+ if self.setup['remove'] in ['all', 'packages']:
+ self.CondPrint('verbose', "Removing packages: %s" % (self.pkgwork['remove']))
+ system("/usr/sbin/pkgrm -n %s" % " ".join(self.pkgwork['remove']))
+ else:
+ self.CondPrint('verbose', "Need to remove packages: %s" % (self.pkgwork['remove']))
+ if len(self.extra_services) > 0:
+ if self.setup['remove'] in ['all', 'services']:
+ self.CondPrint('verbose', "Removing services: %s" % (self.extra_services))
+ for service in self.extra_services:
+ system("/usr/sbin/svcadm disable %s" % service)
+ else:
+ self.CondPrint('verbose', "Need to remove services: %s" % (self.extra_services))