Source code for insights.parsers.lsmod

"""
LsMod - command ``/sbin/lsmod``
===============================

This parser reads the output of ``/sbin/lsmod`` into a dictionary, keyed on
the module name.  Each item is a dictionary with three keys:

* ``size`` - the size of the module's memory footprint in bytes
* ``depnum`` - the number of modules dependent on this module
* ``deplist`` - the list of dependent modules as presented (i.e. as a string)

This dictionary is available in the ``data`` attribute.

The parser also provides pseudo-dictionary access so it can be checked for
the existence of a module or module data retrieved as if it was a dictionary.

Sample input::

    Module                  Size  Used by
    xt_CHECKSUM            12549  1
    ipt_MASQUERADE         12678  3
    nf_nat_masquerade_ipv4    13412  1 ipt_MASQUERADE
    tun                    27141  3
    ip6t_rpfilter          12546  1

Examples:

    >>> modules = shared[LsMod]
    >>> 'ip6t_rpfilter' in modules
    True
    >>> 'bridge' in modules
    False
    >>> modules['tun']['deplist']
    ''
    >>> modules['nf_nat_masquerade_ipv4']['deplist']
    'ipt_MASQUERADE'
"""

from .. import parser, CommandParser
from insights.specs import Specs


[docs] @parser(Specs.lsmod) class LsMod(CommandParser): """ Parse the output of ``/sbin/lsmod``. """ def __getitem__(self, item): return self.data[item] def __contains__(self, item): return item in self.data
[docs] def parse_content(self, content): module_dict = {} memb_keys = ['size', 'depnum', 'deplist'] # skip the title for line in content[1:]: if line.strip(): line_split = line.split() # make sure the deplist element exists if len(line_split) == 3: line_split.append('') if len(line_split) == 4: mod_attrs = {} for i, key in enumerate(memb_keys): mod_attrs[key] = line_split[i + 1] module_dict[line_split[0]] = mod_attrs self.data = module_dict