]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
move install_epel to the centos/install module
authorAlfredo Deza <alfredo.deza@inktank.com>
Tue, 20 Aug 2013 13:52:42 +0000 (09:52 -0400)
committerAlfredo Deza <alfredo@deza.pe>
Tue, 20 Aug 2013 15:46:20 +0000 (11:46 -0400)
Signed-off-by: Alfredo Deza <alfredo.deza@inktank.com>
ceph_deploy/hosts/__init__.py
ceph_deploy/hosts/centos/install.py

index d58bd0d0387e24216b569ae2623168c07a5a00e8..96a976e14e52d2ff3a7ad792435d57766f317572 100644 (file)
@@ -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):
index 0d1515c1936993921abded60e969e2ac74254dd9..1b030ac1a2b0f96c8c7d1ddfd383306bed95a72e 100644 (file)
@@ -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,
+            )