Source code for common.yum

#!/usr/bin/env python2
#   Author(s): Milan Falesnik <mfalesni@redhat.com>
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#   Copyright (c) 2012 Red Hat, Inc. All rights reserved.
#
#   This copyrighted material is made available to anyone wishing
#   to use, modify, copy, or redistribute it subject to the terms
#   and conditions of the GNU General Public License version 2.
#
#   This program is distributed in the hope that it will be
#   useful, but WITHOUT ANY WARRANTY; without even the implied
#   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
#   PURPOSE. See the GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public
#   License along with this program; if not, write to the Free
#   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
#   Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

import os
import sys
import pytest
import common.shell
import common.rpm
from ConfigParser import ConfigParser

[docs]def set_yum_variable(key, value): """ ??? """ if not os.path.isdir('/etc/yum/vars'): os.mkdir('/etc/yum/vars') fp = open("/etc/yum/vars/%s" % key, "w+") fp.write(value) fp.close()
[docs]def get_yum_variable(key): """ ??? """ # FIXME ... should we also look in /etc/yum/vars/releasever ? # Bypass namespace collision on the 'yum' module #import yum # yb = yum.YumBase() yb = __import__('yum').YumBase() yb.conf return yb.yumvar.get(key)
[docs]def install(package_name): """ Does the 'yum install <package>' command. :param package_name: Name of the package to install (eg. katello-all) :type package_name: str :raises: AssertionError """ # Install it text = common.shell.run("yum -y install %s" % (package_name)) # Verify it common.shell.run("rpm -q %s" % (package_name)) return common.rpm.check_for_errors(text)
[docs]def groupinstall(group): """ Does the 'yum groupinstall <package>' command. :param package_name: Name of the group to install (eg. katello-all) :type package_name: str :raises: AssertionError """ # Install it text = common.shell.run("yum -y groupinstall %s" % (group)) return common.rpm.check_for_errors(text)
[docs]def remove(package_name): """ Does the 'yum remove <package>' command. :param package_name: Name of the package to be removed (eg. katello-all) :type package_name: str :raises: AssertionError """ # Remove it text = common.shell.run("yum -y remove %s" % (package_name)) # Verify it common.shell.run("rpm -q %s" % (package_name), errorcode=1) return text
[docs]def check_update(package_name): """ Using the 'yum check-update <package>' command, determines whether an update is available for the provided package. :param package_name: Name of the package to be checked for update (eg. katello-all) :type package_name: str :raises: AssertionError """ # Check for update - error code 100 means an update is available, anything # else is considered a failure try: common.shell.run("yum check-update %s" % (package_name), 100) except AssertionError: return False return True
[docs]def repolist(): """ Does the 'yum repolist' command. :raises: AssertionError """ # Check for update return common.shell.run("yum repolist")
[docs]def grouplist(): """ Does the 'yum grouplist' command. :raises: AssertionError """ # Check for update return common.shell.run("yum grouplist")
[docs]def update(): """ Does the 'yum update' command. :raises: AssertionError """ # Update return common.rpm.check_for_errors(common.shell.run("yum -y update"))
[docs]def update_config(repo_file, enabled=True): """Enables or disables all sections in Yum config files :param repo_file: Config file, which should be processed :type repo_file: str :param enabled: Whether to enable or disable :type enabled: bool """ if os.path.isfile(repo_file): cfg = ConfigParser() cfg.read([repo_file]) save_changes = False for section in cfg.sections(): if cfg.has_option(section, 'enabled'): save_changes = True if enabled: cfg.set(section, 'enabled', 1) else: cfg.set(section, 'enabled', 0) if save_changes: fd = open(repo_file, 'rwa+') cfg.write(fd) fd.close() else: pytest.fail(msg="%s was not found!" % repo_file)
[docs]def update_repo(repo_file, enabled=True): """Enables or disables all sections in Yum repository files :param repo_file: Repo file, which should be processed :type repo_file: str :param enabled: Whether to enable or disable :type enabled: bool """ if not repo_file.startswith('/'): repo_file = '/etc/yum.repos.d/%s' % repo_file if not repo_file.endswith('.repo'): repo_file = '%s.repo' % repo_file update_config(repo_file, enabled)
[docs]def update_plugin(plugin_conf, enabled=True): """Enables or disables all sections in Yum plugin config files :param repo_file: Config file, which should be processed :type repo_file: str :param enabled: Whether to enable or disable :type enabled: bool """ if not plugin_conf.startswith('/'): plugin_conf = '/etc/yum/pluginconf.d/%s' % plugin_conf if not plugin_conf.endswith('.conf'): plugin_conf = '%s.conf' % plugin_conf update_config(plugin_conf, enabled)