Source code for insights.parsers.db2licm

"""
IBM DB2 Sever details
=====================

Module for the processing of output from the ``db2licm -l`` command.
"""
from insights.core.plugins import parser
from insights.core import CommandParser
from insights.parsers import ParseException, get_active_lines
from insights.specs import Specs


[docs]@parser(Specs.db2licm_l) class DB2Info(CommandParser, dict): """ This parser processes the output of the command `db2licm_l` and provides the information as a dictionary. Sample input:: Product name: "DB2 Enterprise Server Edition" License type: "CPU Option" Expiry date: "Permanent" Product identifier: "db2ese" Version information: "9.7" Enforcement policy: "Soft Stop" Features: DB2 Performance Optimization ESE: "Not licensed" DB2 Storage Optimization: "Not licensed" DB2 Advanced Access Control: "Not licensed" IBM Homogeneous Replication ESE: "Not licensed" Product name: "DB2 Connect Server" Expiry date: "Expired" Product identifier: "db2consv" Version information: "9.7" Concurrent connect user policy: "Disabled" Enforcement policy: "Soft Stop" Example: >>> list(parser_result.keys()) ['DB2 Enterprise Server Edition', 'DB2 Connect Server'] >>> parser_result['DB2 Enterprise Server Edition']["Version information"] '9.7' Override the base class parse_content to parse the output of the '''db2licm -l''' command. Information that is stored in the object is made available to the rule plugins. Raises: ParseException: raised if data is not parsable. """
[docs] def parse_content(self, content): # name = None body = {} # Input data is available in text file. Reading each line in file and parsing it to a dictionary. for line in get_active_lines(content): if ':' in line: key, val = [i.strip() for i in line.strip().split(":", 1)] if key == "Features": continue else: raise ParseException("Unable to parse db2licm info: {0}".format(content)) if key == "Product name": body = {} self[val] = body else: body[key] = val if not self: # If no data is obtained in the command execution then throw an exception instead of returning an empty # object. Rules depending solely on this parser will not be invoked, so they don't have to # explicitly check for invalid data. raise ParseException("Unable to parse db2licm info: {0}".format(content))