# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
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
from . import outputs

__all__ = [
    'DiscoveryVirtualInstanceIdentity',
    'SingleNodeVirtualInstanceIdentity',
    'SingleNodeVirtualInstanceSingleServerConfiguration',
    'SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfiguration',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfiguration',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImage',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfile',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNames',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDisk',
    'ThreeTierVirtualInstanceIdentity',
    'ThreeTierVirtualInstanceThreeTierConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImage',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfile',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImage',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfile',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfiguration',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImage',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfile',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNames',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServer',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachine',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDisk',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServer',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancer',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachine',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDisk',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServer',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancer',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachine',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDisk',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorage',
    'ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMount',
]

@pulumi.output_type
class DiscoveryVirtualInstanceIdentity(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "identityIds":
            suggest = "identity_ids"

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

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

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

    def __init__(__self__, *,
                 identity_ids: Sequence[str],
                 type: str):
        """
        :param Sequence[str] identity_ids: A list of User Assigned Managed Identity IDs to be assigned to this SAP Discovery Virtual Instance.
        :param str type: The type of Managed Service Identity that should be configured on this SAP Discovery Virtual Instance. The only possible value is `UserAssigned`.
        """
        pulumi.set(__self__, "identity_ids", identity_ids)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> Sequence[str]:
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Discovery Virtual Instance.
        """
        return pulumi.get(self, "identity_ids")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of Managed Service Identity that should be configured on this SAP Discovery Virtual Instance. The only possible value is `UserAssigned`.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class SingleNodeVirtualInstanceIdentity(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "identityIds":
            suggest = "identity_ids"

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

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

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

    def __init__(__self__, *,
                 identity_ids: Sequence[str],
                 type: str):
        """
        :param Sequence[str] identity_ids: A list of User Assigned Managed Identity IDs to be assigned to this SAP Single Node Virtual Instance.
        :param str type: The type of Managed Service Identity that should be configured on this SAP Single Node Virtual Instance. The only possible value is `UserAssigned`.
        """
        pulumi.set(__self__, "identity_ids", identity_ids)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> Sequence[str]:
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Single Node Virtual Instance.
        """
        return pulumi.get(self, "identity_ids")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of Managed Service Identity that should be configured on this SAP Single Node Virtual Instance. The only possible value is `UserAssigned`.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appResourceGroupName":
            suggest = "app_resource_group_name"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "virtualMachineConfiguration":
            suggest = "virtual_machine_configuration"
        elif key == "databaseType":
            suggest = "database_type"
        elif key == "diskVolumeConfigurations":
            suggest = "disk_volume_configurations"
        elif key == "secondaryIpEnabled":
            suggest = "secondary_ip_enabled"
        elif key == "virtualMachineResourceNames":
            suggest = "virtual_machine_resource_names"

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

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

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

    def __init__(__self__, *,
                 app_resource_group_name: str,
                 subnet_id: str,
                 virtual_machine_configuration: 'outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfiguration',
                 database_type: Optional[str] = None,
                 disk_volume_configurations: Optional[Sequence['outputs.SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfiguration']] = None,
                 secondary_ip_enabled: Optional[bool] = None,
                 virtual_machine_resource_names: Optional['outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNames'] = None):
        """
        :param str subnet_id: The resource ID of the Subnet for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param 'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgs' virtual_machine_configuration: A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        :param str database_type: The supported SAP database type. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        :param Sequence['SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs'] disk_volume_configurations: One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        :param bool secondary_ip_enabled: Specifies whether a secondary IP address should be added to the network interface on all VMs of the SAP system being deployed. Defaults to `false`. Changing this forces a new resource to be created.
        :param 'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgs' virtual_machine_resource_names: A `virtual_machine_resource_names` block as defined below. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "app_resource_group_name", app_resource_group_name)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "virtual_machine_configuration", virtual_machine_configuration)
        if database_type is not None:
            pulumi.set(__self__, "database_type", database_type)
        if disk_volume_configurations is not None:
            pulumi.set(__self__, "disk_volume_configurations", disk_volume_configurations)
        if secondary_ip_enabled is not None:
            pulumi.set(__self__, "secondary_ip_enabled", secondary_ip_enabled)
        if virtual_machine_resource_names is not None:
            pulumi.set(__self__, "virtual_machine_resource_names", virtual_machine_resource_names)

    @property
    @pulumi.getter(name="appResourceGroupName")
    def app_resource_group_name(self) -> str:
        return pulumi.get(self, "app_resource_group_name")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The resource ID of the Subnet for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="virtualMachineConfiguration")
    def virtual_machine_configuration(self) -> 'outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfiguration':
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_configuration")

    @property
    @pulumi.getter(name="databaseType")
    def database_type(self) -> Optional[str]:
        """
        The supported SAP database type. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_type")

    @property
    @pulumi.getter(name="diskVolumeConfigurations")
    def disk_volume_configurations(self) -> Optional[Sequence['outputs.SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfiguration']]:
        """
        One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "disk_volume_configurations")

    @property
    @pulumi.getter(name="secondaryIpEnabled")
    def secondary_ip_enabled(self) -> Optional[bool]:
        """
        Specifies whether a secondary IP address should be added to the network interface on all VMs of the SAP system being deployed. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "secondary_ip_enabled")

    @property
    @pulumi.getter(name="virtualMachineResourceNames")
    def virtual_machine_resource_names(self) -> Optional['outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNames']:
        """
        A `virtual_machine_resource_names` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_resource_names")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "numberOfDisks":
            suggest = "number_of_disks"
        elif key == "sizeInGb":
            suggest = "size_in_gb"
        elif key == "skuName":
            suggest = "sku_name"
        elif key == "volumeName":
            suggest = "volume_name"

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

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

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

    def __init__(__self__, *,
                 number_of_disks: int,
                 size_in_gb: int,
                 sku_name: str,
                 volume_name: str):
        """
        :param int number_of_disks: The total number of disks required for the concerned volume. Possible values are at least `1`. Changing this forces a new resource to be created.
        :param int size_in_gb: The size of the Disk in GB. Changing this forces a new resource to be created.
        :param str sku_name: The name of the Disk SKU. Possible values are `Premium_LRS`, `PremiumV2_LRS`, `Premium_ZRS`, `Standard_LRS`, `StandardSSD_LRS`, `StandardSSD_ZRS` and `UltraSSD_LRS`. Changing this forces a new resource to be created.
        :param str volume_name: Specifies the volumn name of the database disk. Possible values are `backup`, `hana/data`, `hana/log`, `hana/shared`, `os` and `usr/sap`. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "number_of_disks", number_of_disks)
        pulumi.set(__self__, "size_in_gb", size_in_gb)
        pulumi.set(__self__, "sku_name", sku_name)
        pulumi.set(__self__, "volume_name", volume_name)

    @property
    @pulumi.getter(name="numberOfDisks")
    def number_of_disks(self) -> int:
        """
        The total number of disks required for the concerned volume. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "number_of_disks")

    @property
    @pulumi.getter(name="sizeInGb")
    def size_in_gb(self) -> int:
        """
        The size of the Disk in GB. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "size_in_gb")

    @property
    @pulumi.getter(name="skuName")
    def sku_name(self) -> str:
        """
        The name of the Disk SKU. Possible values are `Premium_LRS`, `PremiumV2_LRS`, `Premium_ZRS`, `Standard_LRS`, `StandardSSD_LRS`, `StandardSSD_ZRS` and `UltraSSD_LRS`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku_name")

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> str:
        """
        Specifies the volumn name of the database disk. Possible values are `backup`, `hana/data`, `hana/log`, `hana/shared`, `os` and `usr/sap`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "volume_name")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "osProfile":
            suggest = "os_profile"
        elif key == "virtualMachineSize":
            suggest = "virtual_machine_size"

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

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

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

    def __init__(__self__, *,
                 image: 'outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImage',
                 os_profile: 'outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfile',
                 virtual_machine_size: str):
        """
        :param 'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs' image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param 'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgs' os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param str virtual_machine_size: The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "image", image)
        pulumi.set(__self__, "os_profile", os_profile)
        pulumi.set(__self__, "virtual_machine_size", virtual_machine_size)

    @property
    @pulumi.getter
    def image(self) -> 'outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImage':
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="osProfile")
    def os_profile(self) -> 'outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfile':
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_profile")

    @property
    @pulumi.getter(name="virtualMachineSize")
    def virtual_machine_size(self) -> str:
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_size")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImage(dict):
    def __init__(__self__, *,
                 offer: str,
                 publisher: str,
                 sku: str,
                 version: str):
        """
        :param str offer: Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        :param str publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param str sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param str version: Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "offer", offer)
        pulumi.set(__self__, "publisher", publisher)
        pulumi.set(__self__, "sku", sku)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def offer(self) -> str:
        """
        Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

    @property
    @pulumi.getter
    def publisher(self) -> str:
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

    @property
    @pulumi.getter
    def sku(self) -> str:
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "adminUsername":
            suggest = "admin_username"
        elif key == "sshPrivateKey":
            suggest = "ssh_private_key"
        elif key == "sshPublicKey":
            suggest = "ssh_public_key"

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

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

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

    def __init__(__self__, *,
                 admin_username: str,
                 ssh_private_key: str,
                 ssh_public_key: str):
        """
        :param str admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param str ssh_private_key: The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        :param str ssh_public_key: The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "admin_username", admin_username)
        pulumi.set(__self__, "ssh_private_key", ssh_private_key)
        pulumi.set(__self__, "ssh_public_key", ssh_public_key)

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> str:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> str:
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_private_key")

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> str:
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_public_key")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNames(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dataDisks":
            suggest = "data_disks"
        elif key == "hostName":
            suggest = "host_name"
        elif key == "networkInterfaceNames":
            suggest = "network_interface_names"
        elif key == "osDiskName":
            suggest = "os_disk_name"
        elif key == "virtualMachineName":
            suggest = "virtual_machine_name"

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

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

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

    def __init__(__self__, *,
                 data_disks: Optional[Sequence['outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDisk']] = None,
                 host_name: Optional[str] = None,
                 network_interface_names: Optional[Sequence[str]] = None,
                 os_disk_name: Optional[str] = None,
                 virtual_machine_name: Optional[str] = None):
        """
        :param Sequence['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs'] data_disks: (Optional) One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param str host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param Sequence[str] network_interface_names: A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        :param str os_disk_name: The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        :param str virtual_machine_name: The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        if data_disks is not None:
            pulumi.set(__self__, "data_disks", data_disks)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if network_interface_names is not None:
            pulumi.set(__self__, "network_interface_names", network_interface_names)
        if os_disk_name is not None:
            pulumi.set(__self__, "os_disk_name", os_disk_name)
        if virtual_machine_name is not None:
            pulumi.set(__self__, "virtual_machine_name", virtual_machine_name)

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Optional[Sequence['outputs.SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDisk']]:
        """
        (Optional) One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[str]:
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "host_name")

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[Sequence[str]]:
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "network_interface_names")

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[str]:
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_disk_name")

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[str]:
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_name")


