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):
# 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'):
# 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'):
# 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'):
+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
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(
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.
# 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)
# 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)
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)