self._sftp_get_file(remote_temp_path, to_path)
self.remove(remote_temp_path)
+ @property
+ def distro(self):
+ if not hasattr(self, '_distro'):
+ lsb_info = self.run(args=['lsb_release', '-a'], stdout=StringIO(),
+ stderr=StringIO())
+ self._distro = Distribution(lsb_info.stdout.getvalue().strip())
+ return self._distro
+
+
+class Distribution(object):
+ """
+ Parse 'lsb_release -a' output and populate attributes
+
+ Given output like:
+ Distributor ID: Ubuntu
+ Description: Ubuntu 12.04.4 LTS
+ Release: 12.04
+ Codename: precise
+
+ Attributes will be:
+ distributor = 'Ubuntu'
+ description = 'Ubuntu 12.04.4 LTS'
+ release = '12.04'
+ codename = 'precise'
+ Additionally, a few convenience attributes will be set:
+ name = 'ubuntu'
+ package_type = 'deb'
+ """
+
+ __slots__ = ['_lsb_release_str', '__expr', 'distributor', 'description',
+ 'release', 'codename', 'name', 'package_type']
+
+ def __init__(self, lsb_release_str):
+ self._lsb_release_str = lsb_release_str.strip()
+ self.distributor = self._get_match("Distributor ID:\s*(.*)")
+ self.name = self.distributor.lower()
+ self.description = self._get_match("Description:\s*(.*)")
+ self.release = self._get_match("Release:\s*(.*)")
+ self.codename = self._get_match("Codename:\s*(.*)")
+
+ if self.distributor in ['Ubuntu', 'Debian']:
+ self.package_type = "deb"
+ elif self.distributor in ['CentOS', 'Fedora', 'RedHatEnterpriseServer',
+ 'openSUSE project', 'SUSE LINUX']:
+ self.package_type = "rpm"
+
+ def _get_match(self, regex):
+ match = re.search(regex, self._lsb_release_str)
+ if match:
+ return match.groups()[0]
+ return ''
+
+ def __str__(self):
+ return " ".join([self.distributor, self.release,
+ self.codename]).strip()
+
def getShortName(name):
"""
from cStringIO import StringIO
import os
-from .. import connection, run
+from .. import connection, remote, run
from .util import assert_raises
from teuthology.exceptions import CommandCrashedError, ConnectionLostError
stdout=StringIO(),
)
assert r.stdout.getvalue() == 'yup\n'
+
+ def test_distro(self):
+ rem = remote.Remote(HOST)
+ assert rem.distro.distributor
+ assert rem.distro.name
+ assert rem.distro.description
+ assert rem.distro.release
+ assert rem.distro.codename
+ assert rem.distro.package_type
import fudge
import fudge.inspector
+from textwrap import dedent
+
from .. import remote
from ..run import RemoteProcess
)
assert got is ret
assert got.remote is r
+
+
+class TestDistribution(object):
+ lsb_centos = dedent("""
+ LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
+ Distributor ID: CentOS
+ Description: CentOS release 6.5 (Final)
+ Release: 6.5
+ Codename: Final
+ """)
+
+ lsb_ubuntu = dedent("""
+ Distributor ID: Ubuntu
+ Description: Ubuntu 12.04.4 LTS
+ Release: 12.04
+ Codename: precise
+ """)
+
+ def test_centos(self):
+ d = remote.Distribution(self.lsb_centos)
+ assert d.distributor == 'CentOS'
+ assert d.description == 'CentOS release 6.5 (Final)'
+ assert d.release == '6.5'
+ assert d.codename == 'Final'
+ assert d.name == 'centos'
+ assert d.package_type == 'rpm'
+
+ def test_ubuntu(self):
+ d = remote.Distribution(self.lsb_ubuntu)
+ assert d.distributor == 'Ubuntu'
+ assert d.description == 'Ubuntu 12.04.4 LTS'
+ assert d.release == '12.04'
+ assert d.codename == 'precise'
+ assert d.name == 'ubuntu'
+ assert d.package_type == 'deb'