"""
LsvmBus - Command ``lsvmbus -vv``
=================================
This module parses the output of the command ``lsvmbus -vv``.
"""
import re
from insights.util import deprecated
from insights import parser, CommandParser
from insights.parsers import SkipException
from insights.specs import Specs
[docs]@parser(Specs.lsvmbus)
class LsvmBus(CommandParser):
"""Parse the output of ``lsvmbus -vv`` as list.
.. warning::
This parser class is deprecated, please use
:py:class:`insights.combiner.sys_vmbus_devices.SysVmBusDeviceInfo` instead.
Typical output::
VMBUS ID 18: Class_ID = {44c4f61d-4444-4400-9d52-802e27ede19f} - PCI Express pass-through
Device_ID = {47505500-0001-0000-3130-444531303244}
Sysfs path: /sys/bus/vmbus/devices/47505500-0001-0000-3130-444531303244
Rel_ID=18, target_cpu=0
VMBUS ID 26: Class_ID = {44c4f61d-4444-4400-9d52-802e27ede19f} - PCI Express pass-through
Device_ID = {47505500-0002-0000-3130-444531303244}
Sysfs path: /sys/bus/vmbus/devices/47505500-0002-0000-3130-444531303244
Rel_ID=26, target_cpu=0
VMBUS ID 73: Class_ID = {44c4f61d-4444-4400-9d52-802e27ede19f} - PCI Express pass-through
Device_ID = {47505500-0003-0001-3130-444531303244}
Sysfs path: /sys/bus/vmbus/devices/47505500-0003-0001-3130-444531303244
Rel_ID=73, target_cpu=0
VMBUS ID 74: Class_ID = {44c4f61d-4444-4400-9d52-802e27ede19f} - PCI Express pass-through
Device_ID = {47505500-0004-0001-3130-444531303244}
Sysfs path: /sys/bus/vmbus/devices/47505500-0004-0001-3130-444531303244
Rel_ID=74, target_cpu=0
Examples:
>>> assert len(lsvmbus.devices) == 4
>>> assert lsvmbus.devices[0].get('vmbus_id', None) == '18'
>>> assert lsvmbus.devices[0].get('device_id', None) == '47505500-0001-0000-3130-444531303244'
>>> assert lsvmbus.devices[0].get('rel_id', None) == '18'
>>> assert lsvmbus.devices[0].get('sysfs_path', None) == '/sys/bus/vmbus/devices/47505500-0001-0000-3130-444531303244'
>>> assert lsvmbus.devices[0].get('target_cpu', None) == '0'
Attributes:
devices (list): List of ``dict`` for each device. For example::
[
{
'vmbus_id': '18',
'class_id': '44c4f61d-4444-4400-9d52-802e27ede19f',
'type': 'PCI Express pass-through',
'device_id': '47505500-0001-0000-3130-444531303244',
'sysfs_path': '/sys/bus/vmbus/devices/47505500-0001-0000-3130-444531303244',
'rel_id': '18',
'target_cpu': '0'
},
{...}
]
"""
def __init__(self, *args, **kwargs):
deprecated(LsvmBus, "Use the SysVmBusDeviceInfo combiner instead")
super(LsvmBus, self).__init__(*args, **kwargs)
[docs] def parse_content(self, content):
if not content:
raise SkipException('No content.')
self.devices = []
parts = zip(*(iter(content),) * 4)
patrn_vmbusid = re.compile(r"VMBUS ID (\d+)")
patrn_type = re.compile("- (.*)")
patrn_classid = re.compile("Class_ID = {(.*)}")
patrn_deviceid = re.compile("Device_ID = {(.*)}")
patrn_sysfspath = re.compile("Sysfs path: (.*)")
patrn_relid = re.compile(r"Rel_ID=(\d+)")
patrn_targetcpu = re.compile(r"target_cpu=(\d+)")
for part in parts:
self.devices.append(
{
'vmbus_id': patrn_vmbusid.search(part[0]).groups()[0],
'class_id': patrn_classid.search(part[0]).groups()[0],
'type': patrn_type.search(part[0]).groups()[0],
'device_id': patrn_deviceid.search(part[1]).groups()[0],
'sysfs_path': patrn_sysfspath.search(part[2]).groups()[0],
'rel_id': patrn_relid.search(part[3]).groups()[0],
'target_cpu': patrn_targetcpu.search(part[3]).groups()[0],
}
)