Source code for insights.combiners.ipa

"""
IPA - Combiner for RHEL IdM / FreeIPA information
=================================================
"""

from insights.combiners.sssd_conf import SSSDConfAll
from insights.core.exceptions import SkipComponent
from insights.core.plugins import combiner
from insights.parsers.installed_rpms import InstalledRpms
from insights.parsers.ipa_conf import IPAConfig


[docs] @combiner(IPAConfig, SSSDConfAll, InstalledRpms) class IPA(object): """Combiner for IPA, SSSD, and installed RPMs Provides additional information, e.g. whether the host is an IPA server. """ def __init__(self, ipa_conf, sssd_conf, rpms): self._ipa_conf = ipa_conf self._sssd_conf = sssd_conf self._is_client = None self._is_server = None self._ipa_domains = None self._check_installed_packages(rpms) def _check_installed_packages(self, rpms): # IPA is relying on SSSD which will be installed on both client and server if rpms.get_max("sssd") is None: raise SkipComponent("sssd package is not installed") @property def ipa_conf(self): """Get IPAConfig object""" return self._ipa_conf @property def sssd_conf(self): """Get SSSD_Config object""" return self._sssd_conf @property def sssd_ipa_domains(self): """Get all SSSD domains where id_provider is set to ipa""" if self._ipa_domains is None: self._ipa_domains = [] for domain in self.sssd_conf.enabled_domains: id_provider = self.sssd_conf.domain_get(domain, "id_provider") if id_provider == "ipa": self._ipa_domains.append(domain) return self._ipa_domains @property def is_client(self): """Is the host an IPA client?""" # Check if there is at least one IPA domain in SSSD. if self._is_client is None: self._is_client = len(self.sssd_ipa_domains) > 0 return self._is_client @property def is_server(self): """Is the host an IPA server?""" if self._is_server is None: for domain in self.sssd_ipa_domains: self._is_server = self.sssd_conf.domain_getboolean( domain, "ipa_server_mode", False ) # Break if there is at least one IPA domain in server mode if self._is_server: break return self._is_server