# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities

__all__ = [
    'InstanceBackendNodeGroup',
    'InstanceFrontendNodeGroup',
    'InstanceObserverNodeGroup',
    'InstanceVswitch',
]

@pulumi.output_type
class InstanceBackendNodeGroup(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "diskNumber":
            suggest = "disk_number"
        elif key == "localStorageInstanceType":
            suggest = "local_storage_instance_type"
        elif key == "residentNodeNumber":
            suggest = "resident_node_number"
        elif key == "specType":
            suggest = "spec_type"
        elif key == "storagePerformanceLevel":
            suggest = "storage_performance_level"
        elif key == "storageSize":
            suggest = "storage_size"
        elif key == "zoneId":
            suggest = "zone_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InstanceBackendNodeGroup. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InstanceBackendNodeGroup.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InstanceBackendNodeGroup.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cu: Optional[_builtins.int] = None,
                 disk_number: Optional[_builtins.int] = None,
                 local_storage_instance_type: Optional[_builtins.str] = None,
                 resident_node_number: Optional[_builtins.int] = None,
                 spec_type: Optional[_builtins.str] = None,
                 storage_performance_level: Optional[_builtins.str] = None,
                 storage_size: Optional[_builtins.int] = None,
                 zone_id: Optional[_builtins.str] = None):
        """
        :param _builtins.int cu: Number of CUs. CU (Compute Unit) is the basic measurement unit of the service, where 1 CU = 1 CPU core + 4 GiB memory.
        :param _builtins.int disk_number: The number of disks.
        :param _builtins.str local_storage_instance_type: Local SSD instance specifications.
        :param _builtins.int resident_node_number: Resident node number of node group.
        :param _builtins.str spec_type: Compute group specification types include the following:
               - standard
               - localSSD
               - bigData
               - ramEnhanced
               - networkEnhanced
        :param _builtins.str storage_performance_level: Performance levels of cloud disks include the following values:
               - pl0: Maximum random read/write IOPS per disk is 10,000.
               - pl1: Maximum random read/write IOPS per disk is 50,000.
               - pl2: Maximum random read/write IOPS per disk is 100,000.
               - pl3: Maximum random read/write IOPS per disk is 1,000,000.
        :param _builtins.int storage_size: Storage size, measured in GiB.
        :param _builtins.str zone_id: Zone ID.
        """
        if cu is not None:
            pulumi.set(__self__, "cu", cu)
        if disk_number is not None:
            pulumi.set(__self__, "disk_number", disk_number)
        if local_storage_instance_type is not None:
            pulumi.set(__self__, "local_storage_instance_type", local_storage_instance_type)
        if resident_node_number is not None:
            pulumi.set(__self__, "resident_node_number", resident_node_number)
        if spec_type is not None:
            pulumi.set(__self__, "spec_type", spec_type)
        if storage_performance_level is not None:
            pulumi.set(__self__, "storage_performance_level", storage_performance_level)
        if storage_size is not None:
            pulumi.set(__self__, "storage_size", storage_size)
        if zone_id is not None:
            pulumi.set(__self__, "zone_id", zone_id)

    @_builtins.property
    @pulumi.getter
    def cu(self) -> Optional[_builtins.int]:
        """
        Number of CUs. CU (Compute Unit) is the basic measurement unit of the service, where 1 CU = 1 CPU core + 4 GiB memory.
        """
        return pulumi.get(self, "cu")

    @_builtins.property
    @pulumi.getter(name="diskNumber")
    def disk_number(self) -> Optional[_builtins.int]:
        """
        The number of disks.
        """
        return pulumi.get(self, "disk_number")

    @_builtins.property
    @pulumi.getter(name="localStorageInstanceType")
    def local_storage_instance_type(self) -> Optional[_builtins.str]:
        """
        Local SSD instance specifications.
        """
        return pulumi.get(self, "local_storage_instance_type")

    @_builtins.property
    @pulumi.getter(name="residentNodeNumber")
    def resident_node_number(self) -> Optional[_builtins.int]:
        """
        Resident node number of node group.
        """
        return pulumi.get(self, "resident_node_number")

    @_builtins.property
    @pulumi.getter(name="specType")
    def spec_type(self) -> Optional[_builtins.str]:
        """
        Compute group specification types include the following:
        - standard
        - localSSD
        - bigData
        - ramEnhanced
        - networkEnhanced
        """
        return pulumi.get(self, "spec_type")

    @_builtins.property
    @pulumi.getter(name="storagePerformanceLevel")
    def storage_performance_level(self) -> Optional[_builtins.str]:
        """
        Performance levels of cloud disks include the following values:
        - pl0: Maximum random read/write IOPS per disk is 10,000.
        - pl1: Maximum random read/write IOPS per disk is 50,000.
        - pl2: Maximum random read/write IOPS per disk is 100,000.
        - pl3: Maximum random read/write IOPS per disk is 1,000,000.
        """
        return pulumi.get(self, "storage_performance_level")

    @_builtins.property
    @pulumi.getter(name="storageSize")
    def storage_size(self) -> Optional[_builtins.int]:
        """
        Storage size, measured in GiB.
        """
        return pulumi.get(self, "storage_size")

    @_builtins.property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> Optional[_builtins.str]:
        """
        Zone ID.
        """
        return pulumi.get(self, "zone_id")


