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

Revision 4602, 1.7 kB (checked in by gogolok, 7 months ago)

- Add preliminary support for rc under FreeBSD
- TODOs

  • Property svn:keywords set to Rev
Line 
1 '''This is the bcfg2 tool for the FreeBSD package system.'''
2 __revision__ = '$Rev$'
3
4 # TODO
5 # - actual package installation
6 # - verification of package files
7
8 import re
9 import Bcfg2.Client.Tools
10
11 class FreeBSDPackage(Bcfg2.Client.Tools.PkgTool):
12     '''The FreeBSD toolset implements package operations and inherits
13     the rest from Toolset.Toolset'''
14     __name__ = 'FreeBSDPackage'
15     __execs__ = ['/usr/sbin/pkg_add', '/usr/sbin/pkg_info']
16     __handles__ = [('Package', 'freebsdpkg')]
17     __req__ = {'Package': ['name', 'version']}
18     pkgtool = ('/usr/sbin/pkg_add -r %s', ('%s-%s', ['name', 'version']))
19     pkgtype = 'freebsdpkg'
20
21     def RefreshPackages(self):
22         self.installed = {}
23         packages = self.cmd.run("/usr/sbin/pkg_info -a -E")[1]
24         pattern = re.compile('(.*)-(\d.*)')
25         for pkg in packages:
26             if pattern.match(pkg):
27                 name =    pattern.match(pkg).group(1)
28                 version = pattern.match(pkg).group(2)
29                 self.installed[name] = version
30
31     def VerifyPackage(self, entry, modlist):
32         if not entry.attrib.has_key('version'):
33             self.logger.info("Cannot verify unversioned package %s" %
34                (entry.attrib['name']))
35             return False
36         if self.installed.has_key(entry.attrib['name']):
37             if self.installed[entry.attrib['name']] == entry.attrib['version']:
38                 # TODO: verfification
39                 return True
40             else:
41                 entry.set('current_version', self.installed[entry.get('name')])
42                 return False
43
44         self.logger.info("Package %s not installed" % (entry.get('name')))
45         entry.set('current_exists', 'false')
46         return False
Note: See TracBrowser for help on using the browser.