# coding: utf-8
# Copyright (c) 2016, 2026, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.

# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20220919


from oci.util import formatted_flat_dict, NONE_SENTINEL, value_allowed_none_or_none_sentinel  # noqa: F401
from oci.decorators import init_model_state_from_kwargs


@init_model_state_from_kwargs
class OlvmTemplateProperties(object):
    """
    OLVM Template properties.
    """

    #: A constant which can be used with the auto_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "ADJUST"
    AUTO_PINNING_POLICY_ADJUST = "ADJUST"

    #: A constant which can be used with the auto_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "DISABLED"
    AUTO_PINNING_POLICY_DISABLED = "DISABLED"

    #: A constant which can be used with the auto_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "EXISTING"
    AUTO_PINNING_POLICY_EXISTING = "EXISTING"

    #: A constant which can be used with the cpu_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "DEDICATED"
    CPU_PINNING_POLICY_DEDICATED = "DEDICATED"

    #: A constant which can be used with the cpu_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "ISOLATED_THREADS"
    CPU_PINNING_POLICY_ISOLATED_THREADS = "ISOLATED_THREADS"

    #: A constant which can be used with the cpu_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "MANUAL"
    CPU_PINNING_POLICY_MANUAL = "MANUAL"

    #: A constant which can be used with the cpu_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "NONE"
    CPU_PINNING_POLICY_NONE = "NONE"

    #: A constant which can be used with the cpu_pinning_policy property of a OlvmTemplateProperties.
    #: This constant has a value of "RESIZE_AND_PIN_NUMA"
    CPU_PINNING_POLICY_RESIZE_AND_PIN_NUMA = "RESIZE_AND_PIN_NUMA"

    #: A constant which can be used with the status property of a OlvmTemplateProperties.
    #: This constant has a value of "ILLEGAL"
    STATUS_ILLEGAL = "ILLEGAL"

    #: A constant which can be used with the status property of a OlvmTemplateProperties.
    #: This constant has a value of "LOCKED"
    STATUS_LOCKED = "LOCKED"

    #: A constant which can be used with the status property of a OlvmTemplateProperties.
    #: This constant has a value of "OK"
    STATUS_OK = "OK"

    #: A constant which can be used with the storage_error_resume_behavior property of a OlvmTemplateProperties.
    #: This constant has a value of "AUTO_RESUME"
    STORAGE_ERROR_RESUME_BEHAVIOR_AUTO_RESUME = "AUTO_RESUME"

    #: A constant which can be used with the storage_error_resume_behavior property of a OlvmTemplateProperties.
    #: This constant has a value of "KILL"
    STORAGE_ERROR_RESUME_BEHAVIOR_KILL = "KILL"

    #: A constant which can be used with the storage_error_resume_behavior property of a OlvmTemplateProperties.
    #: This constant has a value of "LEAVE_PAUSED"
    STORAGE_ERROR_RESUME_BEHAVIOR_LEAVE_PAUSED = "LEAVE_PAUSED"

    def __init__(self, **kwargs):
        """
        Initializes a new OlvmTemplateProperties object with values from keyword arguments.
        The following keyword arguments are supported (corresponding to the getters/setters of this class):

        :param auto_pinning_policy:
            The value to assign to the auto_pinning_policy property of this OlvmTemplateProperties.
            Allowed values for this property are: "ADJUST", "DISABLED", "EXISTING"
        :type auto_pinning_policy: str

        :param bios:
            The value to assign to the bios property of this OlvmTemplateProperties.
        :type bios: oci.cloud_migrations.models.OlvmBios

        :param comment:
            The value to assign to the comment property of this OlvmTemplateProperties.
        :type comment: str

        :param console:
            The value to assign to the console property of this OlvmTemplateProperties.
        :type console: oci.cloud_migrations.models.OlvmConsole

        :param cpu:
            The value to assign to the cpu property of this OlvmTemplateProperties.
        :type cpu: oci.cloud_migrations.models.OlvmCpu

        :param cpu_pinning_policy:
            The value to assign to the cpu_pinning_policy property of this OlvmTemplateProperties.
            Allowed values for this property are: "DEDICATED", "ISOLATED_THREADS", "MANUAL", "NONE", "RESIZE_AND_PIN_NUMA"
        :type cpu_pinning_policy: str

        :param cpu_shares:
            The value to assign to the cpu_shares property of this OlvmTemplateProperties.
        :type cpu_shares: int

        :param time_created:
            The value to assign to the time_created property of this OlvmTemplateProperties.
        :type time_created: datetime

        :param custom_compatibility_version:
            The value to assign to the custom_compatibility_version property of this OlvmTemplateProperties.
        :type custom_compatibility_version: oci.cloud_migrations.models.OlvmVersion

        :param custom_cpu_model:
            The value to assign to the custom_cpu_model property of this OlvmTemplateProperties.
        :type custom_cpu_model: str

        :param custom_emulated_machine:
            The value to assign to the custom_emulated_machine property of this OlvmTemplateProperties.
        :type custom_emulated_machine: str

        :param custom_properties:
            The value to assign to the custom_properties property of this OlvmTemplateProperties.
        :type custom_properties: list[oci.cloud_migrations.models.OlvmCustomProperty]

        :param is_delete_protected:
            The value to assign to the is_delete_protected property of this OlvmTemplateProperties.
        :type is_delete_protected: bool

        :param description:
            The value to assign to the description property of this OlvmTemplateProperties.
        :type description: str

        :param display:
            The value to assign to the display property of this OlvmTemplateProperties.
        :type display: oci.cloud_migrations.models.OlvmDisplay

        :param domain:
            The value to assign to the domain property of this OlvmTemplateProperties.
        :type domain: oci.cloud_migrations.models.OlvmDomain

        :param high_availability:
            The value to assign to the high_availability property of this OlvmTemplateProperties.
        :type high_availability: oci.cloud_migrations.models.OlvmHighAvailability

        :param initialization:
            The value to assign to the initialization property of this OlvmTemplateProperties.
        :type initialization: oci.cloud_migrations.models.OlvmInitialization

        :param io_threads:
            The value to assign to the io_threads property of this OlvmTemplateProperties.
        :type io_threads: int

        :param large_icon:
            The value to assign to the large_icon property of this OlvmTemplateProperties.
        :type large_icon: oci.cloud_migrations.models.OlvmIcon

        :param storage_domain_lease:
            The value to assign to the storage_domain_lease property of this OlvmTemplateProperties.
        :type storage_domain_lease: oci.cloud_migrations.models.OlvmStorageDomainProperties

        :param memory_in_bytes:
            The value to assign to the memory_in_bytes property of this OlvmTemplateProperties.
        :type memory_in_bytes: int

        :param memory_policy:
            The value to assign to the memory_policy property of this OlvmTemplateProperties.
        :type memory_policy: oci.cloud_migrations.models.OlvmMemoryPolicy

        :param migration_policy:
            The value to assign to the migration_policy property of this OlvmTemplateProperties.
        :type migration_policy: oci.cloud_migrations.models.OlvmMigrationOptions

        :param migration_downtime_in_ms:
            The value to assign to the migration_downtime_in_ms property of this OlvmTemplateProperties.
        :type migration_downtime_in_ms: int

        :param is_multi_queues_enabled:
            The value to assign to the is_multi_queues_enabled property of this OlvmTemplateProperties.
        :type is_multi_queues_enabled: bool

        :param template_name:
            The value to assign to the template_name property of this OlvmTemplateProperties.
        :type template_name: str

        :param origin:
            The value to assign to the origin property of this OlvmTemplateProperties.
        :type origin: str

        :param os:
            The value to assign to the os property of this OlvmTemplateProperties.
        :type os: oci.cloud_migrations.models.OlvmOperatingSystem

        :param placement_policy:
            The value to assign to the placement_policy property of this OlvmTemplateProperties.
        :type placement_policy: oci.cloud_migrations.models.OlvmVmPlacementPolicy

        :param serial_number:
            The value to assign to the serial_number property of this OlvmTemplateProperties.
        :type serial_number: oci.cloud_migrations.models.OlvmSerialNumber

        :param small_icon:
            The value to assign to the small_icon property of this OlvmTemplateProperties.
        :type small_icon: oci.cloud_migrations.models.OlvmIcon

        :param is_soundcard_enabled:
            The value to assign to the is_soundcard_enabled property of this OlvmTemplateProperties.
        :type is_soundcard_enabled: bool

        :param is_start_paused:
            The value to assign to the is_start_paused property of this OlvmTemplateProperties.
        :type is_start_paused: bool

        :param is_stateless:
            The value to assign to the is_stateless property of this OlvmTemplateProperties.
        :type is_stateless: bool

        :param status:
            The value to assign to the status property of this OlvmTemplateProperties.
            Allowed values for this property are: "ILLEGAL", "LOCKED", "OK"
        :type status: str

        :param storage_error_resume_behavior:
            The value to assign to the storage_error_resume_behavior property of this OlvmTemplateProperties.
            Allowed values for this property are: "AUTO_RESUME", "KILL", "LEAVE_PAUSED"
        :type storage_error_resume_behavior: str

        :param timezone:
            The value to assign to the timezone property of this OlvmTemplateProperties.
        :type timezone: str

        :param is_tpm_enabled:
            The value to assign to the is_tpm_enabled property of this OlvmTemplateProperties.
        :type is_tpm_enabled: bool

        :param is_tunnel_migration:
            The value to assign to the is_tunnel_migration property of this OlvmTemplateProperties.
        :type is_tunnel_migration: bool

        :param type:
            The value to assign to the type property of this OlvmTemplateProperties.
        :type type: oci.cloud_migrations.models.OlvmVmType

        :param usb:
            The value to assign to the usb property of this OlvmTemplateProperties.
        :type usb: oci.cloud_migrations.models.OlvmUsb

        :param version:
            The value to assign to the version property of this OlvmTemplateProperties.
        :type version: oci.cloud_migrations.models.OlvmTemplateVersion

        :param is_virtio_scsi_enabled:
            The value to assign to the is_virtio_scsi_enabled property of this OlvmTemplateProperties.
        :type is_virtio_scsi_enabled: bool

        :param virtio_scsi_multi_queues:
            The value to assign to the virtio_scsi_multi_queues property of this OlvmTemplateProperties.
        :type virtio_scsi_multi_queues: int

        :param is_virtio_scsi_multi_queues_enabled:
            The value to assign to the is_virtio_scsi_multi_queues_enabled property of this OlvmTemplateProperties.
        :type is_virtio_scsi_multi_queues_enabled: bool

        :param vm:
            The value to assign to the vm property of this OlvmTemplateProperties.
        :type vm: oci.cloud_migrations.models.OlvmVirtualMachine

        """
        self.swagger_types = {
            'auto_pinning_policy': 'str',
            'bios': 'OlvmBios',
            'comment': 'str',
            'console': 'OlvmConsole',
            'cpu': 'OlvmCpu',
            'cpu_pinning_policy': 'str',
            'cpu_shares': 'int',
            'time_created': 'datetime',
            'custom_compatibility_version': 'OlvmVersion',
            'custom_cpu_model': 'str',
            'custom_emulated_machine': 'str',
            'custom_properties': 'list[OlvmCustomProperty]',
            'is_delete_protected': 'bool',
            'description': 'str',
            'display': 'OlvmDisplay',
            'domain': 'OlvmDomain',
            'high_availability': 'OlvmHighAvailability',
            'initialization': 'OlvmInitialization',
            'io_threads': 'int',
            'large_icon': 'OlvmIcon',
            'storage_domain_lease': 'OlvmStorageDomainProperties',
            'memory_in_bytes': 'int',
            'memory_policy': 'OlvmMemoryPolicy',
            'migration_policy': 'OlvmMigrationOptions',
            'migration_downtime_in_ms': 'int',
            'is_multi_queues_enabled': 'bool',
            'template_name': 'str',
            'origin': 'str',
            'os': 'OlvmOperatingSystem',
            'placement_policy': 'OlvmVmPlacementPolicy',
            'serial_number': 'OlvmSerialNumber',
            'small_icon': 'OlvmIcon',
            'is_soundcard_enabled': 'bool',
            'is_start_paused': 'bool',
            'is_stateless': 'bool',
            'status': 'str',
            'storage_error_resume_behavior': 'str',
            'timezone': 'str',
            'is_tpm_enabled': 'bool',
            'is_tunnel_migration': 'bool',
            'type': 'OlvmVmType',
            'usb': 'OlvmUsb',
            'version': 'OlvmTemplateVersion',
            'is_virtio_scsi_enabled': 'bool',
            'virtio_scsi_multi_queues': 'int',
            'is_virtio_scsi_multi_queues_enabled': 'bool',
            'vm': 'OlvmVirtualMachine'
        }
        self.attribute_map = {
            'auto_pinning_policy': 'autoPinningPolicy',
            'bios': 'bios',
            'comment': 'comment',
            'console': 'console',
            'cpu': 'cpu',
            'cpu_pinning_policy': 'cpuPinningPolicy',
            'cpu_shares': 'cpuShares',
            'time_created': 'timeCreated',
            'custom_compatibility_version': 'customCompatibilityVersion',
            'custom_cpu_model': 'customCpuModel',
            'custom_emulated_machine': 'customEmulatedMachine',
            'custom_properties': 'customProperties',
            'is_delete_protected': 'isDeleteProtected',
            'description': 'description',
            'display': 'display',
            'domain': 'domain',
            'high_availability': 'highAvailability',
            'initialization': 'initialization',
            'io_threads': 'ioThreads',
            'large_icon': 'largeIcon',
            'storage_domain_lease': 'storageDomainLease',
            'memory_in_bytes': 'memoryInBytes',
            'memory_policy': 'memoryPolicy',
            'migration_policy': 'migrationPolicy',
            'migration_downtime_in_ms': 'migrationDowntimeInMs',
            'is_multi_queues_enabled': 'isMultiQueuesEnabled',
            'template_name': 'templateName',
            'origin': 'origin',
            'os': 'os',
            'placement_policy': 'placementPolicy',
            'serial_number': 'serialNumber',
            'small_icon': 'smallIcon',
            'is_soundcard_enabled': 'isSoundcardEnabled',
            'is_start_paused': 'isStartPaused',
            'is_stateless': 'isStateless',
            'status': 'status',
            'storage_error_resume_behavior': 'storageErrorResumeBehavior',
            'timezone': 'timezone',
            'is_tpm_enabled': 'isTpmEnabled',
            'is_tunnel_migration': 'isTunnelMigration',
            'type': 'type',
            'usb': 'usb',
            'version': 'version',
            'is_virtio_scsi_enabled': 'isVirtioScsiEnabled',
            'virtio_scsi_multi_queues': 'virtioScsiMultiQueues',
            'is_virtio_scsi_multi_queues_enabled': 'isVirtioScsiMultiQueuesEnabled',
            'vm': 'vm'
        }
        self._auto_pinning_policy = None
        self._bios = None
        self._comment = None
        self._console = None
        self._cpu = None
        self._cpu_pinning_policy = None
        self._cpu_shares = None
        self._time_created = None
        self._custom_compatibility_version = None
        self._custom_cpu_model = None
        self._custom_emulated_machine = None
        self._custom_properties = None
        self._is_delete_protected = None
        self._description = None
        self._display = None
        self._domain = None
        self._high_availability = None
        self._initialization = None
        self._io_threads = None
        self._large_icon = None
        self._storage_domain_lease = None
        self._memory_in_bytes = None
        self._memory_policy = None
        self._migration_policy = None
        self._migration_downtime_in_ms = None
        self._is_multi_queues_enabled = None
        self._template_name = None
        self._origin = None
        self._os = None
        self._placement_policy = None
        self._serial_number = None
        self._small_icon = None
        self._is_soundcard_enabled = None
        self._is_start_paused = None
        self._is_stateless = None
        self._status = None
        self._storage_error_resume_behavior = None
        self._timezone = None
        self._is_tpm_enabled = None
        self._is_tunnel_migration = None
        self._type = None
        self._usb = None
        self._version = None
        self._is_virtio_scsi_enabled = None
        self._virtio_scsi_multi_queues = None
        self._is_virtio_scsi_multi_queues_enabled = None
        self._vm = None

    @property
    def auto_pinning_policy(self):
        """
        Gets the auto_pinning_policy of this OlvmTemplateProperties.
        Specifies if and how the auto CPU and NUMA configuration is applied.

        Allowed values for this property are: "ADJUST", "DISABLED", "EXISTING"


        :return: The auto_pinning_policy of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._auto_pinning_policy

    @auto_pinning_policy.setter
    def auto_pinning_policy(self, auto_pinning_policy):
        """
        Sets the auto_pinning_policy of this OlvmTemplateProperties.
        Specifies if and how the auto CPU and NUMA configuration is applied.


        :param auto_pinning_policy: The auto_pinning_policy of this OlvmTemplateProperties.
        :type: str
        """
        allowed_values = ["ADJUST", "DISABLED", "EXISTING"]
        if not value_allowed_none_or_none_sentinel(auto_pinning_policy, allowed_values):
            raise ValueError(
                f"Invalid value for `auto_pinning_policy`, must be None or one of {allowed_values}"
            )
        self._auto_pinning_policy = auto_pinning_policy

    @property
    def bios(self):
        """
        Gets the bios of this OlvmTemplateProperties.

        :return: The bios of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmBios
        """
        return self._bios

    @bios.setter
    def bios(self, bios):
        """
        Sets the bios of this OlvmTemplateProperties.

        :param bios: The bios of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmBios
        """
        self._bios = bios

    @property
    def comment(self):
        """
        Gets the comment of this OlvmTemplateProperties.
        Free text containing comments about this object.


        :return: The comment of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._comment

    @comment.setter
    def comment(self, comment):
        """
        Sets the comment of this OlvmTemplateProperties.
        Free text containing comments about this object.


        :param comment: The comment of this OlvmTemplateProperties.
        :type: str
        """
        self._comment = comment

    @property
    def console(self):
        """
        Gets the console of this OlvmTemplateProperties.

        :return: The console of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmConsole
        """
        return self._console

    @console.setter
    def console(self, console):
        """
        Sets the console of this OlvmTemplateProperties.

        :param console: The console of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmConsole
        """
        self._console = console

    @property
    def cpu(self):
        """
        Gets the cpu of this OlvmTemplateProperties.

        :return: The cpu of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmCpu
        """
        return self._cpu

    @cpu.setter
    def cpu(self, cpu):
        """
        Sets the cpu of this OlvmTemplateProperties.

        :param cpu: The cpu of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmCpu
        """
        self._cpu = cpu

    @property
    def cpu_pinning_policy(self):
        """
        Gets the cpu_pinning_policy of this OlvmTemplateProperties.
        Type representing the CPU and NUMA pinning policy.

        Allowed values for this property are: "DEDICATED", "ISOLATED_THREADS", "MANUAL", "NONE", "RESIZE_AND_PIN_NUMA"


        :return: The cpu_pinning_policy of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._cpu_pinning_policy

    @cpu_pinning_policy.setter
    def cpu_pinning_policy(self, cpu_pinning_policy):
        """
        Sets the cpu_pinning_policy of this OlvmTemplateProperties.
        Type representing the CPU and NUMA pinning policy.


        :param cpu_pinning_policy: The cpu_pinning_policy of this OlvmTemplateProperties.
        :type: str
        """
        allowed_values = ["DEDICATED", "ISOLATED_THREADS", "MANUAL", "NONE", "RESIZE_AND_PIN_NUMA"]
        if not value_allowed_none_or_none_sentinel(cpu_pinning_policy, allowed_values):
            raise ValueError(
                f"Invalid value for `cpu_pinning_policy`, must be None or one of {allowed_values}"
            )
        self._cpu_pinning_policy = cpu_pinning_policy

    @property
    def cpu_shares(self):
        """
        Gets the cpu_shares of this OlvmTemplateProperties.
        Number of CPU Shares


        :return: The cpu_shares of this OlvmTemplateProperties.
        :rtype: int
        """
        return self._cpu_shares

    @cpu_shares.setter
    def cpu_shares(self, cpu_shares):
        """
        Sets the cpu_shares of this OlvmTemplateProperties.
        Number of CPU Shares


        :param cpu_shares: The cpu_shares of this OlvmTemplateProperties.
        :type: int
        """
        self._cpu_shares = cpu_shares

    @property
    def time_created(self):
        """
        Gets the time_created of this OlvmTemplateProperties.
        Creation time.


        :return: The time_created of this OlvmTemplateProperties.
        :rtype: datetime
        """
        return self._time_created

    @time_created.setter
    def time_created(self, time_created):
        """
        Sets the time_created of this OlvmTemplateProperties.
        Creation time.


        :param time_created: The time_created of this OlvmTemplateProperties.
        :type: datetime
        """
        self._time_created = time_created

    @property
    def custom_compatibility_version(self):
        """
        Gets the custom_compatibility_version of this OlvmTemplateProperties.

        :return: The custom_compatibility_version of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmVersion
        """
        return self._custom_compatibility_version

    @custom_compatibility_version.setter
    def custom_compatibility_version(self, custom_compatibility_version):
        """
        Sets the custom_compatibility_version of this OlvmTemplateProperties.

        :param custom_compatibility_version: The custom_compatibility_version of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmVersion
        """
        self._custom_compatibility_version = custom_compatibility_version

    @property
    def custom_cpu_model(self):
        """
        Gets the custom_cpu_model of this OlvmTemplateProperties.
        Custom CPU model


        :return: The custom_cpu_model of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._custom_cpu_model

    @custom_cpu_model.setter
    def custom_cpu_model(self, custom_cpu_model):
        """
        Sets the custom_cpu_model of this OlvmTemplateProperties.
        Custom CPU model


        :param custom_cpu_model: The custom_cpu_model of this OlvmTemplateProperties.
        :type: str
        """
        self._custom_cpu_model = custom_cpu_model

    @property
    def custom_emulated_machine(self):
        """
        Gets the custom_emulated_machine of this OlvmTemplateProperties.
        Custom Emulated machine


        :return: The custom_emulated_machine of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._custom_emulated_machine

    @custom_emulated_machine.setter
    def custom_emulated_machine(self, custom_emulated_machine):
        """
        Sets the custom_emulated_machine of this OlvmTemplateProperties.
        Custom Emulated machine


        :param custom_emulated_machine: The custom_emulated_machine of this OlvmTemplateProperties.
        :type: str
        """
        self._custom_emulated_machine = custom_emulated_machine

    @property
    def custom_properties(self):
        """
        Gets the custom_properties of this OlvmTemplateProperties.
        Custom properties applied to the vNIC profile.


        :return: The custom_properties of this OlvmTemplateProperties.
        :rtype: list[oci.cloud_migrations.models.OlvmCustomProperty]
        """
        return self._custom_properties

    @custom_properties.setter
    def custom_properties(self, custom_properties):
        """
        Sets the custom_properties of this OlvmTemplateProperties.
        Custom properties applied to the vNIC profile.


        :param custom_properties: The custom_properties of this OlvmTemplateProperties.
        :type: list[oci.cloud_migrations.models.OlvmCustomProperty]
        """
        self._custom_properties = custom_properties

    @property
    def is_delete_protected(self):
        """
        Gets the is_delete_protected of this OlvmTemplateProperties.
        If true, the virtual machine cannot be deleted.


        :return: The is_delete_protected of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_delete_protected

    @is_delete_protected.setter
    def is_delete_protected(self, is_delete_protected):
        """
        Sets the is_delete_protected of this OlvmTemplateProperties.
        If true, the virtual machine cannot be deleted.


        :param is_delete_protected: The is_delete_protected of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_delete_protected = is_delete_protected

    @property
    def description(self):
        """
        Gets the description of this OlvmTemplateProperties.
        A human-readable description in plain text.


        :return: The description of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """
        Sets the description of this OlvmTemplateProperties.
        A human-readable description in plain text.


        :param description: The description of this OlvmTemplateProperties.
        :type: str
        """
        self._description = description

    @property
    def display(self):
        """
        Gets the display of this OlvmTemplateProperties.

        :return: The display of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmDisplay
        """
        return self._display

    @display.setter
    def display(self, display):
        """
        Sets the display of this OlvmTemplateProperties.

        :param display: The display of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmDisplay
        """
        self._display = display

    @property
    def domain(self):
        """
        Gets the domain of this OlvmTemplateProperties.

        :return: The domain of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmDomain
        """
        return self._domain

    @domain.setter
    def domain(self, domain):
        """
        Sets the domain of this OlvmTemplateProperties.

        :param domain: The domain of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmDomain
        """
        self._domain = domain

    @property
    def high_availability(self):
        """
        Gets the high_availability of this OlvmTemplateProperties.

        :return: The high_availability of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmHighAvailability
        """
        return self._high_availability

    @high_availability.setter
    def high_availability(self, high_availability):
        """
        Sets the high_availability of this OlvmTemplateProperties.

        :param high_availability: The high_availability of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmHighAvailability
        """
        self._high_availability = high_availability

    @property
    def initialization(self):
        """
        Gets the initialization of this OlvmTemplateProperties.

        :return: The initialization of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmInitialization
        """
        return self._initialization

    @initialization.setter
    def initialization(self, initialization):
        """
        Sets the initialization of this OlvmTemplateProperties.

        :param initialization: The initialization of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmInitialization
        """
        self._initialization = initialization

    @property
    def io_threads(self):
        """
        Gets the io_threads of this OlvmTemplateProperties.
        For performance tuning of IO threading.


        :return: The io_threads of this OlvmTemplateProperties.
        :rtype: int
        """
        return self._io_threads

    @io_threads.setter
    def io_threads(self, io_threads):
        """
        Sets the io_threads of this OlvmTemplateProperties.
        For performance tuning of IO threading.


        :param io_threads: The io_threads of this OlvmTemplateProperties.
        :type: int
        """
        self._io_threads = io_threads

    @property
    def large_icon(self):
        """
        Gets the large_icon of this OlvmTemplateProperties.

        :return: The large_icon of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmIcon
        """
        return self._large_icon

    @large_icon.setter
    def large_icon(self, large_icon):
        """
        Sets the large_icon of this OlvmTemplateProperties.

        :param large_icon: The large_icon of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmIcon
        """
        self._large_icon = large_icon

    @property
    def storage_domain_lease(self):
        """
        Gets the storage_domain_lease of this OlvmTemplateProperties.

        :return: The storage_domain_lease of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmStorageDomainProperties
        """
        return self._storage_domain_lease

    @storage_domain_lease.setter
    def storage_domain_lease(self, storage_domain_lease):
        """
        Sets the storage_domain_lease of this OlvmTemplateProperties.

        :param storage_domain_lease: The storage_domain_lease of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmStorageDomainProperties
        """
        self._storage_domain_lease = storage_domain_lease

    @property
    def memory_in_bytes(self):
        """
        Gets the memory_in_bytes of this OlvmTemplateProperties.
        The virtual machine???s memory, in bytes.


        :return: The memory_in_bytes of this OlvmTemplateProperties.
        :rtype: int
        """
        return self._memory_in_bytes

    @memory_in_bytes.setter
    def memory_in_bytes(self, memory_in_bytes):
        """
        Sets the memory_in_bytes of this OlvmTemplateProperties.
        The virtual machine???s memory, in bytes.


        :param memory_in_bytes: The memory_in_bytes of this OlvmTemplateProperties.
        :type: int
        """
        self._memory_in_bytes = memory_in_bytes

    @property
    def memory_policy(self):
        """
        Gets the memory_policy of this OlvmTemplateProperties.

        :return: The memory_policy of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmMemoryPolicy
        """
        return self._memory_policy

    @memory_policy.setter
    def memory_policy(self, memory_policy):
        """
        Sets the memory_policy of this OlvmTemplateProperties.

        :param memory_policy: The memory_policy of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmMemoryPolicy
        """
        self._memory_policy = memory_policy

    @property
    def migration_policy(self):
        """
        Gets the migration_policy of this OlvmTemplateProperties.

        :return: The migration_policy of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmMigrationOptions
        """
        return self._migration_policy

    @migration_policy.setter
    def migration_policy(self, migration_policy):
        """
        Sets the migration_policy of this OlvmTemplateProperties.

        :param migration_policy: The migration_policy of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmMigrationOptions
        """
        self._migration_policy = migration_policy

    @property
    def migration_downtime_in_ms(self):
        """
        Gets the migration_downtime_in_ms of this OlvmTemplateProperties.
        Maximum time the virtual machine can be non responsive during its live migration to another host in ms.


        :return: The migration_downtime_in_ms of this OlvmTemplateProperties.
        :rtype: int
        """
        return self._migration_downtime_in_ms

    @migration_downtime_in_ms.setter
    def migration_downtime_in_ms(self, migration_downtime_in_ms):
        """
        Sets the migration_downtime_in_ms of this OlvmTemplateProperties.
        Maximum time the virtual machine can be non responsive during its live migration to another host in ms.


        :param migration_downtime_in_ms: The migration_downtime_in_ms of this OlvmTemplateProperties.
        :type: int
        """
        self._migration_downtime_in_ms = migration_downtime_in_ms

    @property
    def is_multi_queues_enabled(self):
        """
        Gets the is_multi_queues_enabled of this OlvmTemplateProperties.
        If true, each virtual interface will get the optimal number of queues, depending on the available virtual Cpus.


        :return: The is_multi_queues_enabled of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_multi_queues_enabled

    @is_multi_queues_enabled.setter
    def is_multi_queues_enabled(self, is_multi_queues_enabled):
        """
        Sets the is_multi_queues_enabled of this OlvmTemplateProperties.
        If true, each virtual interface will get the optimal number of queues, depending on the available virtual Cpus.


        :param is_multi_queues_enabled: The is_multi_queues_enabled of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_multi_queues_enabled = is_multi_queues_enabled

    @property
    def template_name(self):
        """
        **[Required]** Gets the template_name of this OlvmTemplateProperties.
        Name of the property.


        :return: The template_name of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._template_name

    @template_name.setter
    def template_name(self, template_name):
        """
        Sets the template_name of this OlvmTemplateProperties.
        Name of the property.


        :param template_name: The template_name of this OlvmTemplateProperties.
        :type: str
        """
        self._template_name = template_name

    @property
    def origin(self):
        """
        Gets the origin of this OlvmTemplateProperties.
        The origin of this virtual machine.


        :return: The origin of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._origin

    @origin.setter
    def origin(self, origin):
        """
        Sets the origin of this OlvmTemplateProperties.
        The origin of this virtual machine.


        :param origin: The origin of this OlvmTemplateProperties.
        :type: str
        """
        self._origin = origin

    @property
    def os(self):
        """
        Gets the os of this OlvmTemplateProperties.

        :return: The os of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmOperatingSystem
        """
        return self._os

    @os.setter
    def os(self, os):
        """
        Sets the os of this OlvmTemplateProperties.

        :param os: The os of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmOperatingSystem
        """
        self._os = os

    @property
    def placement_policy(self):
        """
        Gets the placement_policy of this OlvmTemplateProperties.

        :return: The placement_policy of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmVmPlacementPolicy
        """
        return self._placement_policy

    @placement_policy.setter
    def placement_policy(self, placement_policy):
        """
        Sets the placement_policy of this OlvmTemplateProperties.

        :param placement_policy: The placement_policy of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmVmPlacementPolicy
        """
        self._placement_policy = placement_policy

    @property
    def serial_number(self):
        """
        Gets the serial_number of this OlvmTemplateProperties.

        :return: The serial_number of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmSerialNumber
        """
        return self._serial_number

    @serial_number.setter
    def serial_number(self, serial_number):
        """
        Sets the serial_number of this OlvmTemplateProperties.

        :param serial_number: The serial_number of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmSerialNumber
        """
        self._serial_number = serial_number

    @property
    def small_icon(self):
        """
        Gets the small_icon of this OlvmTemplateProperties.

        :return: The small_icon of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmIcon
        """
        return self._small_icon

    @small_icon.setter
    def small_icon(self, small_icon):
        """
        Sets the small_icon of this OlvmTemplateProperties.

        :param small_icon: The small_icon of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmIcon
        """
        self._small_icon = small_icon

    @property
    def is_soundcard_enabled(self):
        """
        Gets the is_soundcard_enabled of this OlvmTemplateProperties.
        If true, the sound card is added to the virtual machine.


        :return: The is_soundcard_enabled of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_soundcard_enabled

    @is_soundcard_enabled.setter
    def is_soundcard_enabled(self, is_soundcard_enabled):
        """
        Sets the is_soundcard_enabled of this OlvmTemplateProperties.
        If true, the sound card is added to the virtual machine.


        :param is_soundcard_enabled: The is_soundcard_enabled of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_soundcard_enabled = is_soundcard_enabled

    @property
    def is_start_paused(self):
        """
        Gets the is_start_paused of this OlvmTemplateProperties.
        If true, the virtual machine will be initially in 'paused' state after start.


        :return: The is_start_paused of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_start_paused

    @is_start_paused.setter
    def is_start_paused(self, is_start_paused):
        """
        Sets the is_start_paused of this OlvmTemplateProperties.
        If true, the virtual machine will be initially in 'paused' state after start.


        :param is_start_paused: The is_start_paused of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_start_paused = is_start_paused

    @property
    def is_stateless(self):
        """
        Gets the is_stateless of this OlvmTemplateProperties.
        If true, the virtual machine is stateless - it???s state (disks) are rolled-back after shutdown.


        :return: The is_stateless of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_stateless

    @is_stateless.setter
    def is_stateless(self, is_stateless):
        """
        Sets the is_stateless of this OlvmTemplateProperties.
        If true, the virtual machine is stateless - it???s state (disks) are rolled-back after shutdown.


        :param is_stateless: The is_stateless of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_stateless = is_stateless

    @property
    def status(self):
        """
        Gets the status of this OlvmTemplateProperties.
        The status of the template.

        Allowed values for this property are: "ILLEGAL", "LOCKED", "OK"


        :return: The status of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """
        Sets the status of this OlvmTemplateProperties.
        The status of the template.


        :param status: The status of this OlvmTemplateProperties.
        :type: str
        """
        allowed_values = ["ILLEGAL", "LOCKED", "OK"]
        if not value_allowed_none_or_none_sentinel(status, allowed_values):
            raise ValueError(
                f"Invalid value for `status`, must be None or one of {allowed_values}"
            )
        self._status = status

    @property
    def storage_error_resume_behavior(self):
        """
        Gets the storage_error_resume_behavior of this OlvmTemplateProperties.
        Determines how the virtual machine will be resumed after storage error.

        Allowed values for this property are: "AUTO_RESUME", "KILL", "LEAVE_PAUSED"


        :return: The storage_error_resume_behavior of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._storage_error_resume_behavior

    @storage_error_resume_behavior.setter
    def storage_error_resume_behavior(self, storage_error_resume_behavior):
        """
        Sets the storage_error_resume_behavior of this OlvmTemplateProperties.
        Determines how the virtual machine will be resumed after storage error.


        :param storage_error_resume_behavior: The storage_error_resume_behavior of this OlvmTemplateProperties.
        :type: str
        """
        allowed_values = ["AUTO_RESUME", "KILL", "LEAVE_PAUSED"]
        if not value_allowed_none_or_none_sentinel(storage_error_resume_behavior, allowed_values):
            raise ValueError(
                f"Invalid value for `storage_error_resume_behavior`, must be None or one of {allowed_values}"
            )
        self._storage_error_resume_behavior = storage_error_resume_behavior

    @property
    def timezone(self):
        """
        Gets the timezone of this OlvmTemplateProperties.
        Name of time zone.


        :return: The timezone of this OlvmTemplateProperties.
        :rtype: str
        """
        return self._timezone

    @timezone.setter
    def timezone(self, timezone):
        """
        Sets the timezone of this OlvmTemplateProperties.
        Name of time zone.


        :param timezone: The timezone of this OlvmTemplateProperties.
        :type: str
        """
        self._timezone = timezone

    @property
    def is_tpm_enabled(self):
        """
        Gets the is_tpm_enabled of this OlvmTemplateProperties.
        If true, a TPM device is added to the virtual machine.


        :return: The is_tpm_enabled of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_tpm_enabled

    @is_tpm_enabled.setter
    def is_tpm_enabled(self, is_tpm_enabled):
        """
        Sets the is_tpm_enabled of this OlvmTemplateProperties.
        If true, a TPM device is added to the virtual machine.


        :param is_tpm_enabled: The is_tpm_enabled of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_tpm_enabled = is_tpm_enabled

    @property
    def is_tunnel_migration(self):
        """
        Gets the is_tunnel_migration of this OlvmTemplateProperties.
        If true, the network data transfer will be encrypted during virtual machine live migration.


        :return: The is_tunnel_migration of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_tunnel_migration

    @is_tunnel_migration.setter
    def is_tunnel_migration(self, is_tunnel_migration):
        """
        Sets the is_tunnel_migration of this OlvmTemplateProperties.
        If true, the network data transfer will be encrypted during virtual machine live migration.


        :param is_tunnel_migration: The is_tunnel_migration of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_tunnel_migration = is_tunnel_migration

    @property
    def type(self):
        """
        Gets the type of this OlvmTemplateProperties.

        :return: The type of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmVmType
        """
        return self._type

    @type.setter
    def type(self, type):
        """
        Sets the type of this OlvmTemplateProperties.

        :param type: The type of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmVmType
        """
        self._type = type

    @property
    def usb(self):
        """
        Gets the usb of this OlvmTemplateProperties.

        :return: The usb of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmUsb
        """
        return self._usb

    @usb.setter
    def usb(self, usb):
        """
        Sets the usb of this OlvmTemplateProperties.

        :param usb: The usb of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmUsb
        """
        self._usb = usb

    @property
    def version(self):
        """
        Gets the version of this OlvmTemplateProperties.

        :return: The version of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmTemplateVersion
        """
        return self._version

    @version.setter
    def version(self, version):
        """
        Sets the version of this OlvmTemplateProperties.

        :param version: The version of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmTemplateVersion
        """
        self._version = version

    @property
    def is_virtio_scsi_enabled(self):
        """
        Gets the is_virtio_scsi_enabled of this OlvmTemplateProperties.
        Indicates if Virtio SCSI Support is enabled.


        :return: The is_virtio_scsi_enabled of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_virtio_scsi_enabled

    @is_virtio_scsi_enabled.setter
    def is_virtio_scsi_enabled(self, is_virtio_scsi_enabled):
        """
        Sets the is_virtio_scsi_enabled of this OlvmTemplateProperties.
        Indicates if Virtio SCSI Support is enabled.


        :param is_virtio_scsi_enabled: The is_virtio_scsi_enabled of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_virtio_scsi_enabled = is_virtio_scsi_enabled

    @property
    def virtio_scsi_multi_queues(self):
        """
        Gets the virtio_scsi_multi_queues of this OlvmTemplateProperties.
        Number of queues for a Virtio-SCSI contoller this field requires virtioScsiMultiQueuesEnabled to be true see virtioScsiMultiQueuesEnabled for more info


        :return: The virtio_scsi_multi_queues of this OlvmTemplateProperties.
        :rtype: int
        """
        return self._virtio_scsi_multi_queues

    @virtio_scsi_multi_queues.setter
    def virtio_scsi_multi_queues(self, virtio_scsi_multi_queues):
        """
        Sets the virtio_scsi_multi_queues of this OlvmTemplateProperties.
        Number of queues for a Virtio-SCSI contoller this field requires virtioScsiMultiQueuesEnabled to be true see virtioScsiMultiQueuesEnabled for more info


        :param virtio_scsi_multi_queues: The virtio_scsi_multi_queues of this OlvmTemplateProperties.
        :type: int
        """
        self._virtio_scsi_multi_queues = virtio_scsi_multi_queues

    @property
    def is_virtio_scsi_multi_queues_enabled(self):
        """
        Gets the is_virtio_scsi_multi_queues_enabled of this OlvmTemplateProperties.
        If true, the Virtio-SCSI devices will obtain a number of multiple queues depending on the available virtual Cpus and disks, or according to the specified virtioScsiMultiQueues


        :return: The is_virtio_scsi_multi_queues_enabled of this OlvmTemplateProperties.
        :rtype: bool
        """
        return self._is_virtio_scsi_multi_queues_enabled

    @is_virtio_scsi_multi_queues_enabled.setter
    def is_virtio_scsi_multi_queues_enabled(self, is_virtio_scsi_multi_queues_enabled):
        """
        Sets the is_virtio_scsi_multi_queues_enabled of this OlvmTemplateProperties.
        If true, the Virtio-SCSI devices will obtain a number of multiple queues depending on the available virtual Cpus and disks, or according to the specified virtioScsiMultiQueues


        :param is_virtio_scsi_multi_queues_enabled: The is_virtio_scsi_multi_queues_enabled of this OlvmTemplateProperties.
        :type: bool
        """
        self._is_virtio_scsi_multi_queues_enabled = is_virtio_scsi_multi_queues_enabled

    @property
    def vm(self):
        """
        Gets the vm of this OlvmTemplateProperties.

        :return: The vm of this OlvmTemplateProperties.
        :rtype: oci.cloud_migrations.models.OlvmVirtualMachine
        """
        return self._vm

    @vm.setter
    def vm(self, vm):
        """
        Sets the vm of this OlvmTemplateProperties.

        :param vm: The vm of this OlvmTemplateProperties.
        :type: oci.cloud_migrations.models.OlvmVirtualMachine
        """
        self._vm = vm

    def __repr__(self):
        return formatted_flat_dict(self)

    def __eq__(self, other):
        if other is None:
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not self == other
