# 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: 20250101


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 DistributedDbVmCluster(object):
    """
    The Exadata VM cluster for Distributed Database Resource
    """

    #: A constant which can be used with the license_model property of a DistributedDbVmCluster.
    #: This constant has a value of "LICENSE_INCLUDED"
    LICENSE_MODEL_LICENSE_INCLUDED = "LICENSE_INCLUDED"

    #: A constant which can be used with the license_model property of a DistributedDbVmCluster.
    #: This constant has a value of "BRING_YOUR_OWN_LICENSE"
    LICENSE_MODEL_BRING_YOUR_OWN_LICENSE = "BRING_YOUR_OWN_LICENSE"

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

        :param vm_cluster_id:
            The value to assign to the vm_cluster_id property of this DistributedDbVmCluster.
        :type vm_cluster_id: str

        :param display_name:
            The value to assign to the display_name property of this DistributedDbVmCluster.
        :type display_name: str

        :param subnet_id:
            The value to assign to the subnet_id property of this DistributedDbVmCluster.
        :type subnet_id: str

        :param backup_subnet_id:
            The value to assign to the backup_subnet_id property of this DistributedDbVmCluster.
        :type backup_subnet_id: str

        :param enabled_e_cpu_count:
            The value to assign to the enabled_e_cpu_count property of this DistributedDbVmCluster.
        :type enabled_e_cpu_count: int

        :param total_e_cpu_count:
            The value to assign to the total_e_cpu_count property of this DistributedDbVmCluster.
        :type total_e_cpu_count: int

        :param vm_file_system_storage_size:
            The value to assign to the vm_file_system_storage_size property of this DistributedDbVmCluster.
        :type vm_file_system_storage_size: int

        :param ssh_public_keys:
            The value to assign to the ssh_public_keys property of this DistributedDbVmCluster.
        :type ssh_public_keys: list[str]

        :param license_model:
            The value to assign to the license_model property of this DistributedDbVmCluster.
            Allowed values for this property are: "LICENSE_INCLUDED", "BRING_YOUR_OWN_LICENSE", 'UNKNOWN_ENUM_VALUE'.
            Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.
        :type license_model: str

        :param domain:
            The value to assign to the domain property of this DistributedDbVmCluster.
        :type domain: str

        :param private_zone_id:
            The value to assign to the private_zone_id property of this DistributedDbVmCluster.
        :type private_zone_id: str

        :param nsg_ids:
            The value to assign to the nsg_ids property of this DistributedDbVmCluster.
        :type nsg_ids: list[str]

        :param backup_network_nsg_ids:
            The value to assign to the backup_network_nsg_ids property of this DistributedDbVmCluster.
        :type backup_network_nsg_ids: list[str]

        :param is_diagnostics_events_enabled:
            The value to assign to the is_diagnostics_events_enabled property of this DistributedDbVmCluster.
        :type is_diagnostics_events_enabled: bool

        :param is_health_monitoring_enabled:
            The value to assign to the is_health_monitoring_enabled property of this DistributedDbVmCluster.
        :type is_health_monitoring_enabled: bool

        :param is_incident_logs_enabled:
            The value to assign to the is_incident_logs_enabled property of this DistributedDbVmCluster.
        :type is_incident_logs_enabled: bool

        """
        self.swagger_types = {
            'vm_cluster_id': 'str',
            'display_name': 'str',
            'subnet_id': 'str',
            'backup_subnet_id': 'str',
            'enabled_e_cpu_count': 'int',
            'total_e_cpu_count': 'int',
            'vm_file_system_storage_size': 'int',
            'ssh_public_keys': 'list[str]',
            'license_model': 'str',
            'domain': 'str',
            'private_zone_id': 'str',
            'nsg_ids': 'list[str]',
            'backup_network_nsg_ids': 'list[str]',
            'is_diagnostics_events_enabled': 'bool',
            'is_health_monitoring_enabled': 'bool',
            'is_incident_logs_enabled': 'bool'
        }
        self.attribute_map = {
            'vm_cluster_id': 'vmClusterId',
            'display_name': 'displayName',
            'subnet_id': 'subnetId',
            'backup_subnet_id': 'backupSubnetId',
            'enabled_e_cpu_count': 'enabledECpuCount',
            'total_e_cpu_count': 'totalECpuCount',
            'vm_file_system_storage_size': 'vmFileSystemStorageSize',
            'ssh_public_keys': 'sshPublicKeys',
            'license_model': 'licenseModel',
            'domain': 'domain',
            'private_zone_id': 'privateZoneId',
            'nsg_ids': 'nsgIds',
            'backup_network_nsg_ids': 'backupNetworkNsgIds',
            'is_diagnostics_events_enabled': 'isDiagnosticsEventsEnabled',
            'is_health_monitoring_enabled': 'isHealthMonitoringEnabled',
            'is_incident_logs_enabled': 'isIncidentLogsEnabled'
        }
        self._vm_cluster_id = None
        self._display_name = None
        self._subnet_id = None
        self._backup_subnet_id = None
        self._enabled_e_cpu_count = None
        self._total_e_cpu_count = None
        self._vm_file_system_storage_size = None
        self._ssh_public_keys = None
        self._license_model = None
        self._domain = None
        self._private_zone_id = None
        self._nsg_ids = None
        self._backup_network_nsg_ids = None
        self._is_diagnostics_events_enabled = None
        self._is_health_monitoring_enabled = None
        self._is_incident_logs_enabled = None

    @property
    def vm_cluster_id(self):
        """
        Gets the vm_cluster_id of this DistributedDbVmCluster.
        The `OCID`__ of the Exadata VM cluster on Exascale Infrastructure.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm


        :return: The vm_cluster_id of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._vm_cluster_id

    @vm_cluster_id.setter
    def vm_cluster_id(self, vm_cluster_id):
        """
        Sets the vm_cluster_id of this DistributedDbVmCluster.
        The `OCID`__ of the Exadata VM cluster on Exascale Infrastructure.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm


        :param vm_cluster_id: The vm_cluster_id of this DistributedDbVmCluster.
        :type: str
        """
        self._vm_cluster_id = vm_cluster_id

    @property
    def display_name(self):
        """
        Gets the display_name of this DistributedDbVmCluster.
        The user-friendly name for the Exadata VM cluster on Exascale Infrastructure. The name does not need to be unique.


        :return: The display_name of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._display_name

    @display_name.setter
    def display_name(self, display_name):
        """
        Sets the display_name of this DistributedDbVmCluster.
        The user-friendly name for the Exadata VM cluster on Exascale Infrastructure. The name does not need to be unique.


        :param display_name: The display_name of this DistributedDbVmCluster.
        :type: str
        """
        self._display_name = display_name

    @property
    def subnet_id(self):
        """
        **[Required]** Gets the subnet_id of this DistributedDbVmCluster.
        The `OCID`__ of the subnet associated with the Exadata VM cluster on Exascale Infrastructure.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm


        :return: The subnet_id of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._subnet_id

    @subnet_id.setter
    def subnet_id(self, subnet_id):
        """
        Sets the subnet_id of this DistributedDbVmCluster.
        The `OCID`__ of the subnet associated with the Exadata VM cluster on Exascale Infrastructure.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm


        :param subnet_id: The subnet_id of this DistributedDbVmCluster.
        :type: str
        """
        self._subnet_id = subnet_id

    @property
    def backup_subnet_id(self):
        """
        **[Required]** Gets the backup_subnet_id of this DistributedDbVmCluster.
        The `OCID`__ of the backup network subnet associated with the Exadata VM cluster on Exascale Infrastructure.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm


        :return: The backup_subnet_id of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._backup_subnet_id

    @backup_subnet_id.setter
    def backup_subnet_id(self, backup_subnet_id):
        """
        Sets the backup_subnet_id of this DistributedDbVmCluster.
        The `OCID`__ of the backup network subnet associated with the Exadata VM cluster on Exascale Infrastructure.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm


        :param backup_subnet_id: The backup_subnet_id of this DistributedDbVmCluster.
        :type: str
        """
        self._backup_subnet_id = backup_subnet_id

    @property
    def enabled_e_cpu_count(self):
        """
        **[Required]** Gets the enabled_e_cpu_count of this DistributedDbVmCluster.
        The number of ECPUs to enable for an Exadata VM cluster on Exascale Infrastructure.


        :return: The enabled_e_cpu_count of this DistributedDbVmCluster.
        :rtype: int
        """
        return self._enabled_e_cpu_count

    @enabled_e_cpu_count.setter
    def enabled_e_cpu_count(self, enabled_e_cpu_count):
        """
        Sets the enabled_e_cpu_count of this DistributedDbVmCluster.
        The number of ECPUs to enable for an Exadata VM cluster on Exascale Infrastructure.


        :param enabled_e_cpu_count: The enabled_e_cpu_count of this DistributedDbVmCluster.
        :type: int
        """
        self._enabled_e_cpu_count = enabled_e_cpu_count

    @property
    def total_e_cpu_count(self):
        """
        Gets the total_e_cpu_count of this DistributedDbVmCluster.
        The number of Total ECPUs for an Exadata VM cluster on Exascale Infrastructure.


        :return: The total_e_cpu_count of this DistributedDbVmCluster.
        :rtype: int
        """
        return self._total_e_cpu_count

    @total_e_cpu_count.setter
    def total_e_cpu_count(self, total_e_cpu_count):
        """
        Sets the total_e_cpu_count of this DistributedDbVmCluster.
        The number of Total ECPUs for an Exadata VM cluster on Exascale Infrastructure.


        :param total_e_cpu_count: The total_e_cpu_count of this DistributedDbVmCluster.
        :type: int
        """
        self._total_e_cpu_count = total_e_cpu_count

    @property
    def vm_file_system_storage_size(self):
        """
        Gets the vm_file_system_storage_size of this DistributedDbVmCluster.
        File System Storage Size in GBs for Exadata VM cluster.


        :return: The vm_file_system_storage_size of this DistributedDbVmCluster.
        :rtype: int
        """
        return self._vm_file_system_storage_size

    @vm_file_system_storage_size.setter
    def vm_file_system_storage_size(self, vm_file_system_storage_size):
        """
        Sets the vm_file_system_storage_size of this DistributedDbVmCluster.
        File System Storage Size in GBs for Exadata VM cluster.


        :param vm_file_system_storage_size: The vm_file_system_storage_size of this DistributedDbVmCluster.
        :type: int
        """
        self._vm_file_system_storage_size = vm_file_system_storage_size

    @property
    def ssh_public_keys(self):
        """
        **[Required]** Gets the ssh_public_keys of this DistributedDbVmCluster.
        The public key portion of one or more key pairs used for SSH access to the Exadata VM cluster on Exascale Infrastructure.


        :return: The ssh_public_keys of this DistributedDbVmCluster.
        :rtype: list[str]
        """
        return self._ssh_public_keys

    @ssh_public_keys.setter
    def ssh_public_keys(self, ssh_public_keys):
        """
        Sets the ssh_public_keys of this DistributedDbVmCluster.
        The public key portion of one or more key pairs used for SSH access to the Exadata VM cluster on Exascale Infrastructure.


        :param ssh_public_keys: The ssh_public_keys of this DistributedDbVmCluster.
        :type: list[str]
        """
        self._ssh_public_keys = ssh_public_keys

    @property
    def license_model(self):
        """
        Gets the license_model of this DistributedDbVmCluster.
        The Oracle license model that applies to the Exadata VM cluster on Exascale Infrastructure. The default is BRING_YOUR_OWN_LICENSE.

        Allowed values for this property are: "LICENSE_INCLUDED", "BRING_YOUR_OWN_LICENSE", 'UNKNOWN_ENUM_VALUE'.
        Any unrecognized values returned by a service will be mapped to 'UNKNOWN_ENUM_VALUE'.


        :return: The license_model of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._license_model

    @license_model.setter
    def license_model(self, license_model):
        """
        Sets the license_model of this DistributedDbVmCluster.
        The Oracle license model that applies to the Exadata VM cluster on Exascale Infrastructure. The default is BRING_YOUR_OWN_LICENSE.


        :param license_model: The license_model of this DistributedDbVmCluster.
        :type: str
        """
        allowed_values = ["LICENSE_INCLUDED", "BRING_YOUR_OWN_LICENSE"]
        if not value_allowed_none_or_none_sentinel(license_model, allowed_values):
            license_model = 'UNKNOWN_ENUM_VALUE'
        self._license_model = license_model

    @property
    def domain(self):
        """
        Gets the domain of this DistributedDbVmCluster.
        A domain name used for the Exadata VM cluster on Exascale Infrastructure.
        If the Oracle-provided internet and VCN resolver is enabled for the specified subnet, then the domain name for the subnet is used
        (do not provide one). Otherwise, provide a valid DNS domain name.
        Hyphens (-) are not permitted. Applies to Exadata Database Service on Exascale Infrastructure only.


        :return: The domain of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._domain

    @domain.setter
    def domain(self, domain):
        """
        Sets the domain of this DistributedDbVmCluster.
        A domain name used for the Exadata VM cluster on Exascale Infrastructure.
        If the Oracle-provided internet and VCN resolver is enabled for the specified subnet, then the domain name for the subnet is used
        (do not provide one). Otherwise, provide a valid DNS domain name.
        Hyphens (-) are not permitted. Applies to Exadata Database Service on Exascale Infrastructure only.


        :param domain: The domain of this DistributedDbVmCluster.
        :type: str
        """
        self._domain = domain

    @property
    def private_zone_id(self):
        """
        Gets the private_zone_id of this DistributedDbVmCluster.
        The private zone ID in which you want DNS records to be created.


        :return: The private_zone_id of this DistributedDbVmCluster.
        :rtype: str
        """
        return self._private_zone_id

    @private_zone_id.setter
    def private_zone_id(self, private_zone_id):
        """
        Sets the private_zone_id of this DistributedDbVmCluster.
        The private zone ID in which you want DNS records to be created.


        :param private_zone_id: The private_zone_id of this DistributedDbVmCluster.
        :type: str
        """
        self._private_zone_id = private_zone_id

    @property
    def nsg_ids(self):
        """
        Gets the nsg_ids of this DistributedDbVmCluster.
        The list of `OCIDs`__ for the network security groups (NSGs) to which this resource belongs.
        Setting this to an empty list removes all resources from all NSGs.
        For more information about NSGs, see `Security Rules`__.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm
        __ https://docs.oracle.com/iaas/Content/Network/Concepts/securityrules.htm


        :return: The nsg_ids of this DistributedDbVmCluster.
        :rtype: list[str]
        """
        return self._nsg_ids

    @nsg_ids.setter
    def nsg_ids(self, nsg_ids):
        """
        Sets the nsg_ids of this DistributedDbVmCluster.
        The list of `OCIDs`__ for the network security groups (NSGs) to which this resource belongs.
        Setting this to an empty list removes all resources from all NSGs.
        For more information about NSGs, see `Security Rules`__.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm
        __ https://docs.oracle.com/iaas/Content/Network/Concepts/securityrules.htm


        :param nsg_ids: The nsg_ids of this DistributedDbVmCluster.
        :type: list[str]
        """
        self._nsg_ids = nsg_ids

    @property
    def backup_network_nsg_ids(self):
        """
        Gets the backup_network_nsg_ids of this DistributedDbVmCluster.
        A list of the `OCIDs`__ of the network security groups (NSGs) that the backup network of this DB system belongs to.
        Setting this to an empty array after the list is created removes the resource from all NSGs.
        For more information about NSGs, see `Security Rules`__. Applicable only to Exadata systems.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm
        __ https://docs.oracle.com/iaas/Content/Network/Concepts/securityrules.htm


        :return: The backup_network_nsg_ids of this DistributedDbVmCluster.
        :rtype: list[str]
        """
        return self._backup_network_nsg_ids

    @backup_network_nsg_ids.setter
    def backup_network_nsg_ids(self, backup_network_nsg_ids):
        """
        Sets the backup_network_nsg_ids of this DistributedDbVmCluster.
        A list of the `OCIDs`__ of the network security groups (NSGs) that the backup network of this DB system belongs to.
        Setting this to an empty array after the list is created removes the resource from all NSGs.
        For more information about NSGs, see `Security Rules`__. Applicable only to Exadata systems.

        __ https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm
        __ https://docs.oracle.com/iaas/Content/Network/Concepts/securityrules.htm


        :param backup_network_nsg_ids: The backup_network_nsg_ids of this DistributedDbVmCluster.
        :type: list[str]
        """
        self._backup_network_nsg_ids = backup_network_nsg_ids

    @property
    def is_diagnostics_events_enabled(self):
        """
        Gets the is_diagnostics_events_enabled of this DistributedDbVmCluster.
        Indicates whether diagnostic collection is enabled for the VM cluster.
        Enabling diagnostic collection allows you to receive Events service notifications for guest VM issues.
        Diagnostic collection also allows Oracle to provide enhanced service and proactive support for your Exadata system.
        You can enable diagnostic collection during VM cluster provisioning. You can also disable or enable it at any time using the `UpdateVmCluster` API.


        :return: The is_diagnostics_events_enabled of this DistributedDbVmCluster.
        :rtype: bool
        """
        return self._is_diagnostics_events_enabled

    @is_diagnostics_events_enabled.setter
    def is_diagnostics_events_enabled(self, is_diagnostics_events_enabled):
        """
        Sets the is_diagnostics_events_enabled of this DistributedDbVmCluster.
        Indicates whether diagnostic collection is enabled for the VM cluster.
        Enabling diagnostic collection allows you to receive Events service notifications for guest VM issues.
        Diagnostic collection also allows Oracle to provide enhanced service and proactive support for your Exadata system.
        You can enable diagnostic collection during VM cluster provisioning. You can also disable or enable it at any time using the `UpdateVmCluster` API.


        :param is_diagnostics_events_enabled: The is_diagnostics_events_enabled of this DistributedDbVmCluster.
        :type: bool
        """
        self._is_diagnostics_events_enabled = is_diagnostics_events_enabled

    @property
    def is_health_monitoring_enabled(self):
        """
        Gets the is_health_monitoring_enabled of this DistributedDbVmCluster.
        Indicates whether health monitoring is enabled for the VM cluster.
        Enabling health monitoring allows Oracle to collect diagnostic data and share it with its operations and support personnel.
        You may also receive notifications for some events. Collecting health diagnostics enables Oracle to provide proactive support and enhanced service for your system.
        Optionally enable health monitoring while provisioning a system. You can also disable or enable health monitoring anytime using the `UpdateVmCluster` API.


        :return: The is_health_monitoring_enabled of this DistributedDbVmCluster.
        :rtype: bool
        """
        return self._is_health_monitoring_enabled

    @is_health_monitoring_enabled.setter
    def is_health_monitoring_enabled(self, is_health_monitoring_enabled):
        """
        Sets the is_health_monitoring_enabled of this DistributedDbVmCluster.
        Indicates whether health monitoring is enabled for the VM cluster.
        Enabling health monitoring allows Oracle to collect diagnostic data and share it with its operations and support personnel.
        You may also receive notifications for some events. Collecting health diagnostics enables Oracle to provide proactive support and enhanced service for your system.
        Optionally enable health monitoring while provisioning a system. You can also disable or enable health monitoring anytime using the `UpdateVmCluster` API.


        :param is_health_monitoring_enabled: The is_health_monitoring_enabled of this DistributedDbVmCluster.
        :type: bool
        """
        self._is_health_monitoring_enabled = is_health_monitoring_enabled

    @property
    def is_incident_logs_enabled(self):
        """
        Gets the is_incident_logs_enabled of this DistributedDbVmCluster.
        Indicates whether incident logs and trace collection are enabled for the VM cluster.
        Enabling incident logs collection allows Oracle to receive Events service notifications for guest VM issues, collect incident logs and traces, and use them to diagnose issues and resolve them.
        Optionally enable incident logs collection while provisioning a system. You can also disable or enable incident logs collection anytime using the `UpdateVmCluster` API.


        :return: The is_incident_logs_enabled of this DistributedDbVmCluster.
        :rtype: bool
        """
        return self._is_incident_logs_enabled

    @is_incident_logs_enabled.setter
    def is_incident_logs_enabled(self, is_incident_logs_enabled):
        """
        Sets the is_incident_logs_enabled of this DistributedDbVmCluster.
        Indicates whether incident logs and trace collection are enabled for the VM cluster.
        Enabling incident logs collection allows Oracle to receive Events service notifications for guest VM issues, collect incident logs and traces, and use them to diagnose issues and resolve them.
        Optionally enable incident logs collection while provisioning a system. You can also disable or enable incident logs collection anytime using the `UpdateVmCluster` API.


        :param is_incident_logs_enabled: The is_incident_logs_enabled of this DistributedDbVmCluster.
        :type: bool
        """
        self._is_incident_logs_enabled = is_incident_logs_enabled

    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
