From: Alfredo Deza Date: Tue, 20 Aug 2013 13:52:42 +0000 (-0400) Subject: move install_epel to the centos/install module X-Git-Tag: v1.2.2~4^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=786d42472df7d6525db53bab86609f042a7387b0;p=ceph-deploy.git move install_epel to the centos/install module Signed-off-by: Alfredo Deza --- diff --git a/ceph_deploy/hosts/__init__.py b/ceph_deploy/hosts/__init__.py index d58bd0d..96a976e 100644 --- a/ceph_deploy/hosts/__init__.py +++ b/ceph_deploy/hosts/__init__.py @@ -6,7 +6,7 @@ on the type of distribution/version we are dealing with. """ import logging from ceph_deploy import lsb, exc -from ceph_deploy.util import wrappers, pkg_managers +from ceph_deploy.util import wrappers from ceph_deploy.sudo_pushy import get_transport from ceph_deploy.hosts import debian, centos, fedora, suse @@ -36,10 +36,10 @@ def get(hostname, fallback=None): """ sudo_conn = pushy.connect(get_transport(hostname)) if not has_lsb(sudo_conn): - logger.warning('lsb_release was not found - attempting to install') - install_lsb(sudo_conn) - - (distro, release, codename) = lsb.get_lsb_release(sudo_conn) + logger.warning('lsb_release was not found - inferring OS details') + (distro, release, codename) = lsb_fallback(sudo_conn) + else: + (distro, release, codename) = lsb.get_lsb_release(sudo_conn) module = _get_distro(distro) module.name = distro @@ -50,53 +50,25 @@ def get(hostname, fallback=None): return module -def has_lsb(conn): - stdout, stderr, _ = wrappers.Popen(conn, logger, ['which', 'lsb_release']) - return stderr == '' - - -def install_lsb(conn): +def lsb_fallback(conn): + """ + This fallback will attempt to detect the distro, release and codename for + a given remote host when lsb fails. It uses the + ``platform.linux_distribution`` module that should be fairly robust and + would prevent us from adding repositories and installing a package just to + detect a platform. + """ distro, release, codename = conn.modules.platform.linux_distribution() - package_manager = detect_package_manager(distro) - - if package_manager == 'yum' and distro.lower() in ['centos', 'scientific']: - logger.info('adding EPEL repository') - if float(release) >= 6: - wrappers.check_call(conn, logger, [ - 'wget', - 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm',], - stop_on_error=False, - ) - pkg_managers.rpm(conn, logger, - ['epel-release-6*.rpm'], - stop_on_error=False, - ) - else: - wrappers.check_call(conn, logger, [ - 'wget', - 'wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm',], - stop_on_error=False, - ) - pkg_managers.rpm(conn, logger, - ['epel-release-5*.rpm'], - stop_on_error=False, - ) - pkg_managers.yum(conn, logger, 'redhat-lsb-core') - elif package_manager == 'apt': - pkg_managers.apt(conn, logger, 'lsb-release') - else: - raise RuntimeError('package lsb_release could not be installed') + return ( + str(distro).rstrip(), + str(release).rstrip(), + str(codename).rstrip() + ) -def detect_package_manager(distro): - pkg_managers = { - 'ubuntu': 'apt', - 'debian': 'apt', - 'centos': 'yum', - 'scientific': 'yum', - 'redhat': 'yum', - } - return pkg_managers.get(distro.lower()) +def has_lsb(conn): + stdout, stderr, _ = wrappers.Popen(conn, logger, ['which', 'lsb_release']) + return stderr == '' def _get_distro(distro, fallback=None): diff --git a/ceph_deploy/hosts/centos/install.py b/ceph_deploy/hosts/centos/install.py index 0d1515c..1b030ac 100644 --- a/ceph_deploy/hosts/centos/install.py +++ b/ceph_deploy/hosts/centos/install.py @@ -1,4 +1,5 @@ from ceph_deploy.util.wrappers import check_call +from ceph_deploy.util import pkg_managers from ceph_deploy.hosts import common @@ -6,6 +7,8 @@ def install(distro, logger, version_kind, version): release = distro.release machine = distro.sudo_conn.modules.platform.machine() + # Get EPEL installed before we continue: + install_epel(distro, logger) if version_kind in ['stable', 'testing']: key = 'release' else: @@ -57,3 +60,38 @@ def install(distro, logger, version_kind, version): # Check the ceph version common.ceph_version(distro.sudo_conn, logger) + + +def install_epel(distro, logger): + """ + CentOS and Scientific need the EPEL repo, otherwise Ceph cannot be + installed. + """ + if distro.name.lower() in ['centos', 'scientific']: + logger.info('adding EPEL repository') + if float(distro.release) >= 6: + check_call( + distro.sudo_conn, + logger, + ['wget', 'http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'], + stop_on_error=False, + ) + pkg_managers.rpm( + distro.sudo_conn, + logger, + ['epel-release-6*.rpm'], + stop_on_error=False, + ) + else: + check_call( + distro.sudo_conn, + logger, + ['wget', 'wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm'], + stop_on_error=False, + ) + pkg_managers.rpm( + distro.sudo_conn, + logger, + ['epel-release-5*.rpm'], + stop_on_error=False, + )