Source code for insights.parsers.rpm_v_packages

"""
Rpm -V Packages Parsers - command ``/bin/rpm -V <packages>``
============================================================

Parsers provided in this module includes:

RpmVPackages - command ``/bin/rpm -V <packages>``
-------------------------------------------------

RpmVPackage - command ``/bin/rpm -V <package>``
-----------------------------------------------

"""

from insights.core import CommandParser
from insights.core.exceptions import SkipComponent
from insights.core.plugins import parser
from insights.specs import Specs
from insights.util import deprecated


[docs] @parser(Specs.rpm_V_packages) class RpmVPackages(CommandParser): """ Class for parsing ``/bin/rpm -V <packages>`` command. .. warning:: This class is deprecated and will be removed from 3.5.0. For Insights Advisor Rules, it's recommended to use the :class:`insights.parsers.rpm_v_packages.RpmVPackage` and add the ``'coreutils', 'procps', 'procps-ng', 'shadow-utils', 'passwd', 'sudo', 'chrony', 'findutils', 'glibc'`` to the filter list of `Specs.rpm_V_package_list` instead. Attributes: packages_list (list of dictionaries): every dictionary contains information about one entry Sample output of this command is:: package procps is not installed ..?...... c /etc/sudoers ..?...... /usr/bin/sudo ..?...... /usr/bin/sudoreplay missing /var/db/sudo/lectured (Permission denied) Examples: >>> type(rpm_v_packages) <class 'insights.parsers.rpm_v_packages.RpmVPackages'> >>> len(rpm_v_packages.packages_list) 5 >>> sorted(rpm_v_packages.packages_list[0].items()) [('attributes', None), ('file', None), ('line', 'package procps is not installed'), ('mark', None)] >>> sorted(rpm_v_packages.packages_list[1].items()) [('attributes', '..?......'), ('file', '/etc/sudoers'), ('line', '..?...... c /etc/sudoers'), ('mark', 'c')] """ def __init__(self, *args, **kwargs): deprecated(RpmVPackages, "Please use the :class:`insights.parsers.rpm_v_packages.RpmVPackage` instead.", "3.5.0") super(RpmVPackages, self).__init__(*args, **kwargs)
[docs] def parse_content(self, content): self.packages_list = [] for line in content: line_parts = line.split() if "package" in line_parts[0] or "missing" in line_parts[0]: entry = {"line": line.strip(), "attributes": None, "mark": None, "file": None} elif len(line_parts) == 3: entry = {"line": line.strip(), "attributes": line_parts[0], "mark": line_parts[1], "file": line_parts[2]} else: entry = {"line": line.strip(), "attributes": line_parts[0], "mark": None, "file": line_parts[1]} self.packages_list.append(entry)
[docs] @parser(Specs.rpm_V_package) class RpmVPackage(CommandParser): """ Class for parsing ``/bin/rpm -V <package>`` command. Attributes: package_name (String): The name of package discrepancies (list of dictionaries): Every dictionary contains information about one entry Sample output of this command is:: ..?...... c /etc/sudoers ..?...... /usr/bin/sudo ..?...... /usr/bin/sudoreplay missing /var/db/sudo/lectured (Permission denied) Examples: >>> type(rpm_v_pkg) <class 'insights.parsers.rpm_v_packages.RpmVPackage'> >>> rpm_v_pkg.package_name 'sudo' >>> len(rpm_v_pkg.discrepancies) 4 >>> sorted(rpm_v_pkg.discrepancies[0].items()) [('attributes', '..?......'), ('file', '/etc/sudoers'), ('line', '..?...... c /etc/sudoers'), ('mark', 'c')] """
[docs] def parse_content(self, content): self.discrepancies = [] self.package_name = self.file_name.split('_')[-1] if self.file_name else None for line in content: line_parts = line.split() if not line_parts: continue if "package" in line_parts[0]: raise SkipComponent("Invalid Contents") if "missing" in line_parts[0]: entry = {"line": line.strip(), "attributes": None, "mark": None, "file": None} elif len(line_parts) == 3: entry = {"line": line.strip(), "attributes": line_parts[0], "mark": line_parts[1], "file": line_parts[2]} else: entry = {"line": line.strip(), "attributes": line_parts[0], "mark": None, "file": line_parts[1]} self.discrepancies.append(entry) if not self.discrepancies: raise SkipComponent("Empty result")