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.core import LegacyItemAccess, Parser
from insights.core.exceptions import ParseException, SkipComponent
from insights.core.plugins import parser
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 SkipComponent('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)