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

Revision 4999, 1.7 KB (checked in by solj, 11 months ago)

Update dictionary accesses to work with Python 3.0

  • 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
8import re
9import Bcfg2.Client.Tools
10
11class 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 'version' in entry.attrib:
33            self.logger.info("Cannot verify unversioned package %s" %
34               (entry.attrib['name']))
35            return False
36        if entry.attrib['name'] in self.installed:
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.