def list_pkgs(versions_as_list=False, with_origin=False, **kwargs): """ List the packages currently installed as a dict:: {'<package_name>': '<version>'} with_origin : False Return a nested dictionary containing both the origin name and version for each installed package. .. versionadded:: 2014.1.0 CLI Example: .. code-block:: bash salt '*' pkg.list_pkgs """ versions_as_list = salt.utils.data.is_true(versions_as_list) # not yet implemented or not applicable if any([ salt.utils.data.is_true(kwargs.get(x)) for x in ("removed", "purge_desired") ]): return {} if "pkg.list_pkgs" in __context__ and kwargs.get("use_context", True): return _list_pkgs_from_context(versions_as_list, with_origin) ret = {} origins = {} out = __salt__["cmd.run_stdout"](["pkg_info", "-ao"], output_loglevel="trace", python_shell=False) pkgs_re = re.compile(r"Information for ([^:]+):\s*Origin:\n([^\n]+)") for pkg, origin in pkgs_re.findall(out): if not pkg: continue try: pkgname, pkgver = pkg.rsplit("-", 1) except ValueError: continue __salt__["pkg_resource.add_pkg"](ret, pkgname, pkgver) origins[pkgname] = origin __salt__["pkg_resource.sort_pkglist"](ret) __context__["pkg.list_pkgs"] = copy.deepcopy(ret) __context__["pkg.origin"] = origins if not versions_as_list: __salt__["pkg_resource.stringify"](ret) if salt.utils.data.is_true(with_origin): return { x: { "origin": origins.get(x, ""), "version": y } for x, y in ret.items() } return ret
def file_dict(*packages, **kwargs): """ 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: .. code-block:: bash salt '*' pkg.file_list httpd salt '*' pkg.file_list httpd postfix salt '*' pkg.file_list """ errors = [] files = {} if packages: match_pattern = "'{0}-[0-9]*'" cmd = ["pkg_info", "-QL"] + [match_pattern.format(p) for p in packages] else: cmd = ["pkg_info", "-QLa"] ret = __salt__["cmd.run_all"](cmd, output_loglevel="trace", python_shell=False) for line in ret["stderr"].splitlines(): errors.append(line) pkg = None for line in ret["stdout"].splitlines(): if pkg is not None and line.startswith("/"): files[pkg].append(line) elif ":/" in line: pkg, fn = line.split(":", 1) pkg, ver = pkg.rsplit("-", 1) files[pkg] = [fn] else: continue # unexpected string return {"errors": errors, "files": files}
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: .. code-block:: bash salt '*' pkg.file_list httpd salt '*' pkg.file_list httpd postfix salt '*' pkg.file_list ''' errors = [] files = {} if packages: match_pattern = '\'{0}-[0-9]*\'' cmd = ['pkg_info', '-QL'] + [match_pattern.format(p) for p in packages] else: cmd = ['pkg_info', '-QLa'] ret = __salt__['cmd.run_all'](cmd, output_loglevel='trace', python_shell=False) for line in ret['stderr'].splitlines(): errors.append(line) pkg = None for line in ret['stdout'].splitlines(): if pkg is not None and line.startswith('/'): files[pkg].append(line) elif ':/' in line: pkg, fn = line.split(':', 1) pkg, ver = pkg.rsplit('-', 1) files[pkg] = [fn] else: continue # unexpected string return {'errors': errors, 'files': files}
def list_pkgs(versions_as_list=False, jail=None, chroot=None, root=None, with_origin=False, **kwargs): ''' List the packages currently installed as a dict:: {'<package_name>': '<version>'} jail List the packages in the specified jail chroot List the packages in the specified chroot (ignored if ``jail`` is specified) root List the packages in the specified root (ignored if ``jail`` is specified) with_origin : False Return a nested dictionary containing both the origin name and version for each installed package. .. versionadded:: 2014.1.0 CLI Example: .. code-block:: bash salt '*' pkg.list_pkgs salt '*' pkg.list_pkgs jail=<jail name or id> salt '*' pkg.list_pkgs chroot=/path/to/chroot ''' # not yet implemented or not applicable if any([salt.utils.data.is_true(kwargs.get(x)) for x in ('removed', 'purge_desired')]): return {} versions_as_list = salt.utils.data.is_true(versions_as_list) contextkey_pkg = _contextkey(jail, chroot, root) contextkey_origins = _contextkey(jail, chroot, root, prefix='pkg.origin') if contextkey_pkg in __context__: ret = copy.deepcopy(__context__[contextkey_pkg]) if not versions_as_list: __salt__['pkg_resource.stringify'](ret) if salt.utils.data.is_true(with_origin): origins = __context__.get(contextkey_origins, {}) return dict([ (x, {'origin': origins.get(x, ''), 'version': y}) for x, y in six.iteritems(ret) ]) return ret ret = {} origins = {} out = __salt__['cmd.run_stdout']( _pkg(jail, chroot, root) + ['info', '-ao'], output_loglevel='trace', python_shell=False) for line in salt.utils.itertools.split(out, '\n'): if not line: continue try: pkg, origin = line.split() pkgname, pkgver = pkg.rsplit('-', 1) except ValueError: continue __salt__['pkg_resource.add_pkg'](ret, pkgname, pkgver) origins[pkgname] = origin __salt__['pkg_resource.sort_pkglist'](ret) __context__[contextkey_pkg] = copy.deepcopy(ret) __context__[contextkey_origins] = origins if not versions_as_list: __salt__['pkg_resource.stringify'](ret) if salt.utils.data.is_true(with_origin): return dict([ (x, {'origin': origins.get(x, ''), 'version': y}) for x, y in six.iteritems(ret) ]) return ret
def list_pkgs(versions_as_list=False, with_origin=False, **kwargs): ''' List the packages currently installed as a dict:: {'<package_name>': '<version>'} with_origin : False Return a nested dictionary containing both the origin name and version for each installed package. .. versionadded:: 2014.1.0 CLI Example: .. code-block:: bash salt '*' pkg.list_pkgs ''' versions_as_list = salt.utils.data.is_true(versions_as_list) # not yet implemented or not applicable if any([ salt.utils.data.is_true(kwargs.get(x)) for x in ('removed', 'purge_desired') ]): return {} if 'pkg.list_pkgs' in __context__: ret = copy.deepcopy(__context__['pkg.list_pkgs']) if not versions_as_list: __salt__['pkg_resource.stringify'](ret) if salt.utils.data.is_true(with_origin): origins = __context__.get('pkg.origin', {}) return dict([(x, { 'origin': origins.get(x, ''), 'version': y }) for x, y in six.iteritems(ret)]) return ret ret = {} origins = {} out = __salt__['cmd.run_stdout'](['pkg_info', '-ao'], output_loglevel='trace', python_shell=False) pkgs_re = re.compile(r'Information for ([^:]+):\s*Origin:\n([^\n]+)') for pkg, origin in pkgs_re.findall(out): if not pkg: continue try: pkgname, pkgver = pkg.rsplit('-', 1) except ValueError: continue __salt__['pkg_resource.add_pkg'](ret, pkgname, pkgver) origins[pkgname] = origin __salt__['pkg_resource.sort_pkglist'](ret) __context__['pkg.list_pkgs'] = copy.deepcopy(ret) __context__['pkg.origin'] = origins if not versions_as_list: __salt__['pkg_resource.stringify'](ret) if salt.utils.data.is_true(with_origin): return dict([(x, { 'origin': origins.get(x, ''), 'version': y }) for x, y in six.iteritems(ret)]) return ret
salt '*' pkg.file_list httpd salt '*' pkg.file_list httpd postfix salt '*' pkg.file_list """ errors = [] files = {} if packages: match_pattern = "'{0}-[0-9]*'" cmd = ["pkg_info", "-QL"] + [match_pattern.format(p) for p in packages] else: cmd = ["pkg_info", "-QLa"] ret = __salt__["cmd.run_all"](cmd, output_loglevel="trace", python_shell=False) for line in ret["stderr"].splitlines(): errors.append(line) pkg = None for line in ret["stdout"].splitlines(): if pkg is not None and line.startswith("/"): files[pkg].append(line) elif ":/" in line: pkg, fn = line.split(":", 1) pkg, ver = pkg.rsplit("-", 1) files[pkg] = [fn] else: continue # unexpected string return {"errors": errors, "files": files}