Source code for insights.parsers.redhat_release

"""
redhat-release - File ``/etc/redhat-release``
=============================================

This module provides plugins access to file ``/etc/redhat-release``

Typical content of file ``/etc/redhat-release`` is::

    Red Hat Enterprise Linux Server release 7.2 (Maipo)

This module parses the file content and stores data in the dict ``self.parsed``.
The version info can also be get via ``obj.major`` and ``obj.minor``.
Property ``is_rhel`` and ``is_hypervisor`` specifies the host type.

Examples:
    >>> rh_rls_content = '''
    ... Red Hat Enterprise Linux Server release 7.2 (Maipo)
    ... '''.strip()
    >>> from insights.tests import context_wrap
    >>> shared = {RedhatRelease: RedhatRelease(context_wrap(rh_rls_content))}
    >>> release = shared[RedhatRelease]
    >>> assert release.raw == rh_rls_content
    >>> assert release.major == 7
    >>> assert release.minor == 2
    >>> assert release.version == "7.2"
    >>> assert release.is_rhel
    >>> assert release.product == "Red Hat Enterprise Linux Server"
"""
from .. import Parser, parser
from ..specs import Specs


[docs]@parser(Specs.redhat_release) class RedhatRelease(Parser): """Parses the content of file ``/etc/redhat-release``."""
[docs] def parse_content(self, content): self.raw = content[0] product, _, version_name = [v.strip() for v in content[0].partition("release")] version_name_split = [v.strip() for v in version_name.split(None, 1)] code_name = (version_name_split[1].strip("()") if len(version_name_split) > 1 else None) self.parsed = { "product": product, "version": version_name_split[0], "code_name": code_name }
@property def major(self): """int: the major version of this OS.""" return int(self.parsed["version"].split(".")[0]) @property def minor(self): """int: the minor version of this OS.""" s = self.parsed["version"].split("-", 1)[0].split(".") if len(s) > 1: return int(s[1]) @property def version(self): """string: version of this OS.""" return self.parsed["version"] @property def is_rhel(self): """bool: True if this OS belong to RHEL, else False.""" return "Red Hat Enterprise Linux" in self.parsed["product"] @property def product(self): """string: product of this OS.""" return self.parsed["product"]