Source code for insights.parsers.cmdline

"""
CmdLine - file ``/proc/cmdline``
================================

This parser reads the ``/proc/cmdline`` file, which contains the arguments
given to the currently running kernel on boot.

"""

from insights import Parser, parser, LegacyItemAccess
from insights.parsers import SkipException, ParseException
from insights.specs import Specs


[docs]@parser(Specs.cmdline) class CmdLine(LegacyItemAccess, Parser): """ A parser class for parsing the Linux kernel command line as given in ``/proc/cmdline``. Parsing Logic:: Parses all elements in command line to a dict where the key is the element itself and the value is a list stores its corresponding values. If an element doesn't contain "=", set the corresponding value to `True`. If an element contains "=", set the corresponding value to the whole right value of the "=". .. note:: For special command line elements that include two "=", e.g. ``root=LABEL=/1``, "root" will be the key and "LABEL=/1" will be the value in the returned list. Some parameters (the returned keys) might be still effective even if there is '#' before it, e.g.: ``#rhgb``. This should be checked by the rule. Sample input:: BOOT_IMAGE=/vmlinuz-3.10.0-327.36.3.el7.x86_64 root=/dev/system_vg/Root ro rd.lvm.lv=system_vg/Root crashkernel=auto rd.lvm.lv=system_vg/Swap rhgb quiet LANG=en_GB.utf8 Examples: >>> cmd['BOOT_IMAGE'] ['/vmlinuz-3.10.0-327.36.3.el7.x86_64'] >>> cmd['rd.lvm.lv'] ['system_vg/Root', 'system_vg/Swap'] >>> 'autofs' in cmd False >>> cmd.get('autofs') is None True >>> 'quiet' in cmd True >>> cmd.get('quiet') [True] >>> cmd['crashkernel'] ['auto'] Attributes: data (dict): Parsed booting arguments are stored in this dictionary cmdline (str): The RAW line of the ``/proc/cmdline`` """
[docs] def parse_content(self, content): if not content: raise SkipException('Empty output') if len(content) != 1: raise ParseException('Invalid output: {0}', content) self.data = {} self.cmdline = content[0].strip() for el in self.cmdline.split(): # Thanks to strip and split, el always contains something. key, value = el, True if "=" in el: key, value = el.split("=", 1) if key not in self.data: self.data[key] = [] self.data[key].append(value)