Source code for insights.parsers.virt_what

'''
VirtWhat - Command ``virt-what``
================================

Parses the output of the ``virt-what`` command to check if the host is running
in a virtual machine.

Sample input::
    kvm

Examples:
    >>> vw = shared[VirtWhat]
    >>> vw.is_virtual
    True
    >>> vw.is_physical
    False
    >>> vw.generic
    'kvm'
    >>> 'aws' in vw
    False

Note:
    For ``virt-what-1.13-8`` or older on RHEL7, the command fails when running
    without an environment (or very restricted environment), and reports below
    error::

        virt-what: virt-what-cpuid-helper program not found in $PATH

'''
from .. import parser, CommandParser
from insights.specs import Specs

BAREMETAL = 'baremetal'


[docs] @parser(Specs.virt_what) class VirtWhat(CommandParser): """ Class for parsing ``virt-what`` command. Attributes: generic (str): The type of the virtual machine. 'baremetal' if physical machine. errors (list): List of the error information if any error occurs. specifics (list): List of the specific information if the command outputs. """ def __init__(self, *args, **kwargs): self.generic = '' self.errors = [] self.specifics = [] super(VirtWhat, self).__init__(*args, **kwargs) def __contains__(self, name): """bool: Is this ``name`` found in the specific list?""" return name in [self.generic] + self.specifics @property def is_virtual(self): """ bool: Is the host running in a virtual machine? None when something is wrong. """ if not self.errors: return self.generic != BAREMETAL @property def is_physical(self): """ bool: Is the host running in a physical machine? None when something is wrong. """ if not self.errors: return self.generic == BAREMETAL
[docs] def parse_content(self, content): if content: if len(content[0].split()) > 1: self.errors = [line for line in content] else: self.generic = content[0] self.specifics = [line for line in content[1:]] else: self.generic = BAREMETAL