root/trunk/bcfg2/src/lib/Client/Tools/SYSV.py

Revision 4703, 3.3 kB (checked in by desai, 5 months ago)

Add pkginfo requirement to blast.py and sysv.py

  • Property svn:keywords set to Revision Id
Line 
1 # This is the bcfg2 support for solaris sysv packages
2 '''This provides bcfg2 support for Solaris SYSV packages'''
3 __revision__ = '$Revision$'
4
5 import tempfile, Bcfg2.Client.Tools, Bcfg2.Client.XML
6
7
8 noask = '''
9 mail=
10 instance=overwrite
11 partial=nocheck
12 runlevel=nocheck
13 idepend=nocheck
14 rdepend=nocheck
15 space=ask
16 setuid=nocheck
17 conflict=nocheck
18 action=nocheck
19 basedir=default
20 '''
21
22 class SYSV(Bcfg2.Client.Tools.PkgTool):
23     '''Solaris SYSV package support'''
24     __execs__ = ["/usr/sbin/pkgadd", "/usr/bin/pkginfo"]
25     __handles__ = [('Package', 'sysv')]
26     __req__ = {'Package': ['name', 'version']}
27     __ireq__ = {'Package': ['name', 'url', 'version']}
28     __name__ = 'SYSV'
29     pkgtype = 'sysv'
30     pkgtool = ("/usr/sbin/pkgadd %s -n -d %%s", (('%s %s', ['url', 'name'])))
31
32     def __init__(self, logger, setup, config):
33         Bcfg2.Client.Tools.PkgTool.__init__(self, logger, setup, config)
34         self.noaskname = tempfile.mktemp()
35         try:
36             open(self.noaskname, 'w+').write(noask)
37             self.pkgtool = (self.pkgtool[0] % ("-a %s" % (self.noaskname)), \
38                             self.pkgtool[1])
39         except:
40             self.pkgtool = (self.pkgtool[0] % (""), self.pkgtool[1])
41
42     def RefreshPackages(self):
43         '''Refresh memory hashes of packages'''
44         self.installed = {}
45         # Build list of packages
46         lines = self.cmd.run("/usr/bin/pkginfo -x")[1]
47         while lines:
48             version = lines.pop().split()[1]
49             pkg = lines.pop().split()[0]
50             self.installed[pkg] = version
51
52     def VerifyPackage(self, entry, modlist):
53         '''Verify Package status for entry'''
54         if not entry.get('version'):
55             self.logger.info("Insufficient information of Package %s; cannot Verify" % entry.get('name'))
56             return False
57         cmdrc = self.cmd.run("/usr/bin/pkginfo -q -v \"%s\" %s" % \
58                              (entry.get('version'), entry.get('name')))[0]
59
60         if cmdrc != 0:
61             if entry.get('name') in self.installed:
62                 self.logger.debug("Package %s version incorrect: have %s want %s" \
63                                   % (entry.get('name'), self.installed[entry.get('name')],
64                                      entry.get('version')))
65             else:
66                 self.logger.debug("Package %s not installed" % (entry.get("name")))
67         else:
68             if self.setup['quick'] or entry.attrib.get('verify', 'true') == 'false':
69                 return True
70             (vstat, odata) = self.cmd.run("/usr/sbin/pkgchk -n %s" % (entry.get('name')))
71             if vstat == 0:
72                 return True
73             else:
74                 output = [line for line in odata if line[:5] == 'ERROR']
75                 if len([name for name in output if name.split()[-1] not in modlist]):
76                     self.logger.debug("Package %s content verification failed" % \
77                                       (entry.get('name')))
78                 else:
79                     return True
80         return False
81
82     def RemovePackages(self, packages):
83         '''Remove specified Sysv packages'''
84         names = [pkg.get('name') for pkg in packages]
85         self.logger.info("Removing packages: %s" % (names))
86         self.cmd.run("/usr/sbin/pkgrm -a %s -n %s" % \
87                      (self.noaskname, names))
88         self.RefreshPackages()
89         self.extra = self.FindExtraPackages()
Note: See TracBrowser for help on using the browser.