@pulumi.output_type
class InstanceFrontendNodeGroup(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "diskNumber":
            suggest = "disk_number"
        elif key == "localStorageInstanceType":
            suggest = "local_storage_instance_type"
        elif key == "residentNodeNumber":
            suggest = "resident_node_number"
        elif key == "specType":
            suggest = "spec_type"
        elif key == "storagePerformanceLevel":
            suggest = "storage_performance_level"
        elif key == "storageSize":
            suggest = "storage_size"
        elif key == "zoneId":
            suggest = "zone_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InstanceFrontendNodeGroup. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InstanceFrontendNodeGroup.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InstanceFrontendNodeGroup.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cu: Optional[_builtins.int] = None,
                 disk_number: Optional[_builtins.int] = None,
                 local_storage_instance_type: Optional[_builtins.str] = None,
                 resident_node_number: Optional[_builtins.int] = None,
                 spec_type: Optional[_builtins.str] = None,
                 storage_performance_level: Optional[_builtins.str] = None,
                 storage_size: Optional[_builtins.int] = None,
                 zone_id: Optional[_builtins.str] = None):
        """
        :param _builtins.int cu: Number of CUs. CU (Compute Unit) is the basic measurement unit of the service, where 1 CU = 1 CPU core + 4 GiB memory.
        :param _builtins.int disk_number: DiskNumber
        :param _builtins.str local_storage_instance_type: Local SSD instance specifications.
        :param _builtins.int resident_node_number: Resident node number of node group.
        :param _builtins.str spec_type: Compute group specification types include the following:
               - standard
               - ramEnhanced
        :param _builtins.str storage_performance_level: Performance levels of cloud disks include the following values:
               - pl0: Maximum random read/write IOPS per disk is 10,000.
               - pl1: Maximum random read/write IOPS per disk is 50,000.
               - pl2: Maximum random read/write IOPS per disk is 100,000.
               - pl3: Maximum random read/write IOPS per disk is 1,000,000.
        :param _builtins.int storage_size: Storage size, measured in GiB.
        :param _builtins.str zone_id: Zone ID.
        """
        if cu is not None:
            pulumi.set(__self__, "cu", cu)
        if disk_number is not None:
            pulumi.set(__self__, "disk_number", disk_number)
        if local_storage_instance_type is not None:
            pulumi.set(__self__, "local_storage_instance_type", local_storage_instance_type)
        if resident_node_number is not None:
            pulumi.set(__self__, "resident_node_number", resident_node_number)
        if spec_type is not None:
            pulumi.set(__self__, "spec_type", spec_type)
        if storage_performance_level is not None:
            pulumi.set(__self__, "storage_performance_level", storage_performance_level)
        if storage_size is not None:
            pulumi.set(__self__, "storage_size", storage_size)
        if zone_id is not None:
            pulumi.set(__self__, "zone_id", zone_id)

    @_builtins.property
    @pulumi.getter
    def cu(self) -> Optional[_builtins.int]:
        """
        Number of CUs. CU (Compute Unit) is the basic measurement unit of the service, where 1 CU = 1 CPU core + 4 GiB memory.
        """
        return pulumi.get(self, "cu")

    @_builtins.property
    @pulumi.getter(name="diskNumber")
    def disk_number(self) -> Optional[_builtins.int]:
        """
        DiskNumber
        """
        return pulumi.get(self, "disk_number")

    @_builtins.property
    @pulumi.getter(name="localStorageInstanceType")
    def local_storage_instance_type(self) -> Optional[_builtins.str]:
        """
        Local SSD instance specifications.
        """
        return pulumi.get(self, "local_storage_instance_type")

    @_builtins.property
    @pulumi.getter(name="residentNodeNumber")
    def resident_node_number(self) -> Optional[_builtins.int]:
        """
        Resident node number of node group.
        """
        return pulumi.get(self, "resident_node_number")

    @_builtins.property
    @pulumi.getter(name="specType")
    def spec_type(self) -> Optional[_builtins.str]:
        """
        Compute group specification types include the following:
        - standard
        - ramEnhanced
        """
        return pulumi.get(self, "spec_type")

    @_builtins.property
    @pulumi.getter(name="storagePerformanceLevel")
    def storage_performance_level(self) -> Optional[_builtins.str]:
        """
        Performance levels of cloud disks include the following values:
        - pl0: Maximum random read/write IOPS per disk is 10,000.
        - pl1: Maximum random read/write IOPS per disk is 50,000.
        - pl2: Maximum random read/write IOPS per disk is 100,000.
        - pl3: Maximum random read/write IOPS per disk is 1,000,000.
        """
        return pulumi.get(self, "storage_performance_level")

    @_builtins.property
    @pulumi.getter(name="storageSize")
    def storage_size(self) -> Optional[_builtins.int]:
        """
        Storage size, measured in GiB.
        """
        return pulumi.get(self, "storage_size")

    @_builtins.property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> Optional[_builtins.str]:
        """
        Zone ID.
        """
        return pulumi.get(self, "zone_id")


