Source code for insights.specs.datasources.candlepin

"""
Custom datasources for candlepin broker.xml
"""

from insights.components.satellite import IsSatellite
from insights.core import ET
from insights.core.context import HostContext
from insights.core.exceptions import SkipComponent
from insights.core.plugins import datasource
from insights.core.spec_factory import DatasourceProvider, simple_file
from insights.specs import Specs


[docs] class LocalSpecs(Specs): """Local specs used only by candlepin_broker datasources""" candlepin_broker_input = simple_file("/etc/candlepin/broker.xml") """ Returns the contents of the file ``/etc/candlepin/broker.xml`` """
[docs] @datasource(LocalSpecs.candlepin_broker_input, HostContext, IsSatellite) def candlepin_broker(broker): """ This datasource provides the candlepn broker configuration information collected from ``/etc/candlepin/broker.xml``. Typical content of ``/etc/candlepin/broker.xml`` file is:: <configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"> <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq:core "> <acceptors> <acceptor name="in-vm">vm://0</acceptor> <acceptor name="stomp">tcp://localhost:61613?protocols=STOMP;useEpoll=false;sslEnabled=true;trustStorePath=/etc/candlepin/certs/truststore;trustStorePassword=CDX9i3K5uPPBzcNtzz5tcycVf5PuXA5w;keyStorePath=/etc/candlepin/certs/keystore;keyStorePassword=4iBpTS45VZjFmVdNzRhRKNXtxbsH5Dij;needClientAuth=true</acceptor> </acceptors> <security-enabled>true</security-enabled> </core> </configuration> Note: This datasource may be executed using the following command: ``insights cat --no-header candlepin_broker`` Returns: str: XML string after removing sensitive information. Raises: SkipComponent: When the path does not exist or any exception occurs. """ try: content = broker[LocalSpecs.candlepin_broker_input].content if content: root = ET.fromstring('\n'.join(content)) # remove namespace before save to avoid urgly search for node in list(root.iter()): prefix, has_namespace, postfix = node.tag.rpartition('}') if has_namespace: node.tag = postfix # remove sensitive data core_ele = root.find('core') passwd_ele = core_ele.find('cluster-password') if passwd_ele is not None: core_ele.remove(passwd_ele) acc_ele = core_ele.find('acceptors') if acc_ele is not None and len(acc_ele): core_ele.remove(acc_ele) return DatasourceProvider( content=[ line for line in ET.tostring(root).decode('utf-8').splitlines() if line.strip() ], relative_path='insights_datasources/candlepin_broker.xml', ds=Specs.candlepin_broker, ctx=broker.get(HostContext), cleaner=broker.get("cleaner"), ) except Exception as e: raise SkipComponent("Unexpected exception:{e}".format(e=str(e))) raise SkipComponent()