# 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 OlvmMigrationOptions(object):
    """
    Reference to cluster-wide configuration of migration of a running virtual machine to another host.
    """

    #: A constant which can be used with the auto_converge property of a OlvmMigrationOptions.
    #: This constant has a value of "FALSE"
    AUTO_CONVERGE_FALSE = "FALSE"

    #: A constant which can be used with the auto_converge property of a OlvmMigrationOptions.
    #: This constant has a value of "INHERIT"
    AUTO_CONVERGE_INHERIT = "INHERIT"

    #: A constant which can be used with the auto_converge property of a OlvmMigrationOptions.
    #: This constant has a value of "TRUE"
    AUTO_CONVERGE_TRUE = "TRUE"

    #: A constant which can be used with the compressed property of a OlvmMigrationOptions.
    #: This constant has a value of "FALSE"
    COMPRESSED_FALSE = "FALSE"

    #: A constant which can be used with the compressed property of a OlvmMigrationOptions.
    #: This constant has a value of "INHERIT"
    COMPRESSED_INHERIT = "INHERIT"

    #: A constant which can be used with the compressed property of a OlvmMigrationOptions.
    #: This constant has a value of "TRUE"
    COMPRESSED_TRUE = "TRUE"

    #: A constant which can be used with the encrypted property of a OlvmMigrationOptions.
    #: This constant has a value of "FALSE"
    ENCRYPTED_FALSE = "FALSE"

    #: A constant which can be used with the encrypted property of a OlvmMigrationOptions.
    #: This constant has a value of "INHERIT"
    ENCRYPTED_INHERIT = "INHERIT"

    #: A constant which can be used with the encrypted property of a OlvmMigrationOptions.
    #: This constant has a value of "TRUE"
    ENCRYPTED_TRUE = "TRUE"

    #: A constant which can be used with the parallel_migrations_policy property of a OlvmMigrationOptions.
    #: This constant has a value of "AUTO"
    PARALLEL_MIGRATIONS_POLICY_AUTO = "AUTO"

    #: A constant which can be used with the parallel_migrations_policy property of a OlvmMigrationOptions.
    #: This constant has a value of "AUTO_PARALLEL"
    PARALLEL_MIGRATIONS_POLICY_AUTO_PARALLEL = "AUTO_PARALLEL"

    #: A constant which can be used with the parallel_migrations_policy property of a OlvmMigrationOptions.
    #: This constant has a value of "CUSTOM"
    PARALLEL_MIGRATIONS_POLICY_CUSTOM = "CUSTOM"

    #: A constant which can be used with the parallel_migrations_policy property of a OlvmMigrationOptions.
    #: This constant has a value of "DISABLED"
    PARALLEL_MIGRATIONS_POLICY_DISABLED = "DISABLED"

    #: A constant which can be used with the parallel_migrations_policy property of a OlvmMigrationOptions.
    #: This constant has a value of "INHERIT"
    PARALLEL_MIGRATIONS_POLICY_INHERIT = "INHERIT"

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

        :param auto_converge:
            The value to assign to the auto_converge property of this OlvmMigrationOptions.
            Allowed values for this property are: "FALSE", "INHERIT", "TRUE"
        :type auto_converge: str

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

        :param compressed:
            The value to assign to the compressed property of this OlvmMigrationOptions.
            Allowed values for this property are: "FALSE", "INHERIT", "TRUE"
        :type compressed: str

        :param custom_parallel_migrations:
            The value to assign to the custom_parallel_migrations property of this OlvmMigrationOptions.
        :type custom_parallel_migrations: int

        :param encrypted:
            The value to assign to the encrypted property of this OlvmMigrationOptions.
            Allowed values for this property are: "FALSE", "INHERIT", "TRUE"
        :type encrypted: str

        :param parallel_migrations_policy:
            The value to assign to the parallel_migrations_policy property of this OlvmMigrationOptions.
            Allowed values for this property are: "AUTO", "AUTO_PARALLEL", "CUSTOM", "DISABLED", "INHERIT"
        :type parallel_migrations_policy: str

        """
        self.swagger_types = {
            'auto_converge': 'str',
            'bandwidth': 'MigrationBandwidth',
            'compressed': 'str',
            'custom_parallel_migrations': 'int',
            'encrypted': 'str',
            'parallel_migrations_policy': 'str'
        }
        self.attribute_map = {
            'auto_converge': 'autoConverge',
            'bandwidth': 'bandwidth',
            'compressed': 'compressed',
            'custom_parallel_migrations': 'customParallelMigrations',
            'encrypted': 'encrypted',
            'parallel_migrations_policy': 'parallelMigrationsPolicy'
        }
        self._auto_converge = None
        self._bandwidth = None
        self._compressed = None
        self._custom_parallel_migrations = None
        self._encrypted = None
        self._parallel_migrations_policy = None

    @property
    def auto_converge(self):
        """
        Gets the auto_converge of this OlvmMigrationOptions.
        Enum representing the boolean value that can be either set, or inherited from a higher level. The inheritance order is virtual machine ??? cluster ??? engine-config.

        Allowed values for this property are: "FALSE", "INHERIT", "TRUE"


        :return: The auto_converge of this OlvmMigrationOptions.
        :rtype: str
        """
        return self._auto_converge

    @auto_converge.setter
    def auto_converge(self, auto_converge):
        """
        Sets the auto_converge of this OlvmMigrationOptions.
        Enum representing the boolean value that can be either set, or inherited from a higher level. The inheritance order is virtual machine ??? cluster ??? engine-config.


        :param auto_converge: The auto_converge of this OlvmMigrationOptions.
        :type: str
        """
        allowed_values = ["FALSE", "INHERIT", "TRUE"]
        if not value_allowed_none_or_none_sentinel(auto_converge, allowed_values):
            raise ValueError(
                f"Invalid value for `auto_converge`, must be None or one of {allowed_values}"
            )
        self._auto_converge = auto_converge

    @property
    def bandwidth(self):
        """
        Gets the bandwidth of this OlvmMigrationOptions.

        :return: The bandwidth of this OlvmMigrationOptions.
        :rtype: oci.cloud_migrations.models.MigrationBandwidth
        """
        return self._bandwidth

    @bandwidth.setter
    def bandwidth(self, bandwidth):
        """
        Sets the bandwidth of this OlvmMigrationOptions.

        :param bandwidth: The bandwidth of this OlvmMigrationOptions.
        :type: oci.cloud_migrations.models.MigrationBandwidth
        """
        self._bandwidth = bandwidth

    @property
    def compressed(self):
        """
        Gets the compressed of this OlvmMigrationOptions.
        Enum representing the boolean value that can be either set, or inherited from a higher level. The inheritance order is virtual machine ??? cluster ??? engine-config.

        Allowed values for this property are: "FALSE", "INHERIT", "TRUE"


        :return: The compressed of this OlvmMigrationOptions.
        :rtype: str
        """
        return self._compressed

    @compressed.setter
    def compressed(self, compressed):
        """
        Sets the compressed of this OlvmMigrationOptions.
        Enum representing the boolean value that can be either set, or inherited from a higher level. The inheritance order is virtual machine ??? cluster ??? engine-config.


        :param compressed: The compressed of this OlvmMigrationOptions.
        :type: str
        """
        allowed_values = ["FALSE", "INHERIT", "TRUE"]
        if not value_allowed_none_or_none_sentinel(compressed, allowed_values):
            raise ValueError(
                f"Invalid value for `compressed`, must be None or one of {allowed_values}"
            )
        self._compressed = compressed

    @property
    def custom_parallel_migrations(self):
        """
        Gets the custom_parallel_migrations of this OlvmMigrationOptions.
        Specifies how many parallel migration connections to use.


        :return: The custom_parallel_migrations of this OlvmMigrationOptions.
        :rtype: int
        """
        return self._custom_parallel_migrations

    @custom_parallel_migrations.setter
    def custom_parallel_migrations(self, custom_parallel_migrations):
        """
        Sets the custom_parallel_migrations of this OlvmMigrationOptions.
        Specifies how many parallel migration connections to use.


        :param custom_parallel_migrations: The custom_parallel_migrations of this OlvmMigrationOptions.
        :type: int
        """
        self._custom_parallel_migrations = custom_parallel_migrations

    @property
    def encrypted(self):
        """
        Gets the encrypted of this OlvmMigrationOptions.
        Enum representing the boolean value that can be either set, or inherited from a higher level. The inheritance order is virtual machine ??? cluster ??? engine-config.

        Allowed values for this property are: "FALSE", "INHERIT", "TRUE"


        :return: The encrypted of this OlvmMigrationOptions.
        :rtype: str
        """
        return self._encrypted

    @encrypted.setter
    def encrypted(self, encrypted):
        """
        Sets the encrypted of this OlvmMigrationOptions.
        Enum representing the boolean value that can be either set, or inherited from a higher level. The inheritance order is virtual machine ??? cluster ??? engine-config.


        :param encrypted: The encrypted of this OlvmMigrationOptions.
        :type: str
        """
        allowed_values = ["FALSE", "INHERIT", "TRUE"]
        if not value_allowed_none_or_none_sentinel(encrypted, allowed_values):
            raise ValueError(
                f"Invalid value for `encrypted`, must be None or one of {allowed_values}"
            )
        self._encrypted = encrypted

    @property
    def parallel_migrations_policy(self):
        """
        Gets the parallel_migrations_policy of this OlvmMigrationOptions.
        Type representing parallel migration connections policy.

        Allowed values for this property are: "AUTO", "AUTO_PARALLEL", "CUSTOM", "DISABLED", "INHERIT"


        :return: The parallel_migrations_policy of this OlvmMigrationOptions.
        :rtype: str
        """
        return self._parallel_migrations_policy

    @parallel_migrations_policy.setter
    def parallel_migrations_policy(self, parallel_migrations_policy):
        """
        Sets the parallel_migrations_policy of this OlvmMigrationOptions.
        Type representing parallel migration connections policy.


        :param parallel_migrations_policy: The parallel_migrations_policy of this OlvmMigrationOptions.
        :type: str
        """
        allowed_values = ["AUTO", "AUTO_PARALLEL", "CUSTOM", "DISABLED", "INHERIT"]
        if not value_allowed_none_or_none_sentinel(parallel_migrations_policy, allowed_values):
            raise ValueError(
                f"Invalid value for `parallel_migrations_policy`, must be None or one of {allowed_values}"
            )
        self._parallel_migrations_policy = parallel_migrations_policy

    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
