# coding: utf-8

"""
    KubeVirt API

    This is KubeVirt API an add-on for Kubernetes.  # noqa: E501

    OpenAPI spec version: 1.0.0
    Contact: kubevirt-dev@googlegroups.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from kubevirt.configuration import Configuration


class V1VirtualMachineInstanceStatus(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'vsockcid': 'int',
        'active_pods': 'dict(str, str)',
        'changed_block_tracking': 'V1ChangedBlockTrackingStatus',
        'conditions': 'list[V1VirtualMachineInstanceCondition]',
        'current_cpu_topology': 'V1CPUTopology',
        'device_status': 'V1DeviceStatus',
        'evacuation_node_name': 'str',
        'fs_freeze_status': 'str',
        'guest_os_info': 'V1VirtualMachineInstanceGuestOSInfo',
        'interfaces': 'list[V1VirtualMachineInstanceNetworkInterface]',
        'kernel_boot_status': 'V1KernelBootStatus',
        'launcher_container_image_version': 'str',
        'machine': 'V1Machine',
        'memory': 'V1MemoryStatus',
        'migrated_volumes': 'list[V1StorageMigratedVolumeInfo]',
        'migration_method': 'str',
        'migration_state': 'V1VirtualMachineInstanceMigrationState',
        'migration_transport': 'str',
        'node_name': 'str',
        'phase': 'str',
        'phase_transition_timestamps': 'list[V1VirtualMachineInstancePhaseTransitionTimestamp]',
        'qos_class': 'str',
        'reason': 'str',
        'runtime_user': 'int',
        'selinux_context': 'str',
        'topology_hints': 'V1TopologyHints',
        'virtual_machine_revision_name': 'str',
        'volume_status': 'list[V1VolumeStatus]'
    }

    attribute_map = {
        'vsockcid': 'VSOCKCID',
        'active_pods': 'activePods',
        'changed_block_tracking': 'changedBlockTracking',
        'conditions': 'conditions',
        'current_cpu_topology': 'currentCPUTopology',
        'device_status': 'deviceStatus',
        'evacuation_node_name': 'evacuationNodeName',
        'fs_freeze_status': 'fsFreezeStatus',
        'guest_os_info': 'guestOSInfo',
        'interfaces': 'interfaces',
        'kernel_boot_status': 'kernelBootStatus',
        'launcher_container_image_version': 'launcherContainerImageVersion',
        'machine': 'machine',
        'memory': 'memory',
        'migrated_volumes': 'migratedVolumes',
        'migration_method': 'migrationMethod',
        'migration_state': 'migrationState',
        'migration_transport': 'migrationTransport',
        'node_name': 'nodeName',
        'phase': 'phase',
        'phase_transition_timestamps': 'phaseTransitionTimestamps',
        'qos_class': 'qosClass',
        'reason': 'reason',
        'runtime_user': 'runtimeUser',
        'selinux_context': 'selinuxContext',
        'topology_hints': 'topologyHints',
        'virtual_machine_revision_name': 'virtualMachineRevisionName',
        'volume_status': 'volumeStatus'
    }

    def __init__(self, vsockcid=None, active_pods=None, changed_block_tracking=None, conditions=None, current_cpu_topology=None, device_status=None, evacuation_node_name=None, fs_freeze_status=None, guest_os_info=None, interfaces=None, kernel_boot_status=None, launcher_container_image_version=None, machine=None, memory=None, migrated_volumes=None, migration_method=None, migration_state=None, migration_transport=None, node_name=None, phase=None, phase_transition_timestamps=None, qos_class=None, reason=None, runtime_user=0, selinux_context=None, topology_hints=None, virtual_machine_revision_name=None, volume_status=None, _configuration=None):  # noqa: E501
        """V1VirtualMachineInstanceStatus - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._vsockcid = None
        self._active_pods = None
        self._changed_block_tracking = None
        self._conditions = None
        self._current_cpu_topology = None
        self._device_status = None
        self._evacuation_node_name = None
        self._fs_freeze_status = None
        self._guest_os_info = None
        self._interfaces = None
        self._kernel_boot_status = None
        self._launcher_container_image_version = None
        self._machine = None
        self._memory = None
        self._migrated_volumes = None
        self._migration_method = None
        self._migration_state = None
        self._migration_transport = None
        self._node_name = None
        self._phase = None
        self._phase_transition_timestamps = None
        self._qos_class = None
        self._reason = None
        self._runtime_user = None
        self._selinux_context = None
        self._topology_hints = None
        self._virtual_machine_revision_name = None
        self._volume_status = None
        self.discriminator = None

        if vsockcid is not None:
            self.vsockcid = vsockcid
        if active_pods is not None:
            self.active_pods = active_pods
        if changed_block_tracking is not None:
            self.changed_block_tracking = changed_block_tracking
        if conditions is not None:
            self.conditions = conditions
        if current_cpu_topology is not None:
            self.current_cpu_topology = current_cpu_topology
        if device_status is not None:
            self.device_status = device_status
        if evacuation_node_name is not None:
            self.evacuation_node_name = evacuation_node_name
        if fs_freeze_status is not None:
            self.fs_freeze_status = fs_freeze_status
        if guest_os_info is not None:
            self.guest_os_info = guest_os_info
        if interfaces is not None:
            self.interfaces = interfaces
        if kernel_boot_status is not None:
            self.kernel_boot_status = kernel_boot_status
        if launcher_container_image_version is not None:
            self.launcher_container_image_version = launcher_container_image_version
        if machine is not None:
            self.machine = machine
        if memory is not None:
            self.memory = memory
        if migrated_volumes is not None:
            self.migrated_volumes = migrated_volumes
        if migration_method is not None:
            self.migration_method = migration_method
        if migration_state is not None:
            self.migration_state = migration_state
        if migration_transport is not None:
            self.migration_transport = migration_transport
        if node_name is not None:
            self.node_name = node_name
        if phase is not None:
            self.phase = phase
        if phase_transition_timestamps is not None:
            self.phase_transition_timestamps = phase_transition_timestamps
        if qos_class is not None:
            self.qos_class = qos_class
        if reason is not None:
            self.reason = reason
        if runtime_user is not None:
            self.runtime_user = runtime_user
        if selinux_context is not None:
            self.selinux_context = selinux_context
        if topology_hints is not None:
            self.topology_hints = topology_hints
        if virtual_machine_revision_name is not None:
            self.virtual_machine_revision_name = virtual_machine_revision_name
        if volume_status is not None:
            self.volume_status = volume_status

    @property
    def vsockcid(self):
        """Gets the vsockcid of this V1VirtualMachineInstanceStatus.  # noqa: E501

        VSOCKCID is used to track the allocated VSOCK CID in the VM.  # noqa: E501

        :return: The vsockcid of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: int
        """
        return self._vsockcid

    @vsockcid.setter
    def vsockcid(self, vsockcid):
        """Sets the vsockcid of this V1VirtualMachineInstanceStatus.

        VSOCKCID is used to track the allocated VSOCK CID in the VM.  # noqa: E501

        :param vsockcid: The vsockcid of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: int
        """

        self._vsockcid = vsockcid

    @property
    def active_pods(self):
        """Gets the active_pods of this V1VirtualMachineInstanceStatus.  # noqa: E501

        ActivePods is a mapping of pod UID to node name. It is possible for multiple pods to be running for a single VMI during migration.  # noqa: E501

        :return: The active_pods of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._active_pods

    @active_pods.setter
    def active_pods(self, active_pods):
        """Sets the active_pods of this V1VirtualMachineInstanceStatus.

        ActivePods is a mapping of pod UID to node name. It is possible for multiple pods to be running for a single VMI during migration.  # noqa: E501

        :param active_pods: The active_pods of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: dict(str, str)
        """

        self._active_pods = active_pods

    @property
    def changed_block_tracking(self):
        """Gets the changed_block_tracking of this V1VirtualMachineInstanceStatus.  # noqa: E501

        ChangedBlockTracking represents the status of the changedBlockTracking  # noqa: E501

        :return: The changed_block_tracking of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1ChangedBlockTrackingStatus
        """
        return self._changed_block_tracking

    @changed_block_tracking.setter
    def changed_block_tracking(self, changed_block_tracking):
        """Sets the changed_block_tracking of this V1VirtualMachineInstanceStatus.

        ChangedBlockTracking represents the status of the changedBlockTracking  # noqa: E501

        :param changed_block_tracking: The changed_block_tracking of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1ChangedBlockTrackingStatus
        """

        self._changed_block_tracking = changed_block_tracking

    @property
    def conditions(self):
        """Gets the conditions of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Conditions are specific points in VirtualMachineInstance's pod runtime.  # noqa: E501

        :return: The conditions of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: list[V1VirtualMachineInstanceCondition]
        """
        return self._conditions

    @conditions.setter
    def conditions(self, conditions):
        """Sets the conditions of this V1VirtualMachineInstanceStatus.

        Conditions are specific points in VirtualMachineInstance's pod runtime.  # noqa: E501

        :param conditions: The conditions of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: list[V1VirtualMachineInstanceCondition]
        """

        self._conditions = conditions

    @property
    def current_cpu_topology(self):
        """Gets the current_cpu_topology of this V1VirtualMachineInstanceStatus.  # noqa: E501

        CurrentCPUTopology specifies the current CPU topology used by the VM workload. Current topology may differ from the desired topology in the spec while CPU hotplug takes place.  # noqa: E501

        :return: The current_cpu_topology of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1CPUTopology
        """
        return self._current_cpu_topology

    @current_cpu_topology.setter
    def current_cpu_topology(self, current_cpu_topology):
        """Sets the current_cpu_topology of this V1VirtualMachineInstanceStatus.

        CurrentCPUTopology specifies the current CPU topology used by the VM workload. Current topology may differ from the desired topology in the spec while CPU hotplug takes place.  # noqa: E501

        :param current_cpu_topology: The current_cpu_topology of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1CPUTopology
        """

        self._current_cpu_topology = current_cpu_topology

    @property
    def device_status(self):
        """Gets the device_status of this V1VirtualMachineInstanceStatus.  # noqa: E501

        DeviceStatus reflects the state of devices requested in spec.domain.devices. This is an optional field available only when DRA feature gate is enabled This field will only be populated if one of the feature-gates GPUsWithDRA or HostDevicesWithDRA is enabled. This feature is in alpha.  # noqa: E501

        :return: The device_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1DeviceStatus
        """
        return self._device_status

    @device_status.setter
    def device_status(self, device_status):
        """Sets the device_status of this V1VirtualMachineInstanceStatus.

        DeviceStatus reflects the state of devices requested in spec.domain.devices. This is an optional field available only when DRA feature gate is enabled This field will only be populated if one of the feature-gates GPUsWithDRA or HostDevicesWithDRA is enabled. This feature is in alpha.  # noqa: E501

        :param device_status: The device_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1DeviceStatus
        """

        self._device_status = device_status

    @property
    def evacuation_node_name(self):
        """Gets the evacuation_node_name of this V1VirtualMachineInstanceStatus.  # noqa: E501

        EvacuationNodeName is used to track the eviction process of a VMI. It stores the name of the node that we want to evacuate. It is meant to be used by KubeVirt core components only and can't be set or modified by users.  # noqa: E501

        :return: The evacuation_node_name of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._evacuation_node_name

    @evacuation_node_name.setter
    def evacuation_node_name(self, evacuation_node_name):
        """Sets the evacuation_node_name of this V1VirtualMachineInstanceStatus.

        EvacuationNodeName is used to track the eviction process of a VMI. It stores the name of the node that we want to evacuate. It is meant to be used by KubeVirt core components only and can't be set or modified by users.  # noqa: E501

        :param evacuation_node_name: The evacuation_node_name of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._evacuation_node_name = evacuation_node_name

    @property
    def fs_freeze_status(self):
        """Gets the fs_freeze_status of this V1VirtualMachineInstanceStatus.  # noqa: E501

        FSFreezeStatus indicates whether a freeze operation was requested for the guest filesystem. It will be set to \"frozen\" if the request was made, or unset otherwise. This does not reflect the actual state of the guest filesystem.  # noqa: E501

        :return: The fs_freeze_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._fs_freeze_status

    @fs_freeze_status.setter
    def fs_freeze_status(self, fs_freeze_status):
        """Sets the fs_freeze_status of this V1VirtualMachineInstanceStatus.

        FSFreezeStatus indicates whether a freeze operation was requested for the guest filesystem. It will be set to \"frozen\" if the request was made, or unset otherwise. This does not reflect the actual state of the guest filesystem.  # noqa: E501

        :param fs_freeze_status: The fs_freeze_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._fs_freeze_status = fs_freeze_status

    @property
    def guest_os_info(self):
        """Gets the guest_os_info of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Guest OS Information  # noqa: E501

        :return: The guest_os_info of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1VirtualMachineInstanceGuestOSInfo
        """
        return self._guest_os_info

    @guest_os_info.setter
    def guest_os_info(self, guest_os_info):
        """Sets the guest_os_info of this V1VirtualMachineInstanceStatus.

        Guest OS Information  # noqa: E501

        :param guest_os_info: The guest_os_info of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1VirtualMachineInstanceGuestOSInfo
        """

        self._guest_os_info = guest_os_info

    @property
    def interfaces(self):
        """Gets the interfaces of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Interfaces represent the details of available network interfaces.  # noqa: E501

        :return: The interfaces of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: list[V1VirtualMachineInstanceNetworkInterface]
        """
        return self._interfaces

    @interfaces.setter
    def interfaces(self, interfaces):
        """Sets the interfaces of this V1VirtualMachineInstanceStatus.

        Interfaces represent the details of available network interfaces.  # noqa: E501

        :param interfaces: The interfaces of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: list[V1VirtualMachineInstanceNetworkInterface]
        """

        self._interfaces = interfaces

    @property
    def kernel_boot_status(self):
        """Gets the kernel_boot_status of this V1VirtualMachineInstanceStatus.  # noqa: E501

        KernelBootStatus contains info about the kernelBootContainer  # noqa: E501

        :return: The kernel_boot_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1KernelBootStatus
        """
        return self._kernel_boot_status

    @kernel_boot_status.setter
    def kernel_boot_status(self, kernel_boot_status):
        """Sets the kernel_boot_status of this V1VirtualMachineInstanceStatus.

        KernelBootStatus contains info about the kernelBootContainer  # noqa: E501

        :param kernel_boot_status: The kernel_boot_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1KernelBootStatus
        """

        self._kernel_boot_status = kernel_boot_status

    @property
    def launcher_container_image_version(self):
        """Gets the launcher_container_image_version of this V1VirtualMachineInstanceStatus.  # noqa: E501

        LauncherContainerImageVersion indicates what container image is currently active for the vmi.  # noqa: E501

        :return: The launcher_container_image_version of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._launcher_container_image_version

    @launcher_container_image_version.setter
    def launcher_container_image_version(self, launcher_container_image_version):
        """Sets the launcher_container_image_version of this V1VirtualMachineInstanceStatus.

        LauncherContainerImageVersion indicates what container image is currently active for the vmi.  # noqa: E501

        :param launcher_container_image_version: The launcher_container_image_version of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._launcher_container_image_version = launcher_container_image_version

    @property
    def machine(self):
        """Gets the machine of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Machine shows the final resulting qemu machine type. This can be different than the machine type selected in the spec, due to qemus machine type alias mechanism.  # noqa: E501

        :return: The machine of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1Machine
        """
        return self._machine

    @machine.setter
    def machine(self, machine):
        """Sets the machine of this V1VirtualMachineInstanceStatus.

        Machine shows the final resulting qemu machine type. This can be different than the machine type selected in the spec, due to qemus machine type alias mechanism.  # noqa: E501

        :param machine: The machine of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1Machine
        """

        self._machine = machine

    @property
    def memory(self):
        """Gets the memory of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Memory shows various informations about the VirtualMachine memory.  # noqa: E501

        :return: The memory of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1MemoryStatus
        """
        return self._memory

    @memory.setter
    def memory(self, memory):
        """Sets the memory of this V1VirtualMachineInstanceStatus.

        Memory shows various informations about the VirtualMachine memory.  # noqa: E501

        :param memory: The memory of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1MemoryStatus
        """

        self._memory = memory

    @property
    def migrated_volumes(self):
        """Gets the migrated_volumes of this V1VirtualMachineInstanceStatus.  # noqa: E501

        MigratedVolumes lists the source and destination volumes during the volume migration  # noqa: E501

        :return: The migrated_volumes of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: list[V1StorageMigratedVolumeInfo]
        """
        return self._migrated_volumes

    @migrated_volumes.setter
    def migrated_volumes(self, migrated_volumes):
        """Sets the migrated_volumes of this V1VirtualMachineInstanceStatus.

        MigratedVolumes lists the source and destination volumes during the volume migration  # noqa: E501

        :param migrated_volumes: The migrated_volumes of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: list[V1StorageMigratedVolumeInfo]
        """

        self._migrated_volumes = migrated_volumes

    @property
    def migration_method(self):
        """Gets the migration_method of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Represents the method using which the vmi can be migrated: live migration or block migration  # noqa: E501

        :return: The migration_method of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._migration_method

    @migration_method.setter
    def migration_method(self, migration_method):
        """Sets the migration_method of this V1VirtualMachineInstanceStatus.

        Represents the method using which the vmi can be migrated: live migration or block migration  # noqa: E501

        :param migration_method: The migration_method of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._migration_method = migration_method

    @property
    def migration_state(self):
        """Gets the migration_state of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Represents the status of a live migration  # noqa: E501

        :return: The migration_state of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1VirtualMachineInstanceMigrationState
        """
        return self._migration_state

    @migration_state.setter
    def migration_state(self, migration_state):
        """Sets the migration_state of this V1VirtualMachineInstanceStatus.

        Represents the status of a live migration  # noqa: E501

        :param migration_state: The migration_state of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1VirtualMachineInstanceMigrationState
        """

        self._migration_state = migration_state

    @property
    def migration_transport(self):
        """Gets the migration_transport of this V1VirtualMachineInstanceStatus.  # noqa: E501

        This represents the migration transport  # noqa: E501

        :return: The migration_transport of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._migration_transport

    @migration_transport.setter
    def migration_transport(self, migration_transport):
        """Sets the migration_transport of this V1VirtualMachineInstanceStatus.

        This represents the migration transport  # noqa: E501

        :param migration_transport: The migration_transport of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._migration_transport = migration_transport

    @property
    def node_name(self):
        """Gets the node_name of this V1VirtualMachineInstanceStatus.  # noqa: E501

        NodeName is the name where the VirtualMachineInstance is currently running.  # noqa: E501

        :return: The node_name of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._node_name

    @node_name.setter
    def node_name(self, node_name):
        """Sets the node_name of this V1VirtualMachineInstanceStatus.

        NodeName is the name where the VirtualMachineInstance is currently running.  # noqa: E501

        :param node_name: The node_name of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._node_name = node_name

    @property
    def phase(self):
        """Gets the phase of this V1VirtualMachineInstanceStatus.  # noqa: E501

        Phase is the status of the VirtualMachineInstance in kubernetes world. It is not the VirtualMachineInstance status, but partially correlates to it.  # noqa: E501

        :return: The phase of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._phase

    @phase.setter
    def phase(self, phase):
        """Sets the phase of this V1VirtualMachineInstanceStatus.

        Phase is the status of the VirtualMachineInstance in kubernetes world. It is not the VirtualMachineInstance status, but partially correlates to it.  # noqa: E501

        :param phase: The phase of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._phase = phase

    @property
    def phase_transition_timestamps(self):
        """Gets the phase_transition_timestamps of this V1VirtualMachineInstanceStatus.  # noqa: E501

        PhaseTransitionTimestamp is the timestamp of when the last phase change occurred  # noqa: E501

        :return: The phase_transition_timestamps of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: list[V1VirtualMachineInstancePhaseTransitionTimestamp]
        """
        return self._phase_transition_timestamps

    @phase_transition_timestamps.setter
    def phase_transition_timestamps(self, phase_transition_timestamps):
        """Sets the phase_transition_timestamps of this V1VirtualMachineInstanceStatus.

        PhaseTransitionTimestamp is the timestamp of when the last phase change occurred  # noqa: E501

        :param phase_transition_timestamps: The phase_transition_timestamps of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: list[V1VirtualMachineInstancePhaseTransitionTimestamp]
        """

        self._phase_transition_timestamps = phase_transition_timestamps

    @property
    def qos_class(self):
        """Gets the qos_class of this V1VirtualMachineInstanceStatus.  # noqa: E501

        The Quality of Service (QOS) classification assigned to the virtual machine instance based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md  Possible enum values:  - `\"BestEffort\"` is the BestEffort qos class.  - `\"Burstable\"` is the Burstable qos class.  - `\"Guaranteed\"` is the Guaranteed qos class.  # noqa: E501

        :return: The qos_class of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._qos_class

    @qos_class.setter
    def qos_class(self, qos_class):
        """Sets the qos_class of this V1VirtualMachineInstanceStatus.

        The Quality of Service (QOS) classification assigned to the virtual machine instance based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md  Possible enum values:  - `\"BestEffort\"` is the BestEffort qos class.  - `\"Burstable\"` is the Burstable qos class.  - `\"Guaranteed\"` is the Guaranteed qos class.  # noqa: E501

        :param qos_class: The qos_class of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """
        allowed_values = ["BestEffort", "Burstable", "Guaranteed"]  # noqa: E501
        if (self._configuration.client_side_validation and
                qos_class not in allowed_values):
            raise ValueError(
                "Invalid value for `qos_class` ({0}), must be one of {1}"  # noqa: E501
                .format(qos_class, allowed_values)
            )

        self._qos_class = qos_class

    @property
    def reason(self):
        """Gets the reason of this V1VirtualMachineInstanceStatus.  # noqa: E501

        A brief CamelCase message indicating details about why the VMI is in this state. e.g. 'NodeUnresponsive'  # noqa: E501

        :return: The reason of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._reason

    @reason.setter
    def reason(self, reason):
        """Sets the reason of this V1VirtualMachineInstanceStatus.

        A brief CamelCase message indicating details about why the VMI is in this state. e.g. 'NodeUnresponsive'  # noqa: E501

        :param reason: The reason of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._reason = reason

    @property
    def runtime_user(self):
        """Gets the runtime_user of this V1VirtualMachineInstanceStatus.  # noqa: E501

        RuntimeUser is used to determine what user will be used in launcher  # noqa: E501

        :return: The runtime_user of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: int
        """
        return self._runtime_user

    @runtime_user.setter
    def runtime_user(self, runtime_user):
        """Sets the runtime_user of this V1VirtualMachineInstanceStatus.

        RuntimeUser is used to determine what user will be used in launcher  # noqa: E501

        :param runtime_user: The runtime_user of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: int
        """

        self._runtime_user = runtime_user

    @property
    def selinux_context(self):
        """Gets the selinux_context of this V1VirtualMachineInstanceStatus.  # noqa: E501

        SELinuxContext is the actual SELinux context of the virt-launcher pod  # noqa: E501

        :return: The selinux_context of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._selinux_context

    @selinux_context.setter
    def selinux_context(self, selinux_context):
        """Sets the selinux_context of this V1VirtualMachineInstanceStatus.

        SELinuxContext is the actual SELinux context of the virt-launcher pod  # noqa: E501

        :param selinux_context: The selinux_context of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._selinux_context = selinux_context

    @property
    def topology_hints(self):
        """Gets the topology_hints of this V1VirtualMachineInstanceStatus.  # noqa: E501


        :return: The topology_hints of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: V1TopologyHints
        """
        return self._topology_hints

    @topology_hints.setter
    def topology_hints(self, topology_hints):
        """Sets the topology_hints of this V1VirtualMachineInstanceStatus.


        :param topology_hints: The topology_hints of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: V1TopologyHints
        """

        self._topology_hints = topology_hints

    @property
    def virtual_machine_revision_name(self):
        """Gets the virtual_machine_revision_name of this V1VirtualMachineInstanceStatus.  # noqa: E501

        VirtualMachineRevisionName is used to get the vm revision of the vmi when doing an online vm snapshot  # noqa: E501

        :return: The virtual_machine_revision_name of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: str
        """
        return self._virtual_machine_revision_name

    @virtual_machine_revision_name.setter
    def virtual_machine_revision_name(self, virtual_machine_revision_name):
        """Sets the virtual_machine_revision_name of this V1VirtualMachineInstanceStatus.

        VirtualMachineRevisionName is used to get the vm revision of the vmi when doing an online vm snapshot  # noqa: E501

        :param virtual_machine_revision_name: The virtual_machine_revision_name of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: str
        """

        self._virtual_machine_revision_name = virtual_machine_revision_name

    @property
    def volume_status(self):
        """Gets the volume_status of this V1VirtualMachineInstanceStatus.  # noqa: E501

        VolumeStatus contains the statuses of all the volumes  # noqa: E501

        :return: The volume_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :rtype: list[V1VolumeStatus]
        """
        return self._volume_status

    @volume_status.setter
    def volume_status(self, volume_status):
        """Sets the volume_status of this V1VirtualMachineInstanceStatus.

        VolumeStatus contains the statuses of all the volumes  # noqa: E501

        :param volume_status: The volume_status of this V1VirtualMachineInstanceStatus.  # noqa: E501
        :type: list[V1VolumeStatus]
        """

        self._volume_status = volume_status

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(V1VirtualMachineInstanceStatus, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, V1VirtualMachineInstanceStatus):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, V1VirtualMachineInstanceStatus):
            return True

        return self.to_dict() != other.to_dict()
