--- /dev/null
+import re
+
+
+class OS(object):
+ """
+ Class that parses either /etc/os-release or the output of 'lsb_release -a'
+ and provides OS name and version information.
+
+ Must be initialized with OS.from_lsb_release or OS.from_os_release
+ """
+
+ __slots__ = ['name', 'version', 'package_type']
+
+ _deb_distros = ('debian', 'ubuntu')
+ _rpm_distros = ('fedora', 'rhel', 'centos', 'suse')
+
+ def __init__(self):
+ pass
+
+ @classmethod
+ def from_lsb_release(cls, lsb_release_str):
+ """
+ Parse /etc/os-release and populate attributes
+
+ Given output like:
+ Distributor ID: Ubuntu
+ Description: Ubuntu 12.04.4 LTS
+ Release: 12.04
+ Codename: precise
+
+ Attributes will be:
+ name = 'ubuntu'
+ version = '12.04'
+ Additionally, we set the package type:
+ package_type = 'deb'
+ """
+ obj = cls()
+ str_ = lsb_release_str.strip()
+ name = obj._get_value(str_, 'Distributor ID')
+ if name == 'RedHatEnterpriseServer':
+ name = 'rhel'
+ obj.name = name.lower()
+
+ obj.version = obj._get_value(str_, 'Release')
+
+ if obj.name in cls._deb_distros:
+ obj.package_type = "deb"
+ elif obj.name in cls._rpm_distros:
+ obj.package_type = "rpm"
+
+ return obj
+
+ @classmethod
+ def from_os_release(cls, os_release_str):
+ """
+ Parse /etc/os-release and populate attributes
+
+ Given output like:
+ NAME="Ubuntu"
+ VERSION="12.04.4 LTS, Precise Pangolin"
+ ID=ubuntu
+ ID_LIKE=debian
+ PRETTY_NAME="Ubuntu precise (12.04.4 LTS)"
+ VERSION_ID="12.04"
+
+ Attributes will be:
+ name = 'ubuntu'
+ version = '12.04'
+ Additionally, we set the package type:
+ package_type = 'deb'
+ """
+ obj = cls()
+ str_ = os_release_str.strip()
+ obj.name = cls._get_value(str_, 'ID').lower()
+ obj.version = cls._get_value(str_, 'VERSION_ID')
+
+ if obj.name in cls._deb_distros:
+ obj.package_type = "deb"
+ elif obj.name in cls._rpm_distros:
+ obj.package_type = "rpm"
+
+ return obj
+
+ @staticmethod
+ def _get_value(str_, name):
+ regex = '^%s[:=](.+)' % name
+ match = re.search(regex, str_, flags=re.M)
+ if match:
+ return match.groups()[0].strip(' \t"\'')
+ return ''
+
+ def __str__(self):
+ return " ".join([self.name, self.version]).strip()
Support for paramiko remote objects.
"""
from . import run
+from .opsys import OS
import connection
from teuthology import misc
import time
return node
-class OS(object):
- """
- Class that parses either /etc/os-release or the output of 'lsb_release -a'
- and provides OS name and version information.
-
- Must be initialized with OS.from_lsb_release or OS.from_os_release
- """
-
- __slots__ = ['name', 'version', 'package_type']
-
- _deb_distros = ('debian', 'ubuntu')
- _rpm_distros = ('fedora', 'rhel', 'centos', 'suse')
-
- def __init__(self):
- pass
-
- @classmethod
- def from_lsb_release(cls, lsb_release_str):
- """
- Parse /etc/os-release and populate attributes
-
- Given output like:
- Distributor ID: Ubuntu
- Description: Ubuntu 12.04.4 LTS
- Release: 12.04
- Codename: precise
-
- Attributes will be:
- name = 'ubuntu'
- version = '12.04'
- Additionally, we set the package type:
- package_type = 'deb'
- """
- obj = cls()
- str_ = lsb_release_str.strip()
- name = obj._get_value(str_, 'Distributor ID')
- if name == 'RedHatEnterpriseServer':
- name = 'rhel'
- obj.name = name.lower()
-
- obj.version = obj._get_value(str_, 'Release')
-
- if obj.name in cls._deb_distros:
- obj.package_type = "deb"
- elif obj.name in cls._rpm_distros:
- obj.package_type = "rpm"
-
- return obj
-
- @classmethod
- def from_os_release(cls, os_release_str):
- """
- Parse /etc/os-release and populate attributes
-
- Given output like:
- NAME="Ubuntu"
- VERSION="12.04.4 LTS, Precise Pangolin"
- ID=ubuntu
- ID_LIKE=debian
- PRETTY_NAME="Ubuntu precise (12.04.4 LTS)"
- VERSION_ID="12.04"
-
- Attributes will be:
- name = 'ubuntu'
- version = '12.04'
- Additionally, we set the package type:
- package_type = 'deb'
- """
- obj = cls()
- str_ = os_release_str.strip()
- obj.name = cls._get_value(str_, 'ID').lower()
- obj.version = cls._get_value(str_, 'VERSION_ID')
-
- if obj.name in cls._deb_distros:
- obj.package_type = "deb"
- elif obj.name in cls._rpm_distros:
- obj.package_type = "rpm"
-
- return obj
-
- @staticmethod
- def _get_value(str_, name):
- regex = '^%s[:=](.+)' % name
- match = re.search(regex, str_, flags=re.M)
- if match:
- return match.groups()[0].strip(' \t"\'')
- return ''
-
- def __str__(self):
- return " ".join([self.name, self.version]).strip()
-
-
def getShortName(name):
"""
Extract the name portion from remote name strings.
--- /dev/null
+from textwrap import dedent
+from ..opsys import OS
+
+
+class TestOS(object):
+ str_centos_7_os_release = dedent("""
+ NAME="CentOS Linux"
+ VERSION="7 (Core)"
+ ID="centos"
+ ID_LIKE="rhel fedora"
+ VERSION_ID="7"
+ PRETTY_NAME="CentOS Linux 7 (Core)"
+ ANSI_COLOR="0;31"
+ CPE_NAME="cpe:/o:centos:centos:7"
+ HOME_URL="https://www.centos.org/"
+ BUG_REPORT_URL="https://bugs.centos.org/"
+ """)
+
+ str_debian_7_lsb_release = dedent("""
+ Distributor ID: Debian
+ Description: Debian GNU/Linux 7.1 (wheezy)
+ Release: 7.1
+ Codename: wheezy
+ """)
+
+ str_debian_7_os_release = dedent("""
+ PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
+ NAME="Debian GNU/Linux"
+ VERSION_ID="7"
+ VERSION="7 (wheezy)"
+ ID=debian
+ ANSI_COLOR="1;31"
+ HOME_URL="http://www.debian.org/"
+ SUPPORT_URL="http://www.debian.org/support/"
+ BUG_REPORT_URL="http://bugs.debian.org/"
+ """)
+
+ str_ubuntu_12_04_lsb_release = dedent("""
+ Distributor ID: Ubuntu
+ Description: Ubuntu 12.04.4 LTS
+ Release: 12.04
+ Codename: precise
+ """)
+
+ str_ubuntu_12_04_os_release = dedent("""
+ NAME="Ubuntu"
+ VERSION="12.04.4 LTS, Precise Pangolin"
+ ID=ubuntu
+ ID_LIKE=debian
+ PRETTY_NAME="Ubuntu precise (12.04.4 LTS)"
+ VERSION_ID="12.04"
+ """)
+
+ str_rhel_6_4_lsb_release = 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: RedHatEnterpriseServer
+ Description: Red Hat Enterprise Linux Server release 6.4 (Santiago)
+ Release: 6.4
+ Codename: Santiago
+ """)
+
+ str_rhel_7_lsb_release = dedent("""
+ LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
+ Distributor ID: RedHatEnterpriseServer
+ Description: Red Hat Enterprise Linux Server release 7.0 (Maipo)
+ Release: 7.0
+ Codename: Maipo
+ """)
+
+ str_rhel_7_os_release = dedent("""
+ NAME="Red Hat Enterprise Linux Server"
+ VERSION="7.0 (Maipo)"
+ ID="rhel"
+ ID_LIKE="fedora"
+ VERSION_ID="7.0"
+ PRETTY_NAME="Red Hat Enterprise Linux Server 7.0 (Maipo)"
+ ANSI_COLOR="0;31"
+ CPE_NAME="cpe:/o:redhat:enterprise_linux:7.0:GA:server"
+ HOME_URL="https://www.redhat.com/"
+ BUG_REPORT_URL="https://bugzilla.redhat.com/"
+
+ REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
+ REDHAT_BUGZILLA_PRODUCT_VERSION=7.0
+ REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
+ REDHAT_SUPPORT_PRODUCT_VERSION=7.0
+ """)
+
+ def test_centos_7_os_release(self):
+ os = OS.from_os_release(self.str_centos_7_os_release)
+ assert os.name == 'centos'
+ assert os.version == '7'
+ assert os.package_type == 'rpm'
+
+ def test_debian_7_lsb_release(self):
+ os = OS.from_lsb_release(self.str_debian_7_lsb_release)
+ assert os.name == 'debian'
+ assert os.version == '7.1'
+ assert os.package_type == 'deb'
+
+ def test_debian_7_os_release(self):
+ os = OS.from_os_release(self.str_debian_7_os_release)
+ assert os.name == 'debian'
+ assert os.version == '7'
+ assert os.package_type == 'deb'
+
+ def test_ubuntu_12_04_lsb_release(self):
+ os = OS.from_lsb_release(self.str_ubuntu_12_04_lsb_release)
+ assert os.name == 'ubuntu'
+ assert os.version == '12.04'
+ assert os.package_type == 'deb'
+
+ def test_ubuntu_12_04_os_release(self):
+ os = OS.from_os_release(self.str_ubuntu_12_04_os_release)
+ assert os.name == 'ubuntu'
+ assert os.version == '12.04'
+ assert os.package_type == 'deb'
+
+ def test_rhel_6_4_lsb_release(self):
+ os = OS.from_lsb_release(self.str_rhel_6_4_lsb_release)
+ assert os.name == 'rhel'
+ assert os.version == '6.4'
+ assert os.package_type == 'rpm'
+
+ def test_rhel_7_lsb_release(self):
+ os = OS.from_lsb_release(self.str_rhel_7_lsb_release)
+ assert os.name == 'rhel'
+ assert os.version == '7.0'
+ assert os.package_type == 'rpm'
+
+ def test_rhel_7_os_release(self):
+ os = OS.from_os_release(self.str_rhel_7_os_release)
+ assert os.name == 'rhel'
+ assert os.version == '7.0'
+ assert os.package_type == 'rpm'
from pytest import skip
from cStringIO import StringIO, OutputType
-from textwrap import dedent
from .. import remote
from ..run import RemoteProcess
key.expects('get_base64').returns('test ssh key')
r = remote.Remote(name='jdoe@xyzzy.example.com', ssh=ssh)
assert r.host_key == 'key_type test ssh key'
-
-
-class TestDistribution(object):
- str_centos_7_os_release = dedent("""
- NAME="CentOS Linux"
- VERSION="7 (Core)"
- ID="centos"
- ID_LIKE="rhel fedora"
- VERSION_ID="7"
- PRETTY_NAME="CentOS Linux 7 (Core)"
- ANSI_COLOR="0;31"
- CPE_NAME="cpe:/o:centos:centos:7"
- HOME_URL="https://www.centos.org/"
- BUG_REPORT_URL="https://bugs.centos.org/"
- """)
-
- str_debian_7_lsb_release = dedent("""
- Distributor ID: Debian
- Description: Debian GNU/Linux 7.1 (wheezy)
- Release: 7.1
- Codename: wheezy
- """)
-
- str_debian_7_os_release = dedent("""
- PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
- NAME="Debian GNU/Linux"
- VERSION_ID="7"
- VERSION="7 (wheezy)"
- ID=debian
- ANSI_COLOR="1;31"
- HOME_URL="http://www.debian.org/"
- SUPPORT_URL="http://www.debian.org/support/"
- BUG_REPORT_URL="http://bugs.debian.org/"
- """)
-
- str_ubuntu_12_04_lsb_release = dedent("""
- Distributor ID: Ubuntu
- Description: Ubuntu 12.04.4 LTS
- Release: 12.04
- Codename: precise
- """)
-
- str_ubuntu_12_04_os_release = dedent("""
- NAME="Ubuntu"
- VERSION="12.04.4 LTS, Precise Pangolin"
- ID=ubuntu
- ID_LIKE=debian
- PRETTY_NAME="Ubuntu precise (12.04.4 LTS)"
- VERSION_ID="12.04"
- """)
-
- str_rhel_6_4_lsb_release = 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: RedHatEnterpriseServer
- Description: Red Hat Enterprise Linux Server release 6.4 (Santiago)
- Release: 6.4
- Codename: Santiago
- """)
-
- str_rhel_7_lsb_release = dedent("""
- LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
- Distributor ID: RedHatEnterpriseServer
- Description: Red Hat Enterprise Linux Server release 7.0 (Maipo)
- Release: 7.0
- Codename: Maipo
- """)
-
- str_rhel_7_os_release = dedent("""
- NAME="Red Hat Enterprise Linux Server"
- VERSION="7.0 (Maipo)"
- ID="rhel"
- ID_LIKE="fedora"
- VERSION_ID="7.0"
- PRETTY_NAME="Red Hat Enterprise Linux Server 7.0 (Maipo)"
- ANSI_COLOR="0;31"
- CPE_NAME="cpe:/o:redhat:enterprise_linux:7.0:GA:server"
- HOME_URL="https://www.redhat.com/"
- BUG_REPORT_URL="https://bugzilla.redhat.com/"
-
- REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
- REDHAT_BUGZILLA_PRODUCT_VERSION=7.0
- REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
- REDHAT_SUPPORT_PRODUCT_VERSION=7.0
- """)
-
- def test_centos_7_os_release(self):
- os = remote.OS.from_os_release(self.str_centos_7_os_release)
- assert os.name == 'centos'
- assert os.version == '7'
- assert os.package_type == 'rpm'
-
- def test_debian_7_lsb_release(self):
- os = remote.OS.from_lsb_release(self.str_debian_7_lsb_release)
- assert os.name == 'debian'
- assert os.version == '7.1'
- assert os.package_type == 'deb'
-
- def test_debian_7_os_release(self):
- os = remote.OS.from_os_release(self.str_debian_7_os_release)
- assert os.name == 'debian'
- assert os.version == '7'
- assert os.package_type == 'deb'
-
- def test_ubuntu_12_04_lsb_release(self):
- os = remote.OS.from_lsb_release(self.str_ubuntu_12_04_lsb_release)
- assert os.name == 'ubuntu'
- assert os.version == '12.04'
- assert os.package_type == 'deb'
-
- def test_ubuntu_12_04_os_release(self):
- os = remote.OS.from_os_release(self.str_ubuntu_12_04_os_release)
- assert os.name == 'ubuntu'
- assert os.version == '12.04'
- assert os.package_type == 'deb'
-
- def test_rhel_6_4_lsb_release(self):
- os = remote.OS.from_lsb_release(self.str_rhel_6_4_lsb_release)
- assert os.name == 'rhel'
- assert os.version == '6.4'
- assert os.package_type == 'rpm'
-
- def test_rhel_7_lsb_release(self):
- os = remote.OS.from_lsb_release(self.str_rhel_7_lsb_release)
- assert os.name == 'rhel'
- assert os.version == '7.0'
- assert os.package_type == 'rpm'
-
- def test_rhel_7_os_release(self):
- os = remote.OS.from_os_release(self.str_rhel_7_os_release)
- assert os.name == 'rhel'
- assert os.version == '7.0'
- assert os.package_type == 'rpm'