Source code for insights.parsers.installed_product_ids

r"""
Installed product IDs
=====================

InstalledProductIDs - command ``find /etc/pki/product-default/ /etc/pki/product/ -name '*pem' -exec rct cat-cert --no-content '{}' \;``
---------------------------------------------------------------------------------------------------------------------------------------

This module provides a parser for information about certificates for
Red Hat product subscriptions.

"""

from insights.core.filters import add_filter
from insights.specs import Specs
from .. import parser, CommandParser

add_filter(
    Specs.subscription_manager_installed_product_ids,
    ['ID:', 'Name:', 'Product Certificate', 'Path:'],
)


[docs] @parser(Specs.subscription_manager_installed_product_ids) class InstalledProductIDs(CommandParser): r""" Parses the output of the comand:: find /etc/pki/product-default/ /etc/pki/product/ -name '*pem' -exec rct cat-cert --no-content '{}' \; Sample output from the unfiltered command looks like:: +-------------------------------------------+ Product Certificate +-------------------------------------------+ Certificate: Path: /etc/pki/product-default/69.pem Version: 1.0 Serial: 12750047592154749739 Start Date: 2017-06-28 18:05:10+00:00 End Date: 2037-06-23 18:05:10+00:00 Subject: CN: Red Hat Product ID [4f9995e0-8dc4-4b4f-acfe-4ef1264b94f3] Issuer: C: US CN: Red Hat Entitlement Product Authority O: Red Hat, Inc. OU: Red Hat Network ST: North Carolina emailAddress: ca-support@redhat.com Product: ID: 69 Name: Red Hat Enterprise Linux Server Version: 7.4 Arch: x86_64 Tags: rhel-7,rhel-7-server Brand Type: Brand Name: +-------------------------------------------+ Product Certificate +-------------------------------------------+ Certificate: Path: /etc/pki/product/69.pem Version: 1.0 Serial: 12750047592154751271 Start Date: 2018-04-13 11:23:50+00:00 End Date: 2038-04-08 11:23:50+00:00 Subject: CN: Red Hat Product ID [f3c92a95-26be-4bdf-800f-02c044503896] Issuer: C: US CN: Red Hat Entitlement Product Authority O: Red Hat, Inc. OU: Red Hat Network ST: North Carolina emailAddress: ca-support@redhat.com Product: ID: 69 Name: Red Hat Enterprise Linux Server Version: 7.6 Arch: x86_64 Tags: rhel-7,rhel-7-server Brand Type: Brand Name: Filters have been added to the parser so that only the filtered lines will be collected. Attributes: ids (set): set of strings of the unique product IDs product_certs(list): list of dicts of the product certificates key-value pairs split by colon, the key is transferred to lowercase format concatenated by an underscore if it contains whitespace Examples: >>> type(products) <class 'insights.parsers.installed_product_ids.InstalledProductIDs'> >>> list(products.ids) ['69'] >>> products.product_certs[0] {'path': '/etc/pki/product-default/69.pem', 'id': '69', 'name': 'Red Hat Enterprise Linux Server'} """
[docs] def parse_content(self, content): """Parse command output""" self.ids = set() self.product_certs = [] one_file_data = None for line in content: line = line.strip() # different file delimiter if line == 'Product Certificate': if one_file_data: self.product_certs.append(one_file_data) one_file_data = {} elif one_file_data is not None and ':' in line: name, value = line.split(':', 1) lower_name_with_underscore = '_'.join( [item.strip().lower() for item in name.split()] ) one_file_data[lower_name_with_underscore] = value.strip() if one_file_data: # add the last file data self.product_certs.append(one_file_data) self.ids = set([item['id'] for item in self.product_certs])