Source code for insights.combiners.rhel_for_edge

"""
Combiner for edge computing systems
===================================
This combiner uses the following parsers to determine if the system is an edge computing systems.

* :py:class:`insights.parsers.installed_rpms.InstalledRpms`
* :py:class:`insights.parsers.cmdline.CmdLine`
* :py:class:`insights.parsers.systemd.unitfiles.ListUnits`
* :py:class:`insights.parsers.redhat_release.RedhatRelease`
"""
from insights.core.exceptions import SkipComponent
from insights.core.plugins import combiner
from insights.parsers.cmdline import CmdLine
from insights.parsers.installed_rpms import InstalledRpms
from insights.parsers.systemd.unitfiles import ListUnits
from insights.parsers.redhat_release import RedhatRelease
from insights.parsers.rpm_ostree_status import RpmOstreeStatus


[docs] @combiner(ListUnits, optional=[RpmOstreeStatus, InstalledRpms, CmdLine, RedhatRelease]) class RhelForEdge(object): """Combiner for checking if the system is an edge computing system. Edge computing as well as the Red Hat CoreOS packages are managed via rpm-ostree. Use the string "Red Hat Enterprise Linux release" from ``/etc/redhat-release`` to determine an edge computing system. The Red Hat CoreOS system will have "Red Hat Enterprise Linux CoreOS release" as the string. .. note:: RHEL for EDGE is available and supported since RHEL 8.3. When an edge computing system (created from online console edge image) is configured to use the automated management, the output of ``rhc status`` is as below:: Connection status for <HOST>: - Connected to Red Hat Subscription Management - The Red Hat connector daemon is active The ``rhcd.service`` running on an edge computing system signifies that it is configured to use the automated management. Attributes: is_edge (bool): True when it is an edge computing system is_automated (bool): True when the the edge computing system is configured to use automated management .. note:: It is possible to run ``rhcd.service`` on the edge systems created from the cockpit edge image. The **is_automated** attribute is only for front-end resolution surface. It is used when the edge image is from the online console. Examples: >>> type(rhel_for_edge_obj) <class 'insights.combiners.rhel_for_edge.RhelForEdge'> >>> rhel_for_edge_obj.is_edge True >>> rhel_for_edge_obj.is_automated True """ def __init__(self, units, rpmostreestatus, rpms, cmdline, redhatrelease): self.is_edge = False self.is_automated = False if rpmostreestatus: origin = rpmostreestatus.query.deployments.origin origin_check = [item.value.endswith("edge") for item in origin] if origin_check and all(origin_check): self.is_edge = True if units.is_running("rhcd.service"): self.is_automated = True elif rpms and cmdline and redhatrelease: if ('rpm-ostree' in rpms and 'yum' not in rpms) and \ ('ostree' in cmdline) and \ ("red hat enterprise linux release" in redhatrelease.raw.lower()): self.is_edge = True if units.is_running("rhcd.service"): self.is_automated = True else: raise SkipComponent("Unable to determine if this system is created from an edge image.")