Source code for insights.parsers.xfs_quota

"""
xfs_quota Commands
==================

Parser contains in this module is:

XFSQuotaState - command ``/sbin/xfs_quota -x -c 'state -gu'``
-------------------------------------------------------------
"""

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


[docs] @parser(Specs.xfs_quota_state) class XFSQuotaState(CommandParser): """ The ``/sbin/xfs_quota -x -c 'state -gu'`` command provides information for the xfs quota devices. Attributes: group_quota (dict): Dictionary of information for each group quota user_quota (dict): Dictionary of information for each user quota Sample directory list collected:: User quota state on /sdd (/dev/sdd) Accounting: ON Enforcement: ON Inode: #131 (1 blocks, 1 extents) Blocks grace time: [7 days] Blocks max warnings: 5 Inodes grace time: [7 days] Inodes max warnings: 5 Realtime Blocks grace time: [7 days] Group quota state on /sdd (/dev/sdd) Accounting: OFF Enforcement: OFF Inode: N/A Blocks grace time: [--------] Blocks max warnings: 0 Inodes grace time: [--------] Inodes max warnings: 0 Realtime Blocks grace time: [--------] User quota state on /sdb (/dev/sdb) Accounting: ON Enforcement: ON Inode: #131 (2 blocks, 2 extents) Blocks grace time: [6 days] Blocks max warnings: 10 Inodes grace time: [6 days] Inodes max warnings: 5 Realtime Blocks grace time: [6 days] Group quota state on /sdb (/dev/sdb) Accounting: ON Enforcement: ON Inode: #137 (2 blocks, 2 extents) Blocks grace time: [7 days] Blocks max warnings: 5 Inodes grace time: [7 days] Inodes max warnings: 5 Realtime Blocks grace time: [7 days] Examples: >>> type(quota_state) <class 'insights.parsers.xfs_quota.XFSQuotaState'> >>> len(quota_state.user_quota) 3 >>> quota_state.user_quota['/dev/sdd'] == {'device': '/dev/sdd', 'accounting': 'ON', 'enforcement': 'ON', 'inode': '#131 (1 blocks, 1 extents)', 'blocks_grace_time': '7 days', 'blocks_max_warnings': '5', 'inodes_grace_time': '7 days', 'inodes_max_warnings': '5', 'realtime_blocks_grace_time': '7 days'} True """
[docs] def parse_content(self, content): self.user_quota = {} self.group_quota = {} data = None device = None for line in content: if not line.strip(): continue if 'quota state on' in line: device = line.split()[-1].lstrip('(').rstrip(')') data = self.group_quota if 'User ' in line: data = self.user_quota data[device] = data.get(device, dict(device=device)) elif ': ' in line and device: key, value = line.split(':', 1) data[device]['_'.join(key.strip().lower().split())] = value.strip().lstrip('[').rstrip(']') if '-' not in value else None if not self.user_quota and not self.group_quota: raise SkipComponent("Empty result")