Source code for insights.combiners.redhat_release

"""
Red Hat Release
===============

Combiner for Red Hat Release information. It uses the results of
the ``Uname`` parser and the ``RedhatRelease`` parser to determine the release
major and minor version.  ``Uname`` is the preferred source of data.
The Red Hat Release is in obtained from the system in the form major.minor.
For example, for a Red Hat Enterprise Linux 7.2 system, the release would be
major = 7, minor = 2 and rhel = '7.2'.

"""

from collections import namedtuple

from insights.core.exceptions import SkipComponent
from insights.core.plugins import combiner
from insights.core.serde import deserializer, serializer
from insights.parsers.redhat_release import RedhatRelease as rht_release
from insights.parsers.uname import Uname


Release = namedtuple("Release", field_names=["major", "minor"])
"""namedtuple: Type for storing the release information."""


@serializer(Release)
def serialize(obj, root=None):
    return {"major": obj.major, "minor": obj.minor}


@deserializer(Release)
def deserialize(_type, obj, root=None):
    return Release(**obj)


[docs] @combiner([Uname, rht_release]) class RedHatRelease(object): """ Combiner class to check uname and redhat-release for RHEL major/minor version. Prefer uname to redhat-release. Attributes: major (int): The major RHEL version. minor (int): The minor RHEL version. rhel (str): The RHEL version, e.g. '7.2', '7.5-0.14' rhel6 (str): The RHEL version when it's RHEL6, otherwise None rhel7 (str): The RHEL version when it's RHEL7, otherwise None rhel8 (str): The RHEL version when it's RHEL8, otherwise None rhel9 (str): The RHEL version when it's RHEL9, otherwise None Raises: SkipComponent: If the version can't be determined even though a Uname or RedhatRelease was provided. Examples: >>> rh_rel.rhel '7.2' >>> rh_rel.major 7 >>> rh_rel.minor 2 >>> rh_rel.rhel6 is None True >>> rh_rel.rhel7 '7.2' >>> rh_rel.rhel8 is None True """ def __init__(self, uname, rh_rel): self.major = self.minor = self.rhel = None if uname and uname.redhat_release.major != -1: self.major = uname.redhat_release.major self.minor = uname.redhat_release.minor self.rhel = '{0}.{1}'.format(self.major, self.minor) elif rh_rel and rh_rel.is_rhel: self.major = rh_rel.major self.minor = rh_rel.minor self.rhel = rh_rel.version if self.rhel is None: raise SkipComponent("Unable to determine release.") self.rhel6 = self.rhel if self.major == 6 else None self.rhel7 = self.rhel if self.major == 7 else None self.rhel8 = self.rhel if self.major == 8 else None self.rhel9 = self.rhel if self.major == 9 else None
@serializer(RedHatRelease) def serialize_RedHatRelease(obj, root=None): return { "major": obj.major, "minor": obj.minor, "rhel": obj.rhel, "rhel6": obj.rhel6, "rhel7": obj.rhel7, "rhel8": obj.rhel8, "rhel9": obj.rhel9, } @deserializer(RedHatRelease) def deserialize_RedHatRelease(_type, obj, root=None): foo = _type.__new__(_type) foo.major = obj.get("major") foo.minor = obj.get("minor") foo.rhel = obj.get("rhel") foo.rhel6 = obj.get("rhel6") foo.rhel7 = obj.get("rhel7") foo.rhel8 = obj.get("rhel8") foo.rhel9 = obj.get("rhel9") return foo