@pulumi.output_type
class InstanceObserverNodeGroup(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "diskNumber":
            suggest = "disk_number"
        elif key == "localStorageInstanceType":
            suggest = "local_storage_instance_type"
        elif key == "residentNodeNumber":
            suggest = "resident_node_number"
        elif key == "specType":
            suggest = "spec_type"
        elif key == "storagePerformanceLevel":
            suggest = "storage_performance_level"
        elif key == "storageSize":
            suggest = "storage_size"
        elif key == "zoneId":
            suggest = "zone_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InstanceObserverNodeGroup. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InstanceObserverNodeGroup.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InstanceObserverNodeGroup.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cu: Optional[_builtins.int] = None,
                 disk_number: Optional[_builtins.int] = None,
                 local_storage_instance_type: Optional[_builtins.str] = None,
                 resident_node_number: Optional[_builtins.int] = None,
                 spec_type: Optional[_builtins.str] = None,
                 storage_performance_level: Optional[_builtins.str] = None,
                 storage_size: Optional[_builtins.int] = None,
                 zone_id: Optional[_builtins.str] = None):
        """
        :param _builtins.int cu: Number of CUs. CU (Compute Unit) is the basic measurement unit of the service, where 1 CU = 1 CPU core + 4 GiB memory.
        :param _builtins.int disk_number: DiskNumber
        :param _builtins.str local_storage_instance_type: Local SSD instance specifications.
        :param _builtins.int resident_node_number: Resident node number of node group.
        :param _builtins.str spec_type: Compute group specification types include the following:
               - standard
        :param _builtins.str storage_performance_level: Performance levels of cloud disks include the following values:
               - pl0: Maximum random read/write IOPS per disk is 10,000.
               - pl1: Maximum random read/write IOPS per disk is 50,000.
               - pl2: Maximum random read/write IOPS per disk is 100,000.
               - pl3: Maximum random read/write IOPS per disk is 1,000,000.
        :param _builtins.int storage_size: Storage size, measured in GiB.
        :param _builtins.str zone_id: Zone ID.
        """
        if cu is not None:
            pulumi.set(__self__, "cu", cu)
        if disk_number is not None:
            pulumi.set(__self__, "disk_number", disk_number)
        if local_storage_instance_type is not None:
            pulumi.set(__self__, "local_storage_instance_type", local_storage_instance_type)
        if resident_node_number is not None:
            pulumi.set(__self__, "resident_node_number", resident_node_number)
        if spec_type is not None:
            pulumi.set(__self__, "spec_type", spec_type)
        if storage_performance_level is not None:
            pulumi.set(__self__, "storage_performance_level", storage_performance_level)
        if storage_size is not None:
            pulumi.set(__self__, "storage_size", storage_size)
        if zone_id is not None:
            pulumi.set(__self__, "zone_id", zone_id)

    @_builtins.property
    @pulumi.getter
    def cu(self) -> Optional[_builtins.int]:
        """
        Number of CUs. CU (Compute Unit) is the basic measurement unit of the service, where 1 CU = 1 CPU core + 4 GiB memory.
        """
        return pulumi.get(self, "cu")

    @_builtins.property
    @pulumi.getter(name="diskNumber")
    def disk_number(self) -> Optional[_builtins.int]:
        """
        DiskNumber
        """
        return pulumi.get(self, "disk_number")

    @_builtins.property
    @pulumi.getter(name="localStorageInstanceType")
    def local_storage_instance_type(self) -> Optional[_builtins.str]:
        """
        Local SSD instance specifications.
        """
        return pulumi.get(self, "local_storage_instance_type")

    @_builtins.property
    @pulumi.getter(name="residentNodeNumber")
    def resident_node_number(self) -> Optional[_builtins.int]:
        """
        Resident node number of node group.
        """
        return pulumi.get(self, "resident_node_number")

    @_builtins.property
    @pulumi.getter(name="specType")
    def spec_type(self) -> Optional[_builtins.str]:
        """
        Compute group specification types include the following:
        - standard
        """
        return pulumi.get(self, "spec_type")

    @_builtins.property
    @pulumi.getter(name="storagePerformanceLevel")
    def storage_performance_level(self) -> Optional[_builtins.str]:
        """
        Performance levels of cloud disks include the following values:
        - pl0: Maximum random read/write IOPS per disk is 10,000.
        - pl1: Maximum random read/write IOPS per disk is 50,000.
        - pl2: Maximum random read/write IOPS per disk is 100,000.
        - pl3: Maximum random read/write IOPS per disk is 1,000,000.
        """
        return pulumi.get(self, "storage_performance_level")

    @_builtins.property
    @pulumi.getter(name="storageSize")
    def storage_size(self) -> Optional[_builtins.int]:
        """
        Storage size, measured in GiB.
        """
        return pulumi.get(self, "storage_size")

    @_builtins.property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> Optional[_builtins.str]:
        """
        Zone ID.
        """
        return pulumi.get(self, "zone_id")


@pulumi.output_type
class InstanceVswitch(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "vswitchId":
            suggest = "vswitch_id"
        elif key == "zoneId":
            suggest = "zone_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in InstanceVswitch. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        InstanceVswitch.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        InstanceVswitch.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 vswitch_id: _builtins.str,
                 zone_id: Optional[_builtins.str] = None):
        """
        :param _builtins.str vswitch_id: ID of VSwitch.
        :param _builtins.str zone_id: Zone ID of VSwitch.
        """
        pulumi.set(__self__, "vswitch_id", vswitch_id)
        if zone_id is not None:
            pulumi.set(__self__, "zone_id", zone_id)

    @_builtins.property
    @pulumi.getter(name="vswitchId")
    def vswitch_id(self) -> _builtins.str:
        """
        ID of VSwitch.
        """
        return pulumi.get(self, "vswitch_id")

    @_builtins.property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> Optional[_builtins.str]:
        """
        Zone ID of VSwitch.
        """
        return pulumi.get(self, "zone_id")


