Source code for insights.parsers.mdadm
"""
MDAdm - command ``/usr/sbin/mdadm -E {device}``
===============================================
"""
from insights.core import CommandParser
from insights.core.exceptions import SkipComponent
from insights.core.plugins import parser
from insights.parsers import split_kv_pairs
from insights.specs import Specs
[docs]@parser(Specs.mdadm_E)
class MDAdmMetadata(CommandParser, dict):
"""
Parser for output of ``mdadm -E`` for each MD device in system.
This stores the information from the output in the following properties:
* ``device`` - the name of the device after /dev/ - e.g. loop0
Sample output::
/dev/loop0:
Magic : a92b4efc
Version : 1.0
Feature Map : 0x0
Array UUID : 98e098ef:c8662ce2:2ed2aa5f:7f0416a9
Name : 0
Creation Time : Mon Jun 29 02:16:52 2020
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 16383968 sectors (7.81 GiB 8.39 GB)
Array Size : 1048576 KiB (1024.00 MiB 1073.74 MB)
Used Dev Size : 2097152 sectors (1024.00 MiB 1073.74 MB)
Super Offset : 16383984 sectors
Unused Space : before=0 sectors, after=14286824 sectors
State : clean
Device UUID : 5e249ed9:a9ee800a:c09c963f:363a18d2
Update Time : Mon Jun 29 02:19:56 2020
Bad Block Log : 512 entries available at offset -8 sectors
Checksum : 395066e8 - correct
Events : 60
Device Role : Active device 0
Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
Examples:
>>> mdadm.device
'/dev/loop0'
>>> mdadm["Device UUID"]
'5e249ed9:a9ee800a:c09c963f:363a18d2'
>>> mdadm["Events"]
60
"""
[docs] def parse_content(self, content):
mdadm_dev = "/mdadm_-E_.dev."
if mdadm_dev in self.file_path:
self.device = '/dev/' + self.file_path.split(mdadm_dev)[1].strip()
else:
raise SkipComponent('Cannot parse device name from path {p}'.format(p=self.file_path))
for key, val in split_kv_pairs(content, split_on=':').items():
if val.isdigit():
val = int(val)
self[key] = val