From ea603e435b8876ab7d46bf5288d90593b99eb3b2 Mon Sep 17 00:00:00 2001 From: Joseph Hall Date: Tue, 29 Jan 2013 13:01:41 -0700 Subject: [PATCH 1/2] Adding lowpkg module for deb packages --- salt/modules/deb.py | 89 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 salt/modules/deb.py diff --git a/salt/modules/deb.py b/salt/modules/deb.py new file mode 100644 index 0000000000..80652c1347 --- /dev/null +++ b/salt/modules/deb.py @@ -0,0 +1,89 @@ +''' +Support for DEB packages +''' + +# Import python libs +import os +import re +import logging + +try: + deb_support = True +except ImportError: + deb_support = False + +# Import salt libs +import salt.utils + +log = logging.getLogger(__name__) + + +def __virtual__(): + ''' + Confirm this module is on a Debian based system + ''' + return 'lowpkg' if __grains__['os_family'] == 'Debian' else False + + +def file_list(*packages): + ''' + List the files that belong to a package. Not specifying any packages will + return a list of _every_ file on the system's package database (not + generally recommended). + + CLI Examples:: + + salt '*' lowpkg.file_list httpd + salt '*' lowpkg.file_list httpd postfix + salt '*' lowpkg.file_list + ''' + errors = [] + ret = set([]) + pkgs = {} + cmd = 'dpkg -l {0}'.format(' '.join(packages)) + for line in __salt__['cmd.run'](cmd).splitlines(): + if line.startswith('ii '): + comps = line.split() + pkgs[comps[1]] = {'version': comps[2], 'description': ' '.join(comps[3:])} + if 'No packages found' in line: + errors.append(line) + for pkg in pkgs.keys(): + files = [] + cmd = 'dpkg -L {0}'.format(pkg) + for line in __salt__['cmd.run'](cmd).splitlines(): + files.append(line) + fileset = set(files) + ret = ret.union(fileset) + return {'errors': errors, 'files': list(ret)} + + +def file_dict(*packages): + ''' + List the files that belong to a package, grouped by package. Not + specifying any packages will return a list of _every_ file on the system's + package database (not generally recommended). + + CLI Examples:: + + salt '*' lowpkg.file_list httpd + salt '*' lowpkg.file_list httpd postfix + salt '*' lowpkg.file_list + ''' + errors = [] + ret = {} + pkgs = {} + cmd = 'dpkg -l {0}'.format(' '.join(packages)) + for line in __salt__['cmd.run'](cmd).splitlines(): + if line.startswith('ii '): + comps = line.split() + pkgs[comps[1]] = {'version': comps[2], 'description': ' '.join(comps[3:])} + if 'No packages found' in line: + errors.append(line) + for pkg in pkgs.keys(): + files = [] + cmd = 'dpkg -L {0}'.format(pkg) + for line in __salt__['cmd.run'](cmd).splitlines(): + files.append(line) + ret[pkg] = files + return {'errors': errors, 'packages': ret} + From 83396c5c2f0330c1247ec1f946c1e5bc3f09f0bd Mon Sep 17 00:00:00 2001 From: Joseph Hall Date: Tue, 29 Jan 2013 13:03:10 -0700 Subject: [PATCH 2/2] Switch over file_list() and file_dict() in apt.py to use lowpkg --- salt/modules/apt.py | 37 ++----------------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/salt/modules/apt.py b/salt/modules/apt.py index 608d7c4cfb..a5b1f45f55 100644 --- a/salt/modules/apt.py +++ b/salt/modules/apt.py @@ -929,24 +929,7 @@ def file_list(*packages): salt '*' pkg.file_list httpd postfix salt '*' pkg.file_list ''' - errors = [] - ret = set([]) - pkgs = {} - cmd = 'dpkg -l {0}'.format(' '.join(packages)) - for line in __salt__['cmd.run'](cmd).splitlines(): - if line.startswith('ii '): - comps = line.split() - pkgs[comps[1]] = {'version': comps[2], 'description': ' '.join(comps[3:])} - if 'No packages found' in line: - errors.append(line) - for pkg in pkgs.keys(): - files = [] - cmd = 'dpkg -L {0}'.format(pkg) - for line in __salt__['cmd.run'](cmd).splitlines(): - files.append(line) - fileset = set(files) - ret = ret.union(fileset) - return {'errors': errors, 'files': list(ret)} + return __salt__['lowpkg.file_list'](*packages) def file_dict(*packages): @@ -961,20 +944,4 @@ def file_dict(*packages): salt '*' pkg.file_list httpd postfix salt '*' pkg.file_list ''' - errors = [] - ret = {} - pkgs = {} - cmd = 'dpkg -l {0}'.format(' '.join(packages)) - for line in __salt__['cmd.run'](cmd).splitlines(): - if line.startswith('ii '): - comps = line.split() - pkgs[comps[1]] = {'version': comps[2], 'description': ' '.join(comps[3:])} - if 'No packages found' in line: - errors.append(line) - for pkg in pkgs.keys(): - files = [] - cmd = 'dpkg -L {0}'.format(pkg) - for line in __salt__['cmd.run'](cmd).splitlines(): - files.append(line) - ret[pkg] = files - return {'errors': errors, 'packages': ret} + return __salt__['lowpkg.file_dict'](*packages)