@pulumi.output_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDisk(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeName":
            suggest = "volume_name"

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

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

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

    def __init__(__self__, *,
                 names: Sequence[str],
                 volume_name: str):
        """
        :param Sequence[str] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param str volume_name: The name of the Volume. The only possible value is `default`. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "names", names)
        pulumi.set(__self__, "volume_name", volume_name)

    @property
    @pulumi.getter
    def names(self) -> Sequence[str]:
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "names")

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> str:
        """
        The name of the Volume. The only possible value is `default`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "volume_name")


@pulumi.output_type
class ThreeTierVirtualInstanceIdentity(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "identityIds":
            suggest = "identity_ids"

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

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

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

    def __init__(__self__, *,
                 identity_ids: Sequence[str],
                 type: str):
        """
        :param Sequence[str] identity_ids: A list of User Assigned Managed Identity IDs to be assigned to this SAP Three Tier Virtual Instance.
        :param str type: The type of Managed Service Identity that should be configured on this SAP Three Tier Virtual Instance. Only possible value is `UserAssigned`.
        """
        pulumi.set(__self__, "identity_ids", identity_ids)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> Sequence[str]:
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Three Tier Virtual Instance.
        """
        return pulumi.get(self, "identity_ids")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of Managed Service Identity that should be configured on this SAP Three Tier Virtual Instance. Only possible value is `UserAssigned`.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "appResourceGroupName":
            suggest = "app_resource_group_name"
        elif key == "applicationServerConfiguration":
            suggest = "application_server_configuration"
        elif key == "centralServerConfiguration":
            suggest = "central_server_configuration"
        elif key == "databaseServerConfiguration":
            suggest = "database_server_configuration"
        elif key == "highAvailabilityType":
            suggest = "high_availability_type"
        elif key == "resourceNames":
            suggest = "resource_names"
        elif key == "secondaryIpEnabled":
            suggest = "secondary_ip_enabled"
        elif key == "transportCreateAndMount":
            suggest = "transport_create_and_mount"

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

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

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

    def __init__(__self__, *,
                 app_resource_group_name: str,
                 application_server_configuration: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfiguration',
                 central_server_configuration: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfiguration',
                 database_server_configuration: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfiguration',
                 high_availability_type: Optional[str] = None,
                 resource_names: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNames'] = None,
                 secondary_ip_enabled: Optional[bool] = None,
                 transport_create_and_mount: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMount'] = None):
        """
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgs' application_server_configuration: An `application_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgs' central_server_configuration: A `central_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgs' database_server_configuration: A `database_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param str high_availability_type: The high availability type for the three tier configuration. Possible values are `AvailabilitySet` and `AvailabilityZone`. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgs' resource_names: A `resource_names` block as defined below. Changing this forces a new resource to be created.
        :param bool secondary_ip_enabled: Specifies whether a secondary IP address should be added to the network interface on all VMs of the SAP system being deployed. Defaults to `false`. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgs' transport_create_and_mount: A `transport_create_and_mount` block as defined below. Changing this forces a new resource to be created.
               
               > **Note:** The file share configuration uses `skip` by default when `transport_create_and_mount` isn't set.
               
               > **Note:** Due to [a bug in the Azure API](https://github.com/Azure/azure-rest-api-specs/issues/25209) where the Storage File Share Id is not defined correctly, it is not currently possible to support using Transport Mount.
        """
        pulumi.set(__self__, "app_resource_group_name", app_resource_group_name)
        pulumi.set(__self__, "application_server_configuration", application_server_configuration)
        pulumi.set(__self__, "central_server_configuration", central_server_configuration)
        pulumi.set(__self__, "database_server_configuration", database_server_configuration)
        if high_availability_type is not None:
            pulumi.set(__self__, "high_availability_type", high_availability_type)
        if resource_names is not None:
            pulumi.set(__self__, "resource_names", resource_names)
        if secondary_ip_enabled is not None:
            pulumi.set(__self__, "secondary_ip_enabled", secondary_ip_enabled)
        if transport_create_and_mount is not None:
            pulumi.set(__self__, "transport_create_and_mount", transport_create_and_mount)

    @property
    @pulumi.getter(name="appResourceGroupName")
    def app_resource_group_name(self) -> str:
        return pulumi.get(self, "app_resource_group_name")

    @property
    @pulumi.getter(name="applicationServerConfiguration")
    def application_server_configuration(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfiguration':
        """
        An `application_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "application_server_configuration")

    @property
    @pulumi.getter(name="centralServerConfiguration")
    def central_server_configuration(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfiguration':
        """
        A `central_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "central_server_configuration")

    @property
    @pulumi.getter(name="databaseServerConfiguration")
    def database_server_configuration(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfiguration':
        """
        A `database_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_server_configuration")

    @property
    @pulumi.getter(name="highAvailabilityType")
    def high_availability_type(self) -> Optional[str]:
        """
        The high availability type for the three tier configuration. Possible values are `AvailabilitySet` and `AvailabilityZone`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "high_availability_type")

    @property
    @pulumi.getter(name="resourceNames")
    def resource_names(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNames']:
        """
        A `resource_names` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_names")

    @property
    @pulumi.getter(name="secondaryIpEnabled")
    def secondary_ip_enabled(self) -> Optional[bool]:
        """
        Specifies whether a secondary IP address should be added to the network interface on all VMs of the SAP system being deployed. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "secondary_ip_enabled")

    @property
    @pulumi.getter(name="transportCreateAndMount")
    def transport_create_and_mount(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMount']:
        """
        A `transport_create_and_mount` block as defined below. Changing this forces a new resource to be created.

        > **Note:** The file share configuration uses `skip` by default when `transport_create_and_mount` isn't set.

        > **Note:** Due to [a bug in the Azure API](https://github.com/Azure/azure-rest-api-specs/issues/25209) where the Storage File Share Id is not defined correctly, it is not currently possible to support using Transport Mount.
        """
        return pulumi.get(self, "transport_create_and_mount")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "instanceCount":
            suggest = "instance_count"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "virtualMachineConfiguration":
            suggest = "virtual_machine_configuration"

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

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

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

    def __init__(__self__, *,
                 instance_count: int,
                 subnet_id: str,
                 virtual_machine_configuration: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfiguration'):
        """
        :param int instance_count: The number of instances for the Application Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        :param str subnet_id: The resource ID of the Subnet for the Application Server. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgs' virtual_machine_configuration: A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "virtual_machine_configuration", virtual_machine_configuration)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> int:
        """
        The number of instances for the Application Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "instance_count")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The resource ID of the Subnet for the Application Server. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="virtualMachineConfiguration")
    def virtual_machine_configuration(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfiguration':
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_configuration")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "osProfile":
            suggest = "os_profile"
        elif key == "virtualMachineSize":
            suggest = "virtual_machine_size"

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

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

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

    def __init__(__self__, *,
                 image: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImage',
                 os_profile: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfile',
                 virtual_machine_size: str):
        """
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs' image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgs' os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param str virtual_machine_size: The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "image", image)
        pulumi.set(__self__, "os_profile", os_profile)
        pulumi.set(__self__, "virtual_machine_size", virtual_machine_size)

    @property
    @pulumi.getter
    def image(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImage':
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="osProfile")
    def os_profile(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfile':
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_profile")

    @property
    @pulumi.getter(name="virtualMachineSize")
    def virtual_machine_size(self) -> str:
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_size")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImage(dict):
    def __init__(__self__, *,
                 offer: str,
                 publisher: str,
                 sku: str,
                 version: str):
        """
        :param str offer: Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        :param str publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param str sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param str version: Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "offer", offer)
        pulumi.set(__self__, "publisher", publisher)
        pulumi.set(__self__, "sku", sku)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def offer(self) -> str:
        """
        Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

    @property
    @pulumi.getter
    def publisher(self) -> str:
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

    @property
    @pulumi.getter
    def sku(self) -> str:
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "adminUsername":
            suggest = "admin_username"
        elif key == "sshPrivateKey":
            suggest = "ssh_private_key"
        elif key == "sshPublicKey":
            suggest = "ssh_public_key"

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

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

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

    def __init__(__self__, *,
                 admin_username: str,
                 ssh_private_key: str,
                 ssh_public_key: str):
        """
        :param str admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param str ssh_private_key: The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        :param str ssh_public_key: The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "admin_username", admin_username)
        pulumi.set(__self__, "ssh_private_key", ssh_private_key)
        pulumi.set(__self__, "ssh_public_key", ssh_public_key)

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> str:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> str:
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_private_key")

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> str:
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_public_key")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "instanceCount":
            suggest = "instance_count"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "virtualMachineConfiguration":
            suggest = "virtual_machine_configuration"

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

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

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

    def __init__(__self__, *,
                 instance_count: int,
                 subnet_id: str,
                 virtual_machine_configuration: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfiguration'):
        """
        :param int instance_count: The number of instances for the Central Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        :param str subnet_id: The resource ID of the Subnet for the Central Server. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgs' virtual_machine_configuration: A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "virtual_machine_configuration", virtual_machine_configuration)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> int:
        """
        The number of instances for the Central Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "instance_count")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The resource ID of the Subnet for the Central Server. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="virtualMachineConfiguration")
    def virtual_machine_configuration(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfiguration':
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_configuration")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "osProfile":
            suggest = "os_profile"
        elif key == "virtualMachineSize":
            suggest = "virtual_machine_size"

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

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

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

    def __init__(__self__, *,
                 image: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImage',
                 os_profile: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfile',
                 virtual_machine_size: str):
        """
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs' image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgs' os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param str virtual_machine_size: The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "image", image)
        pulumi.set(__self__, "os_profile", os_profile)
        pulumi.set(__self__, "virtual_machine_size", virtual_machine_size)

    @property
    @pulumi.getter
    def image(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImage':
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="osProfile")
    def os_profile(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfile':
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_profile")

    @property
    @pulumi.getter(name="virtualMachineSize")
    def virtual_machine_size(self) -> str:
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_size")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImage(dict):
    def __init__(__self__, *,
                 offer: str,
                 publisher: str,
                 sku: str,
                 version: str):
        """
        :param str offer: Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        :param str publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param str sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param str version: Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "offer", offer)
        pulumi.set(__self__, "publisher", publisher)
        pulumi.set(__self__, "sku", sku)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def offer(self) -> str:
        """
        Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

    @property
    @pulumi.getter
    def publisher(self) -> str:
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

    @property
    @pulumi.getter
    def sku(self) -> str:
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "adminUsername":
            suggest = "admin_username"
        elif key == "sshPrivateKey":
            suggest = "ssh_private_key"
        elif key == "sshPublicKey":
            suggest = "ssh_public_key"

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

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

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

    def __init__(__self__, *,
                 admin_username: str,
                 ssh_private_key: str,
                 ssh_public_key: str):
        """
        :param str admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param str ssh_private_key: The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        :param str ssh_public_key: The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "admin_username", admin_username)
        pulumi.set(__self__, "ssh_private_key", ssh_private_key)
        pulumi.set(__self__, "ssh_public_key", ssh_public_key)

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> str:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> str:
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_private_key")

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> str:
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_public_key")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "instanceCount":
            suggest = "instance_count"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "virtualMachineConfiguration":
            suggest = "virtual_machine_configuration"
        elif key == "databaseType":
            suggest = "database_type"
        elif key == "diskVolumeConfigurations":
            suggest = "disk_volume_configurations"

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

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

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

    def __init__(__self__, *,
                 instance_count: int,
                 subnet_id: str,
                 virtual_machine_configuration: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfiguration',
                 database_type: Optional[str] = None,
                 disk_volume_configurations: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfiguration']] = None):
        """
        :param int instance_count: The number of instances for the Database Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        :param str subnet_id: The resource ID of the Subnet for the Database Server. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgs' virtual_machine_configuration: A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        :param str database_type: The database type for the Database Server. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgs'] disk_volume_configurations: One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "instance_count", instance_count)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "virtual_machine_configuration", virtual_machine_configuration)
        if database_type is not None:
            pulumi.set(__self__, "database_type", database_type)
        if disk_volume_configurations is not None:
            pulumi.set(__self__, "disk_volume_configurations", disk_volume_configurations)

    @property
    @pulumi.getter(name="instanceCount")
    def instance_count(self) -> int:
        """
        The number of instances for the Database Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "instance_count")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The resource ID of the Subnet for the Database Server. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="virtualMachineConfiguration")
    def virtual_machine_configuration(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfiguration':
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_configuration")

    @property
    @pulumi.getter(name="databaseType")
    def database_type(self) -> Optional[str]:
        """
        The database type for the Database Server. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_type")

    @property
    @pulumi.getter(name="diskVolumeConfigurations")
    def disk_volume_configurations(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfiguration']]:
        """
        One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "disk_volume_configurations")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "numberOfDisks":
            suggest = "number_of_disks"
        elif key == "sizeInGb":
            suggest = "size_in_gb"
        elif key == "skuName":
            suggest = "sku_name"
        elif key == "volumeName":
            suggest = "volume_name"

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

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

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

    def __init__(__self__, *,
                 number_of_disks: int,
                 size_in_gb: int,
                 sku_name: str,
                 volume_name: str):
        """
        :param int number_of_disks: The total number of disks required for the concerned volume. Possible values are at least `1`. Changing this forces a new resource to be created.
        :param int size_in_gb: The size of the Disk in GB. Changing this forces a new resource to be created.
        :param str sku_name: The name of the Disk SKU. Possible values are `Premium_LRS`, `PremiumV2_LRS`, `Premium_ZRS`, `Standard_LRS`, `StandardSSD_LRS`, `StandardSSD_ZRS` and `UltraSSD_LRS`. Changing this forces a new resource to be created.
        :param str volume_name: Specifies the volumn name of the database disk. Possible values are `backup`, `hana/data`, `hana/log`, `hana/shared`, `os` and `usr/sap`. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "number_of_disks", number_of_disks)
        pulumi.set(__self__, "size_in_gb", size_in_gb)
        pulumi.set(__self__, "sku_name", sku_name)
        pulumi.set(__self__, "volume_name", volume_name)

    @property
    @pulumi.getter(name="numberOfDisks")
    def number_of_disks(self) -> int:
        """
        The total number of disks required for the concerned volume. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "number_of_disks")

    @property
    @pulumi.getter(name="sizeInGb")
    def size_in_gb(self) -> int:
        """
        The size of the Disk in GB. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "size_in_gb")

    @property
    @pulumi.getter(name="skuName")
    def sku_name(self) -> str:
        """
        The name of the Disk SKU. Possible values are `Premium_LRS`, `PremiumV2_LRS`, `Premium_ZRS`, `Standard_LRS`, `StandardSSD_LRS`, `StandardSSD_ZRS` and `UltraSSD_LRS`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku_name")

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> str:
        """
        Specifies the volumn name of the database disk. Possible values are `backup`, `hana/data`, `hana/log`, `hana/shared`, `os` and `usr/sap`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "volume_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "osProfile":
            suggest = "os_profile"
        elif key == "virtualMachineSize":
            suggest = "virtual_machine_size"

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

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

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

    def __init__(__self__, *,
                 image: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImage',
                 os_profile: 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfile',
                 virtual_machine_size: str):
        """
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs' image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgs' os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param str virtual_machine_size: The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "image", image)
        pulumi.set(__self__, "os_profile", os_profile)
        pulumi.set(__self__, "virtual_machine_size", virtual_machine_size)

    @property
    @pulumi.getter
    def image(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImage':
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="osProfile")
    def os_profile(self) -> 'outputs.ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfile':
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_profile")

    @property
    @pulumi.getter(name="virtualMachineSize")
    def virtual_machine_size(self) -> str:
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_size")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImage(dict):
    def __init__(__self__, *,
                 offer: str,
                 publisher: str,
                 sku: str,
                 version: str):
        """
        :param str offer: Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        :param str publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param str sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param str version: Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "offer", offer)
        pulumi.set(__self__, "publisher", publisher)
        pulumi.set(__self__, "sku", sku)
        pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def offer(self) -> str:
        """
        Specifies the offer of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "offer")

    @property
    @pulumi.getter
    def publisher(self) -> str:
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "publisher")

    @property
    @pulumi.getter
    def sku(self) -> str:
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sku")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        Specifies the version of the platform image or marketplace image used to create the virtual machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "version")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfile(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "adminUsername":
            suggest = "admin_username"
        elif key == "sshPrivateKey":
            suggest = "ssh_private_key"
        elif key == "sshPublicKey":
            suggest = "ssh_public_key"

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

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

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

    def __init__(__self__, *,
                 admin_username: str,
                 ssh_private_key: str,
                 ssh_public_key: str):
        """
        :param str admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param str ssh_private_key: The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        :param str ssh_public_key: The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "admin_username", admin_username)
        pulumi.set(__self__, "ssh_private_key", ssh_private_key)
        pulumi.set(__self__, "ssh_public_key", ssh_public_key)

    @property
    @pulumi.getter(name="adminUsername")
    def admin_username(self) -> str:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> str:
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_private_key")

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> str:
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_public_key")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNames(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "applicationServer":
            suggest = "application_server"
        elif key == "centralServer":
            suggest = "central_server"
        elif key == "databaseServer":
            suggest = "database_server"
        elif key == "sharedStorage":
            suggest = "shared_storage"

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

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

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

    def __init__(__self__, *,
                 application_server: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServer'] = None,
                 central_server: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServer'] = None,
                 database_server: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServer'] = None,
                 shared_storage: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorage'] = None):
        """
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs' application_server: An `application_server` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgs' central_server: A `central_server` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgs' database_server: A `database_server` block as defined below. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgs' shared_storage: A `shared_storage` block as defined below. Changing this forces a new resource to be created.
        """
        if application_server is not None:
            pulumi.set(__self__, "application_server", application_server)
        if central_server is not None:
            pulumi.set(__self__, "central_server", central_server)
        if database_server is not None:
            pulumi.set(__self__, "database_server", database_server)
        if shared_storage is not None:
            pulumi.set(__self__, "shared_storage", shared_storage)

    @property
    @pulumi.getter(name="applicationServer")
    def application_server(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServer']:
        """
        An `application_server` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "application_server")

    @property
    @pulumi.getter(name="centralServer")
    def central_server(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServer']:
        """
        A `central_server` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "central_server")

    @property
    @pulumi.getter(name="databaseServer")
    def database_server(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServer']:
        """
        A `database_server` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_server")

    @property
    @pulumi.getter(name="sharedStorage")
    def shared_storage(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorage']:
        """
        A `shared_storage` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "shared_storage")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilitySetName":
            suggest = "availability_set_name"
        elif key == "virtualMachines":
            suggest = "virtual_machines"

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

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

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

    def __init__(__self__, *,
                 availability_set_name: Optional[str] = None,
                 virtual_machines: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachine']] = None):
        """
        :param str availability_set_name: The full name for the availability set. Changing this forces a new resource to be created.
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgs'] virtual_machines: One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
        if availability_set_name is not None:
            pulumi.set(__self__, "availability_set_name", availability_set_name)
        if virtual_machines is not None:
            pulumi.set(__self__, "virtual_machines", virtual_machines)

    @property
    @pulumi.getter(name="availabilitySetName")
    def availability_set_name(self) -> Optional[str]:
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "availability_set_name")

    @property
    @pulumi.getter(name="virtualMachines")
    def virtual_machines(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachine']]:
        """
        One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machines")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachine(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dataDisks":
            suggest = "data_disks"
        elif key == "hostName":
            suggest = "host_name"
        elif key == "networkInterfaceNames":
            suggest = "network_interface_names"
        elif key == "osDiskName":
            suggest = "os_disk_name"
        elif key == "virtualMachineName":
            suggest = "virtual_machine_name"

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

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

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

    def __init__(__self__, *,
                 data_disks: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDisk']] = None,
                 host_name: Optional[str] = None,
                 network_interface_names: Optional[Sequence[str]] = None,
                 os_disk_name: Optional[str] = None,
                 virtual_machine_name: Optional[str] = None):
        """
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs'] data_disks: One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param str host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param Sequence[str] network_interface_names: A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        :param str os_disk_name: The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        :param str virtual_machine_name: The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        if data_disks is not None:
            pulumi.set(__self__, "data_disks", data_disks)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if network_interface_names is not None:
            pulumi.set(__self__, "network_interface_names", network_interface_names)
        if os_disk_name is not None:
            pulumi.set(__self__, "os_disk_name", os_disk_name)
        if virtual_machine_name is not None:
            pulumi.set(__self__, "virtual_machine_name", virtual_machine_name)

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDisk']]:
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[str]:
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "host_name")

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[Sequence[str]]:
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "network_interface_names")

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[str]:
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_disk_name")

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[str]:
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDisk(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeName":
            suggest = "volume_name"

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

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

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

    def __init__(__self__, *,
                 names: Sequence[str],
                 volume_name: str):
        """
        :param Sequence[str] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param str volume_name: The name of the Volume. Changing this forces a new resource to be created.
               
               > **Note:** Possible value for Application Server and Central Server is `default`.
               
               > **Note:** Possible values for Database Server are `hanaData`, `hanaLog`, `hanaShared` and `usrSap`.
        """
        pulumi.set(__self__, "names", names)
        pulumi.set(__self__, "volume_name", volume_name)

    @property
    @pulumi.getter
    def names(self) -> Sequence[str]:
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "names")

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> str:
        """
        The name of the Volume. Changing this forces a new resource to be created.

        > **Note:** Possible value for Application Server and Central Server is `default`.

        > **Note:** Possible values for Database Server are `hanaData`, `hanaLog`, `hanaShared` and `usrSap`.
        """
        return pulumi.get(self, "volume_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilitySetName":
            suggest = "availability_set_name"
        elif key == "loadBalancer":
            suggest = "load_balancer"
        elif key == "virtualMachines":
            suggest = "virtual_machines"

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

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

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

    def __init__(__self__, *,
                 availability_set_name: Optional[str] = None,
                 load_balancer: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancer'] = None,
                 virtual_machines: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachine']] = None):
        """
        :param str availability_set_name: The full name for the availability set. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgs' load_balancer: A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgs'] virtual_machines: One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
        if availability_set_name is not None:
            pulumi.set(__self__, "availability_set_name", availability_set_name)
        if load_balancer is not None:
            pulumi.set(__self__, "load_balancer", load_balancer)
        if virtual_machines is not None:
            pulumi.set(__self__, "virtual_machines", virtual_machines)

    @property
    @pulumi.getter(name="availabilitySetName")
    def availability_set_name(self) -> Optional[str]:
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "availability_set_name")

    @property
    @pulumi.getter(name="loadBalancer")
    def load_balancer(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancer']:
        """
        A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "load_balancer")

    @property
    @pulumi.getter(name="virtualMachines")
    def virtual_machines(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachine']]:
        """
        One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machines")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendPoolNames":
            suggest = "backend_pool_names"
        elif key == "frontendIpConfigurationNames":
            suggest = "frontend_ip_configuration_names"
        elif key == "healthProbeNames":
            suggest = "health_probe_names"

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

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

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

    def __init__(__self__, *,
                 backend_pool_names: Optional[Sequence[str]] = None,
                 frontend_ip_configuration_names: Optional[Sequence[str]] = None,
                 health_probe_names: Optional[Sequence[str]] = None,
                 name: Optional[str] = None):
        """
        :param Sequence[str] backend_pool_names: A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        :param Sequence[str] frontend_ip_configuration_names: A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        :param Sequence[str] health_probe_names: A list of Health Probe names. Changing this forces a new resource to be created.
        :param str name: The full resource name of the Load Balancer. Changing this forces a new resource to be created.
        """
        if backend_pool_names is not None:
            pulumi.set(__self__, "backend_pool_names", backend_pool_names)
        if frontend_ip_configuration_names is not None:
            pulumi.set(__self__, "frontend_ip_configuration_names", frontend_ip_configuration_names)
        if health_probe_names is not None:
            pulumi.set(__self__, "health_probe_names", health_probe_names)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="backendPoolNames")
    def backend_pool_names(self) -> Optional[Sequence[str]]:
        """
        A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "backend_pool_names")

    @property
    @pulumi.getter(name="frontendIpConfigurationNames")
    def frontend_ip_configuration_names(self) -> Optional[Sequence[str]]:
        """
        A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "frontend_ip_configuration_names")

    @property
    @pulumi.getter(name="healthProbeNames")
    def health_probe_names(self) -> Optional[Sequence[str]]:
        """
        A list of Health Probe names. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "health_probe_names")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        The full resource name of the Load Balancer. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachine(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dataDisks":
            suggest = "data_disks"
        elif key == "hostName":
            suggest = "host_name"
        elif key == "networkInterfaceNames":
            suggest = "network_interface_names"
        elif key == "osDiskName":
            suggest = "os_disk_name"
        elif key == "virtualMachineName":
            suggest = "virtual_machine_name"

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

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

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

    def __init__(__self__, *,
                 data_disks: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDisk']] = None,
                 host_name: Optional[str] = None,
                 network_interface_names: Optional[Sequence[str]] = None,
                 os_disk_name: Optional[str] = None,
                 virtual_machine_name: Optional[str] = None):
        """
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs'] data_disks: One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param str host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param Sequence[str] network_interface_names: A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        :param str os_disk_name: The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        :param str virtual_machine_name: The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        if data_disks is not None:
            pulumi.set(__self__, "data_disks", data_disks)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if network_interface_names is not None:
            pulumi.set(__self__, "network_interface_names", network_interface_names)
        if os_disk_name is not None:
            pulumi.set(__self__, "os_disk_name", os_disk_name)
        if virtual_machine_name is not None:
            pulumi.set(__self__, "virtual_machine_name", virtual_machine_name)

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDisk']]:
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[str]:
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "host_name")

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[Sequence[str]]:
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "network_interface_names")

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[str]:
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_disk_name")

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[str]:
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDisk(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeName":
            suggest = "volume_name"

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

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

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

    def __init__(__self__, *,
                 names: Sequence[str],
                 volume_name: str):
        """
        :param Sequence[str] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param str volume_name: The name of the Volume. Changing this forces a new resource to be created.
               
               > **Note:** Possible value for Application Server and Central Server is `default`.
               
               > **Note:** Possible values for Database Server are `hanaData`, `hanaLog`, `hanaShared` and `usrSap`.
        """
        pulumi.set(__self__, "names", names)
        pulumi.set(__self__, "volume_name", volume_name)

    @property
    @pulumi.getter
    def names(self) -> Sequence[str]:
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "names")

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> str:
        """
        The name of the Volume. Changing this forces a new resource to be created.

        > **Note:** Possible value for Application Server and Central Server is `default`.

        > **Note:** Possible values for Database Server are `hanaData`, `hanaLog`, `hanaShared` and `usrSap`.
        """
        return pulumi.get(self, "volume_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilitySetName":
            suggest = "availability_set_name"
        elif key == "loadBalancer":
            suggest = "load_balancer"
        elif key == "virtualMachines":
            suggest = "virtual_machines"

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

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

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

    def __init__(__self__, *,
                 availability_set_name: Optional[str] = None,
                 load_balancer: Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancer'] = None,
                 virtual_machines: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachine']] = None):
        """
        :param str availability_set_name: The full name for the availability set. Changing this forces a new resource to be created.
        :param 'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgs' load_balancer: A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgs'] virtual_machines: One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
        if availability_set_name is not None:
            pulumi.set(__self__, "availability_set_name", availability_set_name)
        if load_balancer is not None:
            pulumi.set(__self__, "load_balancer", load_balancer)
        if virtual_machines is not None:
            pulumi.set(__self__, "virtual_machines", virtual_machines)

    @property
    @pulumi.getter(name="availabilitySetName")
    def availability_set_name(self) -> Optional[str]:
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "availability_set_name")

    @property
    @pulumi.getter(name="loadBalancer")
    def load_balancer(self) -> Optional['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancer']:
        """
        A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "load_balancer")

    @property
    @pulumi.getter(name="virtualMachines")
    def virtual_machines(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachine']]:
        """
        One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machines")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendPoolNames":
            suggest = "backend_pool_names"
        elif key == "frontendIpConfigurationNames":
            suggest = "frontend_ip_configuration_names"
        elif key == "healthProbeNames":
            suggest = "health_probe_names"

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

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

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

    def __init__(__self__, *,
                 backend_pool_names: Optional[Sequence[str]] = None,
                 frontend_ip_configuration_names: Optional[Sequence[str]] = None,
                 health_probe_names: Optional[Sequence[str]] = None,
                 name: Optional[str] = None):
        """
        :param Sequence[str] backend_pool_names: A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        :param Sequence[str] frontend_ip_configuration_names: A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        :param Sequence[str] health_probe_names: A list of Health Probe names. Changing this forces a new resource to be created.
        :param str name: The full resource name of the Load Balancer. Changing this forces a new resource to be created.
        """
        if backend_pool_names is not None:
            pulumi.set(__self__, "backend_pool_names", backend_pool_names)
        if frontend_ip_configuration_names is not None:
            pulumi.set(__self__, "frontend_ip_configuration_names", frontend_ip_configuration_names)
        if health_probe_names is not None:
            pulumi.set(__self__, "health_probe_names", health_probe_names)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="backendPoolNames")
    def backend_pool_names(self) -> Optional[Sequence[str]]:
        """
        A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "backend_pool_names")

    @property
    @pulumi.getter(name="frontendIpConfigurationNames")
    def frontend_ip_configuration_names(self) -> Optional[Sequence[str]]:
        """
        A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "frontend_ip_configuration_names")

    @property
    @pulumi.getter(name="healthProbeNames")
    def health_probe_names(self) -> Optional[Sequence[str]]:
        """
        A list of Health Probe names. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "health_probe_names")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        The full resource name of the Load Balancer. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachine(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dataDisks":
            suggest = "data_disks"
        elif key == "hostName":
            suggest = "host_name"
        elif key == "networkInterfaceNames":
            suggest = "network_interface_names"
        elif key == "osDiskName":
            suggest = "os_disk_name"
        elif key == "virtualMachineName":
            suggest = "virtual_machine_name"

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

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

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

    def __init__(__self__, *,
                 data_disks: Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDisk']] = None,
                 host_name: Optional[str] = None,
                 network_interface_names: Optional[Sequence[str]] = None,
                 os_disk_name: Optional[str] = None,
                 virtual_machine_name: Optional[str] = None):
        """
        :param Sequence['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs'] data_disks: One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param str host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param Sequence[str] network_interface_names: A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        :param str os_disk_name: The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        :param str virtual_machine_name: The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        if data_disks is not None:
            pulumi.set(__self__, "data_disks", data_disks)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if network_interface_names is not None:
            pulumi.set(__self__, "network_interface_names", network_interface_names)
        if os_disk_name is not None:
            pulumi.set(__self__, "os_disk_name", os_disk_name)
        if virtual_machine_name is not None:
            pulumi.set(__self__, "virtual_machine_name", virtual_machine_name)

    @property
    @pulumi.getter(name="dataDisks")
    def data_disks(self) -> Optional[Sequence['outputs.ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDisk']]:
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[str]:
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "host_name")

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[Sequence[str]]:
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "network_interface_names")

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[str]:
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "os_disk_name")

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[str]:
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_machine_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDisk(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeName":
            suggest = "volume_name"

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

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

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

    def __init__(__self__, *,
                 names: Sequence[str],
                 volume_name: str):
        """
        :param Sequence[str] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param str volume_name: The name of the Volume. Changing this forces a new resource to be created.
               
               > **Note:** Possible value for Application Server and Central Server is `default`.
               
               > **Note:** Possible values for Database Server are `hanaData`, `hanaLog`, `hanaShared` and `usrSap`.
        """
        pulumi.set(__self__, "names", names)
        pulumi.set(__self__, "volume_name", volume_name)

    @property
    @pulumi.getter
    def names(self) -> Sequence[str]:
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "names")

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> str:
        """
        The name of the Volume. Changing this forces a new resource to be created.

        > **Note:** Possible value for Application Server and Central Server is `default`.

        > **Note:** Possible values for Database Server are `hanaData`, `hanaLog`, `hanaShared` and `usrSap`.
        """
        return pulumi.get(self, "volume_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accountName":
            suggest = "account_name"
        elif key == "privateEndpointName":
            suggest = "private_endpoint_name"

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

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

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

    def __init__(__self__, *,
                 account_name: Optional[str] = None,
                 private_endpoint_name: Optional[str] = None):
        """
        :param str account_name: The full name of the Shared Storage Account. Changing this forces a new resource to be created.
        :param str private_endpoint_name: The full name of Private Endpoint for the Shared Storage Account. Changing this forces a new resource to be created.
        """
        if account_name is not None:
            pulumi.set(__self__, "account_name", account_name)
        if private_endpoint_name is not None:
            pulumi.set(__self__, "private_endpoint_name", private_endpoint_name)

    @property
    @pulumi.getter(name="accountName")
    def account_name(self) -> Optional[str]:
        """
        The full name of the Shared Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "account_name")

    @property
    @pulumi.getter(name="privateEndpointName")
    def private_endpoint_name(self) -> Optional[str]:
        """
        The full name of Private Endpoint for the Shared Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "private_endpoint_name")


@pulumi.output_type
class ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMount(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "resourceGroupId":
            suggest = "resource_group_id"
        elif key == "storageAccountName":
            suggest = "storage_account_name"

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

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

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

    def __init__(__self__, *,
                 resource_group_id: Optional[str] = None,
                 storage_account_name: Optional[str] = None):
        """
        :param str resource_group_id: The ID of the Resource Group of the transport File Share. Changing this forces a new resource to be created.
        :param str storage_account_name: The name of the Storage Account of the File Share. Changing this forces a new resource to be created.
        """
        if resource_group_id is not None:
            pulumi.set(__self__, "resource_group_id", resource_group_id)
        if storage_account_name is not None:
            pulumi.set(__self__, "storage_account_name", storage_account_name)

    @property
    @pulumi.getter(name="resourceGroupId")
    def resource_group_id(self) -> Optional[str]:
        """
        The ID of the Resource Group of the transport File Share. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_id")

    @property
    @pulumi.getter(name="storageAccountName")
    def storage_account_name(self) -> Optional[str]:
        """
        The name of the Storage Account of the File Share. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_name")


