]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
ceph-deploy: detect missing lsb_release.
authorGary Lowell <gary.lowell@inktank.com>
Tue, 9 Apr 2013 19:03:49 +0000 (19:03 +0000)
committerGary Lowell <gary.lowell@inktank.com>
Tue, 9 Apr 2013 19:03:49 +0000 (19:03 +0000)
If the lsb_release command is not available on the remote host,
issue an error message and exit. (Bug #4631)

Signed-off-by: Gary Lowell <gary.lowell@inktank.com>
ceph_deploy/exc.py
ceph_deploy/install.py
ceph_deploy/lsb.py
ceph_deploy/mds.py
ceph_deploy/mon.py
ceph_deploy/osd.py

index 47249acd2727c77d3595ba5a867ffd65fe702229..b4a86bfb26bb8eaf3cc6cbbf8404b0e1e3336cca 100644 (file)
@@ -51,6 +51,16 @@ class UnsupportedPlatform(DeployError):
             codename=self.codename,
             )
 
+class MissingPackageError(DeployError):
+    """
+    A required package or command is missing
+    """
+    def __init__(self, message):
+        self.message = message
+
+    def __str__(self):
+        return self.message
+
 
 class GenericError(DeployError):
     def __init__(self, message):
index a6b273da545dc344625e5c7c4c9463d45347b6e1..587245007ae49143b13c5f5c21ffdce58ecf3443 100644 (file)
@@ -195,8 +195,7 @@ def install(args):
 
         # TODO username
         sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
-        lsb_release_r = sudo.compile(lsb.lsb_release)
-        (distro, release, codename) = lsb_release_r()
+        (distro, release, codename) = lsb.get_lsb_release(sudo)
         LOG.debug('Distro %s release %s codename %s', distro, release, codename)
 
         if (distro == 'Debian' or distro == 'Ubuntu'):
@@ -227,8 +226,7 @@ def uninstall(args):
 
         # TODO username
         sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
-        lsb_release_r = sudo.compile(lsb.lsb_release)
-        (distro, release, codename) = lsb_release_r()
+        (distro, release, codename) = lsb.get_lsb_release(sudo)
         LOG.debug('Distro %s codename %s', distro, codename)
 
         if (distro == 'Debian' or distro == 'Ubuntu'):
@@ -254,8 +252,7 @@ def purge(args):
 
         # TODO username
         sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
-        lsb_release_r = sudo.compile(lsb.lsb_release)
-        (distro, release, codename) = lsb_release_r()
+        (distro, release, codename) = lsb.get_lsb_release(sudo)
         LOG.debug('Distro %s codename %s', distro, codename)
 
         if (distro == 'Debian' or distro == 'Ubuntu'):
index 9c11770dea8043c3f55ef5041c3ea74f1901c013..3965ed57b5022dff8f0614665a18d39402668709 100644 (file)
@@ -1,11 +1,8 @@
+from . import exc
 
-def lsb_release():
+def check_lsb_release():
     """
-    Get LSB release information from lsb_release.
-
-    Returns truple with distro, release and codename. Otherwise
-    the function raises an error (subprocess.CalledProcessError or
-    RuntimeError).
+    Verify if lsb_release command is available
     """
     import subprocess
 
@@ -14,10 +11,20 @@ def lsb_release():
         args=args,
         stdout=subprocess.PIPE,
         )
-    distro, _ = process.communicate()
+    lsb_release_path, _ = process.communicate()
     ret = process.wait()
     if ret != 0:
-        raise RuntimeError('lsb_release not found on host')
+        raise RuntimeError('The lsb_release command was not found on remote host.  Please install the lsb-release package.')
+
+def lsb_release():
+    """
+    Get LSB release information from lsb_release.
+
+    Returns truple with distro, release and codename. Otherwise
+    the function raises an error (subprocess.CalledProcessError or
+    RuntimeError).
+    """
+    import subprocess
 
     args = [ 'lsb_release', '-s', '-i' ]
     process = subprocess.Popen(
@@ -58,6 +65,27 @@ def lsb_release():
     return (str(distro).rstrip(), str(release).rstrip(), str(codename).rstrip())
 
 
+def get_lsb_release(sudo):
+    """
+    Get LSB release information from lsb_release.
+
+    Check if lsb_release is installed on the remote host and issue
+    a message if not.  
+
+    Returns truple with distro, release and codename. Otherwise
+    the function raises an error (subprocess.CalledProcessError or
+    RuntimeError).
+    """
+    try:
+        check_lsb_release_r = sudo.compile(check_lsb_release)
+        status = check_lsb_release_r()
+    except RuntimeError as e:
+        raise exc.MissingPackageError(e.message)
+
+    lsb_release_r = sudo.compile(lsb_release)
+    return lsb_release_r()
+
+
 def choose_init(distro, codename):
     """
     Select a init system for a given distribution.
index 9f6ff415f6c2e22154c3fc6ee3bddcb2416d9b2a..8005121ec6ebb8e348f11538241aea10a23f1274 100644 (file)
@@ -145,8 +145,7 @@ def mds_create(args):
             # TODO username
             sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
 
-            lsb_release_r = sudo.compile(lsb.lsb_release)
-            (distro, release, codename) = lsb_release_r()
+            (distro, release, codename) = lsb.get_lsb_release(sudo)
             init = lsb.choose_init(distro, codename)
             LOG.debug('Distro %s codename %s, will use %s',
                       distro, codename, init)
index ae9f77417dcb0ee3a6924e9c646edf980b9a978b..969d17fc235a950d545d2eaa8cca658006b58cb2 100644 (file)
@@ -115,8 +115,7 @@ def mon_create(args):
             # TODO username
             sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
 
-            lsb_release_r = sudo.compile(lsb.lsb_release)
-            (distro, release, codename) = lsb_release_r()
+            (distro, release, codename) = lsb.get_lsb_release(sudo)
             init = lsb.choose_init(distro, codename)
             LOG.debug('Distro %s codename %s, will use %s',
                       distro, codename, init)
index 35983c4a0a2c35dd0689d68ed73a86488fdcd7af..734def5cb48360bb304e86edc823869543201f6b 100644 (file)
@@ -199,8 +199,7 @@ def activate(args, cfg):
 
         LOG.debug('Activating host %s disk %s', hostname, disk)
 
-        lsb_release_r = sudo.compile(lsb.lsb_release)
-        (distro, release, codename) = lsb_release_r()
+        (distro, release, codename) = lsb.get_lsb_release(sudo)
         init = lsb.choose_init(distro, codename)
         LOG.debug('Distro %s codename %s, will use %s',
                   distro, codename, init)