# 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

__all__ = [
    'DiscoveryVirtualInstanceIdentityArgs',
    'DiscoveryVirtualInstanceIdentityArgsDict',
    'SingleNodeVirtualInstanceIdentityArgs',
    'SingleNodeVirtualInstanceIdentityArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgsDict',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs',
    'SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgsDict',
    'ThreeTierVirtualInstanceIdentityArgs',
    'ThreeTierVirtualInstanceIdentityArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgsDict',
    'ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgs',
    'ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgsDict',
]

MYPY = False

if not MYPY:
    class DiscoveryVirtualInstanceIdentityArgsDict(TypedDict):
        identity_ids: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Discovery Virtual Instance.
        """
        type: pulumi.Input[str]
        """
        The type of Managed Service Identity that should be configured on this SAP Discovery Virtual Instance. The only possible value is `UserAssigned`.
        """
elif False:
    DiscoveryVirtualInstanceIdentityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class DiscoveryVirtualInstanceIdentityArgs:
    def __init__(__self__, *,
                 identity_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: A list of User Assigned Managed Identity IDs to be assigned to this SAP Discovery Virtual Instance.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Discovery Virtual Instance.
        """
        return pulumi.get(self, "identity_ids")

    @identity_ids.setter
    def identity_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "identity_ids", value)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[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")

    @type.setter
    def type(self, value: pulumi.Input[str]):
        pulumi.set(self, "type", value)


if not MYPY:
    class SingleNodeVirtualInstanceIdentityArgsDict(TypedDict):
        identity_ids: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Single Node Virtual Instance.
        """
        type: pulumi.Input[str]
        """
        The type of Managed Service Identity that should be configured on this SAP Single Node Virtual Instance. The only possible value is `UserAssigned`.
        """
elif False:
    SingleNodeVirtualInstanceIdentityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceIdentityArgs:
    def __init__(__self__, *,
                 identity_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: A list of User Assigned Managed Identity IDs to be assigned to this SAP Single Node Virtual Instance.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[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")

    @identity_ids.setter
    def identity_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "identity_ids", value)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[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")

    @type.setter
    def type(self, value: pulumi.Input[str]):
        pulumi.set(self, "type", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationArgsDict(TypedDict):
        app_resource_group_name: pulumi.Input[str]
        subnet_id: pulumi.Input[str]
        """
        The resource ID of the Subnet for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        virtual_machine_configuration: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgsDict']
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        database_type: NotRequired[pulumi.Input[str]]
        """
        The supported SAP database type. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        """
        disk_volume_configurations: NotRequired[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgsDict']]]]
        """
        One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        """
        secondary_ip_enabled: NotRequired[pulumi.Input[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.
        """
        virtual_machine_resource_names: NotRequired[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgsDict']]
        """
        A `virtual_machine_resource_names` block as defined below. Changing this forces a new resource to be created.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationArgs:
    def __init__(__self__, *,
                 app_resource_group_name: pulumi.Input[str],
                 subnet_id: pulumi.Input[str],
                 virtual_machine_configuration: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgs'],
                 database_type: Optional[pulumi.Input[str]] = None,
                 disk_volume_configurations: Optional[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs']]]] = None,
                 secondary_ip_enabled: Optional[pulumi.Input[bool]] = None,
                 virtual_machine_resource_names: Optional[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgs']] = None):
        """
        :param pulumi.Input[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 pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgs'] virtual_machine_configuration: A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[str] database_type: The supported SAP database type. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs']]] disk_volume_configurations: One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input['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) -> pulumi.Input[str]:
        return pulumi.get(self, "app_resource_group_name")

    @app_resource_group_name.setter
    def app_resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "app_resource_group_name", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[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")

    @subnet_id.setter
    def subnet_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "subnet_id", value)

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

    @virtual_machine_configuration.setter
    def virtual_machine_configuration(self, value: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgs']):
        pulumi.set(self, "virtual_machine_configuration", value)

    @property
    @pulumi.getter(name="databaseType")
    def database_type(self) -> Optional[pulumi.Input[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")

    @database_type.setter
    def database_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "database_type", value)

    @property
    @pulumi.getter(name="diskVolumeConfigurations")
    def disk_volume_configurations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs']]]]:
        """
        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")

    @disk_volume_configurations.setter
    def disk_volume_configurations(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs']]]]):
        pulumi.set(self, "disk_volume_configurations", value)

    @property
    @pulumi.getter(name="secondaryIpEnabled")
    def secondary_ip_enabled(self) -> Optional[pulumi.Input[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")

    @secondary_ip_enabled.setter
    def secondary_ip_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "secondary_ip_enabled", value)

    @property
    @pulumi.getter(name="virtualMachineResourceNames")
    def virtual_machine_resource_names(self) -> Optional[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgs']]:
        """
        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")

    @virtual_machine_resource_names.setter
    def virtual_machine_resource_names(self, value: Optional[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgs']]):
        pulumi.set(self, "virtual_machine_resource_names", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgsDict(TypedDict):
        number_of_disks: pulumi.Input[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.
        """
        size_in_gb: pulumi.Input[int]
        """
        The size of the Disk in GB. Changing this forces a new resource to be created.
        """
        sku_name: pulumi.Input[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.
        """
        volume_name: pulumi.Input[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.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationDiskVolumeConfigurationArgs:
    def __init__(__self__, *,
                 number_of_disks: pulumi.Input[int],
                 size_in_gb: pulumi.Input[int],
                 sku_name: pulumi.Input[str],
                 volume_name: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[int] size_in_gb: The size of the Disk in GB. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[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")

    @number_of_disks.setter
    def number_of_disks(self, value: pulumi.Input[int]):
        pulumi.set(self, "number_of_disks", value)

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

    @size_in_gb.setter
    def size_in_gb(self, value: pulumi.Input[int]):
        pulumi.set(self, "size_in_gb", value)

    @property
    @pulumi.getter(name="skuName")
    def sku_name(self) -> pulumi.Input[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")

    @sku_name.setter
    def sku_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "sku_name", value)

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> pulumi.Input[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")

    @volume_name.setter
    def volume_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "volume_name", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgsDict(TypedDict):
        image: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgsDict']
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        os_profile: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgsDict']
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        virtual_machine_size: pulumi.Input[str]
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationArgs:
    def __init__(__self__, *,
                 image: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs'],
                 os_profile: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgs'],
                 virtual_machine_size: pulumi.Input[str]):
        """
        :param pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs'] image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgs'] os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs']:
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @image.setter
    def image(self, value: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs']):
        pulumi.set(self, "image", value)

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

    @os_profile.setter
    def os_profile(self, value: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgs']):
        pulumi.set(self, "os_profile", value)

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

    @virtual_machine_size.setter
    def virtual_machine_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_machine_size", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgsDict(TypedDict):
        offer: pulumi.Input[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.
        """
        publisher: pulumi.Input[str]
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        sku: pulumi.Input[str]
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        version: pulumi.Input[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.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationImageArgs:
    def __init__(__self__, *,
                 offer: pulumi.Input[str],
                 publisher: pulumi.Input[str],
                 sku: pulumi.Input[str],
                 version: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[str] publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[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")

    @offer.setter
    def offer(self, value: pulumi.Input[str]):
        pulumi.set(self, "offer", value)

    @property
    @pulumi.getter
    def publisher(self) -> pulumi.Input[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")

    @publisher.setter
    def publisher(self, value: pulumi.Input[str]):
        pulumi.set(self, "publisher", value)

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

    @sku.setter
    def sku(self, value: pulumi.Input[str]):
        pulumi.set(self, "sku", value)

    @property
    @pulumi.getter
    def version(self) -> pulumi.Input[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")

    @version.setter
    def version(self, value: pulumi.Input[str]):
        pulumi.set(self, "version", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgsDict(TypedDict):
        admin_username: pulumi.Input[str]
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        ssh_private_key: pulumi.Input[str]
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        ssh_public_key: pulumi.Input[str]
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineConfigurationOsProfileArgs:
    def __init__(__self__, *,
                 admin_username: pulumi.Input[str],
                 ssh_private_key: pulumi.Input[str],
                 ssh_public_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[str]:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @admin_username.setter
    def admin_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "admin_username", value)

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> pulumi.Input[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")

    @ssh_private_key.setter
    def ssh_private_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_private_key", value)

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> pulumi.Input[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")

    @ssh_public_key.setter
    def ssh_public_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_public_key", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgsDict(TypedDict):
        data_disks: NotRequired[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgsDict']]]]
        """
        (Optional) One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        host_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        network_interface_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        os_disk_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        virtual_machine_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesArgs:
    def __init__(__self__, *,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs']]]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 network_interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 os_disk_name: Optional[pulumi.Input[str]] = None,
                 virtual_machine_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs']]] data_disks: (Optional) One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[str] host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs']]]]:
        """
        (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")

    @data_disks.setter
    def data_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs']]]]):
        pulumi.set(self, "data_disks", value)

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[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")

    @host_name.setter
    def host_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_name", value)

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

    @network_interface_names.setter
    def network_interface_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "network_interface_names", value)

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[pulumi.Input[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")

    @os_disk_name.setter
    def os_disk_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_disk_name", value)

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[pulumi.Input[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")

    @virtual_machine_name.setter
    def virtual_machine_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_machine_name", value)


if not MYPY:
    class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgsDict(TypedDict):
        names: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        volume_name: pulumi.Input[str]
        """
        The name of the Volume. The only possible value is `default`. Changing this forces a new resource to be created.
        """
elif False:
    SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SingleNodeVirtualInstanceSingleServerConfigurationVirtualMachineResourceNamesDataDiskArgs:
    def __init__(__self__, *,
                 names: pulumi.Input[Sequence[pulumi.Input[str]]],
                 volume_name: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[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")

    @names.setter
    def names(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "names", value)

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> pulumi.Input[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")

    @volume_name.setter
    def volume_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "volume_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceIdentityArgsDict(TypedDict):
        identity_ids: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of User Assigned Managed Identity IDs to be assigned to this SAP Three Tier Virtual Instance.
        """
        type: pulumi.Input[str]
        """
        The type of Managed Service Identity that should be configured on this SAP Three Tier Virtual Instance. Only possible value is `UserAssigned`.
        """
elif False:
    ThreeTierVirtualInstanceIdentityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceIdentityArgs:
    def __init__(__self__, *,
                 identity_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: A list of User Assigned Managed Identity IDs to be assigned to this SAP Three Tier Virtual Instance.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[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")

    @identity_ids.setter
    def identity_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "identity_ids", value)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[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")

    @type.setter
    def type(self, value: pulumi.Input[str]):
        pulumi.set(self, "type", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationArgsDict(TypedDict):
        app_resource_group_name: pulumi.Input[str]
        application_server_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgsDict']
        """
        An `application_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        central_server_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgsDict']
        """
        A `central_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        database_server_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgsDict']
        """
        A `database_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        high_availability_type: NotRequired[pulumi.Input[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.
        """
        resource_names: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgsDict']]
        """
        A `resource_names` block as defined below. Changing this forces a new resource to be created.
        """
        secondary_ip_enabled: NotRequired[pulumi.Input[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.
        """
        transport_create_and_mount: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgsDict']]
        """
        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.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationArgs:
    def __init__(__self__, *,
                 app_resource_group_name: pulumi.Input[str],
                 application_server_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgs'],
                 central_server_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgs'],
                 database_server_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgs'],
                 high_availability_type: Optional[pulumi.Input[str]] = None,
                 resource_names: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgs']] = None,
                 secondary_ip_enabled: Optional[pulumi.Input[bool]] = None,
                 transport_create_and_mount: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgs']] = None):
        """
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgs'] application_server_configuration: An `application_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgs'] central_server_configuration: A `central_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgs'] database_server_configuration: A `database_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgs'] resource_names: A `resource_names` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input['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) -> pulumi.Input[str]:
        return pulumi.get(self, "app_resource_group_name")

    @app_resource_group_name.setter
    def app_resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "app_resource_group_name", value)

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

    @application_server_configuration.setter
    def application_server_configuration(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgs']):
        pulumi.set(self, "application_server_configuration", value)

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

    @central_server_configuration.setter
    def central_server_configuration(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgs']):
        pulumi.set(self, "central_server_configuration", value)

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

    @database_server_configuration.setter
    def database_server_configuration(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgs']):
        pulumi.set(self, "database_server_configuration", value)

    @property
    @pulumi.getter(name="highAvailabilityType")
    def high_availability_type(self) -> Optional[pulumi.Input[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")

    @high_availability_type.setter
    def high_availability_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "high_availability_type", value)

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

    @resource_names.setter
    def resource_names(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgs']]):
        pulumi.set(self, "resource_names", value)

    @property
    @pulumi.getter(name="secondaryIpEnabled")
    def secondary_ip_enabled(self) -> Optional[pulumi.Input[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")

    @secondary_ip_enabled.setter
    def secondary_ip_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "secondary_ip_enabled", value)

    @property
    @pulumi.getter(name="transportCreateAndMount")
    def transport_create_and_mount(self) -> Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgs']]:
        """
        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")

    @transport_create_and_mount.setter
    def transport_create_and_mount(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgs']]):
        pulumi.set(self, "transport_create_and_mount", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgsDict(TypedDict):
        instance_count: pulumi.Input[int]
        """
        The number of instances for the Application Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        subnet_id: pulumi.Input[str]
        """
        The resource ID of the Subnet for the Application Server. Changing this forces a new resource to be created.
        """
        virtual_machine_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgsDict']
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 subnet_id: pulumi.Input[str],
                 virtual_machine_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgs']):
        """
        :param pulumi.Input[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 pulumi.Input[str] subnet_id: The resource ID of the Subnet for the Application Server. Changing this forces a new resource to be created.
        :param pulumi.Input['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) -> pulumi.Input[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")

    @instance_count.setter
    def instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "instance_count", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[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")

    @subnet_id.setter
    def subnet_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "subnet_id", value)

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

    @virtual_machine_configuration.setter
    def virtual_machine_configuration(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgs']):
        pulumi.set(self, "virtual_machine_configuration", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgsDict(TypedDict):
        image: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgsDict']
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        os_profile: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgsDict']
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        virtual_machine_size: pulumi.Input[str]
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationArgs:
    def __init__(__self__, *,
                 image: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs'],
                 os_profile: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgs'],
                 virtual_machine_size: pulumi.Input[str]):
        """
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs'] image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgs'] os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs']:
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @image.setter
    def image(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs']):
        pulumi.set(self, "image", value)

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

    @os_profile.setter
    def os_profile(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgs']):
        pulumi.set(self, "os_profile", value)

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

    @virtual_machine_size.setter
    def virtual_machine_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_machine_size", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgsDict(TypedDict):
        offer: pulumi.Input[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.
        """
        publisher: pulumi.Input[str]
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        sku: pulumi.Input[str]
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        version: pulumi.Input[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.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationImageArgs:
    def __init__(__self__, *,
                 offer: pulumi.Input[str],
                 publisher: pulumi.Input[str],
                 sku: pulumi.Input[str],
                 version: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[str] publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[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")

    @offer.setter
    def offer(self, value: pulumi.Input[str]):
        pulumi.set(self, "offer", value)

    @property
    @pulumi.getter
    def publisher(self) -> pulumi.Input[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")

    @publisher.setter
    def publisher(self, value: pulumi.Input[str]):
        pulumi.set(self, "publisher", value)

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

    @sku.setter
    def sku(self, value: pulumi.Input[str]):
        pulumi.set(self, "sku", value)

    @property
    @pulumi.getter
    def version(self) -> pulumi.Input[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")

    @version.setter
    def version(self, value: pulumi.Input[str]):
        pulumi.set(self, "version", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgsDict(TypedDict):
        admin_username: pulumi.Input[str]
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        ssh_private_key: pulumi.Input[str]
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        ssh_public_key: pulumi.Input[str]
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationApplicationServerConfigurationVirtualMachineConfigurationOsProfileArgs:
    def __init__(__self__, *,
                 admin_username: pulumi.Input[str],
                 ssh_private_key: pulumi.Input[str],
                 ssh_public_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[str]:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @admin_username.setter
    def admin_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "admin_username", value)

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> pulumi.Input[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")

    @ssh_private_key.setter
    def ssh_private_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_private_key", value)

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> pulumi.Input[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")

    @ssh_public_key.setter
    def ssh_public_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_public_key", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgsDict(TypedDict):
        instance_count: pulumi.Input[int]
        """
        The number of instances for the Central Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        subnet_id: pulumi.Input[str]
        """
        The resource ID of the Subnet for the Central Server. Changing this forces a new resource to be created.
        """
        virtual_machine_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgsDict']
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 subnet_id: pulumi.Input[str],
                 virtual_machine_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgs']):
        """
        :param pulumi.Input[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 pulumi.Input[str] subnet_id: The resource ID of the Subnet for the Central Server. Changing this forces a new resource to be created.
        :param pulumi.Input['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) -> pulumi.Input[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")

    @instance_count.setter
    def instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "instance_count", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[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")

    @subnet_id.setter
    def subnet_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "subnet_id", value)

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

    @virtual_machine_configuration.setter
    def virtual_machine_configuration(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgs']):
        pulumi.set(self, "virtual_machine_configuration", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgsDict(TypedDict):
        image: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgsDict']
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        os_profile: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgsDict']
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        virtual_machine_size: pulumi.Input[str]
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationArgs:
    def __init__(__self__, *,
                 image: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs'],
                 os_profile: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgs'],
                 virtual_machine_size: pulumi.Input[str]):
        """
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs'] image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgs'] os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs']:
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @image.setter
    def image(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs']):
        pulumi.set(self, "image", value)

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

    @os_profile.setter
    def os_profile(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgs']):
        pulumi.set(self, "os_profile", value)

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

    @virtual_machine_size.setter
    def virtual_machine_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_machine_size", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgsDict(TypedDict):
        offer: pulumi.Input[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.
        """
        publisher: pulumi.Input[str]
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        sku: pulumi.Input[str]
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        version: pulumi.Input[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.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationImageArgs:
    def __init__(__self__, *,
                 offer: pulumi.Input[str],
                 publisher: pulumi.Input[str],
                 sku: pulumi.Input[str],
                 version: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[str] publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[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")

    @offer.setter
    def offer(self, value: pulumi.Input[str]):
        pulumi.set(self, "offer", value)

    @property
    @pulumi.getter
    def publisher(self) -> pulumi.Input[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")

    @publisher.setter
    def publisher(self, value: pulumi.Input[str]):
        pulumi.set(self, "publisher", value)

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

    @sku.setter
    def sku(self, value: pulumi.Input[str]):
        pulumi.set(self, "sku", value)

    @property
    @pulumi.getter
    def version(self) -> pulumi.Input[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")

    @version.setter
    def version(self, value: pulumi.Input[str]):
        pulumi.set(self, "version", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgsDict(TypedDict):
        admin_username: pulumi.Input[str]
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        ssh_private_key: pulumi.Input[str]
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        ssh_public_key: pulumi.Input[str]
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationCentralServerConfigurationVirtualMachineConfigurationOsProfileArgs:
    def __init__(__self__, *,
                 admin_username: pulumi.Input[str],
                 ssh_private_key: pulumi.Input[str],
                 ssh_public_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[str]:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @admin_username.setter
    def admin_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "admin_username", value)

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> pulumi.Input[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")

    @ssh_private_key.setter
    def ssh_private_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_private_key", value)

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> pulumi.Input[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")

    @ssh_public_key.setter
    def ssh_public_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_public_key", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgsDict(TypedDict):
        instance_count: pulumi.Input[int]
        """
        The number of instances for the Database Server. Possible values are at least `1`. Changing this forces a new resource to be created.
        """
        subnet_id: pulumi.Input[str]
        """
        The resource ID of the Subnet for the Database Server. Changing this forces a new resource to be created.
        """
        virtual_machine_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgsDict']
        """
        A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        database_type: NotRequired[pulumi.Input[str]]
        """
        The database type for the Database Server. Possible values are `DB2` and `HANA`. Changing this forces a new resource to be created.
        """
        disk_volume_configurations: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgsDict']]]]
        """
        One or more `disk_volume_configuration` blocks as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationArgs:
    def __init__(__self__, *,
                 instance_count: pulumi.Input[int],
                 subnet_id: pulumi.Input[str],
                 virtual_machine_configuration: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgs'],
                 database_type: Optional[pulumi.Input[str]] = None,
                 disk_volume_configurations: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgs']]]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[str] subnet_id: The resource ID of the Subnet for the Database Server. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgs'] virtual_machine_configuration: A `virtual_machine_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['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) -> pulumi.Input[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")

    @instance_count.setter
    def instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "instance_count", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[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")

    @subnet_id.setter
    def subnet_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "subnet_id", value)

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

    @virtual_machine_configuration.setter
    def virtual_machine_configuration(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgs']):
        pulumi.set(self, "virtual_machine_configuration", value)

    @property
    @pulumi.getter(name="databaseType")
    def database_type(self) -> Optional[pulumi.Input[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")

    @database_type.setter
    def database_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "database_type", value)

    @property
    @pulumi.getter(name="diskVolumeConfigurations")
    def disk_volume_configurations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgs']]]]:
        """
        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")

    @disk_volume_configurations.setter
    def disk_volume_configurations(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgs']]]]):
        pulumi.set(self, "disk_volume_configurations", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgsDict(TypedDict):
        number_of_disks: pulumi.Input[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.
        """
        size_in_gb: pulumi.Input[int]
        """
        The size of the Disk in GB. Changing this forces a new resource to be created.
        """
        sku_name: pulumi.Input[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.
        """
        volume_name: pulumi.Input[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.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationDiskVolumeConfigurationArgs:
    def __init__(__self__, *,
                 number_of_disks: pulumi.Input[int],
                 size_in_gb: pulumi.Input[int],
                 sku_name: pulumi.Input[str],
                 volume_name: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[int] size_in_gb: The size of the Disk in GB. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[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")

    @number_of_disks.setter
    def number_of_disks(self, value: pulumi.Input[int]):
        pulumi.set(self, "number_of_disks", value)

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

    @size_in_gb.setter
    def size_in_gb(self, value: pulumi.Input[int]):
        pulumi.set(self, "size_in_gb", value)

    @property
    @pulumi.getter(name="skuName")
    def sku_name(self) -> pulumi.Input[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")

    @sku_name.setter
    def sku_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "sku_name", value)

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> pulumi.Input[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")

    @volume_name.setter
    def volume_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "volume_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgsDict(TypedDict):
        image: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgsDict']
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        os_profile: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgsDict']
        """
        An `os_profile` block as defined below. Changing this forces a new resource to be created.
        """
        virtual_machine_size: pulumi.Input[str]
        """
        The size of the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationArgs:
    def __init__(__self__, *,
                 image: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs'],
                 os_profile: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgs'],
                 virtual_machine_size: pulumi.Input[str]):
        """
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs'] image: An `image` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgs'] os_profile: An `os_profile` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs']:
        """
        An `image` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "image")

    @image.setter
    def image(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs']):
        pulumi.set(self, "image", value)

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

    @os_profile.setter
    def os_profile(self, value: pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgs']):
        pulumi.set(self, "os_profile", value)

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

    @virtual_machine_size.setter
    def virtual_machine_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "virtual_machine_size", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgsDict(TypedDict):
        offer: pulumi.Input[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.
        """
        publisher: pulumi.Input[str]
        """
        The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        """
        sku: pulumi.Input[str]
        """
        The SKU of the Image. Changing this forces a new resource to be created.
        """
        version: pulumi.Input[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.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationImageArgs:
    def __init__(__self__, *,
                 offer: pulumi.Input[str],
                 publisher: pulumi.Input[str],
                 sku: pulumi.Input[str],
                 version: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[str] publisher: The publisher of the Image. Possible values are `RedHat` and `SUSE`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] sku: The SKU of the Image. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[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")

    @offer.setter
    def offer(self, value: pulumi.Input[str]):
        pulumi.set(self, "offer", value)

    @property
    @pulumi.getter
    def publisher(self) -> pulumi.Input[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")

    @publisher.setter
    def publisher(self, value: pulumi.Input[str]):
        pulumi.set(self, "publisher", value)

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

    @sku.setter
    def sku(self, value: pulumi.Input[str]):
        pulumi.set(self, "sku", value)

    @property
    @pulumi.getter
    def version(self) -> pulumi.Input[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")

    @version.setter
    def version(self, value: pulumi.Input[str]):
        pulumi.set(self, "version", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgsDict(TypedDict):
        admin_username: pulumi.Input[str]
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        ssh_private_key: pulumi.Input[str]
        """
        The SSH public key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
        ssh_public_key: pulumi.Input[str]
        """
        The SSH private key that is used to authenticate with the Virtual Machine. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationDatabaseServerConfigurationVirtualMachineConfigurationOsProfileArgs:
    def __init__(__self__, *,
                 admin_username: pulumi.Input[str],
                 ssh_private_key: pulumi.Input[str],
                 ssh_public_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] admin_username: The name of the administrator account. Changing this forces a new resource to be created.
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[str]:
        """
        The name of the administrator account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "admin_username")

    @admin_username.setter
    def admin_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "admin_username", value)

    @property
    @pulumi.getter(name="sshPrivateKey")
    def ssh_private_key(self) -> pulumi.Input[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")

    @ssh_private_key.setter
    def ssh_private_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_private_key", value)

    @property
    @pulumi.getter(name="sshPublicKey")
    def ssh_public_key(self) -> pulumi.Input[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")

    @ssh_public_key.setter
    def ssh_public_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "ssh_public_key", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgsDict(TypedDict):
        application_server: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgsDict']]
        """
        An `application_server` block as defined below. Changing this forces a new resource to be created.
        """
        central_server: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgsDict']]
        """
        A `central_server` block as defined below. Changing this forces a new resource to be created.
        """
        database_server: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgsDict']]
        """
        A `database_server` block as defined below. Changing this forces a new resource to be created.
        """
        shared_storage: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgsDict']]
        """
        A `shared_storage` block as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesArgs:
    def __init__(__self__, *,
                 application_server: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs']] = None,
                 central_server: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgs']] = None,
                 database_server: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgs']] = None,
                 shared_storage: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgs']] = None):
        """
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs'] application_server: An `application_server` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgs'] central_server: A `central_server` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgs'] database_server: A `database_server` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['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[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs']]:
        """
        An `application_server` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "application_server")

    @application_server.setter
    def application_server(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs']]):
        pulumi.set(self, "application_server", value)

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

    @central_server.setter
    def central_server(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgs']]):
        pulumi.set(self, "central_server", value)

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

    @database_server.setter
    def database_server(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgs']]):
        pulumi.set(self, "database_server", value)

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

    @shared_storage.setter
    def shared_storage(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgs']]):
        pulumi.set(self, "shared_storage", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgsDict(TypedDict):
        availability_set_name: NotRequired[pulumi.Input[str]]
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        virtual_machines: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgsDict']]]]
        """
        One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerArgs:
    def __init__(__self__, *,
                 availability_set_name: Optional[pulumi.Input[str]] = None,
                 virtual_machines: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgs']]]] = None):
        """
        :param pulumi.Input[str] availability_set_name: The full name for the availability set. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[str]]:
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "availability_set_name")

    @availability_set_name.setter
    def availability_set_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "availability_set_name", value)

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

    @virtual_machines.setter
    def virtual_machines(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgs']]]]):
        pulumi.set(self, "virtual_machines", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgsDict(TypedDict):
        data_disks: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgsDict']]]]
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        host_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        network_interface_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        os_disk_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        virtual_machine_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineArgs:
    def __init__(__self__, *,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs']]]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 network_interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 os_disk_name: Optional[pulumi.Input[str]] = None,
                 virtual_machine_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs']]] data_disks: One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[str] host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs']]]]:
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @data_disks.setter
    def data_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs']]]]):
        pulumi.set(self, "data_disks", value)

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[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")

    @host_name.setter
    def host_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_name", value)

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

    @network_interface_names.setter
    def network_interface_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "network_interface_names", value)

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[pulumi.Input[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")

    @os_disk_name.setter
    def os_disk_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_disk_name", value)

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[pulumi.Input[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")

    @virtual_machine_name.setter
    def virtual_machine_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_machine_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgsDict(TypedDict):
        names: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        volume_name: pulumi.Input[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`.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesApplicationServerVirtualMachineDataDiskArgs:
    def __init__(__self__, *,
                 names: pulumi.Input[Sequence[pulumi.Input[str]]],
                 volume_name: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[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")

    @names.setter
    def names(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "names", value)

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> pulumi.Input[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")

    @volume_name.setter
    def volume_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "volume_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgsDict(TypedDict):
        availability_set_name: NotRequired[pulumi.Input[str]]
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        load_balancer: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgsDict']]
        """
        A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        """
        virtual_machines: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgsDict']]]]
        """
        One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerArgs:
    def __init__(__self__, *,
                 availability_set_name: Optional[pulumi.Input[str]] = None,
                 load_balancer: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgs']] = None,
                 virtual_machines: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgs']]]] = None):
        """
        :param pulumi.Input[str] availability_set_name: The full name for the availability set. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgs'] load_balancer: A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[str]]:
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "availability_set_name")

    @availability_set_name.setter
    def availability_set_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "availability_set_name", value)

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

    @load_balancer.setter
    def load_balancer(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgs']]):
        pulumi.set(self, "load_balancer", value)

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

    @virtual_machines.setter
    def virtual_machines(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgs']]]]):
        pulumi.set(self, "virtual_machines", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgsDict(TypedDict):
        backend_pool_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        """
        frontend_ip_configuration_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        """
        health_probe_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Health Probe names. Changing this forces a new resource to be created.
        """
        name: NotRequired[pulumi.Input[str]]
        """
        The full resource name of the Load Balancer. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerLoadBalancerArgs:
    def __init__(__self__, *,
                 backend_pool_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 frontend_ip_configuration_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 health_probe_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] backend_pool_names: A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] frontend_ip_configuration_names: A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] health_probe_names: A list of Health Probe names. Changing this forces a new resource to be created.
        :param pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input[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")

    @backend_pool_names.setter
    def backend_pool_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "backend_pool_names", value)

    @property
    @pulumi.getter(name="frontendIpConfigurationNames")
    def frontend_ip_configuration_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

    @frontend_ip_configuration_names.setter
    def frontend_ip_configuration_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "frontend_ip_configuration_names", value)

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

    @health_probe_names.setter
    def health_probe_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "health_probe_names", value)

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

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgsDict(TypedDict):
        data_disks: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgsDict']]]]
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        host_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        network_interface_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        os_disk_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        virtual_machine_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineArgs:
    def __init__(__self__, *,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs']]]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 network_interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 os_disk_name: Optional[pulumi.Input[str]] = None,
                 virtual_machine_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs']]] data_disks: One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[str] host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs']]]]:
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @data_disks.setter
    def data_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs']]]]):
        pulumi.set(self, "data_disks", value)

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[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")

    @host_name.setter
    def host_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_name", value)

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

    @network_interface_names.setter
    def network_interface_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "network_interface_names", value)

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[pulumi.Input[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")

    @os_disk_name.setter
    def os_disk_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_disk_name", value)

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[pulumi.Input[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")

    @virtual_machine_name.setter
    def virtual_machine_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_machine_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgsDict(TypedDict):
        names: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        volume_name: pulumi.Input[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`.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesCentralServerVirtualMachineDataDiskArgs:
    def __init__(__self__, *,
                 names: pulumi.Input[Sequence[pulumi.Input[str]]],
                 volume_name: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[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")

    @names.setter
    def names(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "names", value)

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> pulumi.Input[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")

    @volume_name.setter
    def volume_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "volume_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgsDict(TypedDict):
        availability_set_name: NotRequired[pulumi.Input[str]]
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        load_balancer: NotRequired[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgsDict']]
        """
        A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        """
        virtual_machines: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgsDict']]]]
        """
        One or more `virtual_machine` blocks as defined below. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerArgs:
    def __init__(__self__, *,
                 availability_set_name: Optional[pulumi.Input[str]] = None,
                 load_balancer: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgs']] = None,
                 virtual_machines: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgs']]]] = None):
        """
        :param pulumi.Input[str] availability_set_name: The full name for the availability set. Changing this forces a new resource to be created.
        :param pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgs'] load_balancer: A `load_balancer` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[str]]:
        """
        The full name for the availability set. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "availability_set_name")

    @availability_set_name.setter
    def availability_set_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "availability_set_name", value)

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

    @load_balancer.setter
    def load_balancer(self, value: Optional[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgs']]):
        pulumi.set(self, "load_balancer", value)

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

    @virtual_machines.setter
    def virtual_machines(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgs']]]]):
        pulumi.set(self, "virtual_machines", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgsDict(TypedDict):
        backend_pool_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        """
        frontend_ip_configuration_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        """
        health_probe_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Health Probe names. Changing this forces a new resource to be created.
        """
        name: NotRequired[pulumi.Input[str]]
        """
        The full resource name of the Load Balancer. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerLoadBalancerArgs:
    def __init__(__self__, *,
                 backend_pool_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 frontend_ip_configuration_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 health_probe_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] backend_pool_names: A list of Backend Pool names for the Load Balancer. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] frontend_ip_configuration_names: A list of Frontend IP Configuration names. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] health_probe_names: A list of Health Probe names. Changing this forces a new resource to be created.
        :param pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input[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")

    @backend_pool_names.setter
    def backend_pool_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "backend_pool_names", value)

    @property
    @pulumi.getter(name="frontendIpConfigurationNames")
    def frontend_ip_configuration_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

    @frontend_ip_configuration_names.setter
    def frontend_ip_configuration_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "frontend_ip_configuration_names", value)

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

    @health_probe_names.setter
    def health_probe_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "health_probe_names", value)

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

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgsDict(TypedDict):
        data_disks: NotRequired[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgsDict']]]]
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        host_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        """
        network_interface_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of full names for the Network Interface of the Virtual Machine. Changing this forces a new resource to be created.
        """
        os_disk_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the OS Disk attached to the Virtual Machine. Changing this forces a new resource to be created.
        """
        virtual_machine_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the Virtual Machine in a single server SAP system. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineArgs:
    def __init__(__self__, *,
                 data_disks: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs']]]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 network_interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 os_disk_name: Optional[pulumi.Input[str]] = None,
                 virtual_machine_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs']]] data_disks: One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[str] host_name: The full name of the host of the Virtual Machine. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs']]]]:
        """
        One or more `data_disk` blocks as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "data_disks")

    @data_disks.setter
    def data_disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs']]]]):
        pulumi.set(self, "data_disks", value)

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[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")

    @host_name.setter
    def host_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_name", value)

    @property
    @pulumi.getter(name="networkInterfaceNames")
    def network_interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

    @network_interface_names.setter
    def network_interface_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "network_interface_names", value)

    @property
    @pulumi.getter(name="osDiskName")
    def os_disk_name(self) -> Optional[pulumi.Input[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")

    @os_disk_name.setter
    def os_disk_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_disk_name", value)

    @property
    @pulumi.getter(name="virtualMachineName")
    def virtual_machine_name(self) -> Optional[pulumi.Input[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")

    @virtual_machine_name.setter
    def virtual_machine_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_machine_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgsDict(TypedDict):
        names: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        """
        volume_name: pulumi.Input[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`.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesDatabaseServerVirtualMachineDataDiskArgs:
    def __init__(__self__, *,
                 names: pulumi.Input[Sequence[pulumi.Input[str]]],
                 volume_name: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] names: A list of full names of Data Disks per Volume. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[Sequence[pulumi.Input[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")

    @names.setter
    def names(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "names", value)

    @property
    @pulumi.getter(name="volumeName")
    def volume_name(self) -> pulumi.Input[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")

    @volume_name.setter
    def volume_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "volume_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgsDict(TypedDict):
        account_name: NotRequired[pulumi.Input[str]]
        """
        The full name of the Shared Storage Account. Changing this forces a new resource to be created.
        """
        private_endpoint_name: NotRequired[pulumi.Input[str]]
        """
        The full name of Private Endpoint for the Shared Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationResourceNamesSharedStorageArgs:
    def __init__(__self__, *,
                 account_name: Optional[pulumi.Input[str]] = None,
                 private_endpoint_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] account_name: The full name of the Shared Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[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[pulumi.Input[str]]:
        """
        The full name of the Shared Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "account_name")

    @account_name.setter
    def account_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "account_name", value)

    @property
    @pulumi.getter(name="privateEndpointName")
    def private_endpoint_name(self) -> Optional[pulumi.Input[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")

    @private_endpoint_name.setter
    def private_endpoint_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_endpoint_name", value)


if not MYPY:
    class ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgsDict(TypedDict):
        resource_group_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Resource Group of the transport File Share. Changing this forces a new resource to be created.
        """
        storage_account_name: NotRequired[pulumi.Input[str]]
        """
        The name of the Storage Account of the File Share. Changing this forces a new resource to be created.
        """
elif False:
    ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ThreeTierVirtualInstanceThreeTierConfigurationTransportCreateAndMountArgs:
    def __init__(__self__, *,
                 resource_group_id: Optional[pulumi.Input[str]] = None,
                 storage_account_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

    @resource_group_id.setter
    def resource_group_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "resource_group_id", value)

    @property
    @pulumi.getter(name="storageAccountName")
    def storage_account_name(self) -> Optional[pulumi.Input[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")

    @storage_account_name.setter
    def storage_account_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "storage_account_name", value)


