Source code for insights.parsers.pcs_quorum_status

"""
PcsQuorumStatus - Commands ``pcs quorum status``
================================================
"""
from insights.core import CommandParser
from insights.core.exceptions import ParseException, SkipComponent
from insights.core.plugins import parser
from insights.parsers import parse_fixed_table
from insights.specs import Specs


[docs] @parser(Specs.pcs_quorum_status) class PcsQuorumStatus(CommandParser): """ Class for parsing the output of `pcs quorum status` command. Typical output of the command is:: Quorum information ------------------ Date: Wed Jun 29 13:17:02 2016 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 1 Ring ID: 1/8272 Quorate: Yes Votequorum information ---------------------- Expected votes: 3 Highest expected: 3 Total votes: 3 Quorum: 2 Flags: Quorate Qdevice Membership information ---------------------- Nodeid Votes Qdevice Name 1 1 A,V,NMW node1 (local) 2 1 A,V,NMW node2 0 1 Qdevice Attributes: quorum_info (dict): Dicts where keys are the feature name of quorum information and values are the corresponding feature value. votequorum_info (dict): Dicts where keys are the feature name of votequorum information and values are the corresponding feature value. membership_info (list): List of dicts where keys are the feature name of each node and values are the corresponding feature value. Raises: SkipComponent: When input is empty. ParseException: When input cannot be parsed. Examples: >>> type(pcs_quorum_status) <class 'insights.parsers.pcs_quorum_status.PcsQuorumStatus'> >>> pcs_quorum_status.quorum_info['Node ID'] '1' >>> pcs_quorum_status.votequorum_info['Expected votes'] '3' >>> pcs_quorum_status.membership_info[0]['Name'] 'node1 (local)' """
[docs] def parse_content(self, content): if not content: raise SkipComponent("Empty content") if len(content) < 21 or not ('Quorum information' in content[0] and 'Votequorum information' in content[9] and 'Membership information' in content[17]): raise ParseException("Incorrect content: '{0}'".format(content)) self.quorum_info = {} for line in content[2:7]: key, value = line.split(':', 1) self.quorum_info[key.strip()] = value.strip() self.votequorum_info = {} for line in content[11:15]: key, value = line.split(':', 1) self.votequorum_info[key.strip()] = value.strip() self.membership_info = parse_fixed_table(content[19:])