Source code for fabtools.require.rpm

"""
RPM packages
============

This module provides high-level tools for managing CentOS/RHEL/SL/Fedora
packages and repositories.

"""
from __future__ import with_statement

from fabric.api import hide, settings
from fabtools.rpm import (
    install,
    is_installed,
    uninstall,
)
from fabtools.system import get_arch, distrib_release
from fabtools.utils import run_as_root


[docs]def package(pkg_name, repos=None, yes=None, options=None): """ Require an RPM package to be installed. Example:: from fabtools import require require.rpm.package('emacs') """ if not is_installed(pkg_name): install(pkg_name, repos, yes, options)
[docs]def packages(pkg_list, repos=None, yes=None, options=None): """ Require several RPM packages to be installed. Example:: from fabtools import require require.rpm.packages([ 'nano', 'unzip', 'vim', ]) """ pkg_list = [pkg for pkg in pkg_list if not is_installed(pkg)] if pkg_list: install(pkg_list, repos, yes, options)
[docs]def nopackage(pkg_name, options=None): """ Require an RPM package to be uninstalled. Example:: from fabtools import require require.rpm.nopackage('emacs') """ if is_installed(pkg_name): uninstall(pkg_name, options)
[docs]def nopackages(pkg_list, options=None): """ Require several RPM packages to be uninstalled. Example:: from fabtools import require require.rpm.nopackages([ 'unzip', 'vim', 'emacs', ]) """ pkg_list = [pkg for pkg in pkg_list if is_installed(pkg)] if pkg_list: uninstall(pkg_list, options)
[docs]def repository(name): """ Require a repository. Aimed for 3rd party repositories. *Name* currently only supports EPEL and RPMforge. Example:: from fabtools import require # RPMforge packages for CentOS 6 require.rpm.repository('rpmforge') """ name = name.lower() epel_url = 'http://download.fedoraproject.org/pub/epel' rpmforge_url = 'http://packages.sw.be/rpmforge-release/rpmforge-release' rpmforge_version = '0.5.2-2' arch = get_arch() try: release = int(str(distrib_release())) except ValueError: release = int(float(str(distrib_release()))) if release == 6: epel_version = '6-8' elif release == 5: epel_version = '5-4' if name == 'rpmforge' and arch == 'i386': arch = 'i686' supported = { 'rpmforge': { '%(arch)s' % locals(): { '6': '%(rpmforge_url)s-%(rpmforge_version)s.el6.rf.i686.rpm' % locals(), '5': '%(rpmforge_url)s-%(rpmforge_version)s.el5.rf.x86_64.rpm' % locals(), }, }, 'epel': { '%(arch)s' % locals(): { '6': '%(epel_url)s/6/%(arch)s/epel-release-%(epel_version)s.noarch.rpm' % locals(), '5': '%(epel_url)s/5/%(arch)s/epel-release-%(epel_version)s.noarch.rpm' % locals(), } }, } keys = { 'rpmforge': 'http://apt.sw.be/RPM-GPG-KEY.dag.txt', 'epel': '%(epel_url)s/RPM-GPG-KEY-EPEL-%(release)s' % locals(), } repo = supported[name][str(arch)][str(release)] key = keys[name] with settings(hide('warnings'), warn_only=True): run_as_root('rpm --import %(key)s' % locals()) run_as_root('rpm -Uh %(repo)s' % locals())