# 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__ = [
    'ApplicationGatewayAuthenticationCertificateArgs',
    'ApplicationGatewayAuthenticationCertificateArgsDict',
    'ApplicationGatewayAutoscaleConfigurationArgs',
    'ApplicationGatewayAutoscaleConfigurationArgsDict',
    'ApplicationGatewayBackendAddressPoolArgs',
    'ApplicationGatewayBackendAddressPoolArgsDict',
    'ApplicationGatewayBackendHttpSettingArgs',
    'ApplicationGatewayBackendHttpSettingArgsDict',
    'ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgs',
    'ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgsDict',
    'ApplicationGatewayBackendHttpSettingConnectionDrainingArgs',
    'ApplicationGatewayBackendHttpSettingConnectionDrainingArgsDict',
    'ApplicationGatewayCustomErrorConfigurationArgs',
    'ApplicationGatewayCustomErrorConfigurationArgsDict',
    'ApplicationGatewayFrontendIpConfigurationArgs',
    'ApplicationGatewayFrontendIpConfigurationArgsDict',
    'ApplicationGatewayFrontendPortArgs',
    'ApplicationGatewayFrontendPortArgsDict',
    'ApplicationGatewayGatewayIpConfigurationArgs',
    'ApplicationGatewayGatewayIpConfigurationArgsDict',
    'ApplicationGatewayGlobalArgs',
    'ApplicationGatewayGlobalArgsDict',
    'ApplicationGatewayHttpListenerArgs',
    'ApplicationGatewayHttpListenerArgsDict',
    'ApplicationGatewayHttpListenerCustomErrorConfigurationArgs',
    'ApplicationGatewayHttpListenerCustomErrorConfigurationArgsDict',
    'ApplicationGatewayIdentityArgs',
    'ApplicationGatewayIdentityArgsDict',
    'ApplicationGatewayPrivateEndpointConnectionArgs',
    'ApplicationGatewayPrivateEndpointConnectionArgsDict',
    'ApplicationGatewayPrivateLinkConfigurationArgs',
    'ApplicationGatewayPrivateLinkConfigurationArgsDict',
    'ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgs',
    'ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgsDict',
    'ApplicationGatewayProbeArgs',
    'ApplicationGatewayProbeArgsDict',
    'ApplicationGatewayProbeMatchArgs',
    'ApplicationGatewayProbeMatchArgsDict',
    'ApplicationGatewayRedirectConfigurationArgs',
    'ApplicationGatewayRedirectConfigurationArgsDict',
    'ApplicationGatewayRequestRoutingRuleArgs',
    'ApplicationGatewayRequestRoutingRuleArgsDict',
    'ApplicationGatewayRewriteRuleSetArgs',
    'ApplicationGatewayRewriteRuleSetArgsDict',
    'ApplicationGatewayRewriteRuleSetRewriteRuleArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleArgsDict',
    'ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgsDict',
    'ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgsDict',
    'ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgsDict',
    'ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgsDict',
    'ApplicationGatewaySkuArgs',
    'ApplicationGatewaySkuArgsDict',
    'ApplicationGatewaySslCertificateArgs',
    'ApplicationGatewaySslCertificateArgsDict',
    'ApplicationGatewaySslPolicyArgs',
    'ApplicationGatewaySslPolicyArgsDict',
    'ApplicationGatewaySslProfileArgs',
    'ApplicationGatewaySslProfileArgsDict',
    'ApplicationGatewaySslProfileSslPolicyArgs',
    'ApplicationGatewaySslProfileSslPolicyArgsDict',
    'ApplicationGatewayTrustedClientCertificateArgs',
    'ApplicationGatewayTrustedClientCertificateArgsDict',
    'ApplicationGatewayTrustedRootCertificateArgs',
    'ApplicationGatewayTrustedRootCertificateArgsDict',
    'ApplicationGatewayUrlPathMapArgs',
    'ApplicationGatewayUrlPathMapArgsDict',
    'ApplicationGatewayUrlPathMapPathRuleArgs',
    'ApplicationGatewayUrlPathMapPathRuleArgsDict',
    'ApplicationGatewayWafConfigurationArgs',
    'ApplicationGatewayWafConfigurationArgsDict',
    'ApplicationGatewayWafConfigurationDisabledRuleGroupArgs',
    'ApplicationGatewayWafConfigurationDisabledRuleGroupArgsDict',
    'ApplicationGatewayWafConfigurationExclusionArgs',
    'ApplicationGatewayWafConfigurationExclusionArgsDict',
    'ExpressRouteCircuitPeeringIpv6Args',
    'ExpressRouteCircuitPeeringIpv6ArgsDict',
    'ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs',
    'ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgsDict',
    'ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgs',
    'ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgsDict',
    'ExpressRouteCircuitSkuArgs',
    'ExpressRouteCircuitSkuArgsDict',
    'ExpressRouteConnectionRoutingArgs',
    'ExpressRouteConnectionRoutingArgsDict',
    'ExpressRouteConnectionRoutingPropagatedRouteTableArgs',
    'ExpressRouteConnectionRoutingPropagatedRouteTableArgsDict',
    'ExpressRoutePortIdentityArgs',
    'ExpressRoutePortIdentityArgsDict',
    'ExpressRoutePortLink1Args',
    'ExpressRoutePortLink1ArgsDict',
    'ExpressRoutePortLink2Args',
    'ExpressRoutePortLink2ArgsDict',
    'FirewallApplicationRuleCollectionRuleArgs',
    'FirewallApplicationRuleCollectionRuleArgsDict',
    'FirewallApplicationRuleCollectionRuleProtocolArgs',
    'FirewallApplicationRuleCollectionRuleProtocolArgsDict',
    'FirewallIpConfigurationArgs',
    'FirewallIpConfigurationArgsDict',
    'FirewallManagementIpConfigurationArgs',
    'FirewallManagementIpConfigurationArgsDict',
    'FirewallNatRuleCollectionRuleArgs',
    'FirewallNatRuleCollectionRuleArgsDict',
    'FirewallNetworkRuleCollectionRuleArgs',
    'FirewallNetworkRuleCollectionRuleArgsDict',
    'FirewallPolicyDnsArgs',
    'FirewallPolicyDnsArgsDict',
    'FirewallPolicyExplicitProxyArgs',
    'FirewallPolicyExplicitProxyArgsDict',
    'FirewallPolicyIdentityArgs',
    'FirewallPolicyIdentityArgsDict',
    'FirewallPolicyInsightsArgs',
    'FirewallPolicyInsightsArgsDict',
    'FirewallPolicyInsightsLogAnalyticsWorkspaceArgs',
    'FirewallPolicyInsightsLogAnalyticsWorkspaceArgsDict',
    'FirewallPolicyIntrusionDetectionArgs',
    'FirewallPolicyIntrusionDetectionArgsDict',
    'FirewallPolicyIntrusionDetectionSignatureOverrideArgs',
    'FirewallPolicyIntrusionDetectionSignatureOverrideArgsDict',
    'FirewallPolicyIntrusionDetectionTrafficBypassArgs',
    'FirewallPolicyIntrusionDetectionTrafficBypassArgsDict',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgsDict',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgsDict',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgsDict',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgsDict',
    'FirewallPolicyRuleCollectionGroupNatRuleCollectionArgs',
    'FirewallPolicyRuleCollectionGroupNatRuleCollectionArgsDict',
    'FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs',
    'FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgsDict',
    'FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgs',
    'FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgsDict',
    'FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs',
    'FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgsDict',
    'FirewallPolicyThreatIntelligenceAllowlistArgs',
    'FirewallPolicyThreatIntelligenceAllowlistArgsDict',
    'FirewallPolicyTlsCertificateArgs',
    'FirewallPolicyTlsCertificateArgsDict',
    'FirewallVirtualHubArgs',
    'FirewallVirtualHubArgsDict',
    'LocalNetworkGatewayBgpSettingsArgs',
    'LocalNetworkGatewayBgpSettingsArgsDict',
    'NetworkConnectionMonitorEndpointArgs',
    'NetworkConnectionMonitorEndpointArgsDict',
    'NetworkConnectionMonitorEndpointFilterArgs',
    'NetworkConnectionMonitorEndpointFilterArgsDict',
    'NetworkConnectionMonitorEndpointFilterItemArgs',
    'NetworkConnectionMonitorEndpointFilterItemArgsDict',
    'NetworkConnectionMonitorTestConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationArgsDict',
    'NetworkConnectionMonitorTestConfigurationHttpConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationHttpConfigurationArgsDict',
    'NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgs',
    'NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgsDict',
    'NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgsDict',
    'NetworkConnectionMonitorTestConfigurationSuccessThresholdArgs',
    'NetworkConnectionMonitorTestConfigurationSuccessThresholdArgsDict',
    'NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationTcpConfigurationArgsDict',
    'NetworkConnectionMonitorTestGroupArgs',
    'NetworkConnectionMonitorTestGroupArgsDict',
    'NetworkInterfaceIpConfigurationArgs',
    'NetworkInterfaceIpConfigurationArgsDict',
    'NetworkManagerAdminRuleDestinationArgs',
    'NetworkManagerAdminRuleDestinationArgsDict',
    'NetworkManagerAdminRuleSourceArgs',
    'NetworkManagerAdminRuleSourceArgsDict',
    'NetworkManagerConnectivityConfigurationAppliesToGroupArgs',
    'NetworkManagerConnectivityConfigurationAppliesToGroupArgsDict',
    'NetworkManagerConnectivityConfigurationHubArgs',
    'NetworkManagerConnectivityConfigurationHubArgsDict',
    'NetworkManagerCrossTenantScopeArgs',
    'NetworkManagerCrossTenantScopeArgsDict',
    'NetworkManagerScopeArgs',
    'NetworkManagerScopeArgsDict',
    'NetworkSecurityGroupSecurityRuleArgs',
    'NetworkSecurityGroupSecurityRuleArgsDict',
    'NetworkWatcherFlowLogRetentionPolicyArgs',
    'NetworkWatcherFlowLogRetentionPolicyArgsDict',
    'NetworkWatcherFlowLogTrafficAnalyticsArgs',
    'NetworkWatcherFlowLogTrafficAnalyticsArgsDict',
    'PointToPointVpnGatewayConnectionConfigurationArgs',
    'PointToPointVpnGatewayConnectionConfigurationArgsDict',
    'PointToPointVpnGatewayConnectionConfigurationRouteArgs',
    'PointToPointVpnGatewayConnectionConfigurationRouteArgsDict',
    'PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs',
    'PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgsDict',
    'PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs',
    'PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgsDict',
    'ProfileContainerNetworkInterfaceArgs',
    'ProfileContainerNetworkInterfaceArgsDict',
    'ProfileContainerNetworkInterfaceIpConfigurationArgs',
    'ProfileContainerNetworkInterfaceIpConfigurationArgsDict',
    'RouteFilterRuleArgs',
    'RouteFilterRuleArgsDict',
    'RouteMapRuleArgs',
    'RouteMapRuleArgsDict',
    'RouteMapRuleActionArgs',
    'RouteMapRuleActionArgsDict',
    'RouteMapRuleActionParameterArgs',
    'RouteMapRuleActionParameterArgsDict',
    'RouteMapRuleMatchCriterionArgs',
    'RouteMapRuleMatchCriterionArgsDict',
    'RouteTableRouteArgs',
    'RouteTableRouteArgsDict',
    'RoutingIntentRoutingPolicyArgs',
    'RoutingIntentRoutingPolicyArgsDict',
    'SubnetDelegationArgs',
    'SubnetDelegationArgsDict',
    'SubnetDelegationServiceDelegationArgs',
    'SubnetDelegationServiceDelegationArgsDict',
    'SubnetServiceEndpointStoragePolicyDefinitionArgs',
    'SubnetServiceEndpointStoragePolicyDefinitionArgsDict',
    'TrafficManagerAzureEndpointCustomHeaderArgs',
    'TrafficManagerAzureEndpointCustomHeaderArgsDict',
    'TrafficManagerAzureEndpointSubnetArgs',
    'TrafficManagerAzureEndpointSubnetArgsDict',
    'TrafficManagerExternalEndpointCustomHeaderArgs',
    'TrafficManagerExternalEndpointCustomHeaderArgsDict',
    'TrafficManagerExternalEndpointSubnetArgs',
    'TrafficManagerExternalEndpointSubnetArgsDict',
    'TrafficManagerNestedEndpointCustomHeaderArgs',
    'TrafficManagerNestedEndpointCustomHeaderArgsDict',
    'TrafficManagerNestedEndpointSubnetArgs',
    'TrafficManagerNestedEndpointSubnetArgsDict',
    'TrafficManagerProfileDnsConfigArgs',
    'TrafficManagerProfileDnsConfigArgsDict',
    'TrafficManagerProfileMonitorConfigArgs',
    'TrafficManagerProfileMonitorConfigArgsDict',
    'TrafficManagerProfileMonitorConfigCustomHeaderArgs',
    'TrafficManagerProfileMonitorConfigCustomHeaderArgsDict',
    'VirtualHubConnectionRoutingArgs',
    'VirtualHubConnectionRoutingArgsDict',
    'VirtualHubConnectionRoutingPropagatedRouteTableArgs',
    'VirtualHubConnectionRoutingPropagatedRouteTableArgsDict',
    'VirtualHubConnectionRoutingStaticVnetRouteArgs',
    'VirtualHubConnectionRoutingStaticVnetRouteArgsDict',
    'VirtualHubRouteArgs',
    'VirtualHubRouteArgsDict',
    'VirtualHubRouteTableRouteArgs',
    'VirtualHubRouteTableRouteArgsDict',
    'VirtualNetworkDdosProtectionPlanArgs',
    'VirtualNetworkDdosProtectionPlanArgsDict',
    'VirtualNetworkEncryptionArgs',
    'VirtualNetworkEncryptionArgsDict',
    'VirtualNetworkGatewayBgpSettingsArgs',
    'VirtualNetworkGatewayBgpSettingsArgsDict',
    'VirtualNetworkGatewayBgpSettingsPeeringAddressArgs',
    'VirtualNetworkGatewayBgpSettingsPeeringAddressArgsDict',
    'VirtualNetworkGatewayConnectionCustomBgpAddressesArgs',
    'VirtualNetworkGatewayConnectionCustomBgpAddressesArgsDict',
    'VirtualNetworkGatewayConnectionIpsecPolicyArgs',
    'VirtualNetworkGatewayConnectionIpsecPolicyArgsDict',
    'VirtualNetworkGatewayConnectionTrafficSelectorPolicyArgs',
    'VirtualNetworkGatewayConnectionTrafficSelectorPolicyArgsDict',
    'VirtualNetworkGatewayCustomRouteArgs',
    'VirtualNetworkGatewayCustomRouteArgsDict',
    'VirtualNetworkGatewayIpConfigurationArgs',
    'VirtualNetworkGatewayIpConfigurationArgsDict',
    'VirtualNetworkGatewayNatRuleExternalMappingArgs',
    'VirtualNetworkGatewayNatRuleExternalMappingArgsDict',
    'VirtualNetworkGatewayNatRuleInternalMappingArgs',
    'VirtualNetworkGatewayNatRuleInternalMappingArgsDict',
    'VirtualNetworkGatewayPolicyGroupArgs',
    'VirtualNetworkGatewayPolicyGroupArgsDict',
    'VirtualNetworkGatewayPolicyGroupPolicyMemberArgs',
    'VirtualNetworkGatewayPolicyGroupPolicyMemberArgsDict',
    'VirtualNetworkGatewayVpnClientConfigurationArgs',
    'VirtualNetworkGatewayVpnClientConfigurationArgsDict',
    'VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgs',
    'VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgsDict',
    'VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgs',
    'VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgsDict',
    'VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs',
    'VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgsDict',
    'VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs',
    'VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgsDict',
    'VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgs',
    'VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgsDict',
    'VirtualNetworkSubnetArgs',
    'VirtualNetworkSubnetArgsDict',
    'VirtualNetworkSubnetDelegationArgs',
    'VirtualNetworkSubnetDelegationArgsDict',
    'VirtualNetworkSubnetDelegationServiceDelegationArgs',
    'VirtualNetworkSubnetDelegationServiceDelegationArgsDict',
    'VnpGatewayNatRuleExternalMappingArgs',
    'VnpGatewayNatRuleExternalMappingArgsDict',
    'VnpGatewayNatRuleInternalMappingArgs',
    'VnpGatewayNatRuleInternalMappingArgsDict',
    'VpnGatewayBgpSettingsArgs',
    'VpnGatewayBgpSettingsArgsDict',
    'VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgs',
    'VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgsDict',
    'VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgs',
    'VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgsDict',
    'VpnGatewayConnectionRoutingArgs',
    'VpnGatewayConnectionRoutingArgsDict',
    'VpnGatewayConnectionRoutingPropagatedRouteTableArgs',
    'VpnGatewayConnectionRoutingPropagatedRouteTableArgsDict',
    'VpnGatewayConnectionTrafficSelectorPolicyArgs',
    'VpnGatewayConnectionTrafficSelectorPolicyArgsDict',
    'VpnGatewayConnectionVpnLinkArgs',
    'VpnGatewayConnectionVpnLinkArgsDict',
    'VpnGatewayConnectionVpnLinkCustomBgpAddressArgs',
    'VpnGatewayConnectionVpnLinkCustomBgpAddressArgsDict',
    'VpnGatewayConnectionVpnLinkIpsecPolicyArgs',
    'VpnGatewayConnectionVpnLinkIpsecPolicyArgsDict',
    'VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs',
    'VpnServerConfigurationAzureActiveDirectoryAuthenticationArgsDict',
    'VpnServerConfigurationClientRevokedCertificateArgs',
    'VpnServerConfigurationClientRevokedCertificateArgsDict',
    'VpnServerConfigurationClientRootCertificateArgs',
    'VpnServerConfigurationClientRootCertificateArgsDict',
    'VpnServerConfigurationIpsecPolicyArgs',
    'VpnServerConfigurationIpsecPolicyArgsDict',
    'VpnServerConfigurationPolicyGroupPolicyArgs',
    'VpnServerConfigurationPolicyGroupPolicyArgsDict',
    'VpnServerConfigurationRadiusArgs',
    'VpnServerConfigurationRadiusArgsDict',
    'VpnServerConfigurationRadiusClientRootCertificateArgs',
    'VpnServerConfigurationRadiusClientRootCertificateArgsDict',
    'VpnServerConfigurationRadiusServerArgs',
    'VpnServerConfigurationRadiusServerArgsDict',
    'VpnServerConfigurationRadiusServerRootCertificateArgs',
    'VpnServerConfigurationRadiusServerRootCertificateArgsDict',
    'VpnSiteLinkArgs',
    'VpnSiteLinkArgsDict',
    'VpnSiteLinkBgpArgs',
    'VpnSiteLinkBgpArgsDict',
    'VpnSiteO365PolicyArgs',
    'VpnSiteO365PolicyArgsDict',
    'VpnSiteO365PolicyTrafficCategoryArgs',
    'VpnSiteO365PolicyTrafficCategoryArgsDict',
]

MYPY = False

if not MYPY:
    class ApplicationGatewayAuthenticationCertificateArgsDict(TypedDict):
        data: pulumi.Input[str]
        """
        The contents of the Authentication Certificate which should be used.
        """
        name: pulumi.Input[str]
        """
        The Name of the Authentication Certificate to use.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayAuthenticationCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayAuthenticationCertificateArgs:
    def __init__(__self__, *,
                 data: pulumi.Input[str],
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] data: The contents of the Authentication Certificate which should be used.
        :param pulumi.Input[str] name: The Name of the Authentication Certificate to use.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "data", data)
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def data(self) -> pulumi.Input[str]:
        """
        The contents of the Authentication Certificate which should be used.
        """
        return pulumi.get(self, "data")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the Authentication Certificate to use.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayAutoscaleConfigurationArgsDict(TypedDict):
        min_capacity: pulumi.Input[int]
        """
        Minimum capacity for autoscaling. Accepted values are in the range `0` to `100`.
        """
        max_capacity: NotRequired[pulumi.Input[int]]
        """
        Maximum capacity for autoscaling. Accepted values are in the range `2` to `125`.
        """
elif False:
    ApplicationGatewayAutoscaleConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayAutoscaleConfigurationArgs:
    def __init__(__self__, *,
                 min_capacity: pulumi.Input[int],
                 max_capacity: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] min_capacity: Minimum capacity for autoscaling. Accepted values are in the range `0` to `100`.
        :param pulumi.Input[int] max_capacity: Maximum capacity for autoscaling. Accepted values are in the range `2` to `125`.
        """
        pulumi.set(__self__, "min_capacity", min_capacity)
        if max_capacity is not None:
            pulumi.set(__self__, "max_capacity", max_capacity)

    @property
    @pulumi.getter(name="minCapacity")
    def min_capacity(self) -> pulumi.Input[int]:
        """
        Minimum capacity for autoscaling. Accepted values are in the range `0` to `100`.
        """
        return pulumi.get(self, "min_capacity")

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

    @property
    @pulumi.getter(name="maxCapacity")
    def max_capacity(self) -> Optional[pulumi.Input[int]]:
        """
        Maximum capacity for autoscaling. Accepted values are in the range `2` to `125`.
        """
        return pulumi.get(self, "max_capacity")

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


if not MYPY:
    class ApplicationGatewayBackendAddressPoolArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the Backend Address Pool.
        """
        fqdns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of FQDN's which should be part of the Backend Address Pool.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        ip_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IP Addresses which should be part of the Backend Address Pool.
        """
elif False:
    ApplicationGatewayBackendAddressPoolArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayBackendAddressPoolArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 fqdns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: The name of the Backend Address Pool.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] fqdns: A list of FQDN's which should be part of the Backend Address Pool.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ip_addresses: A list of IP Addresses which should be part of the Backend Address Pool.
        """
        pulumi.set(__self__, "name", name)
        if fqdns is not None:
            pulumi.set(__self__, "fqdns", fqdns)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if ip_addresses is not None:
            pulumi.set(__self__, "ip_addresses", ip_addresses)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Backend Address Pool.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def fqdns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of FQDN's which should be part of the Backend Address Pool.
        """
        return pulumi.get(self, "fqdns")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="ipAddresses")
    def ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IP Addresses which should be part of the Backend Address Pool.
        """
        return pulumi.get(self, "ip_addresses")

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


if not MYPY:
    class ApplicationGatewayBackendHttpSettingArgsDict(TypedDict):
        cookie_based_affinity: pulumi.Input[str]
        """
        Is Cookie-Based Affinity enabled? Possible values are `Enabled` and `Disabled`.
        """
        name: pulumi.Input[str]
        """
        The name of the Authentication Certificate.
        """
        port: pulumi.Input[int]
        """
        The port which should be used for this Backend HTTP Settings Collection.
        """
        protocol: pulumi.Input[str]
        """
        The Protocol which should be used. Possible values are `Http` and `Https`.
        """
        affinity_cookie_name: NotRequired[pulumi.Input[str]]
        """
        The name of the affinity cookie.
        """
        authentication_certificates: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgsDict']]]]
        """
        One or more `authentication_certificate_backend` blocks as defined below.
        """
        connection_draining: NotRequired[pulumi.Input['ApplicationGatewayBackendHttpSettingConnectionDrainingArgsDict']]
        """
        A `connection_draining` block as defined below.
        """
        host_name: NotRequired[pulumi.Input[str]]
        """
        Host header to be sent to the backend servers. Cannot be set if `pick_host_name_from_backend_address` is set to `true`.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        path: NotRequired[pulumi.Input[str]]
        """
        The Path which should be used as a prefix for all HTTP requests.
        """
        pick_host_name_from_backend_address: NotRequired[pulumi.Input[bool]]
        """
        Whether host header should be picked from the host name of the backend server. Defaults to `false`.
        """
        probe_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Probe.
        """
        probe_name: NotRequired[pulumi.Input[str]]
        """
        The name of an associated HTTP Probe.
        """
        request_timeout: NotRequired[pulumi.Input[int]]
        """
        The request timeout in seconds, which must be between 1 and 86400 seconds. Defaults to `30`.
        """
        trusted_root_certificate_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of `trusted_root_certificate` names.
        """
elif False:
    ApplicationGatewayBackendHttpSettingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayBackendHttpSettingArgs:
    def __init__(__self__, *,
                 cookie_based_affinity: pulumi.Input[str],
                 name: pulumi.Input[str],
                 port: pulumi.Input[int],
                 protocol: pulumi.Input[str],
                 affinity_cookie_name: Optional[pulumi.Input[str]] = None,
                 authentication_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgs']]]] = None,
                 connection_draining: Optional[pulumi.Input['ApplicationGatewayBackendHttpSettingConnectionDrainingArgs']] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 path: Optional[pulumi.Input[str]] = None,
                 pick_host_name_from_backend_address: Optional[pulumi.Input[bool]] = None,
                 probe_id: Optional[pulumi.Input[str]] = None,
                 probe_name: Optional[pulumi.Input[str]] = None,
                 request_timeout: Optional[pulumi.Input[int]] = None,
                 trusted_root_certificate_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] cookie_based_affinity: Is Cookie-Based Affinity enabled? Possible values are `Enabled` and `Disabled`.
        :param pulumi.Input[str] name: The name of the Authentication Certificate.
        :param pulumi.Input[int] port: The port which should be used for this Backend HTTP Settings Collection.
        :param pulumi.Input[str] protocol: The Protocol which should be used. Possible values are `Http` and `Https`.
        :param pulumi.Input[str] affinity_cookie_name: The name of the affinity cookie.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgs']]] authentication_certificates: One or more `authentication_certificate_backend` blocks as defined below.
        :param pulumi.Input['ApplicationGatewayBackendHttpSettingConnectionDrainingArgs'] connection_draining: A `connection_draining` block as defined below.
        :param pulumi.Input[str] host_name: Host header to be sent to the backend servers. Cannot be set if `pick_host_name_from_backend_address` is set to `true`.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[str] path: The Path which should be used as a prefix for all HTTP requests.
        :param pulumi.Input[bool] pick_host_name_from_backend_address: Whether host header should be picked from the host name of the backend server. Defaults to `false`.
        :param pulumi.Input[str] probe_id: The ID of the associated Probe.
        :param pulumi.Input[str] probe_name: The name of an associated HTTP Probe.
        :param pulumi.Input[int] request_timeout: The request timeout in seconds, which must be between 1 and 86400 seconds. Defaults to `30`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] trusted_root_certificate_names: A list of `trusted_root_certificate` names.
        """
        pulumi.set(__self__, "cookie_based_affinity", cookie_based_affinity)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "protocol", protocol)
        if affinity_cookie_name is not None:
            pulumi.set(__self__, "affinity_cookie_name", affinity_cookie_name)
        if authentication_certificates is not None:
            pulumi.set(__self__, "authentication_certificates", authentication_certificates)
        if connection_draining is not None:
            pulumi.set(__self__, "connection_draining", connection_draining)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if pick_host_name_from_backend_address is not None:
            pulumi.set(__self__, "pick_host_name_from_backend_address", pick_host_name_from_backend_address)
        if probe_id is not None:
            pulumi.set(__self__, "probe_id", probe_id)
        if probe_name is not None:
            pulumi.set(__self__, "probe_name", probe_name)
        if request_timeout is not None:
            pulumi.set(__self__, "request_timeout", request_timeout)
        if trusted_root_certificate_names is not None:
            pulumi.set(__self__, "trusted_root_certificate_names", trusted_root_certificate_names)

    @property
    @pulumi.getter(name="cookieBasedAffinity")
    def cookie_based_affinity(self) -> pulumi.Input[str]:
        """
        Is Cookie-Based Affinity enabled? Possible values are `Enabled` and `Disabled`.
        """
        return pulumi.get(self, "cookie_based_affinity")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Authentication Certificate.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port which should be used for this Backend HTTP Settings Collection.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol which should be used. Possible values are `Http` and `Https`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="affinityCookieName")
    def affinity_cookie_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the affinity cookie.
        """
        return pulumi.get(self, "affinity_cookie_name")

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

    @property
    @pulumi.getter(name="authenticationCertificates")
    def authentication_certificates(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgs']]]]:
        """
        One or more `authentication_certificate_backend` blocks as defined below.
        """
        return pulumi.get(self, "authentication_certificates")

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

    @property
    @pulumi.getter(name="connectionDraining")
    def connection_draining(self) -> Optional[pulumi.Input['ApplicationGatewayBackendHttpSettingConnectionDrainingArgs']]:
        """
        A `connection_draining` block as defined below.
        """
        return pulumi.get(self, "connection_draining")

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

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[str]]:
        """
        Host header to be sent to the backend servers. Cannot be set if `pick_host_name_from_backend_address` is set to `true`.
        """
        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
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def path(self) -> Optional[pulumi.Input[str]]:
        """
        The Path which should be used as a prefix for all HTTP requests.
        """
        return pulumi.get(self, "path")

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

    @property
    @pulumi.getter(name="pickHostNameFromBackendAddress")
    def pick_host_name_from_backend_address(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether host header should be picked from the host name of the backend server. Defaults to `false`.
        """
        return pulumi.get(self, "pick_host_name_from_backend_address")

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

    @property
    @pulumi.getter(name="probeId")
    def probe_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Probe.
        """
        return pulumi.get(self, "probe_id")

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

    @property
    @pulumi.getter(name="probeName")
    def probe_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of an associated HTTP Probe.
        """
        return pulumi.get(self, "probe_name")

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

    @property
    @pulumi.getter(name="requestTimeout")
    def request_timeout(self) -> Optional[pulumi.Input[int]]:
        """
        The request timeout in seconds, which must be between 1 and 86400 seconds. Defaults to `30`.
        """
        return pulumi.get(self, "request_timeout")

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

    @property
    @pulumi.getter(name="trustedRootCertificateNames")
    def trusted_root_certificate_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of `trusted_root_certificate` names.
        """
        return pulumi.get(self, "trusted_root_certificate_names")

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


if not MYPY:
    class ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of the Authentication Certificate to use.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The Name of the Authentication Certificate to use.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the Authentication Certificate to use.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayBackendHttpSettingConnectionDrainingArgsDict(TypedDict):
        drain_timeout_sec: pulumi.Input[int]
        """
        The number of seconds connection draining is active. Acceptable values are from `1` second to `3600` seconds.
        """
        enabled: pulumi.Input[bool]
        """
        If connection draining is enabled or not.
        """
elif False:
    ApplicationGatewayBackendHttpSettingConnectionDrainingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayBackendHttpSettingConnectionDrainingArgs:
    def __init__(__self__, *,
                 drain_timeout_sec: pulumi.Input[int],
                 enabled: pulumi.Input[bool]):
        """
        :param pulumi.Input[int] drain_timeout_sec: The number of seconds connection draining is active. Acceptable values are from `1` second to `3600` seconds.
        :param pulumi.Input[bool] enabled: If connection draining is enabled or not.
        """
        pulumi.set(__self__, "drain_timeout_sec", drain_timeout_sec)
        pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter(name="drainTimeoutSec")
    def drain_timeout_sec(self) -> pulumi.Input[int]:
        """
        The number of seconds connection draining is active. Acceptable values are from `1` second to `3600` seconds.
        """
        return pulumi.get(self, "drain_timeout_sec")

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

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        If connection draining is enabled or not.
        """
        return pulumi.get(self, "enabled")

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


if not MYPY:
    class ApplicationGatewayCustomErrorConfigurationArgsDict(TypedDict):
        custom_error_page_url: pulumi.Input[str]
        """
        Error page URL of the application gateway customer error.
        """
        status_code: pulumi.Input[str]
        """
        Status code of the application gateway customer error. Possible values are `HttpStatus400`, `HttpStatus403`, `HttpStatus404`, `HttpStatus405`, `HttpStatus408`, `HttpStatus500`, `HttpStatus502`, `HttpStatus503` and `HttpStatus504`
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayCustomErrorConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayCustomErrorConfigurationArgs:
    def __init__(__self__, *,
                 custom_error_page_url: pulumi.Input[str],
                 status_code: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] custom_error_page_url: Error page URL of the application gateway customer error.
        :param pulumi.Input[str] status_code: Status code of the application gateway customer error. Possible values are `HttpStatus400`, `HttpStatus403`, `HttpStatus404`, `HttpStatus405`, `HttpStatus408`, `HttpStatus500`, `HttpStatus502`, `HttpStatus503` and `HttpStatus504`
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "custom_error_page_url", custom_error_page_url)
        pulumi.set(__self__, "status_code", status_code)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="customErrorPageUrl")
    def custom_error_page_url(self) -> pulumi.Input[str]:
        """
        Error page URL of the application gateway customer error.
        """
        return pulumi.get(self, "custom_error_page_url")

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

    @property
    @pulumi.getter(name="statusCode")
    def status_code(self) -> pulumi.Input[str]:
        """
        Status code of the application gateway customer error. Possible values are `HttpStatus400`, `HttpStatus403`, `HttpStatus404`, `HttpStatus405`, `HttpStatus408`, `HttpStatus500`, `HttpStatus502`, `HttpStatus503` and `HttpStatus504`
        """
        return pulumi.get(self, "status_code")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayFrontendIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the Frontend IP Configuration.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The Private IP Address to use for the Application Gateway.
        """
        private_ip_address_allocation: NotRequired[pulumi.Input[str]]
        """
        The Allocation Method for the Private IP Address. Possible values are `Dynamic` and `Static`. Defaults to `Dynamic`.
        """
        private_link_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated private link configuration.
        """
        private_link_configuration_name: NotRequired[pulumi.Input[str]]
        """
        The name of the private link configuration to use for this frontend IP configuration.
        """
        public_ip_address_id: NotRequired[pulumi.Input[str]]
        """
        The ID of a Public IP Address which the Application Gateway should use. The allocation method for the Public IP Address depends on the `sku` of this Application Gateway. Please refer to the [Azure documentation for public IP addresses](https://docs.microsoft.com/azure/virtual-network/public-ip-addresses#application-gateways) for details.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet.
        """
elif False:
    ApplicationGatewayFrontendIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayFrontendIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_address_allocation: Optional[pulumi.Input[str]] = None,
                 private_link_configuration_id: Optional[pulumi.Input[str]] = None,
                 private_link_configuration_name: Optional[pulumi.Input[str]] = None,
                 public_ip_address_id: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the Frontend IP Configuration.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[str] private_ip_address: The Private IP Address to use for the Application Gateway.
        :param pulumi.Input[str] private_ip_address_allocation: The Allocation Method for the Private IP Address. Possible values are `Dynamic` and `Static`. Defaults to `Dynamic`.
        :param pulumi.Input[str] private_link_configuration_id: The ID of the associated private link configuration.
        :param pulumi.Input[str] private_link_configuration_name: The name of the private link configuration to use for this frontend IP configuration.
        :param pulumi.Input[str] public_ip_address_id: The ID of a Public IP Address which the Application Gateway should use. The allocation method for the Public IP Address depends on the `sku` of this Application Gateway. Please refer to the [Azure documentation for public IP addresses](https://docs.microsoft.com/azure/virtual-network/public-ip-addresses#application-gateways) for details.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet.
        """
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_address_allocation is not None:
            pulumi.set(__self__, "private_ip_address_allocation", private_ip_address_allocation)
        if private_link_configuration_id is not None:
            pulumi.set(__self__, "private_link_configuration_id", private_link_configuration_id)
        if private_link_configuration_name is not None:
            pulumi.set(__self__, "private_link_configuration_name", private_link_configuration_name)
        if public_ip_address_id is not None:
            pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Frontend IP Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The Private IP Address to use for the Application Gateway.
        """
        return pulumi.get(self, "private_ip_address")

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

    @property
    @pulumi.getter(name="privateIpAddressAllocation")
    def private_ip_address_allocation(self) -> Optional[pulumi.Input[str]]:
        """
        The Allocation Method for the Private IP Address. Possible values are `Dynamic` and `Static`. Defaults to `Dynamic`.
        """
        return pulumi.get(self, "private_ip_address_allocation")

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

    @property
    @pulumi.getter(name="privateLinkConfigurationId")
    def private_link_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated private link configuration.
        """
        return pulumi.get(self, "private_link_configuration_id")

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

    @property
    @pulumi.getter(name="privateLinkConfigurationName")
    def private_link_configuration_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the private link configuration to use for this frontend IP configuration.
        """
        return pulumi.get(self, "private_link_configuration_name")

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

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of a Public IP Address which the Application Gateway should use. The allocation method for the Public IP Address depends on the `sku` of this Application Gateway. Please refer to the [Azure documentation for public IP addresses](https://docs.microsoft.com/azure/virtual-network/public-ip-addresses#application-gateways) for details.
        """
        return pulumi.get(self, "public_ip_address_id")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet.
        """
        return pulumi.get(self, "subnet_id")

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


if not MYPY:
    class ApplicationGatewayFrontendPortArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the Frontend Port.
        """
        port: pulumi.Input[int]
        """
        The port used for this Frontend Port.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayFrontendPortArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayFrontendPortArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 port: pulumi.Input[int],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the Frontend Port.
        :param pulumi.Input[int] port: The port used for this Frontend Port.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "port", port)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Frontend Port.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port used for this Frontend Port.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayGatewayIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of this Gateway IP Configuration.
        """
        subnet_id: pulumi.Input[str]
        """
        The ID of the Subnet which the Application Gateway should be connected to.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayGatewayIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayGatewayIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 subnet_id: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The Name of this Gateway IP Configuration.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet which the Application Gateway should be connected to.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "subnet_id", subnet_id)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of this Gateway IP Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[str]:
        """
        The ID of the Subnet which the Application Gateway should be connected to.
        """
        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
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayGlobalArgsDict(TypedDict):
        request_buffering_enabled: pulumi.Input[bool]
        """
        Whether Application Gateway's Request buffer is enabled.
        """
        response_buffering_enabled: pulumi.Input[bool]
        """
        Whether Application Gateway's Response buffer is enabled.
        """
elif False:
    ApplicationGatewayGlobalArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayGlobalArgs:
    def __init__(__self__, *,
                 request_buffering_enabled: pulumi.Input[bool],
                 response_buffering_enabled: pulumi.Input[bool]):
        """
        :param pulumi.Input[bool] request_buffering_enabled: Whether Application Gateway's Request buffer is enabled.
        :param pulumi.Input[bool] response_buffering_enabled: Whether Application Gateway's Response buffer is enabled.
        """
        pulumi.set(__self__, "request_buffering_enabled", request_buffering_enabled)
        pulumi.set(__self__, "response_buffering_enabled", response_buffering_enabled)

    @property
    @pulumi.getter(name="requestBufferingEnabled")
    def request_buffering_enabled(self) -> pulumi.Input[bool]:
        """
        Whether Application Gateway's Request buffer is enabled.
        """
        return pulumi.get(self, "request_buffering_enabled")

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

    @property
    @pulumi.getter(name="responseBufferingEnabled")
    def response_buffering_enabled(self) -> pulumi.Input[bool]:
        """
        Whether Application Gateway's Response buffer is enabled.
        """
        return pulumi.get(self, "response_buffering_enabled")

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


if not MYPY:
    class ApplicationGatewayHttpListenerArgsDict(TypedDict):
        frontend_ip_configuration_name: pulumi.Input[str]
        """
        The Name of the Frontend IP Configuration used for this HTTP Listener.
        """
        frontend_port_name: pulumi.Input[str]
        """
        The Name of the Frontend Port use for this HTTP Listener.
        """
        name: pulumi.Input[str]
        """
        The Name of the HTTP Listener.
        """
        protocol: pulumi.Input[str]
        """
        The Protocol to use for this HTTP Listener. Possible values are `Http` and `Https`.
        """
        custom_error_configurations: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayHttpListenerCustomErrorConfigurationArgsDict']]]]
        """
        One or more `custom_error_configuration` blocks as defined below.
        """
        firewall_policy_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Web Application Firewall Policy which should be used for this HTTP Listener.
        """
        frontend_ip_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Frontend Configuration.
        """
        frontend_port_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Frontend Port.
        """
        host_name: NotRequired[pulumi.Input[str]]
        """
        The Hostname which should be used for this HTTP Listener. Setting this value changes Listener Type to 'Multi site'.
        """
        host_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Hostname(s) should be used for this HTTP Listener. It allows special wildcard characters.

        > **NOTE** The `host_names` and `host_name` are mutually exclusive and cannot both be set.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        require_sni: NotRequired[pulumi.Input[bool]]
        """
        Should Server Name Indication be Required? Defaults to `false`.
        """
        ssl_certificate_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated SSL Certificate.
        """
        ssl_certificate_name: NotRequired[pulumi.Input[str]]
        """
        The name of the associated SSL Certificate which should be used for this HTTP Listener.
        """
        ssl_profile_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated SSL Profile.
        """
        ssl_profile_name: NotRequired[pulumi.Input[str]]
        """
        The name of the associated SSL Profile which should be used for this HTTP Listener.
        """
elif False:
    ApplicationGatewayHttpListenerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayHttpListenerArgs:
    def __init__(__self__, *,
                 frontend_ip_configuration_name: pulumi.Input[str],
                 frontend_port_name: pulumi.Input[str],
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 custom_error_configurations: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayHttpListenerCustomErrorConfigurationArgs']]]] = None,
                 firewall_policy_id: Optional[pulumi.Input[str]] = None,
                 frontend_ip_configuration_id: Optional[pulumi.Input[str]] = None,
                 frontend_port_id: Optional[pulumi.Input[str]] = None,
                 host_name: Optional[pulumi.Input[str]] = None,
                 host_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 require_sni: Optional[pulumi.Input[bool]] = None,
                 ssl_certificate_id: Optional[pulumi.Input[str]] = None,
                 ssl_certificate_name: Optional[pulumi.Input[str]] = None,
                 ssl_profile_id: Optional[pulumi.Input[str]] = None,
                 ssl_profile_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] frontend_ip_configuration_name: The Name of the Frontend IP Configuration used for this HTTP Listener.
        :param pulumi.Input[str] frontend_port_name: The Name of the Frontend Port use for this HTTP Listener.
        :param pulumi.Input[str] name: The Name of the HTTP Listener.
        :param pulumi.Input[str] protocol: The Protocol to use for this HTTP Listener. Possible values are `Http` and `Https`.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayHttpListenerCustomErrorConfigurationArgs']]] custom_error_configurations: One or more `custom_error_configuration` blocks as defined below.
        :param pulumi.Input[str] firewall_policy_id: The ID of the Web Application Firewall Policy which should be used for this HTTP Listener.
        :param pulumi.Input[str] frontend_ip_configuration_id: The ID of the associated Frontend Configuration.
        :param pulumi.Input[str] frontend_port_id: The ID of the associated Frontend Port.
        :param pulumi.Input[str] host_name: The Hostname which should be used for this HTTP Listener. Setting this value changes Listener Type to 'Multi site'.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] host_names: A list of Hostname(s) should be used for this HTTP Listener. It allows special wildcard characters.
               
               > **NOTE** The `host_names` and `host_name` are mutually exclusive and cannot both be set.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[bool] require_sni: Should Server Name Indication be Required? Defaults to `false`.
        :param pulumi.Input[str] ssl_certificate_id: The ID of the associated SSL Certificate.
        :param pulumi.Input[str] ssl_certificate_name: The name of the associated SSL Certificate which should be used for this HTTP Listener.
        :param pulumi.Input[str] ssl_profile_id: The ID of the associated SSL Profile.
        :param pulumi.Input[str] ssl_profile_name: The name of the associated SSL Profile which should be used for this HTTP Listener.
        """
        pulumi.set(__self__, "frontend_ip_configuration_name", frontend_ip_configuration_name)
        pulumi.set(__self__, "frontend_port_name", frontend_port_name)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if custom_error_configurations is not None:
            pulumi.set(__self__, "custom_error_configurations", custom_error_configurations)
        if firewall_policy_id is not None:
            pulumi.set(__self__, "firewall_policy_id", firewall_policy_id)
        if frontend_ip_configuration_id is not None:
            pulumi.set(__self__, "frontend_ip_configuration_id", frontend_ip_configuration_id)
        if frontend_port_id is not None:
            pulumi.set(__self__, "frontend_port_id", frontend_port_id)
        if host_name is not None:
            pulumi.set(__self__, "host_name", host_name)
        if host_names is not None:
            pulumi.set(__self__, "host_names", host_names)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if require_sni is not None:
            pulumi.set(__self__, "require_sni", require_sni)
        if ssl_certificate_id is not None:
            pulumi.set(__self__, "ssl_certificate_id", ssl_certificate_id)
        if ssl_certificate_name is not None:
            pulumi.set(__self__, "ssl_certificate_name", ssl_certificate_name)
        if ssl_profile_id is not None:
            pulumi.set(__self__, "ssl_profile_id", ssl_profile_id)
        if ssl_profile_name is not None:
            pulumi.set(__self__, "ssl_profile_name", ssl_profile_name)

    @property
    @pulumi.getter(name="frontendIpConfigurationName")
    def frontend_ip_configuration_name(self) -> pulumi.Input[str]:
        """
        The Name of the Frontend IP Configuration used for this HTTP Listener.
        """
        return pulumi.get(self, "frontend_ip_configuration_name")

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

    @property
    @pulumi.getter(name="frontendPortName")
    def frontend_port_name(self) -> pulumi.Input[str]:
        """
        The Name of the Frontend Port use for this HTTP Listener.
        """
        return pulumi.get(self, "frontend_port_name")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the HTTP Listener.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol to use for this HTTP Listener. Possible values are `Http` and `Https`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="customErrorConfigurations")
    def custom_error_configurations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayHttpListenerCustomErrorConfigurationArgs']]]]:
        """
        One or more `custom_error_configuration` blocks as defined below.
        """
        return pulumi.get(self, "custom_error_configurations")

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

    @property
    @pulumi.getter(name="firewallPolicyId")
    def firewall_policy_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Web Application Firewall Policy which should be used for this HTTP Listener.
        """
        return pulumi.get(self, "firewall_policy_id")

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

    @property
    @pulumi.getter(name="frontendIpConfigurationId")
    def frontend_ip_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Frontend Configuration.
        """
        return pulumi.get(self, "frontend_ip_configuration_id")

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

    @property
    @pulumi.getter(name="frontendPortId")
    def frontend_port_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Frontend Port.
        """
        return pulumi.get(self, "frontend_port_id")

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

    @property
    @pulumi.getter(name="hostName")
    def host_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Hostname which should be used for this HTTP Listener. Setting this value changes Listener Type to 'Multi site'.
        """
        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="hostNames")
    def host_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Hostname(s) should be used for this HTTP Listener. It allows special wildcard characters.

        > **NOTE** The `host_names` and `host_name` are mutually exclusive and cannot both be set.
        """
        return pulumi.get(self, "host_names")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="requireSni")
    def require_sni(self) -> Optional[pulumi.Input[bool]]:
        """
        Should Server Name Indication be Required? Defaults to `false`.
        """
        return pulumi.get(self, "require_sni")

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

    @property
    @pulumi.getter(name="sslCertificateId")
    def ssl_certificate_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated SSL Certificate.
        """
        return pulumi.get(self, "ssl_certificate_id")

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

    @property
    @pulumi.getter(name="sslCertificateName")
    def ssl_certificate_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the associated SSL Certificate which should be used for this HTTP Listener.
        """
        return pulumi.get(self, "ssl_certificate_name")

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

    @property
    @pulumi.getter(name="sslProfileId")
    def ssl_profile_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated SSL Profile.
        """
        return pulumi.get(self, "ssl_profile_id")

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

    @property
    @pulumi.getter(name="sslProfileName")
    def ssl_profile_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the associated SSL Profile which should be used for this HTTP Listener.
        """
        return pulumi.get(self, "ssl_profile_name")

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


if not MYPY:
    class ApplicationGatewayHttpListenerCustomErrorConfigurationArgsDict(TypedDict):
        custom_error_page_url: pulumi.Input[str]
        """
        Error page URL of the application gateway customer error.
        """
        status_code: pulumi.Input[str]
        """
        Status code of the application gateway customer error. Possible values are `HttpStatus400`, `HttpStatus403`, `HttpStatus404`, `HttpStatus405`, `HttpStatus408`, `HttpStatus500`, `HttpStatus502`, `HttpStatus503` and `HttpStatus504`
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayHttpListenerCustomErrorConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayHttpListenerCustomErrorConfigurationArgs:
    def __init__(__self__, *,
                 custom_error_page_url: pulumi.Input[str],
                 status_code: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] custom_error_page_url: Error page URL of the application gateway customer error.
        :param pulumi.Input[str] status_code: Status code of the application gateway customer error. Possible values are `HttpStatus400`, `HttpStatus403`, `HttpStatus404`, `HttpStatus405`, `HttpStatus408`, `HttpStatus500`, `HttpStatus502`, `HttpStatus503` and `HttpStatus504`
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "custom_error_page_url", custom_error_page_url)
        pulumi.set(__self__, "status_code", status_code)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="customErrorPageUrl")
    def custom_error_page_url(self) -> pulumi.Input[str]:
        """
        Error page URL of the application gateway customer error.
        """
        return pulumi.get(self, "custom_error_page_url")

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

    @property
    @pulumi.getter(name="statusCode")
    def status_code(self) -> pulumi.Input[str]:
        """
        Status code of the application gateway customer error. Possible values are `HttpStatus400`, `HttpStatus403`, `HttpStatus404`, `HttpStatus405`, `HttpStatus408`, `HttpStatus500`, `HttpStatus502`, `HttpStatus503` and `HttpStatus504`
        """
        return pulumi.get(self, "status_code")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayIdentityArgsDict(TypedDict):
        type: pulumi.Input[str]
        """
        Specifies the type of Managed Service Identity that should be configured on this Application Gateway. Only possible value is `UserAssigned`.
        """
        identity_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of User Assigned Managed Identity IDs to be assigned to this Application Gateway.
        """
        principal_id: NotRequired[pulumi.Input[str]]
        tenant_id: NotRequired[pulumi.Input[str]]
elif False:
    ApplicationGatewayIdentityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayIdentityArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 identity_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 principal_id: Optional[pulumi.Input[str]] = None,
                 tenant_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] type: Specifies the type of Managed Service Identity that should be configured on this Application Gateway. Only possible value is `UserAssigned`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: Specifies a list of User Assigned Managed Identity IDs to be assigned to this Application Gateway.
        """
        pulumi.set(__self__, "type", type)
        if identity_ids is not None:
            pulumi.set(__self__, "identity_ids", identity_ids)
        if principal_id is not None:
            pulumi.set(__self__, "principal_id", principal_id)
        if tenant_id is not None:
            pulumi.set(__self__, "tenant_id", tenant_id)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        Specifies the type of Managed Service Identity that should be configured on this Application Gateway. Only possible value is `UserAssigned`.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of User Assigned Managed Identity IDs to be assigned to this Application Gateway.
        """
        return pulumi.get(self, "identity_ids")

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

    @property
    @pulumi.getter(name="principalId")
    def principal_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "principal_id")

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

    @property
    @pulumi.getter(name="tenantId")
    def tenant_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "tenant_id")

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


if not MYPY:
    class ApplicationGatewayPrivateEndpointConnectionArgsDict(TypedDict):
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        name: NotRequired[pulumi.Input[str]]
        """
        The name of the Application Gateway. Changing this forces a new resource to be created.
        """
elif False:
    ApplicationGatewayPrivateEndpointConnectionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayPrivateEndpointConnectionArgs:
    def __init__(__self__, *,
                 id: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[str] name: The name of the Application Gateway. Changing this forces a new resource to be created.
        """
        if id is not None:
            pulumi.set(__self__, "id", id)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Application Gateway. 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 ApplicationGatewayPrivateLinkConfigurationArgsDict(TypedDict):
        ip_configurations: pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgsDict']]]
        """
        One or more `ip_configuration` blocks as defined below.

        > **Please Note**: The `AllowApplicationGatewayPrivateLink` feature must be registered on the subscription before enabling private link

        ```bash
        az feature register --name AllowApplicationGatewayPrivateLink --namespace Microsoft.Network
        ```
        """
        name: pulumi.Input[str]
        """
        The name of the private link configuration.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayPrivateLinkConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayPrivateLinkConfigurationArgs:
    def __init__(__self__, *,
                 ip_configurations: pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgs']]],
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgs']]] ip_configurations: One or more `ip_configuration` blocks as defined below.
               
               > **Please Note**: The `AllowApplicationGatewayPrivateLink` feature must be registered on the subscription before enabling private link
               
               ```bash
               az feature register --name AllowApplicationGatewayPrivateLink --namespace Microsoft.Network
               ```
        :param pulumi.Input[str] name: The name of the private link configuration.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "ip_configurations", ip_configurations)
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="ipConfigurations")
    def ip_configurations(self) -> pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgs']]]:
        """
        One or more `ip_configuration` blocks as defined below.

        > **Please Note**: The `AllowApplicationGatewayPrivateLink` feature must be registered on the subscription before enabling private link

        ```bash
        az feature register --name AllowApplicationGatewayPrivateLink --namespace Microsoft.Network
        ```
        """
        return pulumi.get(self, "ip_configurations")

    @ip_configurations.setter
    def ip_configurations(self, value: pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgs']]]):
        pulumi.set(self, "ip_configurations", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the private link configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the IP configuration.
        """
        primary: pulumi.Input[bool]
        """
        Is this the Primary IP Configuration?
        """
        private_ip_address_allocation: pulumi.Input[str]
        """
        The allocation method used for the Private IP Address. Possible values are `Dynamic` and `Static`.
        """
        subnet_id: pulumi.Input[str]
        """
        The ID of the subnet the private link configuration should connect to.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The Static IP Address which should be used.
        """
elif False:
    ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayPrivateLinkConfigurationIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 primary: pulumi.Input[bool],
                 private_ip_address_allocation: pulumi.Input[str],
                 subnet_id: pulumi.Input[str],
                 private_ip_address: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the IP configuration.
        :param pulumi.Input[bool] primary: Is this the Primary IP Configuration?
        :param pulumi.Input[str] private_ip_address_allocation: The allocation method used for the Private IP Address. Possible values are `Dynamic` and `Static`.
        :param pulumi.Input[str] subnet_id: The ID of the subnet the private link configuration should connect to.
        :param pulumi.Input[str] private_ip_address: The Static IP Address which should be used.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "primary", primary)
        pulumi.set(__self__, "private_ip_address_allocation", private_ip_address_allocation)
        pulumi.set(__self__, "subnet_id", subnet_id)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the IP configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def primary(self) -> pulumi.Input[bool]:
        """
        Is this the Primary IP Configuration?
        """
        return pulumi.get(self, "primary")

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

    @property
    @pulumi.getter(name="privateIpAddressAllocation")
    def private_ip_address_allocation(self) -> pulumi.Input[str]:
        """
        The allocation method used for the Private IP Address. Possible values are `Dynamic` and `Static`.
        """
        return pulumi.get(self, "private_ip_address_allocation")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[str]:
        """
        The ID of the subnet the private link configuration should connect to.
        """
        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="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The Static IP Address which should be used.
        """
        return pulumi.get(self, "private_ip_address")

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


if not MYPY:
    class ApplicationGatewayProbeArgsDict(TypedDict):
        interval: pulumi.Input[int]
        """
        The Interval between two consecutive probes in seconds. Possible values range from 1 second to a maximum of 86,400 seconds.
        """
        name: pulumi.Input[str]
        """
        The Name of the Probe.
        """
        path: pulumi.Input[str]
        """
        The Path used for this Probe.
        """
        protocol: pulumi.Input[str]
        """
        The Protocol used for this Probe. Possible values are `Http` and `Https`.
        """
        timeout: pulumi.Input[int]
        """
        The Timeout used for this Probe, which indicates when a probe becomes unhealthy. Possible values range from 1 second to a maximum of 86,400 seconds.
        """
        unhealthy_threshold: pulumi.Input[int]
        """
        The Unhealthy Threshold for this Probe, which indicates the amount of retries which should be attempted before a node is deemed unhealthy. Possible values are from 1 to 20.
        """
        host: NotRequired[pulumi.Input[str]]
        """
        The Hostname used for this Probe. If the Application Gateway is configured for a single site, by default the Host name should be specified as `127.0.0.1`, unless otherwise configured in custom probe. Cannot be set if `pick_host_name_from_backend_http_settings` is set to `true`.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        match: NotRequired[pulumi.Input['ApplicationGatewayProbeMatchArgsDict']]
        """
        A `match` block as defined above.
        """
        minimum_servers: NotRequired[pulumi.Input[int]]
        """
        The minimum number of servers that are always marked as healthy. Defaults to `0`.
        """
        pick_host_name_from_backend_http_settings: NotRequired[pulumi.Input[bool]]
        """
        Whether the host header should be picked from the backend HTTP settings. Defaults to `false`.
        """
        port: NotRequired[pulumi.Input[int]]
        """
        Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from HTTP settings will be used. This property is valid for Basic, Standard_v2 and WAF_v2 only.
        """
elif False:
    ApplicationGatewayProbeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayProbeArgs:
    def __init__(__self__, *,
                 interval: pulumi.Input[int],
                 name: pulumi.Input[str],
                 path: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 timeout: pulumi.Input[int],
                 unhealthy_threshold: pulumi.Input[int],
                 host: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 match: Optional[pulumi.Input['ApplicationGatewayProbeMatchArgs']] = None,
                 minimum_servers: Optional[pulumi.Input[int]] = None,
                 pick_host_name_from_backend_http_settings: Optional[pulumi.Input[bool]] = None,
                 port: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] interval: The Interval between two consecutive probes in seconds. Possible values range from 1 second to a maximum of 86,400 seconds.
        :param pulumi.Input[str] name: The Name of the Probe.
        :param pulumi.Input[str] path: The Path used for this Probe.
        :param pulumi.Input[str] protocol: The Protocol used for this Probe. Possible values are `Http` and `Https`.
        :param pulumi.Input[int] timeout: The Timeout used for this Probe, which indicates when a probe becomes unhealthy. Possible values range from 1 second to a maximum of 86,400 seconds.
        :param pulumi.Input[int] unhealthy_threshold: The Unhealthy Threshold for this Probe, which indicates the amount of retries which should be attempted before a node is deemed unhealthy. Possible values are from 1 to 20.
        :param pulumi.Input[str] host: The Hostname used for this Probe. If the Application Gateway is configured for a single site, by default the Host name should be specified as `127.0.0.1`, unless otherwise configured in custom probe. Cannot be set if `pick_host_name_from_backend_http_settings` is set to `true`.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input['ApplicationGatewayProbeMatchArgs'] match: A `match` block as defined above.
        :param pulumi.Input[int] minimum_servers: The minimum number of servers that are always marked as healthy. Defaults to `0`.
        :param pulumi.Input[bool] pick_host_name_from_backend_http_settings: Whether the host header should be picked from the backend HTTP settings. Defaults to `false`.
        :param pulumi.Input[int] port: Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from HTTP settings will be used. This property is valid for Basic, Standard_v2 and WAF_v2 only.
        """
        pulumi.set(__self__, "interval", interval)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "path", path)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "timeout", timeout)
        pulumi.set(__self__, "unhealthy_threshold", unhealthy_threshold)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if match is not None:
            pulumi.set(__self__, "match", match)
        if minimum_servers is not None:
            pulumi.set(__self__, "minimum_servers", minimum_servers)
        if pick_host_name_from_backend_http_settings is not None:
            pulumi.set(__self__, "pick_host_name_from_backend_http_settings", pick_host_name_from_backend_http_settings)
        if port is not None:
            pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def interval(self) -> pulumi.Input[int]:
        """
        The Interval between two consecutive probes in seconds. Possible values range from 1 second to a maximum of 86,400 seconds.
        """
        return pulumi.get(self, "interval")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the Probe.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def path(self) -> pulumi.Input[str]:
        """
        The Path used for this Probe.
        """
        return pulumi.get(self, "path")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol used for this Probe. Possible values are `Http` and `Https`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter
    def timeout(self) -> pulumi.Input[int]:
        """
        The Timeout used for this Probe, which indicates when a probe becomes unhealthy. Possible values range from 1 second to a maximum of 86,400 seconds.
        """
        return pulumi.get(self, "timeout")

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

    @property
    @pulumi.getter(name="unhealthyThreshold")
    def unhealthy_threshold(self) -> pulumi.Input[int]:
        """
        The Unhealthy Threshold for this Probe, which indicates the amount of retries which should be attempted before a node is deemed unhealthy. Possible values are from 1 to 20.
        """
        return pulumi.get(self, "unhealthy_threshold")

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

    @property
    @pulumi.getter
    def host(self) -> Optional[pulumi.Input[str]]:
        """
        The Hostname used for this Probe. If the Application Gateway is configured for a single site, by default the Host name should be specified as `127.0.0.1`, unless otherwise configured in custom probe. Cannot be set if `pick_host_name_from_backend_http_settings` is set to `true`.
        """
        return pulumi.get(self, "host")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def match(self) -> Optional[pulumi.Input['ApplicationGatewayProbeMatchArgs']]:
        """
        A `match` block as defined above.
        """
        return pulumi.get(self, "match")

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

    @property
    @pulumi.getter(name="minimumServers")
    def minimum_servers(self) -> Optional[pulumi.Input[int]]:
        """
        The minimum number of servers that are always marked as healthy. Defaults to `0`.
        """
        return pulumi.get(self, "minimum_servers")

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

    @property
    @pulumi.getter(name="pickHostNameFromBackendHttpSettings")
    def pick_host_name_from_backend_http_settings(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether the host header should be picked from the backend HTTP settings. Defaults to `false`.
        """
        return pulumi.get(self, "pick_host_name_from_backend_http_settings")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        """
        Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from HTTP settings will be used. This property is valid for Basic, Standard_v2 and WAF_v2 only.
        """
        return pulumi.get(self, "port")

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


if not MYPY:
    class ApplicationGatewayProbeMatchArgsDict(TypedDict):
        status_codes: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of allowed status codes for this Health Probe.
        """
        body: NotRequired[pulumi.Input[str]]
        """
        A snippet from the Response Body which must be present in the Response.
        """
elif False:
    ApplicationGatewayProbeMatchArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayProbeMatchArgs:
    def __init__(__self__, *,
                 status_codes: pulumi.Input[Sequence[pulumi.Input[str]]],
                 body: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] status_codes: A list of allowed status codes for this Health Probe.
        :param pulumi.Input[str] body: A snippet from the Response Body which must be present in the Response.
        """
        pulumi.set(__self__, "status_codes", status_codes)
        if body is not None:
            pulumi.set(__self__, "body", body)

    @property
    @pulumi.getter(name="statusCodes")
    def status_codes(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of allowed status codes for this Health Probe.
        """
        return pulumi.get(self, "status_codes")

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

    @property
    @pulumi.getter
    def body(self) -> Optional[pulumi.Input[str]]:
        """
        A snippet from the Response Body which must be present in the Response.
        """
        return pulumi.get(self, "body")

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


if not MYPY:
    class ApplicationGatewayRedirectConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Unique name of the redirect configuration block
        """
        redirect_type: pulumi.Input[str]
        """
        The type of redirect. Possible values are `Permanent`, `Temporary`, `Found` and `SeeOther`
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        include_path: NotRequired[pulumi.Input[bool]]
        """
        Whether to include the path in the redirected URL. Defaults to `false`
        """
        include_query_string: NotRequired[pulumi.Input[bool]]
        """
        Whether to include the query string in the redirected URL. Default to `false`
        """
        target_listener_id: NotRequired[pulumi.Input[str]]
        target_listener_name: NotRequired[pulumi.Input[str]]
        """
        The name of the listener to redirect to. Cannot be set if `target_url` is set.
        """
        target_url: NotRequired[pulumi.Input[str]]
        """
        The URL to redirect the request to. Cannot be set if `target_listener_name` is set.
        """
elif False:
    ApplicationGatewayRedirectConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRedirectConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 redirect_type: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None,
                 include_path: Optional[pulumi.Input[bool]] = None,
                 include_query_string: Optional[pulumi.Input[bool]] = None,
                 target_listener_id: Optional[pulumi.Input[str]] = None,
                 target_listener_name: Optional[pulumi.Input[str]] = None,
                 target_url: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Unique name of the redirect configuration block
        :param pulumi.Input[str] redirect_type: The type of redirect. Possible values are `Permanent`, `Temporary`, `Found` and `SeeOther`
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[bool] include_path: Whether to include the path in the redirected URL. Defaults to `false`
        :param pulumi.Input[bool] include_query_string: Whether to include the query string in the redirected URL. Default to `false`
        :param pulumi.Input[str] target_listener_name: The name of the listener to redirect to. Cannot be set if `target_url` is set.
        :param pulumi.Input[str] target_url: The URL to redirect the request to. Cannot be set if `target_listener_name` is set.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "redirect_type", redirect_type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if include_path is not None:
            pulumi.set(__self__, "include_path", include_path)
        if include_query_string is not None:
            pulumi.set(__self__, "include_query_string", include_query_string)
        if target_listener_id is not None:
            pulumi.set(__self__, "target_listener_id", target_listener_id)
        if target_listener_name is not None:
            pulumi.set(__self__, "target_listener_name", target_listener_name)
        if target_url is not None:
            pulumi.set(__self__, "target_url", target_url)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Unique name of the redirect configuration block
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="redirectType")
    def redirect_type(self) -> pulumi.Input[str]:
        """
        The type of redirect. Possible values are `Permanent`, `Temporary`, `Found` and `SeeOther`
        """
        return pulumi.get(self, "redirect_type")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="includePath")
    def include_path(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to include the path in the redirected URL. Defaults to `false`
        """
        return pulumi.get(self, "include_path")

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

    @property
    @pulumi.getter(name="includeQueryString")
    def include_query_string(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to include the query string in the redirected URL. Default to `false`
        """
        return pulumi.get(self, "include_query_string")

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

    @property
    @pulumi.getter(name="targetListenerId")
    def target_listener_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "target_listener_id")

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

    @property
    @pulumi.getter(name="targetListenerName")
    def target_listener_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the listener to redirect to. Cannot be set if `target_url` is set.
        """
        return pulumi.get(self, "target_listener_name")

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

    @property
    @pulumi.getter(name="targetUrl")
    def target_url(self) -> Optional[pulumi.Input[str]]:
        """
        The URL to redirect the request to. Cannot be set if `target_listener_name` is set.
        """
        return pulumi.get(self, "target_url")

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


if not MYPY:
    class ApplicationGatewayRequestRoutingRuleArgsDict(TypedDict):
        http_listener_name: pulumi.Input[str]
        """
        The Name of the HTTP Listener which should be used for this Routing Rule.
        """
        name: pulumi.Input[str]
        """
        The Name of this Request Routing Rule.
        """
        rule_type: pulumi.Input[str]
        """
        The Type of Routing that should be used for this Rule. Possible values are `Basic` and `PathBasedRouting`.
        """
        backend_address_pool_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Backend Address Pool.
        """
        backend_address_pool_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Backend Address Pool which should be used for this Routing Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        backend_http_settings_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Backend HTTP Settings Configuration.
        """
        backend_http_settings_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Backend HTTP Settings Collection which should be used for this Routing Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        http_listener_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated HTTP Listener.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        priority: NotRequired[pulumi.Input[int]]
        """
        Rule evaluation order can be dictated by specifying an integer value from `1` to `20000` with `1` being the highest priority and `20000` being the lowest priority.

        > **NOTE:** `priority` is required when `sku[0].tier` is set to `*_v2`.
        """
        redirect_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Redirect Configuration.
        """
        redirect_configuration_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Redirect Configuration which should be used for this Routing Rule. Cannot be set if either `backend_address_pool_name` or `backend_http_settings_name` is set.
        """
        rewrite_rule_set_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Rewrite Rule Set.
        """
        rewrite_rule_set_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Rewrite Rule Set which should be used for this Routing Rule. Only valid for v2 SKUs.

        > **NOTE:** `backend_address_pool_name`, `backend_http_settings_name`, `redirect_configuration_name`, and `rewrite_rule_set_name` are applicable only when `rule_type` is `Basic`.
        """
        url_path_map_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated URL Path Map.
        """
        url_path_map_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the URL Path Map which should be associated with this Routing Rule.
        """
elif False:
    ApplicationGatewayRequestRoutingRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRequestRoutingRuleArgs:
    def __init__(__self__, *,
                 http_listener_name: pulumi.Input[str],
                 name: pulumi.Input[str],
                 rule_type: pulumi.Input[str],
                 backend_address_pool_id: Optional[pulumi.Input[str]] = None,
                 backend_address_pool_name: Optional[pulumi.Input[str]] = None,
                 backend_http_settings_id: Optional[pulumi.Input[str]] = None,
                 backend_http_settings_name: Optional[pulumi.Input[str]] = None,
                 http_listener_id: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 priority: Optional[pulumi.Input[int]] = None,
                 redirect_configuration_id: Optional[pulumi.Input[str]] = None,
                 redirect_configuration_name: Optional[pulumi.Input[str]] = None,
                 rewrite_rule_set_id: Optional[pulumi.Input[str]] = None,
                 rewrite_rule_set_name: Optional[pulumi.Input[str]] = None,
                 url_path_map_id: Optional[pulumi.Input[str]] = None,
                 url_path_map_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] http_listener_name: The Name of the HTTP Listener which should be used for this Routing Rule.
        :param pulumi.Input[str] name: The Name of this Request Routing Rule.
        :param pulumi.Input[str] rule_type: The Type of Routing that should be used for this Rule. Possible values are `Basic` and `PathBasedRouting`.
        :param pulumi.Input[str] backend_address_pool_id: The ID of the associated Backend Address Pool.
        :param pulumi.Input[str] backend_address_pool_name: The Name of the Backend Address Pool which should be used for this Routing Rule. Cannot be set if `redirect_configuration_name` is set.
        :param pulumi.Input[str] backend_http_settings_id: The ID of the associated Backend HTTP Settings Configuration.
        :param pulumi.Input[str] backend_http_settings_name: The Name of the Backend HTTP Settings Collection which should be used for this Routing Rule. Cannot be set if `redirect_configuration_name` is set.
        :param pulumi.Input[str] http_listener_id: The ID of the associated HTTP Listener.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[int] priority: Rule evaluation order can be dictated by specifying an integer value from `1` to `20000` with `1` being the highest priority and `20000` being the lowest priority.
               
               > **NOTE:** `priority` is required when `sku[0].tier` is set to `*_v2`.
        :param pulumi.Input[str] redirect_configuration_id: The ID of the associated Redirect Configuration.
        :param pulumi.Input[str] redirect_configuration_name: The Name of the Redirect Configuration which should be used for this Routing Rule. Cannot be set if either `backend_address_pool_name` or `backend_http_settings_name` is set.
        :param pulumi.Input[str] rewrite_rule_set_id: The ID of the associated Rewrite Rule Set.
        :param pulumi.Input[str] rewrite_rule_set_name: The Name of the Rewrite Rule Set which should be used for this Routing Rule. Only valid for v2 SKUs.
               
               > **NOTE:** `backend_address_pool_name`, `backend_http_settings_name`, `redirect_configuration_name`, and `rewrite_rule_set_name` are applicable only when `rule_type` is `Basic`.
        :param pulumi.Input[str] url_path_map_id: The ID of the associated URL Path Map.
        :param pulumi.Input[str] url_path_map_name: The Name of the URL Path Map which should be associated with this Routing Rule.
        """
        pulumi.set(__self__, "http_listener_name", http_listener_name)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "rule_type", rule_type)
        if backend_address_pool_id is not None:
            pulumi.set(__self__, "backend_address_pool_id", backend_address_pool_id)
        if backend_address_pool_name is not None:
            pulumi.set(__self__, "backend_address_pool_name", backend_address_pool_name)
        if backend_http_settings_id is not None:
            pulumi.set(__self__, "backend_http_settings_id", backend_http_settings_id)
        if backend_http_settings_name is not None:
            pulumi.set(__self__, "backend_http_settings_name", backend_http_settings_name)
        if http_listener_id is not None:
            pulumi.set(__self__, "http_listener_id", http_listener_id)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if priority is not None:
            pulumi.set(__self__, "priority", priority)
        if redirect_configuration_id is not None:
            pulumi.set(__self__, "redirect_configuration_id", redirect_configuration_id)
        if redirect_configuration_name is not None:
            pulumi.set(__self__, "redirect_configuration_name", redirect_configuration_name)
        if rewrite_rule_set_id is not None:
            pulumi.set(__self__, "rewrite_rule_set_id", rewrite_rule_set_id)
        if rewrite_rule_set_name is not None:
            pulumi.set(__self__, "rewrite_rule_set_name", rewrite_rule_set_name)
        if url_path_map_id is not None:
            pulumi.set(__self__, "url_path_map_id", url_path_map_id)
        if url_path_map_name is not None:
            pulumi.set(__self__, "url_path_map_name", url_path_map_name)

    @property
    @pulumi.getter(name="httpListenerName")
    def http_listener_name(self) -> pulumi.Input[str]:
        """
        The Name of the HTTP Listener which should be used for this Routing Rule.
        """
        return pulumi.get(self, "http_listener_name")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of this Request Routing Rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="ruleType")
    def rule_type(self) -> pulumi.Input[str]:
        """
        The Type of Routing that should be used for this Rule. Possible values are `Basic` and `PathBasedRouting`.
        """
        return pulumi.get(self, "rule_type")

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

    @property
    @pulumi.getter(name="backendAddressPoolId")
    def backend_address_pool_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Backend Address Pool.
        """
        return pulumi.get(self, "backend_address_pool_id")

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

    @property
    @pulumi.getter(name="backendAddressPoolName")
    def backend_address_pool_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Backend Address Pool which should be used for this Routing Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        return pulumi.get(self, "backend_address_pool_name")

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

    @property
    @pulumi.getter(name="backendHttpSettingsId")
    def backend_http_settings_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Backend HTTP Settings Configuration.
        """
        return pulumi.get(self, "backend_http_settings_id")

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

    @property
    @pulumi.getter(name="backendHttpSettingsName")
    def backend_http_settings_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Backend HTTP Settings Collection which should be used for this Routing Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        return pulumi.get(self, "backend_http_settings_name")

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

    @property
    @pulumi.getter(name="httpListenerId")
    def http_listener_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated HTTP Listener.
        """
        return pulumi.get(self, "http_listener_id")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def priority(self) -> Optional[pulumi.Input[int]]:
        """
        Rule evaluation order can be dictated by specifying an integer value from `1` to `20000` with `1` being the highest priority and `20000` being the lowest priority.

        > **NOTE:** `priority` is required when `sku[0].tier` is set to `*_v2`.
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter(name="redirectConfigurationId")
    def redirect_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Redirect Configuration.
        """
        return pulumi.get(self, "redirect_configuration_id")

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

    @property
    @pulumi.getter(name="redirectConfigurationName")
    def redirect_configuration_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Redirect Configuration which should be used for this Routing Rule. Cannot be set if either `backend_address_pool_name` or `backend_http_settings_name` is set.
        """
        return pulumi.get(self, "redirect_configuration_name")

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

    @property
    @pulumi.getter(name="rewriteRuleSetId")
    def rewrite_rule_set_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Rewrite Rule Set.
        """
        return pulumi.get(self, "rewrite_rule_set_id")

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

    @property
    @pulumi.getter(name="rewriteRuleSetName")
    def rewrite_rule_set_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Rewrite Rule Set which should be used for this Routing Rule. Only valid for v2 SKUs.

        > **NOTE:** `backend_address_pool_name`, `backend_http_settings_name`, `redirect_configuration_name`, and `rewrite_rule_set_name` are applicable only when `rule_type` is `Basic`.
        """
        return pulumi.get(self, "rewrite_rule_set_name")

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

    @property
    @pulumi.getter(name="urlPathMapId")
    def url_path_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated URL Path Map.
        """
        return pulumi.get(self, "url_path_map_id")

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

    @property
    @pulumi.getter(name="urlPathMapName")
    def url_path_map_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the URL Path Map which should be associated with this Routing Rule.
        """
        return pulumi.get(self, "url_path_map_name")

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


if not MYPY:
    class ApplicationGatewayRewriteRuleSetArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Unique name of the rewrite rule set block
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        rewrite_rules: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleArgsDict']]]]
        """
        One or more `rewrite_rule` blocks as defined below.
        """
elif False:
    ApplicationGatewayRewriteRuleSetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRewriteRuleSetArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None,
                 rewrite_rules: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleArgs']]]] = None):
        """
        :param pulumi.Input[str] name: Unique name of the rewrite rule set block
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleArgs']]] rewrite_rules: One or more `rewrite_rule` blocks as defined below.
        """
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if rewrite_rules is not None:
            pulumi.set(__self__, "rewrite_rules", rewrite_rules)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Unique name of the rewrite rule set block
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="rewriteRules")
    def rewrite_rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleArgs']]]]:
        """
        One or more `rewrite_rule` blocks as defined below.
        """
        return pulumi.get(self, "rewrite_rules")

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


if not MYPY:
    class ApplicationGatewayRewriteRuleSetRewriteRuleArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Unique name of the rewrite rule block
        """
        rule_sequence: pulumi.Input[int]
        """
        Rule sequence of the rewrite rule that determines the order of execution in a set.
        """
        conditions: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgsDict']]]]
        """
        One or more `condition` blocks as defined above.
        """
        request_header_configurations: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgsDict']]]]
        """
        One or more `request_header_configuration` blocks as defined above.
        """
        response_header_configurations: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgsDict']]]]
        """
        One or more `response_header_configuration` blocks as defined above.
        """
        url: NotRequired[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgsDict']]
        """
        One `url` block as defined below
        """
elif False:
    ApplicationGatewayRewriteRuleSetRewriteRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRewriteRuleSetRewriteRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 rule_sequence: pulumi.Input[int],
                 conditions: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgs']]]] = None,
                 request_header_configurations: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgs']]]] = None,
                 response_header_configurations: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgs']]]] = None,
                 url: Optional[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs']] = None):
        """
        :param pulumi.Input[str] name: Unique name of the rewrite rule block
        :param pulumi.Input[int] rule_sequence: Rule sequence of the rewrite rule that determines the order of execution in a set.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgs']]] conditions: One or more `condition` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgs']]] request_header_configurations: One or more `request_header_configuration` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgs']]] response_header_configurations: One or more `response_header_configuration` blocks as defined above.
        :param pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs'] url: One `url` block as defined below
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "rule_sequence", rule_sequence)
        if conditions is not None:
            pulumi.set(__self__, "conditions", conditions)
        if request_header_configurations is not None:
            pulumi.set(__self__, "request_header_configurations", request_header_configurations)
        if response_header_configurations is not None:
            pulumi.set(__self__, "response_header_configurations", response_header_configurations)
        if url is not None:
            pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Unique name of the rewrite rule block
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="ruleSequence")
    def rule_sequence(self) -> pulumi.Input[int]:
        """
        Rule sequence of the rewrite rule that determines the order of execution in a set.
        """
        return pulumi.get(self, "rule_sequence")

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

    @property
    @pulumi.getter
    def conditions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgs']]]]:
        """
        One or more `condition` blocks as defined above.
        """
        return pulumi.get(self, "conditions")

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

    @property
    @pulumi.getter(name="requestHeaderConfigurations")
    def request_header_configurations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgs']]]]:
        """
        One or more `request_header_configuration` blocks as defined above.
        """
        return pulumi.get(self, "request_header_configurations")

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

    @property
    @pulumi.getter(name="responseHeaderConfigurations")
    def response_header_configurations(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgs']]]]:
        """
        One or more `response_header_configuration` blocks as defined above.
        """
        return pulumi.get(self, "response_header_configurations")

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

    @property
    @pulumi.getter
    def url(self) -> Optional[pulumi.Input['ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs']]:
        """
        One `url` block as defined below
        """
        return pulumi.get(self, "url")

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


if not MYPY:
    class ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgsDict(TypedDict):
        pattern: pulumi.Input[str]
        """
        The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
        """
        variable: pulumi.Input[str]
        """
        The [variable](https://docs.microsoft.com/azure/application-gateway/rewrite-http-headers#server-variables) of the condition.
        """
        ignore_case: NotRequired[pulumi.Input[bool]]
        """
        Perform a case in-sensitive comparison. Defaults to `false`
        """
        negate: NotRequired[pulumi.Input[bool]]
        """
        Negate the result of the condition evaluation. Defaults to `false`
        """
elif False:
    ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgs:
    def __init__(__self__, *,
                 pattern: pulumi.Input[str],
                 variable: pulumi.Input[str],
                 ignore_case: Optional[pulumi.Input[bool]] = None,
                 negate: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] pattern: The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
        :param pulumi.Input[str] variable: The [variable](https://docs.microsoft.com/azure/application-gateway/rewrite-http-headers#server-variables) of the condition.
        :param pulumi.Input[bool] ignore_case: Perform a case in-sensitive comparison. Defaults to `false`
        :param pulumi.Input[bool] negate: Negate the result of the condition evaluation. Defaults to `false`
        """
        pulumi.set(__self__, "pattern", pattern)
        pulumi.set(__self__, "variable", variable)
        if ignore_case is not None:
            pulumi.set(__self__, "ignore_case", ignore_case)
        if negate is not None:
            pulumi.set(__self__, "negate", negate)

    @property
    @pulumi.getter
    def pattern(self) -> pulumi.Input[str]:
        """
        The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
        """
        return pulumi.get(self, "pattern")

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

    @property
    @pulumi.getter
    def variable(self) -> pulumi.Input[str]:
        """
        The [variable](https://docs.microsoft.com/azure/application-gateway/rewrite-http-headers#server-variables) of the condition.
        """
        return pulumi.get(self, "variable")

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

    @property
    @pulumi.getter(name="ignoreCase")
    def ignore_case(self) -> Optional[pulumi.Input[bool]]:
        """
        Perform a case in-sensitive comparison. Defaults to `false`
        """
        return pulumi.get(self, "ignore_case")

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

    @property
    @pulumi.getter
    def negate(self) -> Optional[pulumi.Input[bool]]:
        """
        Negate the result of the condition evaluation. Defaults to `false`
        """
        return pulumi.get(self, "negate")

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


if not MYPY:
    class ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgsDict(TypedDict):
        header_name: pulumi.Input[str]
        """
        Header name of the header configuration.
        """
        header_value: pulumi.Input[str]
        """
        Header value of the header configuration. To delete a request header set this property to an empty string.
        """
elif False:
    ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgs:
    def __init__(__self__, *,
                 header_name: pulumi.Input[str],
                 header_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] header_name: Header name of the header configuration.
        :param pulumi.Input[str] header_value: Header value of the header configuration. To delete a request header set this property to an empty string.
        """
        pulumi.set(__self__, "header_name", header_name)
        pulumi.set(__self__, "header_value", header_value)

    @property
    @pulumi.getter(name="headerName")
    def header_name(self) -> pulumi.Input[str]:
        """
        Header name of the header configuration.
        """
        return pulumi.get(self, "header_name")

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

    @property
    @pulumi.getter(name="headerValue")
    def header_value(self) -> pulumi.Input[str]:
        """
        Header value of the header configuration. To delete a request header set this property to an empty string.
        """
        return pulumi.get(self, "header_value")

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


if not MYPY:
    class ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgsDict(TypedDict):
        header_name: pulumi.Input[str]
        """
        Header name of the header configuration.
        """
        header_value: pulumi.Input[str]
        """
        Header value of the header configuration. To delete a response header set this property to an empty string.
        """
elif False:
    ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgs:
    def __init__(__self__, *,
                 header_name: pulumi.Input[str],
                 header_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] header_name: Header name of the header configuration.
        :param pulumi.Input[str] header_value: Header value of the header configuration. To delete a response header set this property to an empty string.
        """
        pulumi.set(__self__, "header_name", header_name)
        pulumi.set(__self__, "header_value", header_value)

    @property
    @pulumi.getter(name="headerName")
    def header_name(self) -> pulumi.Input[str]:
        """
        Header name of the header configuration.
        """
        return pulumi.get(self, "header_name")

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

    @property
    @pulumi.getter(name="headerValue")
    def header_value(self) -> pulumi.Input[str]:
        """
        Header value of the header configuration. To delete a response header set this property to an empty string.
        """
        return pulumi.get(self, "header_value")

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


if not MYPY:
    class ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgsDict(TypedDict):
        components: NotRequired[pulumi.Input[str]]
        """
        The components used to rewrite the URL. Possible values are `path_only` and `query_string_only` to limit the rewrite to the URL Path or URL Query String only.

        > **Note:** One or both of `path` and `query_string` must be specified. If one of these is not specified, it means the value will be empty. If you only want to rewrite `path` or `query_string`, use `components`.
        """
        path: NotRequired[pulumi.Input[str]]
        """
        The URL path to rewrite.
        """
        query_string: NotRequired[pulumi.Input[str]]
        """
        The query string to rewrite.
        """
        reroute: NotRequired[pulumi.Input[bool]]
        """
        Whether the URL path map should be reevaluated after this rewrite has been applied. [More info on rewrite configuration](https://docs.microsoft.com/azure/application-gateway/rewrite-http-headers-url#rewrite-configuration)
        """
elif False:
    ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs:
    def __init__(__self__, *,
                 components: Optional[pulumi.Input[str]] = None,
                 path: Optional[pulumi.Input[str]] = None,
                 query_string: Optional[pulumi.Input[str]] = None,
                 reroute: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] components: The components used to rewrite the URL. Possible values are `path_only` and `query_string_only` to limit the rewrite to the URL Path or URL Query String only.
               
               > **Note:** One or both of `path` and `query_string` must be specified. If one of these is not specified, it means the value will be empty. If you only want to rewrite `path` or `query_string`, use `components`.
        :param pulumi.Input[str] path: The URL path to rewrite.
        :param pulumi.Input[str] query_string: The query string to rewrite.
        :param pulumi.Input[bool] reroute: Whether the URL path map should be reevaluated after this rewrite has been applied. [More info on rewrite configuration](https://docs.microsoft.com/azure/application-gateway/rewrite-http-headers-url#rewrite-configuration)
        """
        if components is not None:
            pulumi.set(__self__, "components", components)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if query_string is not None:
            pulumi.set(__self__, "query_string", query_string)
        if reroute is not None:
            pulumi.set(__self__, "reroute", reroute)

    @property
    @pulumi.getter
    def components(self) -> Optional[pulumi.Input[str]]:
        """
        The components used to rewrite the URL. Possible values are `path_only` and `query_string_only` to limit the rewrite to the URL Path or URL Query String only.

        > **Note:** One or both of `path` and `query_string` must be specified. If one of these is not specified, it means the value will be empty. If you only want to rewrite `path` or `query_string`, use `components`.
        """
        return pulumi.get(self, "components")

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

    @property
    @pulumi.getter
    def path(self) -> Optional[pulumi.Input[str]]:
        """
        The URL path to rewrite.
        """
        return pulumi.get(self, "path")

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

    @property
    @pulumi.getter(name="queryString")
    def query_string(self) -> Optional[pulumi.Input[str]]:
        """
        The query string to rewrite.
        """
        return pulumi.get(self, "query_string")

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

    @property
    @pulumi.getter
    def reroute(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether the URL path map should be reevaluated after this rewrite has been applied. [More info on rewrite configuration](https://docs.microsoft.com/azure/application-gateway/rewrite-http-headers-url#rewrite-configuration)
        """
        return pulumi.get(self, "reroute")

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


if not MYPY:
    class ApplicationGatewaySkuArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of the SKU to use for this Application Gateway. Possible values are `Basic`, `Standard_v2`, and `WAF_v2`.
        """
        tier: pulumi.Input[str]
        """
        The Tier of the SKU to use for this Application Gateway. Possible values are `Basic`, `Standard_v2`, and `WAF_v2`.
        """
        capacity: NotRequired[pulumi.Input[int]]
        """
        The Capacity of the SKU to use for this Application Gateway. When using a V1 SKU this value must be between `1` and `32`, and `1` to `125` for a V2 SKU. When using a `Basic` SKU this property must be between `1` and `2`. This property is optional if `autoscale_configuration` is set.
        """
elif False:
    ApplicationGatewaySkuArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewaySkuArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 tier: pulumi.Input[str],
                 capacity: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] name: The Name of the SKU to use for this Application Gateway. Possible values are `Basic`, `Standard_v2`, and `WAF_v2`.
        :param pulumi.Input[str] tier: The Tier of the SKU to use for this Application Gateway. Possible values are `Basic`, `Standard_v2`, and `WAF_v2`.
        :param pulumi.Input[int] capacity: The Capacity of the SKU to use for this Application Gateway. When using a V1 SKU this value must be between `1` and `32`, and `1` to `125` for a V2 SKU. When using a `Basic` SKU this property must be between `1` and `2`. This property is optional if `autoscale_configuration` is set.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "tier", tier)
        if capacity is not None:
            pulumi.set(__self__, "capacity", capacity)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the SKU to use for this Application Gateway. Possible values are `Basic`, `Standard_v2`, and `WAF_v2`.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def tier(self) -> pulumi.Input[str]:
        """
        The Tier of the SKU to use for this Application Gateway. Possible values are `Basic`, `Standard_v2`, and `WAF_v2`.
        """
        return pulumi.get(self, "tier")

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

    @property
    @pulumi.getter
    def capacity(self) -> Optional[pulumi.Input[int]]:
        """
        The Capacity of the SKU to use for this Application Gateway. When using a V1 SKU this value must be between `1` and `32`, and `1` to `125` for a V2 SKU. When using a `Basic` SKU this property must be between `1` and `2`. This property is optional if `autoscale_configuration` is set.
        """
        return pulumi.get(self, "capacity")

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


if not MYPY:
    class ApplicationGatewaySslCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of the SSL certificate that is unique within this Application Gateway
        """
        data: NotRequired[pulumi.Input[str]]
        """
        The base64-encoded PFX certificate data. Required if `key_vault_secret_id` is not set.

        > **NOTE:** When specifying a file, use `data = filebase64("path/to/file")` to encode the contents of that file.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        key_vault_secret_id: NotRequired[pulumi.Input[str]]
        """
        The Secret ID of the (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for Key Vault to use this feature. Required if `data` is not set.

        > **NOTE:** To implement certificate rotation, `versionless_secret_id` should be used, although `secret_id` is also supported.

        > **NOTE:** TLS termination with Key Vault certificates is limited to the [v2 SKUs](https://docs.microsoft.com/azure/application-gateway/key-vault-certs).

        > **NOTE:** For TLS termination with Key Vault certificates to work properly, an existing user-assigned managed identity, which Application Gateway uses to retrieve certificates from Key Vault, should be defined via `identity` block. Additionally, access policies in the Key Vault to allow the identity to be granted *get* access to the secret should be defined.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        Password for the pfx file specified in data. Required if `data` is set.
        """
        public_cert_data: NotRequired[pulumi.Input[str]]
        """
        The Public Certificate Data associated with the SSL Certificate.
        """
elif False:
    ApplicationGatewaySslCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewaySslCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 data: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 key_vault_secret_id: Optional[pulumi.Input[str]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 public_cert_data: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The Name of the SSL certificate that is unique within this Application Gateway
        :param pulumi.Input[str] data: The base64-encoded PFX certificate data. Required if `key_vault_secret_id` is not set.
               
               > **NOTE:** When specifying a file, use `data = filebase64("path/to/file")` to encode the contents of that file.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[str] key_vault_secret_id: The Secret ID of the (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for Key Vault to use this feature. Required if `data` is not set.
               
               > **NOTE:** To implement certificate rotation, `versionless_secret_id` should be used, although `secret_id` is also supported.
               
               > **NOTE:** TLS termination with Key Vault certificates is limited to the [v2 SKUs](https://docs.microsoft.com/azure/application-gateway/key-vault-certs).
               
               > **NOTE:** For TLS termination with Key Vault certificates to work properly, an existing user-assigned managed identity, which Application Gateway uses to retrieve certificates from Key Vault, should be defined via `identity` block. Additionally, access policies in the Key Vault to allow the identity to be granted *get* access to the secret should be defined.
        :param pulumi.Input[str] password: Password for the pfx file specified in data. Required if `data` is set.
        :param pulumi.Input[str] public_cert_data: The Public Certificate Data associated with the SSL Certificate.
        """
        pulumi.set(__self__, "name", name)
        if data is not None:
            pulumi.set(__self__, "data", data)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if key_vault_secret_id is not None:
            pulumi.set(__self__, "key_vault_secret_id", key_vault_secret_id)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if public_cert_data is not None:
            pulumi.set(__self__, "public_cert_data", public_cert_data)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the SSL certificate that is unique within this Application Gateway
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def data(self) -> Optional[pulumi.Input[str]]:
        """
        The base64-encoded PFX certificate data. Required if `key_vault_secret_id` is not set.

        > **NOTE:** When specifying a file, use `data = filebase64("path/to/file")` to encode the contents of that file.
        """
        return pulumi.get(self, "data")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="keyVaultSecretId")
    def key_vault_secret_id(self) -> Optional[pulumi.Input[str]]:
        """
        The Secret ID of the (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for Key Vault to use this feature. Required if `data` is not set.

        > **NOTE:** To implement certificate rotation, `versionless_secret_id` should be used, although `secret_id` is also supported.

        > **NOTE:** TLS termination with Key Vault certificates is limited to the [v2 SKUs](https://docs.microsoft.com/azure/application-gateway/key-vault-certs).

        > **NOTE:** For TLS termination with Key Vault certificates to work properly, an existing user-assigned managed identity, which Application Gateway uses to retrieve certificates from Key Vault, should be defined via `identity` block. Additionally, access policies in the Key Vault to allow the identity to be granted *get* access to the secret should be defined.
        """
        return pulumi.get(self, "key_vault_secret_id")

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

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        Password for the pfx file specified in data. Required if `data` is set.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter(name="publicCertData")
    def public_cert_data(self) -> Optional[pulumi.Input[str]]:
        """
        The Public Certificate Data associated with the SSL Certificate.
        """
        return pulumi.get(self, "public_cert_data")

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


if not MYPY:
    class ApplicationGatewaySslPolicyArgsDict(TypedDict):
        cipher_suites: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        disabled_protocols: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSL Protocols which should be disabled on this Application Gateway. Possible values are `TLSv1_0`, `TLSv1_1`, `TLSv1_2` and `TLSv1_3`.

        > **NOTE:** `disabled_protocols` cannot be set when `policy_name` or `policy_type` are set.
        """
        min_protocol_version: NotRequired[pulumi.Input[str]]
        policy_name: NotRequired[pulumi.Input[str]]
        policy_type: NotRequired[pulumi.Input[str]]
        """
        The Type of the Policy. Possible values are `Predefined`, `Custom` and `CustomV2`.

        > **NOTE:** `policy_type` is Required when `policy_name` is set - cannot be set if `disabled_protocols` is set.
        """
elif False:
    ApplicationGatewaySslPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewaySslPolicyArgs:
    def __init__(__self__, *,
                 cipher_suites: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 disabled_protocols: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 min_protocol_version: Optional[pulumi.Input[str]] = None,
                 policy_name: Optional[pulumi.Input[str]] = None,
                 policy_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] disabled_protocols: A list of SSL Protocols which should be disabled on this Application Gateway. Possible values are `TLSv1_0`, `TLSv1_1`, `TLSv1_2` and `TLSv1_3`.
               
               > **NOTE:** `disabled_protocols` cannot be set when `policy_name` or `policy_type` are set.
        :param pulumi.Input[str] policy_type: The Type of the Policy. Possible values are `Predefined`, `Custom` and `CustomV2`.
               
               > **NOTE:** `policy_type` is Required when `policy_name` is set - cannot be set if `disabled_protocols` is set.
        """
        if cipher_suites is not None:
            pulumi.set(__self__, "cipher_suites", cipher_suites)
        if disabled_protocols is not None:
            pulumi.set(__self__, "disabled_protocols", disabled_protocols)
        if min_protocol_version is not None:
            pulumi.set(__self__, "min_protocol_version", min_protocol_version)
        if policy_name is not None:
            pulumi.set(__self__, "policy_name", policy_name)
        if policy_type is not None:
            pulumi.set(__self__, "policy_type", policy_type)

    @property
    @pulumi.getter(name="cipherSuites")
    def cipher_suites(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "cipher_suites")

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

    @property
    @pulumi.getter(name="disabledProtocols")
    def disabled_protocols(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSL Protocols which should be disabled on this Application Gateway. Possible values are `TLSv1_0`, `TLSv1_1`, `TLSv1_2` and `TLSv1_3`.

        > **NOTE:** `disabled_protocols` cannot be set when `policy_name` or `policy_type` are set.
        """
        return pulumi.get(self, "disabled_protocols")

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

    @property
    @pulumi.getter(name="minProtocolVersion")
    def min_protocol_version(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "min_protocol_version")

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

    @property
    @pulumi.getter(name="policyName")
    def policy_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "policy_name")

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

    @property
    @pulumi.getter(name="policyType")
    def policy_type(self) -> Optional[pulumi.Input[str]]:
        """
        The Type of the Policy. Possible values are `Predefined`, `Custom` and `CustomV2`.

        > **NOTE:** `policy_type` is Required when `policy_name` is set - cannot be set if `disabled_protocols` is set.
        """
        return pulumi.get(self, "policy_type")

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


if not MYPY:
    class ApplicationGatewaySslProfileArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the SSL Profile that is unique within this Application Gateway.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        ssl_policy: NotRequired[pulumi.Input['ApplicationGatewaySslProfileSslPolicyArgsDict']]
        """
        a `ssl_policy` block as defined below.
        """
        trusted_client_certificate_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The name of the Trusted Client Certificate that will be used to authenticate requests from clients.
        """
        verify_client_cert_issuer_dn: NotRequired[pulumi.Input[bool]]
        """
        Should client certificate issuer DN be verified? Defaults to `false`.
        """
        verify_client_certificate_revocation: NotRequired[pulumi.Input[str]]
        """
        Specify the method to check client certificate revocation status. Possible value is `OCSP`.
        """
elif False:
    ApplicationGatewaySslProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewaySslProfileArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None,
                 ssl_policy: Optional[pulumi.Input['ApplicationGatewaySslProfileSslPolicyArgs']] = None,
                 trusted_client_certificate_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 verify_client_cert_issuer_dn: Optional[pulumi.Input[bool]] = None,
                 verify_client_certificate_revocation: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the SSL Profile that is unique within this Application Gateway.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input['ApplicationGatewaySslProfileSslPolicyArgs'] ssl_policy: a `ssl_policy` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] trusted_client_certificate_names: The name of the Trusted Client Certificate that will be used to authenticate requests from clients.
        :param pulumi.Input[bool] verify_client_cert_issuer_dn: Should client certificate issuer DN be verified? Defaults to `false`.
        :param pulumi.Input[str] verify_client_certificate_revocation: Specify the method to check client certificate revocation status. Possible value is `OCSP`.
        """
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if ssl_policy is not None:
            pulumi.set(__self__, "ssl_policy", ssl_policy)
        if trusted_client_certificate_names is not None:
            pulumi.set(__self__, "trusted_client_certificate_names", trusted_client_certificate_names)
        if verify_client_cert_issuer_dn is not None:
            pulumi.set(__self__, "verify_client_cert_issuer_dn", verify_client_cert_issuer_dn)
        if verify_client_certificate_revocation is not None:
            pulumi.set(__self__, "verify_client_certificate_revocation", verify_client_certificate_revocation)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the SSL Profile that is unique within this Application Gateway.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="sslPolicy")
    def ssl_policy(self) -> Optional[pulumi.Input['ApplicationGatewaySslProfileSslPolicyArgs']]:
        """
        a `ssl_policy` block as defined below.
        """
        return pulumi.get(self, "ssl_policy")

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

    @property
    @pulumi.getter(name="trustedClientCertificateNames")
    def trusted_client_certificate_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The name of the Trusted Client Certificate that will be used to authenticate requests from clients.
        """
        return pulumi.get(self, "trusted_client_certificate_names")

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

    @property
    @pulumi.getter(name="verifyClientCertIssuerDn")
    def verify_client_cert_issuer_dn(self) -> Optional[pulumi.Input[bool]]:
        """
        Should client certificate issuer DN be verified? Defaults to `false`.
        """
        return pulumi.get(self, "verify_client_cert_issuer_dn")

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

    @property
    @pulumi.getter(name="verifyClientCertificateRevocation")
    def verify_client_certificate_revocation(self) -> Optional[pulumi.Input[str]]:
        """
        Specify the method to check client certificate revocation status. Possible value is `OCSP`.
        """
        return pulumi.get(self, "verify_client_certificate_revocation")

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


if not MYPY:
    class ApplicationGatewaySslProfileSslPolicyArgsDict(TypedDict):
        cipher_suites: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        disabled_protocols: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSL Protocols which should be disabled on this Application Gateway. Possible values are `TLSv1_0`, `TLSv1_1`, `TLSv1_2` and `TLSv1_3`.

        > **NOTE:** `disabled_protocols` cannot be set when `policy_name` or `policy_type` are set.
        """
        min_protocol_version: NotRequired[pulumi.Input[str]]
        policy_name: NotRequired[pulumi.Input[str]]
        policy_type: NotRequired[pulumi.Input[str]]
        """
        The Type of the Policy. Possible values are `Predefined`, `Custom` and `CustomV2`.

        > **NOTE:** `policy_type` is Required when `policy_name` is set - cannot be set if `disabled_protocols` is set.
        """
elif False:
    ApplicationGatewaySslProfileSslPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewaySslProfileSslPolicyArgs:
    def __init__(__self__, *,
                 cipher_suites: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 disabled_protocols: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 min_protocol_version: Optional[pulumi.Input[str]] = None,
                 policy_name: Optional[pulumi.Input[str]] = None,
                 policy_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] disabled_protocols: A list of SSL Protocols which should be disabled on this Application Gateway. Possible values are `TLSv1_0`, `TLSv1_1`, `TLSv1_2` and `TLSv1_3`.
               
               > **NOTE:** `disabled_protocols` cannot be set when `policy_name` or `policy_type` are set.
        :param pulumi.Input[str] policy_type: The Type of the Policy. Possible values are `Predefined`, `Custom` and `CustomV2`.
               
               > **NOTE:** `policy_type` is Required when `policy_name` is set - cannot be set if `disabled_protocols` is set.
        """
        if cipher_suites is not None:
            pulumi.set(__self__, "cipher_suites", cipher_suites)
        if disabled_protocols is not None:
            pulumi.set(__self__, "disabled_protocols", disabled_protocols)
        if min_protocol_version is not None:
            pulumi.set(__self__, "min_protocol_version", min_protocol_version)
        if policy_name is not None:
            pulumi.set(__self__, "policy_name", policy_name)
        if policy_type is not None:
            pulumi.set(__self__, "policy_type", policy_type)

    @property
    @pulumi.getter(name="cipherSuites")
    def cipher_suites(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "cipher_suites")

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

    @property
    @pulumi.getter(name="disabledProtocols")
    def disabled_protocols(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSL Protocols which should be disabled on this Application Gateway. Possible values are `TLSv1_0`, `TLSv1_1`, `TLSv1_2` and `TLSv1_3`.

        > **NOTE:** `disabled_protocols` cannot be set when `policy_name` or `policy_type` are set.
        """
        return pulumi.get(self, "disabled_protocols")

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

    @property
    @pulumi.getter(name="minProtocolVersion")
    def min_protocol_version(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "min_protocol_version")

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

    @property
    @pulumi.getter(name="policyName")
    def policy_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "policy_name")

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

    @property
    @pulumi.getter(name="policyType")
    def policy_type(self) -> Optional[pulumi.Input[str]]:
        """
        The Type of the Policy. Possible values are `Predefined`, `Custom` and `CustomV2`.

        > **NOTE:** `policy_type` is Required when `policy_name` is set - cannot be set if `disabled_protocols` is set.
        """
        return pulumi.get(self, "policy_type")

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


if not MYPY:
    class ApplicationGatewayTrustedClientCertificateArgsDict(TypedDict):
        data: pulumi.Input[str]
        """
        The base-64 encoded certificate.
        """
        name: pulumi.Input[str]
        """
        The name of the Trusted Client Certificate that is unique within this Application Gateway.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayTrustedClientCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayTrustedClientCertificateArgs:
    def __init__(__self__, *,
                 data: pulumi.Input[str],
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] data: The base-64 encoded certificate.
        :param pulumi.Input[str] name: The name of the Trusted Client Certificate that is unique within this Application Gateway.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "data", data)
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def data(self) -> pulumi.Input[str]:
        """
        The base-64 encoded certificate.
        """
        return pulumi.get(self, "data")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Trusted Client Certificate that is unique within this Application Gateway.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayTrustedRootCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of the Trusted Root Certificate to use.
        """
        data: NotRequired[pulumi.Input[str]]
        """
        The contents of the Trusted Root Certificate which should be used. Required if `key_vault_secret_id` is not set.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        key_vault_secret_id: NotRequired[pulumi.Input[str]]
        """
        The Secret ID of the (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for the Key Vault to use this feature. Required if `data` is not set.

        > **NOTE:** To implement certificate rotation, `versionless_secret_id` should be used, although `secret_id` is also supported.

        > **NOTE:** TLS termination with Key Vault certificates is limited to the [v2 SKUs](https://docs.microsoft.com/azure/application-gateway/key-vault-certs).

        > **NOTE:** For TLS termination with Key Vault certificates to work properly, an existing user-assigned managed identity, which Application Gateway uses to retrieve certificates from Key Vault, should be defined via `identity` block. Additionally, access policies in the Key Vault to allow the identity to be granted *get* access to the secret should be defined.
        """
elif False:
    ApplicationGatewayTrustedRootCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayTrustedRootCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 data: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 key_vault_secret_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The Name of the Trusted Root Certificate to use.
        :param pulumi.Input[str] data: The contents of the Trusted Root Certificate which should be used. Required if `key_vault_secret_id` is not set.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[str] key_vault_secret_id: The Secret ID of the (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for the Key Vault to use this feature. Required if `data` is not set.
               
               > **NOTE:** To implement certificate rotation, `versionless_secret_id` should be used, although `secret_id` is also supported.
               
               > **NOTE:** TLS termination with Key Vault certificates is limited to the [v2 SKUs](https://docs.microsoft.com/azure/application-gateway/key-vault-certs).
               
               > **NOTE:** For TLS termination with Key Vault certificates to work properly, an existing user-assigned managed identity, which Application Gateway uses to retrieve certificates from Key Vault, should be defined via `identity` block. Additionally, access policies in the Key Vault to allow the identity to be granted *get* access to the secret should be defined.
        """
        pulumi.set(__self__, "name", name)
        if data is not None:
            pulumi.set(__self__, "data", data)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if key_vault_secret_id is not None:
            pulumi.set(__self__, "key_vault_secret_id", key_vault_secret_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the Trusted Root Certificate to use.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def data(self) -> Optional[pulumi.Input[str]]:
        """
        The contents of the Trusted Root Certificate which should be used. Required if `key_vault_secret_id` is not set.
        """
        return pulumi.get(self, "data")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="keyVaultSecretId")
    def key_vault_secret_id(self) -> Optional[pulumi.Input[str]]:
        """
        The Secret ID of the (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for the Key Vault to use this feature. Required if `data` is not set.

        > **NOTE:** To implement certificate rotation, `versionless_secret_id` should be used, although `secret_id` is also supported.

        > **NOTE:** TLS termination with Key Vault certificates is limited to the [v2 SKUs](https://docs.microsoft.com/azure/application-gateway/key-vault-certs).

        > **NOTE:** For TLS termination with Key Vault certificates to work properly, an existing user-assigned managed identity, which Application Gateway uses to retrieve certificates from Key Vault, should be defined via `identity` block. Additionally, access policies in the Key Vault to allow the identity to be granted *get* access to the secret should be defined.
        """
        return pulumi.get(self, "key_vault_secret_id")

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


if not MYPY:
    class ApplicationGatewayUrlPathMapArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of the URL Path Map.
        """
        path_rules: pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayUrlPathMapPathRuleArgsDict']]]
        """
        One or more `path_rule` blocks as defined above.
        """
        default_backend_address_pool_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Default Backend Address Pool.
        """
        default_backend_address_pool_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Default Backend Address Pool which should be used for this URL Path Map. Cannot be set if `default_redirect_configuration_name` is set.
        """
        default_backend_http_settings_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Default Backend HTTP Settings Collection.
        """
        default_backend_http_settings_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Default Backend HTTP Settings Collection which should be used for this URL Path Map. Cannot be set if `default_redirect_configuration_name` is set.
        """
        default_redirect_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Default Redirect Configuration.
        """
        default_redirect_configuration_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Default Redirect Configuration which should be used for this URL Path Map. Cannot be set if either `default_backend_address_pool_name` or `default_backend_http_settings_name` is set.

        > **NOTE:** Both `default_backend_address_pool_name` and `default_backend_http_settings_name` or `default_redirect_configuration_name` should be specified.
        """
        default_rewrite_rule_set_id: NotRequired[pulumi.Input[str]]
        default_rewrite_rule_set_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Default Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
elif False:
    ApplicationGatewayUrlPathMapArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayUrlPathMapArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 path_rules: pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayUrlPathMapPathRuleArgs']]],
                 default_backend_address_pool_id: Optional[pulumi.Input[str]] = None,
                 default_backend_address_pool_name: Optional[pulumi.Input[str]] = None,
                 default_backend_http_settings_id: Optional[pulumi.Input[str]] = None,
                 default_backend_http_settings_name: Optional[pulumi.Input[str]] = None,
                 default_redirect_configuration_id: Optional[pulumi.Input[str]] = None,
                 default_redirect_configuration_name: Optional[pulumi.Input[str]] = None,
                 default_rewrite_rule_set_id: Optional[pulumi.Input[str]] = None,
                 default_rewrite_rule_set_name: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The Name of the URL Path Map.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayUrlPathMapPathRuleArgs']]] path_rules: One or more `path_rule` blocks as defined above.
        :param pulumi.Input[str] default_backend_address_pool_id: The ID of the Default Backend Address Pool.
        :param pulumi.Input[str] default_backend_address_pool_name: The Name of the Default Backend Address Pool which should be used for this URL Path Map. Cannot be set if `default_redirect_configuration_name` is set.
        :param pulumi.Input[str] default_backend_http_settings_id: The ID of the Default Backend HTTP Settings Collection.
        :param pulumi.Input[str] default_backend_http_settings_name: The Name of the Default Backend HTTP Settings Collection which should be used for this URL Path Map. Cannot be set if `default_redirect_configuration_name` is set.
        :param pulumi.Input[str] default_redirect_configuration_id: The ID of the Default Redirect Configuration.
        :param pulumi.Input[str] default_redirect_configuration_name: The Name of the Default Redirect Configuration which should be used for this URL Path Map. Cannot be set if either `default_backend_address_pool_name` or `default_backend_http_settings_name` is set.
               
               > **NOTE:** Both `default_backend_address_pool_name` and `default_backend_http_settings_name` or `default_redirect_configuration_name` should be specified.
        :param pulumi.Input[str] default_rewrite_rule_set_name: The Name of the Default Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "path_rules", path_rules)
        if default_backend_address_pool_id is not None:
            pulumi.set(__self__, "default_backend_address_pool_id", default_backend_address_pool_id)
        if default_backend_address_pool_name is not None:
            pulumi.set(__self__, "default_backend_address_pool_name", default_backend_address_pool_name)
        if default_backend_http_settings_id is not None:
            pulumi.set(__self__, "default_backend_http_settings_id", default_backend_http_settings_id)
        if default_backend_http_settings_name is not None:
            pulumi.set(__self__, "default_backend_http_settings_name", default_backend_http_settings_name)
        if default_redirect_configuration_id is not None:
            pulumi.set(__self__, "default_redirect_configuration_id", default_redirect_configuration_id)
        if default_redirect_configuration_name is not None:
            pulumi.set(__self__, "default_redirect_configuration_name", default_redirect_configuration_name)
        if default_rewrite_rule_set_id is not None:
            pulumi.set(__self__, "default_rewrite_rule_set_id", default_rewrite_rule_set_id)
        if default_rewrite_rule_set_name is not None:
            pulumi.set(__self__, "default_rewrite_rule_set_name", default_rewrite_rule_set_name)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the URL Path Map.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="pathRules")
    def path_rules(self) -> pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayUrlPathMapPathRuleArgs']]]:
        """
        One or more `path_rule` blocks as defined above.
        """
        return pulumi.get(self, "path_rules")

    @path_rules.setter
    def path_rules(self, value: pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayUrlPathMapPathRuleArgs']]]):
        pulumi.set(self, "path_rules", value)

    @property
    @pulumi.getter(name="defaultBackendAddressPoolId")
    def default_backend_address_pool_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Default Backend Address Pool.
        """
        return pulumi.get(self, "default_backend_address_pool_id")

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

    @property
    @pulumi.getter(name="defaultBackendAddressPoolName")
    def default_backend_address_pool_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Default Backend Address Pool which should be used for this URL Path Map. Cannot be set if `default_redirect_configuration_name` is set.
        """
        return pulumi.get(self, "default_backend_address_pool_name")

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

    @property
    @pulumi.getter(name="defaultBackendHttpSettingsId")
    def default_backend_http_settings_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Default Backend HTTP Settings Collection.
        """
        return pulumi.get(self, "default_backend_http_settings_id")

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

    @property
    @pulumi.getter(name="defaultBackendHttpSettingsName")
    def default_backend_http_settings_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Default Backend HTTP Settings Collection which should be used for this URL Path Map. Cannot be set if `default_redirect_configuration_name` is set.
        """
        return pulumi.get(self, "default_backend_http_settings_name")

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

    @property
    @pulumi.getter(name="defaultRedirectConfigurationId")
    def default_redirect_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Default Redirect Configuration.
        """
        return pulumi.get(self, "default_redirect_configuration_id")

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

    @property
    @pulumi.getter(name="defaultRedirectConfigurationName")
    def default_redirect_configuration_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Default Redirect Configuration which should be used for this URL Path Map. Cannot be set if either `default_backend_address_pool_name` or `default_backend_http_settings_name` is set.

        > **NOTE:** Both `default_backend_address_pool_name` and `default_backend_http_settings_name` or `default_redirect_configuration_name` should be specified.
        """
        return pulumi.get(self, "default_redirect_configuration_name")

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

    @property
    @pulumi.getter(name="defaultRewriteRuleSetId")
    def default_rewrite_rule_set_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "default_rewrite_rule_set_id")

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

    @property
    @pulumi.getter(name="defaultRewriteRuleSetName")
    def default_rewrite_rule_set_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Default Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
        """
        return pulumi.get(self, "default_rewrite_rule_set_name")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class ApplicationGatewayUrlPathMapPathRuleArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name of the Path Rule.
        """
        paths: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of Paths used in this Path Rule.
        """
        backend_address_pool_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Backend Address Pool.
        """
        backend_address_pool_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        backend_http_settings_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Backend HTTP Settings Configuration.
        """
        backend_http_settings_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        firewall_policy_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Web Application Firewall Policy which should be used as an HTTP Listener.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Rewrite Rule Set
        """
        redirect_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Redirect Configuration.
        """
        redirect_configuration_name: NotRequired[pulumi.Input[str]]
        """
        The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
        """
        rewrite_rule_set_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the associated Rewrite Rule Set.
        """
        rewrite_rule_set_name: NotRequired[pulumi.Input[str]]
        """
        The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
        """
elif False:
    ApplicationGatewayUrlPathMapPathRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayUrlPathMapPathRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 paths: pulumi.Input[Sequence[pulumi.Input[str]]],
                 backend_address_pool_id: Optional[pulumi.Input[str]] = None,
                 backend_address_pool_name: Optional[pulumi.Input[str]] = None,
                 backend_http_settings_id: Optional[pulumi.Input[str]] = None,
                 backend_http_settings_name: Optional[pulumi.Input[str]] = None,
                 firewall_policy_id: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 redirect_configuration_id: Optional[pulumi.Input[str]] = None,
                 redirect_configuration_name: Optional[pulumi.Input[str]] = None,
                 rewrite_rule_set_id: Optional[pulumi.Input[str]] = None,
                 rewrite_rule_set_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The Name of the Path Rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] paths: A list of Paths used in this Path Rule.
        :param pulumi.Input[str] backend_address_pool_id: The ID of the associated Backend Address Pool.
        :param pulumi.Input[str] backend_address_pool_name: The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
        :param pulumi.Input[str] backend_http_settings_id: The ID of the associated Backend HTTP Settings Configuration.
        :param pulumi.Input[str] backend_http_settings_name: The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
        :param pulumi.Input[str] firewall_policy_id: The ID of the Web Application Firewall Policy which should be used as an HTTP Listener.
        :param pulumi.Input[str] id: The ID of the Rewrite Rule Set
        :param pulumi.Input[str] redirect_configuration_id: The ID of the associated Redirect Configuration.
        :param pulumi.Input[str] redirect_configuration_name: The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
        :param pulumi.Input[str] rewrite_rule_set_id: The ID of the associated Rewrite Rule Set.
        :param pulumi.Input[str] rewrite_rule_set_name: The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "paths", paths)
        if backend_address_pool_id is not None:
            pulumi.set(__self__, "backend_address_pool_id", backend_address_pool_id)
        if backend_address_pool_name is not None:
            pulumi.set(__self__, "backend_address_pool_name", backend_address_pool_name)
        if backend_http_settings_id is not None:
            pulumi.set(__self__, "backend_http_settings_id", backend_http_settings_id)
        if backend_http_settings_name is not None:
            pulumi.set(__self__, "backend_http_settings_name", backend_http_settings_name)
        if firewall_policy_id is not None:
            pulumi.set(__self__, "firewall_policy_id", firewall_policy_id)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if redirect_configuration_id is not None:
            pulumi.set(__self__, "redirect_configuration_id", redirect_configuration_id)
        if redirect_configuration_name is not None:
            pulumi.set(__self__, "redirect_configuration_name", redirect_configuration_name)
        if rewrite_rule_set_id is not None:
            pulumi.set(__self__, "rewrite_rule_set_id", rewrite_rule_set_id)
        if rewrite_rule_set_name is not None:
            pulumi.set(__self__, "rewrite_rule_set_name", rewrite_rule_set_name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name of the Path Rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def paths(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of Paths used in this Path Rule.
        """
        return pulumi.get(self, "paths")

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

    @property
    @pulumi.getter(name="backendAddressPoolId")
    def backend_address_pool_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Backend Address Pool.
        """
        return pulumi.get(self, "backend_address_pool_id")

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

    @property
    @pulumi.getter(name="backendAddressPoolName")
    def backend_address_pool_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        return pulumi.get(self, "backend_address_pool_name")

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

    @property
    @pulumi.getter(name="backendHttpSettingsId")
    def backend_http_settings_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Backend HTTP Settings Configuration.
        """
        return pulumi.get(self, "backend_http_settings_id")

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

    @property
    @pulumi.getter(name="backendHttpSettingsName")
    def backend_http_settings_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
        """
        return pulumi.get(self, "backend_http_settings_name")

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

    @property
    @pulumi.getter(name="firewallPolicyId")
    def firewall_policy_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Web Application Firewall Policy which should be used as an HTTP Listener.
        """
        return pulumi.get(self, "firewall_policy_id")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Rewrite Rule Set
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="redirectConfigurationId")
    def redirect_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Redirect Configuration.
        """
        return pulumi.get(self, "redirect_configuration_id")

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

    @property
    @pulumi.getter(name="redirectConfigurationName")
    def redirect_configuration_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
        """
        return pulumi.get(self, "redirect_configuration_name")

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

    @property
    @pulumi.getter(name="rewriteRuleSetId")
    def rewrite_rule_set_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the associated Rewrite Rule Set.
        """
        return pulumi.get(self, "rewrite_rule_set_id")

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

    @property
    @pulumi.getter(name="rewriteRuleSetName")
    def rewrite_rule_set_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
        """
        return pulumi.get(self, "rewrite_rule_set_name")

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


if not MYPY:
    class ApplicationGatewayWafConfigurationArgsDict(TypedDict):
        enabled: pulumi.Input[bool]
        """
        Is the Web Application Firewall enabled?
        """
        firewall_mode: pulumi.Input[str]
        """
        The Web Application Firewall Mode. Possible values are `Detection` and `Prevention`.
        """
        rule_set_version: pulumi.Input[str]
        """
        The Version of the Rule Set used for this Web Application Firewall. Possible values are `0.1`, `1.0`, `1.1`, `2.1`, `2.2.9`, `3.0`, `3.1` and `3.2`.
        """
        disabled_rule_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationDisabledRuleGroupArgsDict']]]]
        """
        One or more `disabled_rule_group` blocks as defined below.
        """
        exclusions: NotRequired[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationExclusionArgsDict']]]]
        """
        One or more `exclusion` blocks as defined below.
        """
        file_upload_limit_mb: NotRequired[pulumi.Input[int]]
        """
        The File Upload Limit in MB. Accepted values are in the range `1`MB to `750`MB for the `WAF_v2` SKU, and `1`MB to `500`MB for all other SKUs. Defaults to `100`MB.
        """
        max_request_body_size_kb: NotRequired[pulumi.Input[int]]
        """
        The Maximum Request Body Size in KB. Accepted values are in the range `1`KB to `128`KB. Defaults to `128`KB.
        """
        request_body_check: NotRequired[pulumi.Input[bool]]
        """
        Is Request Body Inspection enabled? Defaults to `true`.
        """
        rule_set_type: NotRequired[pulumi.Input[str]]
        """
        The Type of the Rule Set used for this Web Application Firewall. Possible values are `OWASP`, `Microsoft_BotManagerRuleSet` and `Microsoft_DefaultRuleSet`. Defaults to `OWASP`.
        """
elif False:
    ApplicationGatewayWafConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayWafConfigurationArgs:
    def __init__(__self__, *,
                 enabled: pulumi.Input[bool],
                 firewall_mode: pulumi.Input[str],
                 rule_set_version: pulumi.Input[str],
                 disabled_rule_groups: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationDisabledRuleGroupArgs']]]] = None,
                 exclusions: Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationExclusionArgs']]]] = None,
                 file_upload_limit_mb: Optional[pulumi.Input[int]] = None,
                 max_request_body_size_kb: Optional[pulumi.Input[int]] = None,
                 request_body_check: Optional[pulumi.Input[bool]] = None,
                 rule_set_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] enabled: Is the Web Application Firewall enabled?
        :param pulumi.Input[str] firewall_mode: The Web Application Firewall Mode. Possible values are `Detection` and `Prevention`.
        :param pulumi.Input[str] rule_set_version: The Version of the Rule Set used for this Web Application Firewall. Possible values are `0.1`, `1.0`, `1.1`, `2.1`, `2.2.9`, `3.0`, `3.1` and `3.2`.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationDisabledRuleGroupArgs']]] disabled_rule_groups: One or more `disabled_rule_group` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationExclusionArgs']]] exclusions: One or more `exclusion` blocks as defined below.
        :param pulumi.Input[int] file_upload_limit_mb: The File Upload Limit in MB. Accepted values are in the range `1`MB to `750`MB for the `WAF_v2` SKU, and `1`MB to `500`MB for all other SKUs. Defaults to `100`MB.
        :param pulumi.Input[int] max_request_body_size_kb: The Maximum Request Body Size in KB. Accepted values are in the range `1`KB to `128`KB. Defaults to `128`KB.
        :param pulumi.Input[bool] request_body_check: Is Request Body Inspection enabled? Defaults to `true`.
        :param pulumi.Input[str] rule_set_type: The Type of the Rule Set used for this Web Application Firewall. Possible values are `OWASP`, `Microsoft_BotManagerRuleSet` and `Microsoft_DefaultRuleSet`. Defaults to `OWASP`.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "firewall_mode", firewall_mode)
        pulumi.set(__self__, "rule_set_version", rule_set_version)
        if disabled_rule_groups is not None:
            pulumi.set(__self__, "disabled_rule_groups", disabled_rule_groups)
        if exclusions is not None:
            pulumi.set(__self__, "exclusions", exclusions)
        if file_upload_limit_mb is not None:
            pulumi.set(__self__, "file_upload_limit_mb", file_upload_limit_mb)
        if max_request_body_size_kb is not None:
            pulumi.set(__self__, "max_request_body_size_kb", max_request_body_size_kb)
        if request_body_check is not None:
            pulumi.set(__self__, "request_body_check", request_body_check)
        if rule_set_type is not None:
            pulumi.set(__self__, "rule_set_type", rule_set_type)

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        Is the Web Application Firewall enabled?
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="firewallMode")
    def firewall_mode(self) -> pulumi.Input[str]:
        """
        The Web Application Firewall Mode. Possible values are `Detection` and `Prevention`.
        """
        return pulumi.get(self, "firewall_mode")

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

    @property
    @pulumi.getter(name="ruleSetVersion")
    def rule_set_version(self) -> pulumi.Input[str]:
        """
        The Version of the Rule Set used for this Web Application Firewall. Possible values are `0.1`, `1.0`, `1.1`, `2.1`, `2.2.9`, `3.0`, `3.1` and `3.2`.
        """
        return pulumi.get(self, "rule_set_version")

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

    @property
    @pulumi.getter(name="disabledRuleGroups")
    def disabled_rule_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationDisabledRuleGroupArgs']]]]:
        """
        One or more `disabled_rule_group` blocks as defined below.
        """
        return pulumi.get(self, "disabled_rule_groups")

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

    @property
    @pulumi.getter
    def exclusions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ApplicationGatewayWafConfigurationExclusionArgs']]]]:
        """
        One or more `exclusion` blocks as defined below.
        """
        return pulumi.get(self, "exclusions")

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

    @property
    @pulumi.getter(name="fileUploadLimitMb")
    def file_upload_limit_mb(self) -> Optional[pulumi.Input[int]]:
        """
        The File Upload Limit in MB. Accepted values are in the range `1`MB to `750`MB for the `WAF_v2` SKU, and `1`MB to `500`MB for all other SKUs. Defaults to `100`MB.
        """
        return pulumi.get(self, "file_upload_limit_mb")

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

    @property
    @pulumi.getter(name="maxRequestBodySizeKb")
    def max_request_body_size_kb(self) -> Optional[pulumi.Input[int]]:
        """
        The Maximum Request Body Size in KB. Accepted values are in the range `1`KB to `128`KB. Defaults to `128`KB.
        """
        return pulumi.get(self, "max_request_body_size_kb")

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

    @property
    @pulumi.getter(name="requestBodyCheck")
    def request_body_check(self) -> Optional[pulumi.Input[bool]]:
        """
        Is Request Body Inspection enabled? Defaults to `true`.
        """
        return pulumi.get(self, "request_body_check")

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

    @property
    @pulumi.getter(name="ruleSetType")
    def rule_set_type(self) -> Optional[pulumi.Input[str]]:
        """
        The Type of the Rule Set used for this Web Application Firewall. Possible values are `OWASP`, `Microsoft_BotManagerRuleSet` and `Microsoft_DefaultRuleSet`. Defaults to `OWASP`.
        """
        return pulumi.get(self, "rule_set_type")

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


if not MYPY:
    class ApplicationGatewayWafConfigurationDisabledRuleGroupArgsDict(TypedDict):
        rule_group_name: pulumi.Input[str]
        """
        The rule group where specific rules should be disabled. Possible values are `BadBots`, `crs_20_protocol_violations`, `crs_21_protocol_anomalies`, `crs_23_request_limits`, `crs_30_http_policy`, `crs_35_bad_robots`, `crs_40_generic_attacks`, `crs_41_sql_injection_attacks`, `crs_41_xss_attacks`, `crs_42_tight_security`, `crs_45_trojans`, `crs_49_inbound_blocking`, `General`, `GoodBots`, `KnownBadBots`, `Known-CVEs`, `REQUEST-911-METHOD-ENFORCEMENT`, `REQUEST-913-SCANNER-DETECTION`, `REQUEST-920-PROTOCOL-ENFORCEMENT`, `REQUEST-921-PROTOCOL-ATTACK`, `REQUEST-930-APPLICATION-ATTACK-LFI`, `REQUEST-931-APPLICATION-ATTACK-RFI`, `REQUEST-932-APPLICATION-ATTACK-RCE`, `REQUEST-933-APPLICATION-ATTACK-PHP`, `REQUEST-941-APPLICATION-ATTACK-XSS`, `REQUEST-942-APPLICATION-ATTACK-SQLI`, `REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION`, `REQUEST-944-APPLICATION-ATTACK-JAVA`, `UnknownBots`, `METHOD-ENFORCEMENT`, `PROTOCOL-ENFORCEMENT`, `PROTOCOL-ATTACK`, `LFI`, `RFI`, `RCE`, `PHP`, `NODEJS`, `XSS`, `SQLI`, `FIX`, `JAVA`, `MS-ThreatIntel-WebShells`, `MS-ThreatIntel-AppSec`, `MS-ThreatIntel-SQLI` and `MS-ThreatIntel-CVEs`.
        """
        rules: NotRequired[pulumi.Input[Sequence[pulumi.Input[int]]]]
        """
        A list of rules which should be disabled in that group. Disables all rules in the specified group if `rules` is not specified.
        """
elif False:
    ApplicationGatewayWafConfigurationDisabledRuleGroupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayWafConfigurationDisabledRuleGroupArgs:
    def __init__(__self__, *,
                 rule_group_name: pulumi.Input[str],
                 rules: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None):
        """
        :param pulumi.Input[str] rule_group_name: The rule group where specific rules should be disabled. Possible values are `BadBots`, `crs_20_protocol_violations`, `crs_21_protocol_anomalies`, `crs_23_request_limits`, `crs_30_http_policy`, `crs_35_bad_robots`, `crs_40_generic_attacks`, `crs_41_sql_injection_attacks`, `crs_41_xss_attacks`, `crs_42_tight_security`, `crs_45_trojans`, `crs_49_inbound_blocking`, `General`, `GoodBots`, `KnownBadBots`, `Known-CVEs`, `REQUEST-911-METHOD-ENFORCEMENT`, `REQUEST-913-SCANNER-DETECTION`, `REQUEST-920-PROTOCOL-ENFORCEMENT`, `REQUEST-921-PROTOCOL-ATTACK`, `REQUEST-930-APPLICATION-ATTACK-LFI`, `REQUEST-931-APPLICATION-ATTACK-RFI`, `REQUEST-932-APPLICATION-ATTACK-RCE`, `REQUEST-933-APPLICATION-ATTACK-PHP`, `REQUEST-941-APPLICATION-ATTACK-XSS`, `REQUEST-942-APPLICATION-ATTACK-SQLI`, `REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION`, `REQUEST-944-APPLICATION-ATTACK-JAVA`, `UnknownBots`, `METHOD-ENFORCEMENT`, `PROTOCOL-ENFORCEMENT`, `PROTOCOL-ATTACK`, `LFI`, `RFI`, `RCE`, `PHP`, `NODEJS`, `XSS`, `SQLI`, `FIX`, `JAVA`, `MS-ThreatIntel-WebShells`, `MS-ThreatIntel-AppSec`, `MS-ThreatIntel-SQLI` and `MS-ThreatIntel-CVEs`.
        :param pulumi.Input[Sequence[pulumi.Input[int]]] rules: A list of rules which should be disabled in that group. Disables all rules in the specified group if `rules` is not specified.
        """
        pulumi.set(__self__, "rule_group_name", rule_group_name)
        if rules is not None:
            pulumi.set(__self__, "rules", rules)

    @property
    @pulumi.getter(name="ruleGroupName")
    def rule_group_name(self) -> pulumi.Input[str]:
        """
        The rule group where specific rules should be disabled. Possible values are `BadBots`, `crs_20_protocol_violations`, `crs_21_protocol_anomalies`, `crs_23_request_limits`, `crs_30_http_policy`, `crs_35_bad_robots`, `crs_40_generic_attacks`, `crs_41_sql_injection_attacks`, `crs_41_xss_attacks`, `crs_42_tight_security`, `crs_45_trojans`, `crs_49_inbound_blocking`, `General`, `GoodBots`, `KnownBadBots`, `Known-CVEs`, `REQUEST-911-METHOD-ENFORCEMENT`, `REQUEST-913-SCANNER-DETECTION`, `REQUEST-920-PROTOCOL-ENFORCEMENT`, `REQUEST-921-PROTOCOL-ATTACK`, `REQUEST-930-APPLICATION-ATTACK-LFI`, `REQUEST-931-APPLICATION-ATTACK-RFI`, `REQUEST-932-APPLICATION-ATTACK-RCE`, `REQUEST-933-APPLICATION-ATTACK-PHP`, `REQUEST-941-APPLICATION-ATTACK-XSS`, `REQUEST-942-APPLICATION-ATTACK-SQLI`, `REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION`, `REQUEST-944-APPLICATION-ATTACK-JAVA`, `UnknownBots`, `METHOD-ENFORCEMENT`, `PROTOCOL-ENFORCEMENT`, `PROTOCOL-ATTACK`, `LFI`, `RFI`, `RCE`, `PHP`, `NODEJS`, `XSS`, `SQLI`, `FIX`, `JAVA`, `MS-ThreatIntel-WebShells`, `MS-ThreatIntel-AppSec`, `MS-ThreatIntel-SQLI` and `MS-ThreatIntel-CVEs`.
        """
        return pulumi.get(self, "rule_group_name")

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

    @property
    @pulumi.getter
    def rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        A list of rules which should be disabled in that group. Disables all rules in the specified group if `rules` is not specified.
        """
        return pulumi.get(self, "rules")

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


if not MYPY:
    class ApplicationGatewayWafConfigurationExclusionArgsDict(TypedDict):
        match_variable: pulumi.Input[str]
        """
        Match variable of the exclusion rule to exclude header, cookie or GET arguments. Possible values are `RequestArgKeys`, `RequestArgNames`, `RequestArgValues`, `RequestCookieKeys`, `RequestCookieNames`, `RequestCookieValues`, `RequestHeaderKeys`, `RequestHeaderNames` and `RequestHeaderValues`
        """
        selector: NotRequired[pulumi.Input[str]]
        """
        String value which will be used for the filter operation. If empty will exclude all traffic on this `match_variable`
        """
        selector_match_operator: NotRequired[pulumi.Input[str]]
        """
        Operator which will be used to search in the variable content. Possible values are `Contains`, `EndsWith`, `Equals`, `EqualsAny` and `StartsWith`. If empty will exclude all traffic on this `match_variable`
        """
elif False:
    ApplicationGatewayWafConfigurationExclusionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ApplicationGatewayWafConfigurationExclusionArgs:
    def __init__(__self__, *,
                 match_variable: pulumi.Input[str],
                 selector: Optional[pulumi.Input[str]] = None,
                 selector_match_operator: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] match_variable: Match variable of the exclusion rule to exclude header, cookie or GET arguments. Possible values are `RequestArgKeys`, `RequestArgNames`, `RequestArgValues`, `RequestCookieKeys`, `RequestCookieNames`, `RequestCookieValues`, `RequestHeaderKeys`, `RequestHeaderNames` and `RequestHeaderValues`
        :param pulumi.Input[str] selector: String value which will be used for the filter operation. If empty will exclude all traffic on this `match_variable`
        :param pulumi.Input[str] selector_match_operator: Operator which will be used to search in the variable content. Possible values are `Contains`, `EndsWith`, `Equals`, `EqualsAny` and `StartsWith`. If empty will exclude all traffic on this `match_variable`
        """
        pulumi.set(__self__, "match_variable", match_variable)
        if selector is not None:
            pulumi.set(__self__, "selector", selector)
        if selector_match_operator is not None:
            pulumi.set(__self__, "selector_match_operator", selector_match_operator)

    @property
    @pulumi.getter(name="matchVariable")
    def match_variable(self) -> pulumi.Input[str]:
        """
        Match variable of the exclusion rule to exclude header, cookie or GET arguments. Possible values are `RequestArgKeys`, `RequestArgNames`, `RequestArgValues`, `RequestCookieKeys`, `RequestCookieNames`, `RequestCookieValues`, `RequestHeaderKeys`, `RequestHeaderNames` and `RequestHeaderValues`
        """
        return pulumi.get(self, "match_variable")

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

    @property
    @pulumi.getter
    def selector(self) -> Optional[pulumi.Input[str]]:
        """
        String value which will be used for the filter operation. If empty will exclude all traffic on this `match_variable`
        """
        return pulumi.get(self, "selector")

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

    @property
    @pulumi.getter(name="selectorMatchOperator")
    def selector_match_operator(self) -> Optional[pulumi.Input[str]]:
        """
        Operator which will be used to search in the variable content. Possible values are `Contains`, `EndsWith`, `Equals`, `EqualsAny` and `StartsWith`. If empty will exclude all traffic on this `match_variable`
        """
        return pulumi.get(self, "selector_match_operator")

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


if not MYPY:
    class ExpressRouteCircuitPeeringIpv6ArgsDict(TypedDict):
        primary_peer_address_prefix: pulumi.Input[str]
        """
        A subnet for the primary link.
        """
        secondary_peer_address_prefix: pulumi.Input[str]
        """
        A subnet for the secondary link.
        """
        enabled: NotRequired[pulumi.Input[bool]]
        """
        A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
        """
        microsoft_peering: NotRequired[pulumi.Input['ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgsDict']]
        """
        A `microsoft_peering` block as defined below.
        """
        route_filter_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.

        > **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
        """
elif False:
    ExpressRouteCircuitPeeringIpv6ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRouteCircuitPeeringIpv6Args:
    def __init__(__self__, *,
                 primary_peer_address_prefix: pulumi.Input[str],
                 secondary_peer_address_prefix: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None,
                 microsoft_peering: Optional[pulumi.Input['ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs']] = None,
                 route_filter_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] primary_peer_address_prefix: A subnet for the primary link.
        :param pulumi.Input[str] secondary_peer_address_prefix: A subnet for the secondary link.
        :param pulumi.Input[bool] enabled: A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
        :param pulumi.Input['ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs'] microsoft_peering: A `microsoft_peering` block as defined below.
        :param pulumi.Input[str] route_filter_id: The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.
               
               > **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
        """
        pulumi.set(__self__, "primary_peer_address_prefix", primary_peer_address_prefix)
        pulumi.set(__self__, "secondary_peer_address_prefix", secondary_peer_address_prefix)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if microsoft_peering is not None:
            pulumi.set(__self__, "microsoft_peering", microsoft_peering)
        if route_filter_id is not None:
            pulumi.set(__self__, "route_filter_id", route_filter_id)

    @property
    @pulumi.getter(name="primaryPeerAddressPrefix")
    def primary_peer_address_prefix(self) -> pulumi.Input[str]:
        """
        A subnet for the primary link.
        """
        return pulumi.get(self, "primary_peer_address_prefix")

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

    @property
    @pulumi.getter(name="secondaryPeerAddressPrefix")
    def secondary_peer_address_prefix(self) -> pulumi.Input[str]:
        """
        A subnet for the secondary link.
        """
        return pulumi.get(self, "secondary_peer_address_prefix")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="microsoftPeering")
    def microsoft_peering(self) -> Optional[pulumi.Input['ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs']]:
        """
        A `microsoft_peering` block as defined below.
        """
        return pulumi.get(self, "microsoft_peering")

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

    @property
    @pulumi.getter(name="routeFilterId")
    def route_filter_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.

        > **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
        """
        return pulumi.get(self, "route_filter_id")

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


if not MYPY:
    class ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgsDict(TypedDict):
        advertised_communities: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The communities of Bgp Peering specified for microsoft peering.
        """
        advertised_public_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Advertised Public Prefixes.
        """
        customer_asn: NotRequired[pulumi.Input[int]]
        """
        The CustomerASN of the peering. Defaults to `0`.
        """
        routing_registry_name: NotRequired[pulumi.Input[str]]
        """
        The Routing Registry against which the AS number and prefixes are registered. For example: `ARIN`, `RIPE`, `AFRINIC` etc. Defaults to `NONE`.
        """
elif False:
    ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs:
    def __init__(__self__, *,
                 advertised_communities: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 advertised_public_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 customer_asn: Optional[pulumi.Input[int]] = None,
                 routing_registry_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] advertised_communities: The communities of Bgp Peering specified for microsoft peering.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] advertised_public_prefixes: A list of Advertised Public Prefixes.
        :param pulumi.Input[int] customer_asn: The CustomerASN of the peering. Defaults to `0`.
        :param pulumi.Input[str] routing_registry_name: The Routing Registry against which the AS number and prefixes are registered. For example: `ARIN`, `RIPE`, `AFRINIC` etc. Defaults to `NONE`.
        """
        if advertised_communities is not None:
            pulumi.set(__self__, "advertised_communities", advertised_communities)
        if advertised_public_prefixes is not None:
            pulumi.set(__self__, "advertised_public_prefixes", advertised_public_prefixes)
        if customer_asn is not None:
            pulumi.set(__self__, "customer_asn", customer_asn)
        if routing_registry_name is not None:
            pulumi.set(__self__, "routing_registry_name", routing_registry_name)

    @property
    @pulumi.getter(name="advertisedCommunities")
    def advertised_communities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The communities of Bgp Peering specified for microsoft peering.
        """
        return pulumi.get(self, "advertised_communities")

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

    @property
    @pulumi.getter(name="advertisedPublicPrefixes")
    def advertised_public_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Advertised Public Prefixes.
        """
        return pulumi.get(self, "advertised_public_prefixes")

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

    @property
    @pulumi.getter(name="customerAsn")
    def customer_asn(self) -> Optional[pulumi.Input[int]]:
        """
        The CustomerASN of the peering. Defaults to `0`.
        """
        return pulumi.get(self, "customer_asn")

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

    @property
    @pulumi.getter(name="routingRegistryName")
    def routing_registry_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Routing Registry against which the AS number and prefixes are registered. For example: `ARIN`, `RIPE`, `AFRINIC` etc. Defaults to `NONE`.
        """
        return pulumi.get(self, "routing_registry_name")

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


if not MYPY:
    class ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgsDict(TypedDict):
        advertised_public_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of Advertised Public Prefixes.
        """
        advertised_communities: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The communities of Bgp Peering specified for microsoft peering.
        """
        customer_asn: NotRequired[pulumi.Input[int]]
        """
        The CustomerASN of the peering. Defaults to `0`.
        """
        routing_registry_name: NotRequired[pulumi.Input[str]]
        """
        The Routing Registry against which the AS number and prefixes are registered. For example: `ARIN`, `RIPE`, `AFRINIC` etc. Defaults to `NONE`.
        """
elif False:
    ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgs:
    def __init__(__self__, *,
                 advertised_public_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]],
                 advertised_communities: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 customer_asn: Optional[pulumi.Input[int]] = None,
                 routing_registry_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] advertised_public_prefixes: A list of Advertised Public Prefixes.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] advertised_communities: The communities of Bgp Peering specified for microsoft peering.
        :param pulumi.Input[int] customer_asn: The CustomerASN of the peering. Defaults to `0`.
        :param pulumi.Input[str] routing_registry_name: The Routing Registry against which the AS number and prefixes are registered. For example: `ARIN`, `RIPE`, `AFRINIC` etc. Defaults to `NONE`.
        """
        pulumi.set(__self__, "advertised_public_prefixes", advertised_public_prefixes)
        if advertised_communities is not None:
            pulumi.set(__self__, "advertised_communities", advertised_communities)
        if customer_asn is not None:
            pulumi.set(__self__, "customer_asn", customer_asn)
        if routing_registry_name is not None:
            pulumi.set(__self__, "routing_registry_name", routing_registry_name)

    @property
    @pulumi.getter(name="advertisedPublicPrefixes")
    def advertised_public_prefixes(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of Advertised Public Prefixes.
        """
        return pulumi.get(self, "advertised_public_prefixes")

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

    @property
    @pulumi.getter(name="advertisedCommunities")
    def advertised_communities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The communities of Bgp Peering specified for microsoft peering.
        """
        return pulumi.get(self, "advertised_communities")

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

    @property
    @pulumi.getter(name="customerAsn")
    def customer_asn(self) -> Optional[pulumi.Input[int]]:
        """
        The CustomerASN of the peering. Defaults to `0`.
        """
        return pulumi.get(self, "customer_asn")

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

    @property
    @pulumi.getter(name="routingRegistryName")
    def routing_registry_name(self) -> Optional[pulumi.Input[str]]:
        """
        The Routing Registry against which the AS number and prefixes are registered. For example: `ARIN`, `RIPE`, `AFRINIC` etc. Defaults to `NONE`.
        """
        return pulumi.get(self, "routing_registry_name")

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


if not MYPY:
    class ExpressRouteCircuitSkuArgsDict(TypedDict):
        family: pulumi.Input[str]
        """
        The billing mode for bandwidth. Possible values are `MeteredData` or `UnlimitedData`.

        > **NOTE:** You can migrate from `MeteredData` to `UnlimitedData`, but not the other way around.
        """
        tier: pulumi.Input[str]
        """
        The service tier. Possible values are `Basic`, `Local`, `Standard` or `Premium`.
        """
elif False:
    ExpressRouteCircuitSkuArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRouteCircuitSkuArgs:
    def __init__(__self__, *,
                 family: pulumi.Input[str],
                 tier: pulumi.Input[str]):
        """
        :param pulumi.Input[str] family: The billing mode for bandwidth. Possible values are `MeteredData` or `UnlimitedData`.
               
               > **NOTE:** You can migrate from `MeteredData` to `UnlimitedData`, but not the other way around.
        :param pulumi.Input[str] tier: The service tier. Possible values are `Basic`, `Local`, `Standard` or `Premium`.
        """
        pulumi.set(__self__, "family", family)
        pulumi.set(__self__, "tier", tier)

    @property
    @pulumi.getter
    def family(self) -> pulumi.Input[str]:
        """
        The billing mode for bandwidth. Possible values are `MeteredData` or `UnlimitedData`.

        > **NOTE:** You can migrate from `MeteredData` to `UnlimitedData`, but not the other way around.
        """
        return pulumi.get(self, "family")

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

    @property
    @pulumi.getter
    def tier(self) -> pulumi.Input[str]:
        """
        The service tier. Possible values are `Basic`, `Local`, `Standard` or `Premium`.
        """
        return pulumi.get(self, "tier")

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


if not MYPY:
    class ExpressRouteConnectionRoutingArgsDict(TypedDict):
        associated_route_table_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Hub Route Table associated with this Express Route Connection.
        """
        inbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Route Map associated with this Express Route Connection for inbound routes.
        """
        outbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Route Map associated with this Express Route Connection for outbound routes.
        """
        propagated_route_table: NotRequired[pulumi.Input['ExpressRouteConnectionRoutingPropagatedRouteTableArgsDict']]
        """
        A `propagated_route_table` block as defined below.
        """
elif False:
    ExpressRouteConnectionRoutingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRouteConnectionRoutingArgs:
    def __init__(__self__, *,
                 associated_route_table_id: Optional[pulumi.Input[str]] = None,
                 inbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 outbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 propagated_route_table: Optional[pulumi.Input['ExpressRouteConnectionRoutingPropagatedRouteTableArgs']] = None):
        """
        :param pulumi.Input[str] associated_route_table_id: The ID of the Virtual Hub Route Table associated with this Express Route Connection.
        :param pulumi.Input[str] inbound_route_map_id: The ID of the Route Map associated with this Express Route Connection for inbound routes.
        :param pulumi.Input[str] outbound_route_map_id: The ID of the Route Map associated with this Express Route Connection for outbound routes.
        :param pulumi.Input['ExpressRouteConnectionRoutingPropagatedRouteTableArgs'] propagated_route_table: A `propagated_route_table` block as defined below.
        """
        if associated_route_table_id is not None:
            pulumi.set(__self__, "associated_route_table_id", associated_route_table_id)
        if inbound_route_map_id is not None:
            pulumi.set(__self__, "inbound_route_map_id", inbound_route_map_id)
        if outbound_route_map_id is not None:
            pulumi.set(__self__, "outbound_route_map_id", outbound_route_map_id)
        if propagated_route_table is not None:
            pulumi.set(__self__, "propagated_route_table", propagated_route_table)

    @property
    @pulumi.getter(name="associatedRouteTableId")
    def associated_route_table_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Hub Route Table associated with this Express Route Connection.
        """
        return pulumi.get(self, "associated_route_table_id")

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

    @property
    @pulumi.getter(name="inboundRouteMapId")
    def inbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Route Map associated with this Express Route Connection for inbound routes.
        """
        return pulumi.get(self, "inbound_route_map_id")

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

    @property
    @pulumi.getter(name="outboundRouteMapId")
    def outbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Route Map associated with this Express Route Connection for outbound routes.
        """
        return pulumi.get(self, "outbound_route_map_id")

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

    @property
    @pulumi.getter(name="propagatedRouteTable")
    def propagated_route_table(self) -> Optional[pulumi.Input['ExpressRouteConnectionRoutingPropagatedRouteTableArgs']]:
        """
        A `propagated_route_table` block as defined below.
        """
        return pulumi.get(self, "propagated_route_table")

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


if not MYPY:
    class ExpressRouteConnectionRoutingPropagatedRouteTableArgsDict(TypedDict):
        labels: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of labels to logically group route tables.
        """
        route_table_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IDs of the Virtual Hub Route Table to propagate routes from Express Route Connection to the route table.
        """
elif False:
    ExpressRouteConnectionRoutingPropagatedRouteTableArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRouteConnectionRoutingPropagatedRouteTableArgs:
    def __init__(__self__, *,
                 labels: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 route_table_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] labels: The list of labels to logically group route tables.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] route_table_ids: A list of IDs of the Virtual Hub Route Table to propagate routes from Express Route Connection to the route table.
        """
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if route_table_ids is not None:
            pulumi.set(__self__, "route_table_ids", route_table_ids)

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of labels to logically group route tables.
        """
        return pulumi.get(self, "labels")

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

    @property
    @pulumi.getter(name="routeTableIds")
    def route_table_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IDs of the Virtual Hub Route Table to propagate routes from Express Route Connection to the route table.
        """
        return pulumi.get(self, "route_table_ids")

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


if not MYPY:
    class ExpressRoutePortIdentityArgsDict(TypedDict):
        type: pulumi.Input[str]
        """
        Specifies the type of Managed Service Identity that should be configured on this Express Route Port. Only possible value is `UserAssigned`.
        """
        identity_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of User Assigned Managed Identity IDs to be assigned to this Express Route Port.
        """
        principal_id: NotRequired[pulumi.Input[str]]
        tenant_id: NotRequired[pulumi.Input[str]]
elif False:
    ExpressRoutePortIdentityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRoutePortIdentityArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 identity_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 principal_id: Optional[pulumi.Input[str]] = None,
                 tenant_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] type: Specifies the type of Managed Service Identity that should be configured on this Express Route Port. Only possible value is `UserAssigned`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: Specifies a list of User Assigned Managed Identity IDs to be assigned to this Express Route Port.
        """
        pulumi.set(__self__, "type", type)
        if identity_ids is not None:
            pulumi.set(__self__, "identity_ids", identity_ids)
        if principal_id is not None:
            pulumi.set(__self__, "principal_id", principal_id)
        if tenant_id is not None:
            pulumi.set(__self__, "tenant_id", tenant_id)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        Specifies the type of Managed Service Identity that should be configured on this Express Route Port. Only possible value is `UserAssigned`.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of User Assigned Managed Identity IDs to be assigned to this Express Route Port.
        """
        return pulumi.get(self, "identity_ids")

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

    @property
    @pulumi.getter(name="principalId")
    def principal_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "principal_id")

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

    @property
    @pulumi.getter(name="tenantId")
    def tenant_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "tenant_id")

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


if not MYPY:
    class ExpressRoutePortLink1ArgsDict(TypedDict):
        admin_enabled: NotRequired[pulumi.Input[bool]]
        """
        Whether enable administration state on the Express Route Port Link? Defaults to `false`.
        """
        connector_type: NotRequired[pulumi.Input[str]]
        """
        The connector type of the Express Route Port Link.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of this Express Route Port Link.
        """
        interface_name: NotRequired[pulumi.Input[str]]
        """
        The interface name of the Azure router associated with the Express Route Port Link.
        """
        macsec_cak_keyvault_secret_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Key Vault Secret that contains the Mac security CAK key for this Express Route Port Link.
        """
        macsec_cipher: NotRequired[pulumi.Input[str]]
        """
        The MACSec cipher used for this Express Route Port Link. Possible values are `GcmAes128` and `GcmAes256`. Defaults to `GcmAes128`.
        """
        macsec_ckn_keyvault_secret_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Key Vault Secret that contains the MACSec CKN key for this Express Route Port Link.
        """
        macsec_sci_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should Secure Channel Identifier on the Express Route Port Link be enabled? Defaults to `false`.

        > **NOTE** `macsec_ckn_keyvault_secret_id` and `macsec_cak_keyvault_secret_id` should be used together with `identity`, so that the Express Route Port instance have the right permission to access the Key Vault.
        """
        patch_panel_id: NotRequired[pulumi.Input[str]]
        """
        The ID that maps from the Express Route Port Link to the patch panel port.
        """
        rack_id: NotRequired[pulumi.Input[str]]
        """
        The ID that maps from the patch panel port to the rack.
        """
        router_name: NotRequired[pulumi.Input[str]]
        """
        The name of the Azure router associated with the Express Route Port Link.
        """
elif False:
    ExpressRoutePortLink1ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRoutePortLink1Args:
    def __init__(__self__, *,
                 admin_enabled: Optional[pulumi.Input[bool]] = None,
                 connector_type: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 interface_name: Optional[pulumi.Input[str]] = None,
                 macsec_cak_keyvault_secret_id: Optional[pulumi.Input[str]] = None,
                 macsec_cipher: Optional[pulumi.Input[str]] = None,
                 macsec_ckn_keyvault_secret_id: Optional[pulumi.Input[str]] = None,
                 macsec_sci_enabled: Optional[pulumi.Input[bool]] = None,
                 patch_panel_id: Optional[pulumi.Input[str]] = None,
                 rack_id: Optional[pulumi.Input[str]] = None,
                 router_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] admin_enabled: Whether enable administration state on the Express Route Port Link? Defaults to `false`.
        :param pulumi.Input[str] connector_type: The connector type of the Express Route Port Link.
        :param pulumi.Input[str] id: The ID of this Express Route Port Link.
        :param pulumi.Input[str] interface_name: The interface name of the Azure router associated with the Express Route Port Link.
        :param pulumi.Input[str] macsec_cak_keyvault_secret_id: The ID of the Key Vault Secret that contains the Mac security CAK key for this Express Route Port Link.
        :param pulumi.Input[str] macsec_cipher: The MACSec cipher used for this Express Route Port Link. Possible values are `GcmAes128` and `GcmAes256`. Defaults to `GcmAes128`.
        :param pulumi.Input[str] macsec_ckn_keyvault_secret_id: The ID of the Key Vault Secret that contains the MACSec CKN key for this Express Route Port Link.
        :param pulumi.Input[bool] macsec_sci_enabled: Should Secure Channel Identifier on the Express Route Port Link be enabled? Defaults to `false`.
               
               > **NOTE** `macsec_ckn_keyvault_secret_id` and `macsec_cak_keyvault_secret_id` should be used together with `identity`, so that the Express Route Port instance have the right permission to access the Key Vault.
        :param pulumi.Input[str] patch_panel_id: The ID that maps from the Express Route Port Link to the patch panel port.
        :param pulumi.Input[str] rack_id: The ID that maps from the patch panel port to the rack.
        :param pulumi.Input[str] router_name: The name of the Azure router associated with the Express Route Port Link.
        """
        if admin_enabled is not None:
            pulumi.set(__self__, "admin_enabled", admin_enabled)
        if connector_type is not None:
            pulumi.set(__self__, "connector_type", connector_type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if interface_name is not None:
            pulumi.set(__self__, "interface_name", interface_name)
        if macsec_cak_keyvault_secret_id is not None:
            pulumi.set(__self__, "macsec_cak_keyvault_secret_id", macsec_cak_keyvault_secret_id)
        if macsec_cipher is not None:
            pulumi.set(__self__, "macsec_cipher", macsec_cipher)
        if macsec_ckn_keyvault_secret_id is not None:
            pulumi.set(__self__, "macsec_ckn_keyvault_secret_id", macsec_ckn_keyvault_secret_id)
        if macsec_sci_enabled is not None:
            pulumi.set(__self__, "macsec_sci_enabled", macsec_sci_enabled)
        if patch_panel_id is not None:
            pulumi.set(__self__, "patch_panel_id", patch_panel_id)
        if rack_id is not None:
            pulumi.set(__self__, "rack_id", rack_id)
        if router_name is not None:
            pulumi.set(__self__, "router_name", router_name)

    @property
    @pulumi.getter(name="adminEnabled")
    def admin_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether enable administration state on the Express Route Port Link? Defaults to `false`.
        """
        return pulumi.get(self, "admin_enabled")

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

    @property
    @pulumi.getter(name="connectorType")
    def connector_type(self) -> Optional[pulumi.Input[str]]:
        """
        The connector type of the Express Route Port Link.
        """
        return pulumi.get(self, "connector_type")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of this Express Route Port Link.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="interfaceName")
    def interface_name(self) -> Optional[pulumi.Input[str]]:
        """
        The interface name of the Azure router associated with the Express Route Port Link.
        """
        return pulumi.get(self, "interface_name")

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

    @property
    @pulumi.getter(name="macsecCakKeyvaultSecretId")
    def macsec_cak_keyvault_secret_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Key Vault Secret that contains the Mac security CAK key for this Express Route Port Link.
        """
        return pulumi.get(self, "macsec_cak_keyvault_secret_id")

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

    @property
    @pulumi.getter(name="macsecCipher")
    def macsec_cipher(self) -> Optional[pulumi.Input[str]]:
        """
        The MACSec cipher used for this Express Route Port Link. Possible values are `GcmAes128` and `GcmAes256`. Defaults to `GcmAes128`.
        """
        return pulumi.get(self, "macsec_cipher")

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

    @property
    @pulumi.getter(name="macsecCknKeyvaultSecretId")
    def macsec_ckn_keyvault_secret_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Key Vault Secret that contains the MACSec CKN key for this Express Route Port Link.
        """
        return pulumi.get(self, "macsec_ckn_keyvault_secret_id")

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

    @property
    @pulumi.getter(name="macsecSciEnabled")
    def macsec_sci_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should Secure Channel Identifier on the Express Route Port Link be enabled? Defaults to `false`.

        > **NOTE** `macsec_ckn_keyvault_secret_id` and `macsec_cak_keyvault_secret_id` should be used together with `identity`, so that the Express Route Port instance have the right permission to access the Key Vault.
        """
        return pulumi.get(self, "macsec_sci_enabled")

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

    @property
    @pulumi.getter(name="patchPanelId")
    def patch_panel_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID that maps from the Express Route Port Link to the patch panel port.
        """
        return pulumi.get(self, "patch_panel_id")

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

    @property
    @pulumi.getter(name="rackId")
    def rack_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID that maps from the patch panel port to the rack.
        """
        return pulumi.get(self, "rack_id")

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

    @property
    @pulumi.getter(name="routerName")
    def router_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Azure router associated with the Express Route Port Link.
        """
        return pulumi.get(self, "router_name")

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


if not MYPY:
    class ExpressRoutePortLink2ArgsDict(TypedDict):
        admin_enabled: NotRequired[pulumi.Input[bool]]
        """
        Whether enable administration state on the Express Route Port Link? Defaults to `false`.
        """
        connector_type: NotRequired[pulumi.Input[str]]
        """
        The connector type of the Express Route Port Link.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of this Express Route Port Link.
        """
        interface_name: NotRequired[pulumi.Input[str]]
        """
        The interface name of the Azure router associated with the Express Route Port Link.
        """
        macsec_cak_keyvault_secret_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Key Vault Secret that contains the Mac security CAK key for this Express Route Port Link.
        """
        macsec_cipher: NotRequired[pulumi.Input[str]]
        """
        The MACSec cipher used for this Express Route Port Link. Possible values are `GcmAes128` and `GcmAes256`. Defaults to `GcmAes128`.
        """
        macsec_ckn_keyvault_secret_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Key Vault Secret that contains the MACSec CKN key for this Express Route Port Link.
        """
        macsec_sci_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should Secure Channel Identifier on the Express Route Port Link be enabled? Defaults to `false`.

        > **NOTE** `macsec_ckn_keyvault_secret_id` and `macsec_cak_keyvault_secret_id` should be used together with `identity`, so that the Express Route Port instance have the right permission to access the Key Vault.
        """
        patch_panel_id: NotRequired[pulumi.Input[str]]
        """
        The ID that maps from the Express Route Port Link to the patch panel port.
        """
        rack_id: NotRequired[pulumi.Input[str]]
        """
        The ID that maps from the patch panel port to the rack.
        """
        router_name: NotRequired[pulumi.Input[str]]
        """
        The name of the Azure router associated with the Express Route Port Link.
        """
elif False:
    ExpressRoutePortLink2ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ExpressRoutePortLink2Args:
    def __init__(__self__, *,
                 admin_enabled: Optional[pulumi.Input[bool]] = None,
                 connector_type: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 interface_name: Optional[pulumi.Input[str]] = None,
                 macsec_cak_keyvault_secret_id: Optional[pulumi.Input[str]] = None,
                 macsec_cipher: Optional[pulumi.Input[str]] = None,
                 macsec_ckn_keyvault_secret_id: Optional[pulumi.Input[str]] = None,
                 macsec_sci_enabled: Optional[pulumi.Input[bool]] = None,
                 patch_panel_id: Optional[pulumi.Input[str]] = None,
                 rack_id: Optional[pulumi.Input[str]] = None,
                 router_name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] admin_enabled: Whether enable administration state on the Express Route Port Link? Defaults to `false`.
        :param pulumi.Input[str] connector_type: The connector type of the Express Route Port Link.
        :param pulumi.Input[str] id: The ID of this Express Route Port Link.
        :param pulumi.Input[str] interface_name: The interface name of the Azure router associated with the Express Route Port Link.
        :param pulumi.Input[str] macsec_cak_keyvault_secret_id: The ID of the Key Vault Secret that contains the Mac security CAK key for this Express Route Port Link.
        :param pulumi.Input[str] macsec_cipher: The MACSec cipher used for this Express Route Port Link. Possible values are `GcmAes128` and `GcmAes256`. Defaults to `GcmAes128`.
        :param pulumi.Input[str] macsec_ckn_keyvault_secret_id: The ID of the Key Vault Secret that contains the MACSec CKN key for this Express Route Port Link.
        :param pulumi.Input[bool] macsec_sci_enabled: Should Secure Channel Identifier on the Express Route Port Link be enabled? Defaults to `false`.
               
               > **NOTE** `macsec_ckn_keyvault_secret_id` and `macsec_cak_keyvault_secret_id` should be used together with `identity`, so that the Express Route Port instance have the right permission to access the Key Vault.
        :param pulumi.Input[str] patch_panel_id: The ID that maps from the Express Route Port Link to the patch panel port.
        :param pulumi.Input[str] rack_id: The ID that maps from the patch panel port to the rack.
        :param pulumi.Input[str] router_name: The name of the Azure router associated with the Express Route Port Link.
        """
        if admin_enabled is not None:
            pulumi.set(__self__, "admin_enabled", admin_enabled)
        if connector_type is not None:
            pulumi.set(__self__, "connector_type", connector_type)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if interface_name is not None:
            pulumi.set(__self__, "interface_name", interface_name)
        if macsec_cak_keyvault_secret_id is not None:
            pulumi.set(__self__, "macsec_cak_keyvault_secret_id", macsec_cak_keyvault_secret_id)
        if macsec_cipher is not None:
            pulumi.set(__self__, "macsec_cipher", macsec_cipher)
        if macsec_ckn_keyvault_secret_id is not None:
            pulumi.set(__self__, "macsec_ckn_keyvault_secret_id", macsec_ckn_keyvault_secret_id)
        if macsec_sci_enabled is not None:
            pulumi.set(__self__, "macsec_sci_enabled", macsec_sci_enabled)
        if patch_panel_id is not None:
            pulumi.set(__self__, "patch_panel_id", patch_panel_id)
        if rack_id is not None:
            pulumi.set(__self__, "rack_id", rack_id)
        if router_name is not None:
            pulumi.set(__self__, "router_name", router_name)

    @property
    @pulumi.getter(name="adminEnabled")
    def admin_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether enable administration state on the Express Route Port Link? Defaults to `false`.
        """
        return pulumi.get(self, "admin_enabled")

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

    @property
    @pulumi.getter(name="connectorType")
    def connector_type(self) -> Optional[pulumi.Input[str]]:
        """
        The connector type of the Express Route Port Link.
        """
        return pulumi.get(self, "connector_type")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of this Express Route Port Link.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="interfaceName")
    def interface_name(self) -> Optional[pulumi.Input[str]]:
        """
        The interface name of the Azure router associated with the Express Route Port Link.
        """
        return pulumi.get(self, "interface_name")

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

    @property
    @pulumi.getter(name="macsecCakKeyvaultSecretId")
    def macsec_cak_keyvault_secret_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Key Vault Secret that contains the Mac security CAK key for this Express Route Port Link.
        """
        return pulumi.get(self, "macsec_cak_keyvault_secret_id")

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

    @property
    @pulumi.getter(name="macsecCipher")
    def macsec_cipher(self) -> Optional[pulumi.Input[str]]:
        """
        The MACSec cipher used for this Express Route Port Link. Possible values are `GcmAes128` and `GcmAes256`. Defaults to `GcmAes128`.
        """
        return pulumi.get(self, "macsec_cipher")

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

    @property
    @pulumi.getter(name="macsecCknKeyvaultSecretId")
    def macsec_ckn_keyvault_secret_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Key Vault Secret that contains the MACSec CKN key for this Express Route Port Link.
        """
        return pulumi.get(self, "macsec_ckn_keyvault_secret_id")

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

    @property
    @pulumi.getter(name="macsecSciEnabled")
    def macsec_sci_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should Secure Channel Identifier on the Express Route Port Link be enabled? Defaults to `false`.

        > **NOTE** `macsec_ckn_keyvault_secret_id` and `macsec_cak_keyvault_secret_id` should be used together with `identity`, so that the Express Route Port instance have the right permission to access the Key Vault.
        """
        return pulumi.get(self, "macsec_sci_enabled")

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

    @property
    @pulumi.getter(name="patchPanelId")
    def patch_panel_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID that maps from the Express Route Port Link to the patch panel port.
        """
        return pulumi.get(self, "patch_panel_id")

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

    @property
    @pulumi.getter(name="rackId")
    def rack_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID that maps from the patch panel port to the rack.
        """
        return pulumi.get(self, "rack_id")

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

    @property
    @pulumi.getter(name="routerName")
    def router_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Azure router associated with the Express Route Port Link.
        """
        return pulumi.get(self, "router_name")

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


if not MYPY:
    class FirewallApplicationRuleCollectionRuleArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name of the rule.
        """
        description: NotRequired[pulumi.Input[str]]
        """
        Specifies a description for the rule.
        """
        fqdn_tags: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of FQDN tags. Possible values are `AppServiceEnvironment`, `AzureBackup`, `AzureKubernetesService`, `HDInsight`, `MicrosoftActiveProtectionService`, `WindowsDiagnostics`, `WindowsUpdate` and `WindowsVirtualDesktop`.
        """
        protocols: NotRequired[pulumi.Input[Sequence[pulumi.Input['FirewallApplicationRuleCollectionRuleProtocolArgsDict']]]]
        """
        One or more `protocol` blocks as defined below.
        """
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of source IP addresses and/or IP ranges.
        """
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of source IP Group IDs for the rule.

        > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
        target_fqdns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of FQDNs.
        """
elif False:
    FirewallApplicationRuleCollectionRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallApplicationRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 fqdn_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 protocols: Optional[pulumi.Input[Sequence[pulumi.Input['FirewallApplicationRuleCollectionRuleProtocolArgs']]]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 target_fqdns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name of the rule.
        :param pulumi.Input[str] description: Specifies a description for the rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] fqdn_tags: A list of FQDN tags. Possible values are `AppServiceEnvironment`, `AzureBackup`, `AzureKubernetesService`, `HDInsight`, `MicrosoftActiveProtectionService`, `WindowsDiagnostics`, `WindowsUpdate` and `WindowsVirtualDesktop`.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallApplicationRuleCollectionRuleProtocolArgs']]] protocols: One or more `protocol` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: A list of source IP addresses and/or IP ranges.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: A list of source IP Group IDs for the rule.
               
               > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] target_fqdns: A list of FQDNs.
        """
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if fqdn_tags is not None:
            pulumi.set(__self__, "fqdn_tags", fqdn_tags)
        if protocols is not None:
            pulumi.set(__self__, "protocols", protocols)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)
        if target_fqdns is not None:
            pulumi.set(__self__, "target_fqdns", target_fqdns)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies a description for the rule.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="fqdnTags")
    def fqdn_tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of FQDN tags. Possible values are `AppServiceEnvironment`, `AzureBackup`, `AzureKubernetesService`, `HDInsight`, `MicrosoftActiveProtectionService`, `WindowsDiagnostics`, `WindowsUpdate` and `WindowsVirtualDesktop`.
        """
        return pulumi.get(self, "fqdn_tags")

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

    @property
    @pulumi.getter
    def protocols(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirewallApplicationRuleCollectionRuleProtocolArgs']]]]:
        """
        One or more `protocol` blocks as defined below.
        """
        return pulumi.get(self, "protocols")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of source IP addresses and/or IP ranges.
        """
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of source IP Group IDs for the rule.

        > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
        return pulumi.get(self, "source_ip_groups")

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

    @property
    @pulumi.getter(name="targetFqdns")
    def target_fqdns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of FQDNs.
        """
        return pulumi.get(self, "target_fqdns")

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


if not MYPY:
    class FirewallApplicationRuleCollectionRuleProtocolArgsDict(TypedDict):
        port: pulumi.Input[int]
        """
        Specify a port for the connection.
        """
        type: pulumi.Input[str]
        """
        Specifies the type of connection. Possible values are `Http`, `Https` and `Mssql`.
        """
elif False:
    FirewallApplicationRuleCollectionRuleProtocolArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallApplicationRuleCollectionRuleProtocolArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[int] port: Specify a port for the connection.
        :param pulumi.Input[str] type: Specifies the type of connection. Possible values are `Http`, `Https` and `Mssql`.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        Specify a port for the connection.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        Specifies the type of connection. Possible values are `Http`, `Https` and `Mssql`.
        """
        return pulumi.get(self, "type")

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


if not MYPY:
    class FirewallIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name of the IP Configuration.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address associated with the Firewall.
        """
        public_ip_address_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Public IP Address associated with the firewall.

        > **NOTE** A public ip address is required unless a `management_ip_configuration` block is specified.

        > **NOTE** When multiple `ip_configuration` blocks with `public_ip_address_id` are configured, `pulumi up` will raise an error when one or some of these `ip_configuration` blocks are removed. because the `public_ip_address_id` is still used by the `firewall` resource until the `firewall` resource is updated. and the destruction of `network.PublicIp` happens before the update of firewall by default. to destroy of `network.PublicIp` will cause the error. The workaround is to set `create_before_destroy=true` to the `network.PublicIp` resource `lifecycle` block. See more detail: destroying.md#create-before-destroy

        > **NOTE** The Public IP must have a `Static` allocation and `Standard` SKU.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.

        > **NOTE** The Subnet used for the Firewall must have the name `AzureFirewallSubnet` and the subnet mask must be at least a `/26`.

        > **NOTE** At least one and only one `ip_configuration` block may contain a `subnet_id`.
        """
elif False:
    FirewallIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 public_ip_address_id: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name of the IP Configuration.
        :param pulumi.Input[str] private_ip_address: The private IP address associated with the Firewall.
        :param pulumi.Input[str] public_ip_address_id: The ID of the Public IP Address associated with the firewall.
               
               > **NOTE** A public ip address is required unless a `management_ip_configuration` block is specified.
               
               > **NOTE** When multiple `ip_configuration` blocks with `public_ip_address_id` are configured, `pulumi up` will raise an error when one or some of these `ip_configuration` blocks are removed. because the `public_ip_address_id` is still used by the `firewall` resource until the `firewall` resource is updated. and the destruction of `network.PublicIp` happens before the update of firewall by default. to destroy of `network.PublicIp` will cause the error. The workaround is to set `create_before_destroy=true` to the `network.PublicIp` resource `lifecycle` block. See more detail: destroying.md#create-before-destroy
               
               > **NOTE** The Public IP must have a `Static` allocation and `Standard` SKU.
        :param pulumi.Input[str] subnet_id: Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.
               
               > **NOTE** The Subnet used for the Firewall must have the name `AzureFirewallSubnet` and the subnet mask must be at least a `/26`.
               
               > **NOTE** At least one and only one `ip_configuration` block may contain a `subnet_id`.
        """
        pulumi.set(__self__, "name", name)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if public_ip_address_id is not None:
            pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the IP Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address associated with the Firewall.
        """
        return pulumi.get(self, "private_ip_address")

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

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Public IP Address associated with the firewall.

        > **NOTE** A public ip address is required unless a `management_ip_configuration` block is specified.

        > **NOTE** When multiple `ip_configuration` blocks with `public_ip_address_id` are configured, `pulumi up` will raise an error when one or some of these `ip_configuration` blocks are removed. because the `public_ip_address_id` is still used by the `firewall` resource until the `firewall` resource is updated. and the destruction of `network.PublicIp` happens before the update of firewall by default. to destroy of `network.PublicIp` will cause the error. The workaround is to set `create_before_destroy=true` to the `network.PublicIp` resource `lifecycle` block. See more detail: destroying.md#create-before-destroy

        > **NOTE** The Public IP must have a `Static` allocation and `Standard` SKU.
        """
        return pulumi.get(self, "public_ip_address_id")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.

        > **NOTE** The Subnet used for the Firewall must have the name `AzureFirewallSubnet` and the subnet mask must be at least a `/26`.

        > **NOTE** At least one and only one `ip_configuration` block may contain a `subnet_id`.
        """
        return pulumi.get(self, "subnet_id")

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


if not MYPY:
    class FirewallManagementIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name of the IP Configuration.
        """
        public_ip_address_id: pulumi.Input[str]
        """
        The ID of the Public IP Address associated with the firewall.

        > **NOTE** The Public IP must have a `Static` allocation and `Standard` SKU.
        """
        subnet_id: pulumi.Input[str]
        """
        Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.

        > **NOTE** The Management Subnet used for the Firewall must have the name `AzureFirewallManagementSubnet` and the subnet mask must be at least a `/26`.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address associated with the Firewall.
        """
elif False:
    FirewallManagementIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallManagementIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 public_ip_address_id: pulumi.Input[str],
                 subnet_id: pulumi.Input[str],
                 private_ip_address: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name of the IP Configuration.
        :param pulumi.Input[str] public_ip_address_id: The ID of the Public IP Address associated with the firewall.
               
               > **NOTE** The Public IP must have a `Static` allocation and `Standard` SKU.
        :param pulumi.Input[str] subnet_id: Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.
               
               > **NOTE** The Management Subnet used for the Firewall must have the name `AzureFirewallManagementSubnet` and the subnet mask must be at least a `/26`.
        :param pulumi.Input[str] private_ip_address: The private IP address associated with the Firewall.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)
        pulumi.set(__self__, "subnet_id", subnet_id)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the IP Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        """
        The ID of the Public IP Address associated with the firewall.

        > **NOTE** The Public IP must have a `Static` allocation and `Standard` SKU.
        """
        return pulumi.get(self, "public_ip_address_id")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[str]:
        """
        Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.

        > **NOTE** The Management Subnet used for the Firewall must have the name `AzureFirewallManagementSubnet` and the subnet mask must be at least a `/26`.
        """
        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="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address associated with the Firewall.
        """
        return pulumi.get(self, "private_ip_address")

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


if not MYPY:
    class FirewallNatRuleCollectionRuleArgsDict(TypedDict):
        destination_addresses: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of destination IP addresses and/or IP ranges.
        """
        destination_ports: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of destination ports.
        """
        name: pulumi.Input[str]
        """
        Specifies the name of the rule.
        """
        protocols: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of protocols. Possible values are `Any`, `ICMP`, `TCP` and `UDP`. If `action` is `Dnat`, protocols can only be `TCP` and `UDP`.
        """
        translated_address: pulumi.Input[str]
        """
        The address of the service behind the Firewall.
        """
        translated_port: pulumi.Input[str]
        """
        The port of the service behind the Firewall.
        """
        description: NotRequired[pulumi.Input[str]]
        """
        Specifies a description for the rule.
        """
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of source IP addresses and/or IP ranges.
        """
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of source IP Group IDs for the rule.

        > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
elif False:
    FirewallNatRuleCollectionRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallNatRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 destination_addresses: pulumi.Input[Sequence[pulumi.Input[str]]],
                 destination_ports: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 protocols: pulumi.Input[Sequence[pulumi.Input[str]]],
                 translated_address: pulumi.Input[str],
                 translated_port: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_addresses: A list of destination IP addresses and/or IP ranges.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ports: A list of destination ports.
        :param pulumi.Input[str] name: Specifies the name of the rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] protocols: A list of protocols. Possible values are `Any`, `ICMP`, `TCP` and `UDP`. If `action` is `Dnat`, protocols can only be `TCP` and `UDP`.
        :param pulumi.Input[str] translated_address: The address of the service behind the Firewall.
        :param pulumi.Input[str] translated_port: The port of the service behind the Firewall.
        :param pulumi.Input[str] description: Specifies a description for the rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: A list of source IP addresses and/or IP ranges.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: A list of source IP Group IDs for the rule.
               
               > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
        pulumi.set(__self__, "destination_addresses", destination_addresses)
        pulumi.set(__self__, "destination_ports", destination_ports)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocols", protocols)
        pulumi.set(__self__, "translated_address", translated_address)
        pulumi.set(__self__, "translated_port", translated_port)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)

    @property
    @pulumi.getter(name="destinationAddresses")
    def destination_addresses(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of destination IP addresses and/or IP ranges.
        """
        return pulumi.get(self, "destination_addresses")

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

    @property
    @pulumi.getter(name="destinationPorts")
    def destination_ports(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of destination ports.
        """
        return pulumi.get(self, "destination_ports")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocols(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of protocols. Possible values are `Any`, `ICMP`, `TCP` and `UDP`. If `action` is `Dnat`, protocols can only be `TCP` and `UDP`.
        """
        return pulumi.get(self, "protocols")

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

    @property
    @pulumi.getter(name="translatedAddress")
    def translated_address(self) -> pulumi.Input[str]:
        """
        The address of the service behind the Firewall.
        """
        return pulumi.get(self, "translated_address")

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

    @property
    @pulumi.getter(name="translatedPort")
    def translated_port(self) -> pulumi.Input[str]:
        """
        The port of the service behind the Firewall.
        """
        return pulumi.get(self, "translated_port")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies a description for the rule.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of source IP addresses and/or IP ranges.
        """
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of source IP Group IDs for the rule.

        > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
        return pulumi.get(self, "source_ip_groups")

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


if not MYPY:
    class FirewallNetworkRuleCollectionRuleArgsDict(TypedDict):
        destination_ports: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of destination ports.
        """
        name: pulumi.Input[str]
        """
        Specifies the name of the rule.
        """
        protocols: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of protocols. Possible values are `Any`, `ICMP`, `TCP` and `UDP`.
        """
        description: NotRequired[pulumi.Input[str]]
        """
        Specifies a description for the rule.
        """
        destination_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Either a list of destination IP addresses and/or IP ranges, or a list of destination [Service Tags](https://docs.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags).
        """
        destination_fqdns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of destination FQDNS for the rule.

        > **NOTE** [You must enable DNS Proxy to use FQDNs in your network rules](https://docs.microsoft.com/azure/firewall/fqdn-filtering-network-rules).

        > **NOTE** At least one of `destination_addresses`, `destination_ip_groups` and `destination_fqdns` must be specified for a rule.
        """
        destination_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of destination IP Group IDs for the rule.
        """
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of source IP addresses and/or IP ranges.
        """
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IP Group IDs for the rule.

        > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
elif False:
    FirewallNetworkRuleCollectionRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallNetworkRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 destination_ports: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 protocols: pulumi.Input[Sequence[pulumi.Input[str]]],
                 description: Optional[pulumi.Input[str]] = None,
                 destination_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_fqdns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ports: A list of destination ports.
        :param pulumi.Input[str] name: Specifies the name of the rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] protocols: A list of protocols. Possible values are `Any`, `ICMP`, `TCP` and `UDP`.
        :param pulumi.Input[str] description: Specifies a description for the rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_addresses: Either a list of destination IP addresses and/or IP ranges, or a list of destination [Service Tags](https://docs.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_fqdns: A list of destination FQDNS for the rule.
               
               > **NOTE** [You must enable DNS Proxy to use FQDNs in your network rules](https://docs.microsoft.com/azure/firewall/fqdn-filtering-network-rules).
               
               > **NOTE** At least one of `destination_addresses`, `destination_ip_groups` and `destination_fqdns` must be specified for a rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ip_groups: A list of destination IP Group IDs for the rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: A list of source IP addresses and/or IP ranges.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: A list of IP Group IDs for the rule.
               
               > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
        pulumi.set(__self__, "destination_ports", destination_ports)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocols", protocols)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_addresses is not None:
            pulumi.set(__self__, "destination_addresses", destination_addresses)
        if destination_fqdns is not None:
            pulumi.set(__self__, "destination_fqdns", destination_fqdns)
        if destination_ip_groups is not None:
            pulumi.set(__self__, "destination_ip_groups", destination_ip_groups)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)

    @property
    @pulumi.getter(name="destinationPorts")
    def destination_ports(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of destination ports.
        """
        return pulumi.get(self, "destination_ports")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocols(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of protocols. Possible values are `Any`, `ICMP`, `TCP` and `UDP`.
        """
        return pulumi.get(self, "protocols")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies a description for the rule.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="destinationAddresses")
    def destination_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Either a list of destination IP addresses and/or IP ranges, or a list of destination [Service Tags](https://docs.microsoft.com/azure/virtual-network/service-tags-overview#available-service-tags).
        """
        return pulumi.get(self, "destination_addresses")

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

    @property
    @pulumi.getter(name="destinationFqdns")
    def destination_fqdns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of destination FQDNS for the rule.

        > **NOTE** [You must enable DNS Proxy to use FQDNs in your network rules](https://docs.microsoft.com/azure/firewall/fqdn-filtering-network-rules).

        > **NOTE** At least one of `destination_addresses`, `destination_ip_groups` and `destination_fqdns` must be specified for a rule.
        """
        return pulumi.get(self, "destination_fqdns")

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

    @property
    @pulumi.getter(name="destinationIpGroups")
    def destination_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of destination IP Group IDs for the rule.
        """
        return pulumi.get(self, "destination_ip_groups")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of source IP addresses and/or IP ranges.
        """
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IP Group IDs for the rule.

        > **NOTE** At least one of `source_addresses` and `source_ip_groups` must be specified for a rule.
        """
        return pulumi.get(self, "source_ip_groups")

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


if not MYPY:
    class FirewallPolicyDnsArgsDict(TypedDict):
        proxy_enabled: NotRequired[pulumi.Input[bool]]
        """
        Whether to enable DNS proxy on Firewalls attached to this Firewall Policy? Defaults to `false`.
        """
        servers: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of custom DNS servers' IP addresses.
        """
elif False:
    FirewallPolicyDnsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyDnsArgs:
    def __init__(__self__, *,
                 proxy_enabled: Optional[pulumi.Input[bool]] = None,
                 servers: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[bool] proxy_enabled: Whether to enable DNS proxy on Firewalls attached to this Firewall Policy? Defaults to `false`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] servers: A list of custom DNS servers' IP addresses.
        """
        if proxy_enabled is not None:
            pulumi.set(__self__, "proxy_enabled", proxy_enabled)
        if servers is not None:
            pulumi.set(__self__, "servers", servers)

    @property
    @pulumi.getter(name="proxyEnabled")
    def proxy_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable DNS proxy on Firewalls attached to this Firewall Policy? Defaults to `false`.
        """
        return pulumi.get(self, "proxy_enabled")

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

    @property
    @pulumi.getter
    def servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of custom DNS servers' IP addresses.
        """
        return pulumi.get(self, "servers")

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


if not MYPY:
    class FirewallPolicyExplicitProxyArgsDict(TypedDict):
        enable_pac_file: NotRequired[pulumi.Input[bool]]
        """
        Whether the pac file port and url need to be provided.
        """
        enabled: NotRequired[pulumi.Input[bool]]
        """
        Whether the explicit proxy is enabled for this Firewall Policy.
        """
        http_port: NotRequired[pulumi.Input[int]]
        """
        The port number for explicit http protocol.
        """
        https_port: NotRequired[pulumi.Input[int]]
        """
        The port number for explicit proxy https protocol.
        """
        pac_file: NotRequired[pulumi.Input[str]]
        """
        Specifies a SAS URL for PAC file.
        """
        pac_file_port: NotRequired[pulumi.Input[int]]
        """
        Specifies a port number for firewall to serve PAC file.
        """
elif False:
    FirewallPolicyExplicitProxyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyExplicitProxyArgs:
    def __init__(__self__, *,
                 enable_pac_file: Optional[pulumi.Input[bool]] = None,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 http_port: Optional[pulumi.Input[int]] = None,
                 https_port: Optional[pulumi.Input[int]] = None,
                 pac_file: Optional[pulumi.Input[str]] = None,
                 pac_file_port: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[bool] enable_pac_file: Whether the pac file port and url need to be provided.
        :param pulumi.Input[bool] enabled: Whether the explicit proxy is enabled for this Firewall Policy.
        :param pulumi.Input[int] http_port: The port number for explicit http protocol.
        :param pulumi.Input[int] https_port: The port number for explicit proxy https protocol.
        :param pulumi.Input[str] pac_file: Specifies a SAS URL for PAC file.
        :param pulumi.Input[int] pac_file_port: Specifies a port number for firewall to serve PAC file.
        """
        if enable_pac_file is not None:
            pulumi.set(__self__, "enable_pac_file", enable_pac_file)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if http_port is not None:
            pulumi.set(__self__, "http_port", http_port)
        if https_port is not None:
            pulumi.set(__self__, "https_port", https_port)
        if pac_file is not None:
            pulumi.set(__self__, "pac_file", pac_file)
        if pac_file_port is not None:
            pulumi.set(__self__, "pac_file_port", pac_file_port)

    @property
    @pulumi.getter(name="enablePacFile")
    def enable_pac_file(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether the pac file port and url need to be provided.
        """
        return pulumi.get(self, "enable_pac_file")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether the explicit proxy is enabled for this Firewall Policy.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="httpPort")
    def http_port(self) -> Optional[pulumi.Input[int]]:
        """
        The port number for explicit http protocol.
        """
        return pulumi.get(self, "http_port")

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

    @property
    @pulumi.getter(name="httpsPort")
    def https_port(self) -> Optional[pulumi.Input[int]]:
        """
        The port number for explicit proxy https protocol.
        """
        return pulumi.get(self, "https_port")

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

    @property
    @pulumi.getter(name="pacFile")
    def pac_file(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies a SAS URL for PAC file.
        """
        return pulumi.get(self, "pac_file")

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

    @property
    @pulumi.getter(name="pacFilePort")
    def pac_file_port(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies a port number for firewall to serve PAC file.
        """
        return pulumi.get(self, "pac_file_port")

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


if not MYPY:
    class FirewallPolicyIdentityArgsDict(TypedDict):
        type: pulumi.Input[str]
        """
        Specifies the type of Managed Service Identity that should be configured on this Firewall Policy. Only possible value is `UserAssigned`.
        """
        identity_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of User Assigned Managed Identity IDs to be assigned to this Firewall Policy.
        """
        principal_id: NotRequired[pulumi.Input[str]]
        tenant_id: NotRequired[pulumi.Input[str]]
elif False:
    FirewallPolicyIdentityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyIdentityArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 identity_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 principal_id: Optional[pulumi.Input[str]] = None,
                 tenant_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] type: Specifies the type of Managed Service Identity that should be configured on this Firewall Policy. Only possible value is `UserAssigned`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: Specifies a list of User Assigned Managed Identity IDs to be assigned to this Firewall Policy.
        """
        pulumi.set(__self__, "type", type)
        if identity_ids is not None:
            pulumi.set(__self__, "identity_ids", identity_ids)
        if principal_id is not None:
            pulumi.set(__self__, "principal_id", principal_id)
        if tenant_id is not None:
            pulumi.set(__self__, "tenant_id", tenant_id)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        Specifies the type of Managed Service Identity that should be configured on this Firewall Policy. Only possible value is `UserAssigned`.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of User Assigned Managed Identity IDs to be assigned to this Firewall Policy.
        """
        return pulumi.get(self, "identity_ids")

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

    @property
    @pulumi.getter(name="principalId")
    def principal_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "principal_id")

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

    @property
    @pulumi.getter(name="tenantId")
    def tenant_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "tenant_id")

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


if not MYPY:
    class FirewallPolicyInsightsArgsDict(TypedDict):
        default_log_analytics_workspace_id: pulumi.Input[str]
        """
        The ID of the default Log Analytics Workspace that the Firewalls associated with this Firewall Policy will send their logs to, when there is no location matches in the `log_analytics_workspace`.
        """
        enabled: pulumi.Input[bool]
        """
        Whether the insights functionality is enabled for this Firewall Policy.
        """
        log_analytics_workspaces: NotRequired[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyInsightsLogAnalyticsWorkspaceArgsDict']]]]
        """
        A list of `log_analytics_workspace` block as defined below.
        """
        retention_in_days: NotRequired[pulumi.Input[int]]
        """
        The log retention period in days.
        """
elif False:
    FirewallPolicyInsightsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyInsightsArgs:
    def __init__(__self__, *,
                 default_log_analytics_workspace_id: pulumi.Input[str],
                 enabled: pulumi.Input[bool],
                 log_analytics_workspaces: Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyInsightsLogAnalyticsWorkspaceArgs']]]] = None,
                 retention_in_days: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] default_log_analytics_workspace_id: The ID of the default Log Analytics Workspace that the Firewalls associated with this Firewall Policy will send their logs to, when there is no location matches in the `log_analytics_workspace`.
        :param pulumi.Input[bool] enabled: Whether the insights functionality is enabled for this Firewall Policy.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyInsightsLogAnalyticsWorkspaceArgs']]] log_analytics_workspaces: A list of `log_analytics_workspace` block as defined below.
        :param pulumi.Input[int] retention_in_days: The log retention period in days.
        """
        pulumi.set(__self__, "default_log_analytics_workspace_id", default_log_analytics_workspace_id)
        pulumi.set(__self__, "enabled", enabled)
        if log_analytics_workspaces is not None:
            pulumi.set(__self__, "log_analytics_workspaces", log_analytics_workspaces)
        if retention_in_days is not None:
            pulumi.set(__self__, "retention_in_days", retention_in_days)

    @property
    @pulumi.getter(name="defaultLogAnalyticsWorkspaceId")
    def default_log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The ID of the default Log Analytics Workspace that the Firewalls associated with this Firewall Policy will send their logs to, when there is no location matches in the `log_analytics_workspace`.
        """
        return pulumi.get(self, "default_log_analytics_workspace_id")

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

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        Whether the insights functionality is enabled for this Firewall Policy.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="logAnalyticsWorkspaces")
    def log_analytics_workspaces(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyInsightsLogAnalyticsWorkspaceArgs']]]]:
        """
        A list of `log_analytics_workspace` block as defined below.
        """
        return pulumi.get(self, "log_analytics_workspaces")

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

    @property
    @pulumi.getter(name="retentionInDays")
    def retention_in_days(self) -> Optional[pulumi.Input[int]]:
        """
        The log retention period in days.
        """
        return pulumi.get(self, "retention_in_days")

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


if not MYPY:
    class FirewallPolicyInsightsLogAnalyticsWorkspaceArgsDict(TypedDict):
        firewall_location: pulumi.Input[str]
        """
        The location of the Firewalls, that when matches this Log Analytics Workspace will be used to consume their logs.
        """
        id: pulumi.Input[str]
        """
        The ID of the Log Analytics Workspace that the Firewalls associated with this Firewall Policy will send their logs to when their locations match the `firewall_location`.
        """
elif False:
    FirewallPolicyInsightsLogAnalyticsWorkspaceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyInsightsLogAnalyticsWorkspaceArgs:
    def __init__(__self__, *,
                 firewall_location: pulumi.Input[str],
                 id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] firewall_location: The location of the Firewalls, that when matches this Log Analytics Workspace will be used to consume their logs.
        :param pulumi.Input[str] id: The ID of the Log Analytics Workspace that the Firewalls associated with this Firewall Policy will send their logs to when their locations match the `firewall_location`.
        """
        pulumi.set(__self__, "firewall_location", firewall_location)
        pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="firewallLocation")
    def firewall_location(self) -> pulumi.Input[str]:
        """
        The location of the Firewalls, that when matches this Log Analytics Workspace will be used to consume their logs.
        """
        return pulumi.get(self, "firewall_location")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        The ID of the Log Analytics Workspace that the Firewalls associated with this Firewall Policy will send their logs to when their locations match the `firewall_location`.
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class FirewallPolicyIntrusionDetectionArgsDict(TypedDict):
        mode: NotRequired[pulumi.Input[str]]
        """
        In which mode you want to run intrusion detection: `Off`, `Alert` or `Deny`.
        """
        private_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Private IP address ranges to identify traffic direction. By default, only ranges defined by IANA RFC 1918 are considered private IP addresses.
        """
        signature_overrides: NotRequired[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionSignatureOverrideArgsDict']]]]
        """
        One or more `signature_overrides` blocks as defined below.
        """
        traffic_bypasses: NotRequired[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionTrafficBypassArgsDict']]]]
        """
        One or more `traffic_bypass` blocks as defined below.
        """
elif False:
    FirewallPolicyIntrusionDetectionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyIntrusionDetectionArgs:
    def __init__(__self__, *,
                 mode: Optional[pulumi.Input[str]] = None,
                 private_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 signature_overrides: Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionSignatureOverrideArgs']]]] = None,
                 traffic_bypasses: Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionTrafficBypassArgs']]]] = None):
        """
        :param pulumi.Input[str] mode: In which mode you want to run intrusion detection: `Off`, `Alert` or `Deny`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] private_ranges: A list of Private IP address ranges to identify traffic direction. By default, only ranges defined by IANA RFC 1918 are considered private IP addresses.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionSignatureOverrideArgs']]] signature_overrides: One or more `signature_overrides` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionTrafficBypassArgs']]] traffic_bypasses: One or more `traffic_bypass` blocks as defined below.
        """
        if mode is not None:
            pulumi.set(__self__, "mode", mode)
        if private_ranges is not None:
            pulumi.set(__self__, "private_ranges", private_ranges)
        if signature_overrides is not None:
            pulumi.set(__self__, "signature_overrides", signature_overrides)
        if traffic_bypasses is not None:
            pulumi.set(__self__, "traffic_bypasses", traffic_bypasses)

    @property
    @pulumi.getter
    def mode(self) -> Optional[pulumi.Input[str]]:
        """
        In which mode you want to run intrusion detection: `Off`, `Alert` or `Deny`.
        """
        return pulumi.get(self, "mode")

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

    @property
    @pulumi.getter(name="privateRanges")
    def private_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Private IP address ranges to identify traffic direction. By default, only ranges defined by IANA RFC 1918 are considered private IP addresses.
        """
        return pulumi.get(self, "private_ranges")

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

    @property
    @pulumi.getter(name="signatureOverrides")
    def signature_overrides(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionSignatureOverrideArgs']]]]:
        """
        One or more `signature_overrides` blocks as defined below.
        """
        return pulumi.get(self, "signature_overrides")

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

    @property
    @pulumi.getter(name="trafficBypasses")
    def traffic_bypasses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyIntrusionDetectionTrafficBypassArgs']]]]:
        """
        One or more `traffic_bypass` blocks as defined below.
        """
        return pulumi.get(self, "traffic_bypasses")

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


if not MYPY:
    class FirewallPolicyIntrusionDetectionSignatureOverrideArgsDict(TypedDict):
        id: NotRequired[pulumi.Input[str]]
        """
        12-digit number (id) which identifies your signature.
        """
        state: NotRequired[pulumi.Input[str]]
        """
        state can be any of `Off`, `Alert` or `Deny`.
        """
elif False:
    FirewallPolicyIntrusionDetectionSignatureOverrideArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyIntrusionDetectionSignatureOverrideArgs:
    def __init__(__self__, *,
                 id: Optional[pulumi.Input[str]] = None,
                 state: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] id: 12-digit number (id) which identifies your signature.
        :param pulumi.Input[str] state: state can be any of `Off`, `Alert` or `Deny`.
        """
        if id is not None:
            pulumi.set(__self__, "id", id)
        if state is not None:
            pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        12-digit number (id) which identifies your signature.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def state(self) -> Optional[pulumi.Input[str]]:
        """
        state can be any of `Off`, `Alert` or `Deny`.
        """
        return pulumi.get(self, "state")

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


if not MYPY:
    class FirewallPolicyIntrusionDetectionTrafficBypassArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name which should be used for this bypass traffic setting.
        """
        protocol: pulumi.Input[str]
        """
        The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
        """
        description: NotRequired[pulumi.Input[str]]
        """
        The description for this bypass traffic setting.
        """
        destination_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
        """
        destination_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
        """
        destination_ports: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
        """
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of source addresses that shall be bypassed by intrusion detection.
        """
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of source IP groups that shall be bypassed by intrusion detection.
        """
elif False:
    FirewallPolicyIntrusionDetectionTrafficBypassArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyIntrusionDetectionTrafficBypassArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 destination_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_ports: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this bypass traffic setting.
        :param pulumi.Input[str] protocol: The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
        :param pulumi.Input[str] description: The description for this bypass traffic setting.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_addresses: Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ip_groups: Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ports: Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: Specifies a list of source addresses that shall be bypassed by intrusion detection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: Specifies a list of source IP groups that shall be bypassed by intrusion detection.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_addresses is not None:
            pulumi.set(__self__, "destination_addresses", destination_addresses)
        if destination_ip_groups is not None:
            pulumi.set(__self__, "destination_ip_groups", destination_ip_groups)
        if destination_ports is not None:
            pulumi.set(__self__, "destination_ports", destination_ports)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this bypass traffic setting.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        The description for this bypass traffic setting.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="destinationAddresses")
    def destination_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
        """
        return pulumi.get(self, "destination_addresses")

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

    @property
    @pulumi.getter(name="destinationIpGroups")
    def destination_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
        """
        return pulumi.get(self, "destination_ip_groups")

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

    @property
    @pulumi.getter(name="destinationPorts")
    def destination_ports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
        """
        return pulumi.get(self, "destination_ports")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of source addresses that shall be bypassed by intrusion detection.
        """
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of source IP groups that shall be bypassed by intrusion detection.
        """
        return pulumi.get(self, "source_ip_groups")

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


if not MYPY:
    class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        The action to take for the application rules in this collection. Possible values are `Allow` and `Deny`.
        """
        name: pulumi.Input[str]
        """
        The name which should be used for this application rule collection.
        """
        priority: pulumi.Input[int]
        """
        The priority of the application rule collection. The range is `100` - `65000`.
        """
        rules: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgsDict']]]
        """
        One or more `application_rule` blocks as defined below.
        """
elif False:
    FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 name: pulumi.Input[str],
                 priority: pulumi.Input[int],
                 rules: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs']]]):
        """
        :param pulumi.Input[str] action: The action to take for the application rules in this collection. Possible values are `Allow` and `Deny`.
        :param pulumi.Input[str] name: The name which should be used for this application rule collection.
        :param pulumi.Input[int] priority: The priority of the application rule collection. The range is `100` - `65000`.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs']]] rules: One or more `application_rule` blocks as defined below.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "priority", priority)
        pulumi.set(__self__, "rules", rules)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        The action to take for the application rules in this collection. Possible values are `Allow` and `Deny`.
        """
        return pulumi.get(self, "action")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this application rule collection.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def priority(self) -> pulumi.Input[int]:
        """
        The priority of the application rule collection. The range is `100` - `65000`.
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter
    def rules(self) -> pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs']]]:
        """
        One or more `application_rule` blocks as defined below.
        """
        return pulumi.get(self, "rules")

    @rules.setter
    def rules(self, value: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs']]]):
        pulumi.set(self, "rules", value)


if not MYPY:
    class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        """
        description: NotRequired[pulumi.Input[str]]
        destination_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        destination_fqdn_tags: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of destination FQDN tags.
        """
        destination_fqdns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        destination_urls: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of destination URLs for which policy should hold. Needs Premium SKU for Firewall Policy. Conflicts with `destination_fqdns`.
        """
        http_headers: NotRequired[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgsDict']]]]
        """
        Specifies a list of HTTP/HTTPS headers to insert. One or more `http_headers` blocks as defined below.
        """
        protocols: NotRequired[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgsDict']]]]
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        terminate_tls: NotRequired[pulumi.Input[bool]]
        """
        Boolean specifying if TLS shall be terminated (true) or not (false). Must be `true` when using `destination_urls`. Needs Premium SKU for Firewall Policy.
        """
        web_categories: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of web categories to which access is denied or allowed depending on the value of `action` above. Needs Premium SKU for Firewall Policy.
        """
elif False:
    FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 destination_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_fqdn_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_fqdns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_urls: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 http_headers: Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgs']]]] = None,
                 protocols: Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs']]]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 terminate_tls: Optional[pulumi.Input[bool]] = None,
                 web_categories: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_fqdn_tags: Specifies a list of destination FQDN tags.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_urls: Specifies a list of destination URLs for which policy should hold. Needs Premium SKU for Firewall Policy. Conflicts with `destination_fqdns`.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgs']]] http_headers: Specifies a list of HTTP/HTTPS headers to insert. One or more `http_headers` blocks as defined below.
        :param pulumi.Input[bool] terminate_tls: Boolean specifying if TLS shall be terminated (true) or not (false). Must be `true` when using `destination_urls`. Needs Premium SKU for Firewall Policy.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] web_categories: Specifies a list of web categories to which access is denied or allowed depending on the value of `action` above. Needs Premium SKU for Firewall Policy.
        """
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_addresses is not None:
            pulumi.set(__self__, "destination_addresses", destination_addresses)
        if destination_fqdn_tags is not None:
            pulumi.set(__self__, "destination_fqdn_tags", destination_fqdn_tags)
        if destination_fqdns is not None:
            pulumi.set(__self__, "destination_fqdns", destination_fqdns)
        if destination_urls is not None:
            pulumi.set(__self__, "destination_urls", destination_urls)
        if http_headers is not None:
            pulumi.set(__self__, "http_headers", http_headers)
        if protocols is not None:
            pulumi.set(__self__, "protocols", protocols)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)
        if terminate_tls is not None:
            pulumi.set(__self__, "terminate_tls", terminate_tls)
        if web_categories is not None:
            pulumi.set(__self__, "web_categories", web_categories)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="destinationAddresses")
    def destination_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "destination_addresses")

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

    @property
    @pulumi.getter(name="destinationFqdnTags")
    def destination_fqdn_tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination FQDN tags.
        """
        return pulumi.get(self, "destination_fqdn_tags")

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

    @property
    @pulumi.getter(name="destinationFqdns")
    def destination_fqdns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "destination_fqdns")

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

    @property
    @pulumi.getter(name="destinationUrls")
    def destination_urls(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination URLs for which policy should hold. Needs Premium SKU for Firewall Policy. Conflicts with `destination_fqdns`.
        """
        return pulumi.get(self, "destination_urls")

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

    @property
    @pulumi.getter(name="httpHeaders")
    def http_headers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgs']]]]:
        """
        Specifies a list of HTTP/HTTPS headers to insert. One or more `http_headers` blocks as defined below.
        """
        return pulumi.get(self, "http_headers")

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

    @property
    @pulumi.getter
    def protocols(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs']]]]:
        return pulumi.get(self, "protocols")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "source_ip_groups")

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

    @property
    @pulumi.getter(name="terminateTls")
    def terminate_tls(self) -> Optional[pulumi.Input[bool]]:
        """
        Boolean specifying if TLS shall be terminated (true) or not (false). Must be `true` when using `destination_urls`. Needs Premium SKU for Firewall Policy.
        """
        return pulumi.get(self, "terminate_tls")

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

    @property
    @pulumi.getter(name="webCategories")
    def web_categories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of web categories to which access is denied or allowed depending on the value of `action` above. Needs Premium SKU for Firewall Policy.
        """
        return pulumi.get(self, "web_categories")

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


if not MYPY:
    class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name of the header.
        """
        value: pulumi.Input[str]
        """
        Specifies the value of the value.
        """
elif False:
    FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleHttpHeaderArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Specifies the name of the header.
        :param pulumi.Input[str] value: Specifies the value of the value.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the header.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        Specifies the value of the value.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgsDict(TypedDict):
        port: pulumi.Input[int]
        """
        Port number of the protocol. Range is 0-64000.
        """
        type: pulumi.Input[str]
        """
        Protocol type. Possible values are `Http` and `Https`.
        """
elif False:
    FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 type: pulumi.Input[str]):
        """
        :param pulumi.Input[int] port: Port number of the protocol. Range is 0-64000.
        :param pulumi.Input[str] type: Protocol type. Possible values are `Http` and `Https`.
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        Port number of the protocol. Range is 0-64000.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        Protocol type. Possible values are `Http` and `Https`.
        """
        return pulumi.get(self, "type")

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


if not MYPY:
    class FirewallPolicyRuleCollectionGroupNatRuleCollectionArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        The action to take for the NAT rules in this collection. Currently, the only possible value is `Dnat`.
        """
        name: pulumi.Input[str]
        """
        The name which should be used for this NAT rule collection.
        """
        priority: pulumi.Input[int]
        """
        The priority of the NAT rule collection. The range is `100` - `65000`.
        """
        rules: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgsDict']]]
        """
        A `nat_rule` block as defined below.
        """
elif False:
    FirewallPolicyRuleCollectionGroupNatRuleCollectionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupNatRuleCollectionArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 name: pulumi.Input[str],
                 priority: pulumi.Input[int],
                 rules: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs']]]):
        """
        :param pulumi.Input[str] action: The action to take for the NAT rules in this collection. Currently, the only possible value is `Dnat`.
        :param pulumi.Input[str] name: The name which should be used for this NAT rule collection.
        :param pulumi.Input[int] priority: The priority of the NAT rule collection. The range is `100` - `65000`.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs']]] rules: A `nat_rule` block as defined below.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "priority", priority)
        pulumi.set(__self__, "rules", rules)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        The action to take for the NAT rules in this collection. Currently, the only possible value is `Dnat`.
        """
        return pulumi.get(self, "action")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this NAT rule collection.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def priority(self) -> pulumi.Input[int]:
        """
        The priority of the NAT rule collection. The range is `100` - `65000`.
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter
    def rules(self) -> pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs']]]:
        """
        A `nat_rule` block as defined below.
        """
        return pulumi.get(self, "rules")

    @rules.setter
    def rules(self, value: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs']]]):
        pulumi.set(self, "rules", value)


if not MYPY:
    class FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        """
        protocols: pulumi.Input[Sequence[pulumi.Input[str]]]
        translated_port: pulumi.Input[int]
        """
        Specifies the translated port.
        """
        description: NotRequired[pulumi.Input[str]]
        destination_address: NotRequired[pulumi.Input[str]]
        """
        The destination IP address (including CIDR).
        """
        destination_ports: NotRequired[pulumi.Input[str]]
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        translated_address: NotRequired[pulumi.Input[str]]
        """
        Specifies the translated address.
        """
        translated_fqdn: NotRequired[pulumi.Input[str]]
        """
        Specifies the translated FQDN.

        > **NOTE:** Exactly one of `translated_address` and `translated_fqdn` should be set.
        """
elif False:
    FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocols: pulumi.Input[Sequence[pulumi.Input[str]]],
                 translated_port: pulumi.Input[int],
                 description: Optional[pulumi.Input[str]] = None,
                 destination_address: Optional[pulumi.Input[str]] = None,
                 destination_ports: Optional[pulumi.Input[str]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 translated_address: Optional[pulumi.Input[str]] = None,
                 translated_fqdn: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        :param pulumi.Input[int] translated_port: Specifies the translated port.
        :param pulumi.Input[str] destination_address: The destination IP address (including CIDR).
        :param pulumi.Input[str] translated_address: Specifies the translated address.
        :param pulumi.Input[str] translated_fqdn: Specifies the translated FQDN.
               
               > **NOTE:** Exactly one of `translated_address` and `translated_fqdn` should be set.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocols", protocols)
        pulumi.set(__self__, "translated_port", translated_port)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_address is not None:
            pulumi.set(__self__, "destination_address", destination_address)
        if destination_ports is not None:
            pulumi.set(__self__, "destination_ports", destination_ports)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)
        if translated_address is not None:
            pulumi.set(__self__, "translated_address", translated_address)
        if translated_fqdn is not None:
            pulumi.set(__self__, "translated_fqdn", translated_fqdn)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocols(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "protocols")

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

    @property
    @pulumi.getter(name="translatedPort")
    def translated_port(self) -> pulumi.Input[int]:
        """
        Specifies the translated port.
        """
        return pulumi.get(self, "translated_port")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="destinationAddress")
    def destination_address(self) -> Optional[pulumi.Input[str]]:
        """
        The destination IP address (including CIDR).
        """
        return pulumi.get(self, "destination_address")

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

    @property
    @pulumi.getter(name="destinationPorts")
    def destination_ports(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "destination_ports")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "source_ip_groups")

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

    @property
    @pulumi.getter(name="translatedAddress")
    def translated_address(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the translated address.
        """
        return pulumi.get(self, "translated_address")

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

    @property
    @pulumi.getter(name="translatedFqdn")
    def translated_fqdn(self) -> Optional[pulumi.Input[str]]:
        """
        Specifies the translated FQDN.

        > **NOTE:** Exactly one of `translated_address` and `translated_fqdn` should be set.
        """
        return pulumi.get(self, "translated_fqdn")

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


if not MYPY:
    class FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgsDict(TypedDict):
        action: pulumi.Input[str]
        """
        The action to take for the network rules in this collection. Possible values are `Allow` and `Deny`.
        """
        name: pulumi.Input[str]
        """
        The name which should be used for this network rule collection.
        """
        priority: pulumi.Input[int]
        """
        The priority of the network rule collection. The range is `100` - `65000`.
        """
        rules: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgsDict']]]
        """
        One or more `network_rule` blocks as defined below.
        """
elif False:
    FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgs:
    def __init__(__self__, *,
                 action: pulumi.Input[str],
                 name: pulumi.Input[str],
                 priority: pulumi.Input[int],
                 rules: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs']]]):
        """
        :param pulumi.Input[str] action: The action to take for the network rules in this collection. Possible values are `Allow` and `Deny`.
        :param pulumi.Input[str] name: The name which should be used for this network rule collection.
        :param pulumi.Input[int] priority: The priority of the network rule collection. The range is `100` - `65000`.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs']]] rules: One or more `network_rule` blocks as defined below.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "priority", priority)
        pulumi.set(__self__, "rules", rules)

    @property
    @pulumi.getter
    def action(self) -> pulumi.Input[str]:
        """
        The action to take for the network rules in this collection. Possible values are `Allow` and `Deny`.
        """
        return pulumi.get(self, "action")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this network rule collection.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def priority(self) -> pulumi.Input[int]:
        """
        The priority of the network rule collection. The range is `100` - `65000`.
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter
    def rules(self) -> pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs']]]:
        """
        One or more `network_rule` blocks as defined below.
        """
        return pulumi.get(self, "rules")

    @rules.setter
    def rules(self, value: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs']]]):
        pulumi.set(self, "rules", value)


if not MYPY:
    class FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgsDict(TypedDict):
        destination_ports: pulumi.Input[Sequence[pulumi.Input[str]]]
        name: pulumi.Input[str]
        """
        The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        """
        protocols: pulumi.Input[Sequence[pulumi.Input[str]]]
        description: NotRequired[pulumi.Input[str]]
        destination_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        destination_fqdns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        destination_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        Specifies a list of destination IP groups.
        """
        source_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        source_ip_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
elif False:
    FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 destination_ports: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 protocols: pulumi.Input[Sequence[pulumi.Input[str]]],
                 description: Optional[pulumi.Input[str]] = None,
                 destination_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_fqdns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_ip_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ip_groups: Specifies a list of destination IP groups.
        """
        pulumi.set(__self__, "destination_ports", destination_ports)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocols", protocols)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_addresses is not None:
            pulumi.set(__self__, "destination_addresses", destination_addresses)
        if destination_fqdns is not None:
            pulumi.set(__self__, "destination_fqdns", destination_fqdns)
        if destination_ip_groups is not None:
            pulumi.set(__self__, "destination_ip_groups", destination_ip_groups)
        if source_addresses is not None:
            pulumi.set(__self__, "source_addresses", source_addresses)
        if source_ip_groups is not None:
            pulumi.set(__self__, "source_ip_groups", source_ip_groups)

    @property
    @pulumi.getter(name="destinationPorts")
    def destination_ports(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "destination_ports")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocols(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "protocols")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="destinationAddresses")
    def destination_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "destination_addresses")

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

    @property
    @pulumi.getter(name="destinationFqdns")
    def destination_fqdns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "destination_fqdns")

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

    @property
    @pulumi.getter(name="destinationIpGroups")
    def destination_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination IP groups.
        """
        return pulumi.get(self, "destination_ip_groups")

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

    @property
    @pulumi.getter(name="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "source_addresses")

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

    @property
    @pulumi.getter(name="sourceIpGroups")
    def source_ip_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "source_ip_groups")

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


if not MYPY:
    class FirewallPolicyThreatIntelligenceAllowlistArgsDict(TypedDict):
        fqdns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of FQDNs that will be skipped for threat detection.
        """
        ip_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IP addresses or CIDR ranges that will be skipped for threat detection.
        """
elif False:
    FirewallPolicyThreatIntelligenceAllowlistArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyThreatIntelligenceAllowlistArgs:
    def __init__(__self__, *,
                 fqdns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] fqdns: A list of FQDNs that will be skipped for threat detection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ip_addresses: A list of IP addresses or CIDR ranges that will be skipped for threat detection.
        """
        if fqdns is not None:
            pulumi.set(__self__, "fqdns", fqdns)
        if ip_addresses is not None:
            pulumi.set(__self__, "ip_addresses", ip_addresses)

    @property
    @pulumi.getter
    def fqdns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of FQDNs that will be skipped for threat detection.
        """
        return pulumi.get(self, "fqdns")

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

    @property
    @pulumi.getter(name="ipAddresses")
    def ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IP addresses or CIDR ranges that will be skipped for threat detection.
        """
        return pulumi.get(self, "ip_addresses")

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


if not MYPY:
    class FirewallPolicyTlsCertificateArgsDict(TypedDict):
        key_vault_secret_id: pulumi.Input[str]
        """
        The ID of the Key Vault, where the secret or certificate is stored.
        """
        name: pulumi.Input[str]
        """
        The name of the certificate.
        """
elif False:
    FirewallPolicyTlsCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallPolicyTlsCertificateArgs:
    def __init__(__self__, *,
                 key_vault_secret_id: pulumi.Input[str],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] key_vault_secret_id: The ID of the Key Vault, where the secret or certificate is stored.
        :param pulumi.Input[str] name: The name of the certificate.
        """
        pulumi.set(__self__, "key_vault_secret_id", key_vault_secret_id)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="keyVaultSecretId")
    def key_vault_secret_id(self) -> pulumi.Input[str]:
        """
        The ID of the Key Vault, where the secret or certificate is stored.
        """
        return pulumi.get(self, "key_vault_secret_id")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the certificate.
        """
        return pulumi.get(self, "name")

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


if not MYPY:
    class FirewallVirtualHubArgsDict(TypedDict):
        virtual_hub_id: pulumi.Input[str]
        """
        Specifies the ID of the Virtual Hub where the Firewall resides in.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address associated with the Firewall.
        """
        public_ip_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of public IP addresses associated with the Firewall.
        """
        public_ip_count: NotRequired[pulumi.Input[int]]
        """
        Specifies the number of public IPs to assign to the Firewall. Defaults to `1`.
        """
elif False:
    FirewallVirtualHubArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class FirewallVirtualHubArgs:
    def __init__(__self__, *,
                 virtual_hub_id: pulumi.Input[str],
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 public_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 public_ip_count: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] virtual_hub_id: Specifies the ID of the Virtual Hub where the Firewall resides in.
        :param pulumi.Input[str] private_ip_address: The private IP address associated with the Firewall.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] public_ip_addresses: The list of public IP addresses associated with the Firewall.
        :param pulumi.Input[int] public_ip_count: Specifies the number of public IPs to assign to the Firewall. Defaults to `1`.
        """
        pulumi.set(__self__, "virtual_hub_id", virtual_hub_id)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if public_ip_addresses is not None:
            pulumi.set(__self__, "public_ip_addresses", public_ip_addresses)
        if public_ip_count is not None:
            pulumi.set(__self__, "public_ip_count", public_ip_count)

    @property
    @pulumi.getter(name="virtualHubId")
    def virtual_hub_id(self) -> pulumi.Input[str]:
        """
        Specifies the ID of the Virtual Hub where the Firewall resides in.
        """
        return pulumi.get(self, "virtual_hub_id")

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

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address associated with the Firewall.
        """
        return pulumi.get(self, "private_ip_address")

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

    @property
    @pulumi.getter(name="publicIpAddresses")
    def public_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of public IP addresses associated with the Firewall.
        """
        return pulumi.get(self, "public_ip_addresses")

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

    @property
    @pulumi.getter(name="publicIpCount")
    def public_ip_count(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies the number of public IPs to assign to the Firewall. Defaults to `1`.
        """
        return pulumi.get(self, "public_ip_count")

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


if not MYPY:
    class LocalNetworkGatewayBgpSettingsArgsDict(TypedDict):
        asn: pulumi.Input[int]
        """
        The BGP speaker's ASN.
        """
        bgp_peering_address: pulumi.Input[str]
        """
        The BGP peering address and BGP identifier of this BGP speaker.
        """
        peer_weight: NotRequired[pulumi.Input[int]]
        """
        The weight added to routes learned from this BGP speaker.
        """
elif False:
    LocalNetworkGatewayBgpSettingsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class LocalNetworkGatewayBgpSettingsArgs:
    def __init__(__self__, *,
                 asn: pulumi.Input[int],
                 bgp_peering_address: pulumi.Input[str],
                 peer_weight: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] asn: The BGP speaker's ASN.
        :param pulumi.Input[str] bgp_peering_address: The BGP peering address and BGP identifier of this BGP speaker.
        :param pulumi.Input[int] peer_weight: The weight added to routes learned from this BGP speaker.
        """
        pulumi.set(__self__, "asn", asn)
        pulumi.set(__self__, "bgp_peering_address", bgp_peering_address)
        if peer_weight is not None:
            pulumi.set(__self__, "peer_weight", peer_weight)

    @property
    @pulumi.getter
    def asn(self) -> pulumi.Input[int]:
        """
        The BGP speaker's ASN.
        """
        return pulumi.get(self, "asn")

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

    @property
    @pulumi.getter(name="bgpPeeringAddress")
    def bgp_peering_address(self) -> pulumi.Input[str]:
        """
        The BGP peering address and BGP identifier of this BGP speaker.
        """
        return pulumi.get(self, "bgp_peering_address")

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

    @property
    @pulumi.getter(name="peerWeight")
    def peer_weight(self) -> Optional[pulumi.Input[int]]:
        """
        The weight added to routes learned from this BGP speaker.
        """
        return pulumi.get(self, "peer_weight")

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


if not MYPY:
    class NetworkConnectionMonitorEndpointArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the endpoint for the Network Connection Monitor .
        """
        address: NotRequired[pulumi.Input[str]]
        """
        The IP address or domain name of the Network Connection Monitor endpoint.
        """
        coverage_level: NotRequired[pulumi.Input[str]]
        """
        The test coverage for the Network Connection Monitor endpoint. Possible values are `AboveAverage`, `Average`, `BelowAverage`, `Default`, `Full` and `Low`.
        """
        excluded_ip_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IPv4/IPv6 subnet masks or IPv4/IPv6 IP addresses to be excluded to the Network Connection Monitor endpoint.
        """
        filter: NotRequired[pulumi.Input['NetworkConnectionMonitorEndpointFilterArgsDict']]
        """
        A `filter` block as defined below.
        """
        included_ip_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of IPv4/IPv6 subnet masks or IPv4/IPv6 IP addresses to be included to the Network Connection Monitor endpoint.
        """
        target_resource_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID which is used as the endpoint by the Network Connection Monitor.
        """
        target_resource_type: NotRequired[pulumi.Input[str]]
        """
        The endpoint type of the Network Connection Monitor. Possible values are `AzureArcVM`, `AzureSubnet`, `AzureVM`, `AzureVNet`, `ExternalAddress`, `MMAWorkspaceMachine` and `MMAWorkspaceNetwork`.
        """
elif False:
    NetworkConnectionMonitorEndpointArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorEndpointArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 address: Optional[pulumi.Input[str]] = None,
                 coverage_level: Optional[pulumi.Input[str]] = None,
                 excluded_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 filter: Optional[pulumi.Input['NetworkConnectionMonitorEndpointFilterArgs']] = None,
                 included_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 target_resource_id: Optional[pulumi.Input[str]] = None,
                 target_resource_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the endpoint for the Network Connection Monitor .
        :param pulumi.Input[str] address: The IP address or domain name of the Network Connection Monitor endpoint.
        :param pulumi.Input[str] coverage_level: The test coverage for the Network Connection Monitor endpoint. Possible values are `AboveAverage`, `Average`, `BelowAverage`, `Default`, `Full` and `Low`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] excluded_ip_addresses: A list of IPv4/IPv6 subnet masks or IPv4/IPv6 IP addresses to be excluded to the Network Connection Monitor endpoint.
        :param pulumi.Input['NetworkConnectionMonitorEndpointFilterArgs'] filter: A `filter` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] included_ip_addresses: A list of IPv4/IPv6 subnet masks or IPv4/IPv6 IP addresses to be included to the Network Connection Monitor endpoint.
        :param pulumi.Input[str] target_resource_id: The resource ID which is used as the endpoint by the Network Connection Monitor.
        :param pulumi.Input[str] target_resource_type: The endpoint type of the Network Connection Monitor. Possible values are `AzureArcVM`, `AzureSubnet`, `AzureVM`, `AzureVNet`, `ExternalAddress`, `MMAWorkspaceMachine` and `MMAWorkspaceNetwork`.
        """
        pulumi.set(__self__, "name", name)
        if address is not None:
            pulumi.set(__self__, "address", address)
        if coverage_level is not None:
            pulumi.set(__self__, "coverage_level", coverage_level)
        if excluded_ip_addresses is not None:
            pulumi.set(__self__, "excluded_ip_addresses", excluded_ip_addresses)
        if filter is not None:
            pulumi.set(__self__, "filter", filter)
        if included_ip_addresses is not None:
            pulumi.set(__self__, "included_ip_addresses", included_ip_addresses)
        if target_resource_id is not None:
            pulumi.set(__self__, "target_resource_id", target_resource_id)
        if target_resource_type is not None:
            pulumi.set(__self__, "target_resource_type", target_resource_type)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the endpoint for the Network Connection Monitor .
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def address(self) -> Optional[pulumi.Input[str]]:
        """
        The IP address or domain name of the Network Connection Monitor endpoint.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter(name="coverageLevel")
    def coverage_level(self) -> Optional[pulumi.Input[str]]:
        """
        The test coverage for the Network Connection Monitor endpoint. Possible values are `AboveAverage`, `Average`, `BelowAverage`, `Default`, `Full` and `Low`.
        """
        return pulumi.get(self, "coverage_level")

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

    @property
    @pulumi.getter(name="excludedIpAddresses")
    def excluded_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IPv4/IPv6 subnet masks or IPv4/IPv6 IP addresses to be excluded to the Network Connection Monitor endpoint.
        """
        return pulumi.get(self, "excluded_ip_addresses")

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

    @property
    @pulumi.getter
    def filter(self) -> Optional[pulumi.Input['NetworkConnectionMonitorEndpointFilterArgs']]:
        """
        A `filter` block as defined below.
        """
        return pulumi.get(self, "filter")

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

    @property
    @pulumi.getter(name="includedIpAddresses")
    def included_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of IPv4/IPv6 subnet masks or IPv4/IPv6 IP addresses to be included to the Network Connection Monitor endpoint.
        """
        return pulumi.get(self, "included_ip_addresses")

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

    @property
    @pulumi.getter(name="targetResourceId")
    def target_resource_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID which is used as the endpoint by the Network Connection Monitor.
        """
        return pulumi.get(self, "target_resource_id")

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

    @property
    @pulumi.getter(name="targetResourceType")
    def target_resource_type(self) -> Optional[pulumi.Input[str]]:
        """
        The endpoint type of the Network Connection Monitor. Possible values are `AzureArcVM`, `AzureSubnet`, `AzureVM`, `AzureVNet`, `ExternalAddress`, `MMAWorkspaceMachine` and `MMAWorkspaceNetwork`.
        """
        return pulumi.get(self, "target_resource_type")

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


if not MYPY:
    class NetworkConnectionMonitorEndpointFilterArgsDict(TypedDict):
        items: NotRequired[pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorEndpointFilterItemArgsDict']]]]
        """
        A `item` block as defined below.
        """
        type: NotRequired[pulumi.Input[str]]
        """
        The behaviour type of this endpoint filter. Currently the only allowed value is `Include`. Defaults to `Include`.
        """
elif False:
    NetworkConnectionMonitorEndpointFilterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorEndpointFilterArgs:
    def __init__(__self__, *,
                 items: Optional[pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorEndpointFilterItemArgs']]]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorEndpointFilterItemArgs']]] items: A `item` block as defined below.
        :param pulumi.Input[str] type: The behaviour type of this endpoint filter. Currently the only allowed value is `Include`. Defaults to `Include`.
        """
        if items is not None:
            pulumi.set(__self__, "items", items)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def items(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorEndpointFilterItemArgs']]]]:
        """
        A `item` block as defined below.
        """
        return pulumi.get(self, "items")

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The behaviour type of this endpoint filter. Currently the only allowed value is `Include`. Defaults to `Include`.
        """
        return pulumi.get(self, "type")

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


if not MYPY:
    class NetworkConnectionMonitorEndpointFilterItemArgsDict(TypedDict):
        address: NotRequired[pulumi.Input[str]]
        """
        The address of the filter item.
        """
        type: NotRequired[pulumi.Input[str]]
        """
        The type of items included in the filter. Possible values are `AgentAddress`. Defaults to `AgentAddress`.
        """
elif False:
    NetworkConnectionMonitorEndpointFilterItemArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorEndpointFilterItemArgs:
    def __init__(__self__, *,
                 address: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address: The address of the filter item.
        :param pulumi.Input[str] type: The type of items included in the filter. Possible values are `AgentAddress`. Defaults to `AgentAddress`.
        """
        if address is not None:
            pulumi.set(__self__, "address", address)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def address(self) -> Optional[pulumi.Input[str]]:
        """
        The address of the filter item.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of items included in the filter. Possible values are `AgentAddress`. Defaults to `AgentAddress`.
        """
        return pulumi.get(self, "type")

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


if not MYPY:
    class NetworkConnectionMonitorTestConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of test configuration for the Network Connection Monitor.
        """
        protocol: pulumi.Input[str]
        """
        The protocol used to evaluate tests. Possible values are `Tcp`, `Http` and `Icmp`.
        """
        http_configuration: NotRequired[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationArgsDict']]
        """
        A `http_configuration` block as defined below.
        """
        icmp_configuration: NotRequired[pulumi.Input['NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgsDict']]
        """
        A `icmp_configuration` block as defined below.
        """
        preferred_ip_version: NotRequired[pulumi.Input[str]]
        """
        The preferred IP version which is used in the test evaluation. Possible values are `IPv4` and `IPv6`.
        """
        success_threshold: NotRequired[pulumi.Input['NetworkConnectionMonitorTestConfigurationSuccessThresholdArgsDict']]
        """
        A `success_threshold` block as defined below.
        """
        tcp_configuration: NotRequired[pulumi.Input['NetworkConnectionMonitorTestConfigurationTcpConfigurationArgsDict']]
        """
        A `tcp_configuration` block as defined below.
        """
        test_frequency_in_seconds: NotRequired[pulumi.Input[int]]
        """
        The time interval in seconds at which the test evaluation will happen. Defaults to `60`.
        """
elif False:
    NetworkConnectionMonitorTestConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocol: pulumi.Input[str],
                 http_configuration: Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationArgs']] = None,
                 icmp_configuration: Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgs']] = None,
                 preferred_ip_version: Optional[pulumi.Input[str]] = None,
                 success_threshold: Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationSuccessThresholdArgs']] = None,
                 tcp_configuration: Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs']] = None,
                 test_frequency_in_seconds: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] name: The name of test configuration for the Network Connection Monitor.
        :param pulumi.Input[str] protocol: The protocol used to evaluate tests. Possible values are `Tcp`, `Http` and `Icmp`.
        :param pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationArgs'] http_configuration: A `http_configuration` block as defined below.
        :param pulumi.Input['NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgs'] icmp_configuration: A `icmp_configuration` block as defined below.
        :param pulumi.Input[str] preferred_ip_version: The preferred IP version which is used in the test evaluation. Possible values are `IPv4` and `IPv6`.
        :param pulumi.Input['NetworkConnectionMonitorTestConfigurationSuccessThresholdArgs'] success_threshold: A `success_threshold` block as defined below.
        :param pulumi.Input['NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs'] tcp_configuration: A `tcp_configuration` block as defined below.
        :param pulumi.Input[int] test_frequency_in_seconds: The time interval in seconds at which the test evaluation will happen. Defaults to `60`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocol", protocol)
        if http_configuration is not None:
            pulumi.set(__self__, "http_configuration", http_configuration)
        if icmp_configuration is not None:
            pulumi.set(__self__, "icmp_configuration", icmp_configuration)
        if preferred_ip_version is not None:
            pulumi.set(__self__, "preferred_ip_version", preferred_ip_version)
        if success_threshold is not None:
            pulumi.set(__self__, "success_threshold", success_threshold)
        if tcp_configuration is not None:
            pulumi.set(__self__, "tcp_configuration", tcp_configuration)
        if test_frequency_in_seconds is not None:
            pulumi.set(__self__, "test_frequency_in_seconds", test_frequency_in_seconds)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of test configuration for the Network Connection Monitor.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The protocol used to evaluate tests. Possible values are `Tcp`, `Http` and `Icmp`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="httpConfiguration")
    def http_configuration(self) -> Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationArgs']]:
        """
        A `http_configuration` block as defined below.
        """
        return pulumi.get(self, "http_configuration")

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

    @property
    @pulumi.getter(name="icmpConfiguration")
    def icmp_configuration(self) -> Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgs']]:
        """
        A `icmp_configuration` block as defined below.
        """
        return pulumi.get(self, "icmp_configuration")

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

    @property
    @pulumi.getter(name="preferredIpVersion")
    def preferred_ip_version(self) -> Optional[pulumi.Input[str]]:
        """
        The preferred IP version which is used in the test evaluation. Possible values are `IPv4` and `IPv6`.
        """
        return pulumi.get(self, "preferred_ip_version")

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

    @property
    @pulumi.getter(name="successThreshold")
    def success_threshold(self) -> Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationSuccessThresholdArgs']]:
        """
        A `success_threshold` block as defined below.
        """
        return pulumi.get(self, "success_threshold")

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

    @property
    @pulumi.getter(name="tcpConfiguration")
    def tcp_configuration(self) -> Optional[pulumi.Input['NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs']]:
        """
        A `tcp_configuration` block as defined below.
        """
        return pulumi.get(self, "tcp_configuration")

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

    @property
    @pulumi.getter(name="testFrequencyInSeconds")
    def test_frequency_in_seconds(self) -> Optional[pulumi.Input[int]]:
        """
        The time interval in seconds at which the test evaluation will happen. Defaults to `60`.
        """
        return pulumi.get(self, "test_frequency_in_seconds")

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


if not MYPY:
    class NetworkConnectionMonitorTestConfigurationHttpConfigurationArgsDict(TypedDict):
        method: NotRequired[pulumi.Input[str]]
        """
        The HTTP method for the HTTP request. Possible values are `Get` and `Post`. Defaults to `Get`.
        """
        path: NotRequired[pulumi.Input[str]]
        """
        The path component of the URI. It only accepts the absolute path.
        """
        port: NotRequired[pulumi.Input[int]]
        """
        The port for the HTTP connection.
        """
        prefer_https: NotRequired[pulumi.Input[bool]]
        """
        Should HTTPS be preferred over HTTP in cases where the choice is not explicit? Defaults to `false`.
        """
        request_headers: NotRequired[pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgsDict']]]]
        """
        A `request_header` block as defined below.
        """
        valid_status_code_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The HTTP status codes to consider successful. For instance, `2xx`, `301-304` and `418`.
        """
elif False:
    NetworkConnectionMonitorTestConfigurationHttpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationHttpConfigurationArgs:
    def __init__(__self__, *,
                 method: Optional[pulumi.Input[str]] = None,
                 path: Optional[pulumi.Input[str]] = None,
                 port: Optional[pulumi.Input[int]] = None,
                 prefer_https: Optional[pulumi.Input[bool]] = None,
                 request_headers: Optional[pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgs']]]] = None,
                 valid_status_code_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] method: The HTTP method for the HTTP request. Possible values are `Get` and `Post`. Defaults to `Get`.
        :param pulumi.Input[str] path: The path component of the URI. It only accepts the absolute path.
        :param pulumi.Input[int] port: The port for the HTTP connection.
        :param pulumi.Input[bool] prefer_https: Should HTTPS be preferred over HTTP in cases where the choice is not explicit? Defaults to `false`.
        :param pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgs']]] request_headers: A `request_header` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] valid_status_code_ranges: The HTTP status codes to consider successful. For instance, `2xx`, `301-304` and `418`.
        """
        if method is not None:
            pulumi.set(__self__, "method", method)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if prefer_https is not None:
            pulumi.set(__self__, "prefer_https", prefer_https)
        if request_headers is not None:
            pulumi.set(__self__, "request_headers", request_headers)
        if valid_status_code_ranges is not None:
            pulumi.set(__self__, "valid_status_code_ranges", valid_status_code_ranges)

    @property
    @pulumi.getter
    def method(self) -> Optional[pulumi.Input[str]]:
        """
        The HTTP method for the HTTP request. Possible values are `Get` and `Post`. Defaults to `Get`.
        """
        return pulumi.get(self, "method")

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

    @property
    @pulumi.getter
    def path(self) -> Optional[pulumi.Input[str]]:
        """
        The path component of the URI. It only accepts the absolute path.
        """
        return pulumi.get(self, "path")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[int]]:
        """
        The port for the HTTP connection.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="preferHttps")
    def prefer_https(self) -> Optional[pulumi.Input[bool]]:
        """
        Should HTTPS be preferred over HTTP in cases where the choice is not explicit? Defaults to `false`.
        """
        return pulumi.get(self, "prefer_https")

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

    @property
    @pulumi.getter(name="requestHeaders")
    def request_headers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgs']]]]:
        """
        A `request_header` block as defined below.
        """
        return pulumi.get(self, "request_headers")

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

    @property
    @pulumi.getter(name="validStatusCodeRanges")
    def valid_status_code_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The HTTP status codes to consider successful. For instance, `2xx`, `301-304` and `418`.
        """
        return pulumi.get(self, "valid_status_code_ranges")

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


if not MYPY:
    class NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the HTTP header.
        """
        value: pulumi.Input[str]
        """
        The value of the HTTP header.
        """
elif False:
    NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the HTTP header.
        :param pulumi.Input[str] value: The value of the HTTP header.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the HTTP header.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of the HTTP header.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgsDict(TypedDict):
        trace_route_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should path evaluation with trace route be enabled? Defaults to `true`.
        """
elif False:
    NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgs:
    def __init__(__self__, *,
                 trace_route_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] trace_route_enabled: Should path evaluation with trace route be enabled? Defaults to `true`.
        """
        if trace_route_enabled is not None:
            pulumi.set(__self__, "trace_route_enabled", trace_route_enabled)

    @property
    @pulumi.getter(name="traceRouteEnabled")
    def trace_route_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should path evaluation with trace route be enabled? Defaults to `true`.
        """
        return pulumi.get(self, "trace_route_enabled")

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


if not MYPY:
    class NetworkConnectionMonitorTestConfigurationSuccessThresholdArgsDict(TypedDict):
        checks_failed_percent: NotRequired[pulumi.Input[int]]
        """
        The maximum percentage of failed checks permitted for a test to be successful.
        """
        round_trip_time_ms: NotRequired[pulumi.Input[float]]
        """
        The maximum round-trip time in milliseconds permitted for a test to be successful.
        """
elif False:
    NetworkConnectionMonitorTestConfigurationSuccessThresholdArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationSuccessThresholdArgs:
    def __init__(__self__, *,
                 checks_failed_percent: Optional[pulumi.Input[int]] = None,
                 round_trip_time_ms: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[int] checks_failed_percent: The maximum percentage of failed checks permitted for a test to be successful.
        :param pulumi.Input[float] round_trip_time_ms: The maximum round-trip time in milliseconds permitted for a test to be successful.
        """
        if checks_failed_percent is not None:
            pulumi.set(__self__, "checks_failed_percent", checks_failed_percent)
        if round_trip_time_ms is not None:
            pulumi.set(__self__, "round_trip_time_ms", round_trip_time_ms)

    @property
    @pulumi.getter(name="checksFailedPercent")
    def checks_failed_percent(self) -> Optional[pulumi.Input[int]]:
        """
        The maximum percentage of failed checks permitted for a test to be successful.
        """
        return pulumi.get(self, "checks_failed_percent")

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

    @property
    @pulumi.getter(name="roundTripTimeMs")
    def round_trip_time_ms(self) -> Optional[pulumi.Input[float]]:
        """
        The maximum round-trip time in milliseconds permitted for a test to be successful.
        """
        return pulumi.get(self, "round_trip_time_ms")

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


if not MYPY:
    class NetworkConnectionMonitorTestConfigurationTcpConfigurationArgsDict(TypedDict):
        port: pulumi.Input[int]
        """
        The port for the TCP connection.
        """
        destination_port_behavior: NotRequired[pulumi.Input[str]]
        """
        The destination port behavior for the TCP connection. Possible values are `None` and `ListenIfAvailable`.
        """
        trace_route_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should path evaluation with trace route be enabled? Defaults to `true`.
        """
elif False:
    NetworkConnectionMonitorTestConfigurationTcpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 destination_port_behavior: Optional[pulumi.Input[str]] = None,
                 trace_route_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[int] port: The port for the TCP connection.
        :param pulumi.Input[str] destination_port_behavior: The destination port behavior for the TCP connection. Possible values are `None` and `ListenIfAvailable`.
        :param pulumi.Input[bool] trace_route_enabled: Should path evaluation with trace route be enabled? Defaults to `true`.
        """
        pulumi.set(__self__, "port", port)
        if destination_port_behavior is not None:
            pulumi.set(__self__, "destination_port_behavior", destination_port_behavior)
        if trace_route_enabled is not None:
            pulumi.set(__self__, "trace_route_enabled", trace_route_enabled)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port for the TCP connection.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="destinationPortBehavior")
    def destination_port_behavior(self) -> Optional[pulumi.Input[str]]:
        """
        The destination port behavior for the TCP connection. Possible values are `None` and `ListenIfAvailable`.
        """
        return pulumi.get(self, "destination_port_behavior")

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

    @property
    @pulumi.getter(name="traceRouteEnabled")
    def trace_route_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should path evaluation with trace route be enabled? Defaults to `true`.
        """
        return pulumi.get(self, "trace_route_enabled")

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


if not MYPY:
    class NetworkConnectionMonitorTestGroupArgsDict(TypedDict):
        destination_endpoints: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of destination endpoint names.
        """
        name: pulumi.Input[str]
        """
        The name of the test group for the Network Connection Monitor.
        """
        source_endpoints: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of source endpoint names.
        """
        test_configuration_names: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of test configuration names.
        """
        enabled: NotRequired[pulumi.Input[bool]]
        """
        Should the test group be enabled? Defaults to `true`.
        """
elif False:
    NetworkConnectionMonitorTestGroupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkConnectionMonitorTestGroupArgs:
    def __init__(__self__, *,
                 destination_endpoints: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 source_endpoints: pulumi.Input[Sequence[pulumi.Input[str]]],
                 test_configuration_names: pulumi.Input[Sequence[pulumi.Input[str]]],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_endpoints: A list of destination endpoint names.
        :param pulumi.Input[str] name: The name of the test group for the Network Connection Monitor.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_endpoints: A list of source endpoint names.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] test_configuration_names: A list of test configuration names.
        :param pulumi.Input[bool] enabled: Should the test group be enabled? Defaults to `true`.
        """
        pulumi.set(__self__, "destination_endpoints", destination_endpoints)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "source_endpoints", source_endpoints)
        pulumi.set(__self__, "test_configuration_names", test_configuration_names)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter(name="destinationEndpoints")
    def destination_endpoints(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of destination endpoint names.
        """
        return pulumi.get(self, "destination_endpoints")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the test group for the Network Connection Monitor.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="sourceEndpoints")
    def source_endpoints(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of source endpoint names.
        """
        return pulumi.get(self, "source_endpoints")

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

    @property
    @pulumi.getter(name="testConfigurationNames")
    def test_configuration_names(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of test configuration names.
        """
        return pulumi.get(self, "test_configuration_names")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should the test group be enabled? Defaults to `true`.
        """
        return pulumi.get(self, "enabled")

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


if not MYPY:
    class NetworkInterfaceIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name used for this IP Configuration.
        """
        private_ip_address_allocation: pulumi.Input[str]
        """
        The allocation method used for the Private IP Address. Possible values are `Dynamic` and `Static`.

        > **Note:** `Dynamic` means "An IP is automatically assigned during creation of this Network Interface"; `Static` means "User supplied IP address will be used"
        """
        gateway_load_balancer_frontend_ip_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The Frontend IP Configuration ID of a Gateway SKU Load Balancer.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Is this the Primary IP Configuration? Must be `true` for the first `ip_configuration` when multiple are specified. Defaults to `false`.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The first private IP address of the network interface.
        """
        private_ip_address_version: NotRequired[pulumi.Input[str]]
        """
        The IP Version to use. Possible values are `IPv4` or `IPv6`. Defaults to `IPv4`.
        """
        public_ip_address_id: NotRequired[pulumi.Input[str]]
        """
        Reference to a Public IP Address to associate with this NIC
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet where this Network Interface should be located in.

        > **Note:** This is required when `private_ip_address_version` is set to `IPv4`.
        """
elif False:
    NetworkInterfaceIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkInterfaceIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 private_ip_address_allocation: pulumi.Input[str],
                 gateway_load_balancer_frontend_ip_configuration_id: Optional[pulumi.Input[str]] = None,
                 primary: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_address_version: Optional[pulumi.Input[str]] = None,
                 public_ip_address_id: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: A name used for this IP Configuration.
        :param pulumi.Input[str] private_ip_address_allocation: The allocation method used for the Private IP Address. Possible values are `Dynamic` and `Static`.
               
               > **Note:** `Dynamic` means "An IP is automatically assigned during creation of this Network Interface"; `Static` means "User supplied IP address will be used"
        :param pulumi.Input[str] gateway_load_balancer_frontend_ip_configuration_id: The Frontend IP Configuration ID of a Gateway SKU Load Balancer.
        :param pulumi.Input[bool] primary: Is this the Primary IP Configuration? Must be `true` for the first `ip_configuration` when multiple are specified. Defaults to `false`.
        :param pulumi.Input[str] private_ip_address: The first private IP address of the network interface.
        :param pulumi.Input[str] private_ip_address_version: The IP Version to use. Possible values are `IPv4` or `IPv6`. Defaults to `IPv4`.
        :param pulumi.Input[str] public_ip_address_id: Reference to a Public IP Address to associate with this NIC
        :param pulumi.Input[str] subnet_id: The ID of the Subnet where this Network Interface should be located in.
               
               > **Note:** This is required when `private_ip_address_version` is set to `IPv4`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "private_ip_address_allocation", private_ip_address_allocation)
        if gateway_load_balancer_frontend_ip_configuration_id is not None:
            pulumi.set(__self__, "gateway_load_balancer_frontend_ip_configuration_id", gateway_load_balancer_frontend_ip_configuration_id)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_address_version is not None:
            pulumi.set(__self__, "private_ip_address_version", private_ip_address_version)
        if public_ip_address_id is not None:
            pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name used for this IP Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="privateIpAddressAllocation")
    def private_ip_address_allocation(self) -> pulumi.Input[str]:
        """
        The allocation method used for the Private IP Address. Possible values are `Dynamic` and `Static`.

        > **Note:** `Dynamic` means "An IP is automatically assigned during creation of this Network Interface"; `Static` means "User supplied IP address will be used"
        """
        return pulumi.get(self, "private_ip_address_allocation")

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

    @property
    @pulumi.getter(name="gatewayLoadBalancerFrontendIpConfigurationId")
    def gateway_load_balancer_frontend_ip_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The Frontend IP Configuration ID of a Gateway SKU Load Balancer.
        """
        return pulumi.get(self, "gateway_load_balancer_frontend_ip_configuration_id")

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

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Is this the Primary IP Configuration? Must be `true` for the first `ip_configuration` when multiple are specified. Defaults to `false`.
        """
        return pulumi.get(self, "primary")

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

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The first private IP address of the network interface.
        """
        return pulumi.get(self, "private_ip_address")

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

    @property
    @pulumi.getter(name="privateIpAddressVersion")
    def private_ip_address_version(self) -> Optional[pulumi.Input[str]]:
        """
        The IP Version to use. Possible values are `IPv4` or `IPv6`. Defaults to `IPv4`.
        """
        return pulumi.get(self, "private_ip_address_version")

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

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> Optional[pulumi.Input[str]]:
        """
        Reference to a Public IP Address to associate with this NIC
        """
        return pulumi.get(self, "public_ip_address_id")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet where this Network Interface should be located in.

        > **Note:** This is required when `private_ip_address_version` is set to `IPv4`.
        """
        return pulumi.get(self, "subnet_id")

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


if not MYPY:
    class NetworkManagerAdminRuleDestinationArgsDict(TypedDict):
        address_prefix: pulumi.Input[str]
        """
        Specifies the address prefix.
        """
        address_prefix_type: pulumi.Input[str]
        """
        Specifies the address prefix type. Possible values are `IPPrefix` and `ServiceTag`. For more information, please see [this document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-security-admins#source-and-destination-types).
        """
elif False:
    NetworkManagerAdminRuleDestinationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkManagerAdminRuleDestinationArgs:
    def __init__(__self__, *,
                 address_prefix: pulumi.Input[str],
                 address_prefix_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] address_prefix: Specifies the address prefix.
        :param pulumi.Input[str] address_prefix_type: Specifies the address prefix type. Possible values are `IPPrefix` and `ServiceTag`. For more information, please see [this document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-security-admins#source-and-destination-types).
        """
        pulumi.set(__self__, "address_prefix", address_prefix)
        pulumi.set(__self__, "address_prefix_type", address_prefix_type)

    @property
    @pulumi.getter(name="addressPrefix")
    def address_prefix(self) -> pulumi.Input[str]:
        """
        Specifies the address prefix.
        """
        return pulumi.get(self, "address_prefix")

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

    @property
    @pulumi.getter(name="addressPrefixType")
    def address_prefix_type(self) -> pulumi.Input[str]:
        """
        Specifies the address prefix type. Possible values are `IPPrefix` and `ServiceTag`. For more information, please see [this document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-security-admins#source-and-destination-types).
        """
        return pulumi.get(self, "address_prefix_type")

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


if not MYPY:
    class NetworkManagerAdminRuleSourceArgsDict(TypedDict):
        address_prefix: pulumi.Input[str]
        """
        Specifies the address prefix.
        """
        address_prefix_type: pulumi.Input[str]
        """
        Specifies the address prefix type. Possible values are `IPPrefix` and `ServiceTag`. For more information, please see [this document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-security-admins#source-and-destination-types).
        """
elif False:
    NetworkManagerAdminRuleSourceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkManagerAdminRuleSourceArgs:
    def __init__(__self__, *,
                 address_prefix: pulumi.Input[str],
                 address_prefix_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] address_prefix: Specifies the address prefix.
        :param pulumi.Input[str] address_prefix_type: Specifies the address prefix type. Possible values are `IPPrefix` and `ServiceTag`. For more information, please see [this document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-security-admins#source-and-destination-types).
        """
        pulumi.set(__self__, "address_prefix", address_prefix)
        pulumi.set(__self__, "address_prefix_type", address_prefix_type)

    @property
    @pulumi.getter(name="addressPrefix")
    def address_prefix(self) -> pulumi.Input[str]:
        """
        Specifies the address prefix.
        """
        return pulumi.get(self, "address_prefix")

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

    @property
    @pulumi.getter(name="addressPrefixType")
    def address_prefix_type(self) -> pulumi.Input[str]:
        """
        Specifies the address prefix type. Possible values are `IPPrefix` and `ServiceTag`. For more information, please see [this document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-security-admins#source-and-destination-types).
        """
        return pulumi.get(self, "address_prefix_type")

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


if not MYPY:
    class NetworkManagerConnectivityConfigurationAppliesToGroupArgsDict(TypedDict):
        group_connectivity: pulumi.Input[str]
        """
        Specifies the group connectivity type. Possible values are `None` and `DirectlyConnected`.
        """
        network_group_id: pulumi.Input[str]
        """
        Specifies the resource ID of Network Group which the configuration applies to.
        """
        global_mesh_enabled: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether to global mesh is supported for this group. Possible values are `true` and `false`.

        > **NOTE:** A group can be global only if the `group_connectivity` is `DirectlyConnected`.
        """
        use_hub_gateway: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether the hub gateway is used. Possible values are `true` and `false`.
        """
elif False:
    NetworkManagerConnectivityConfigurationAppliesToGroupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkManagerConnectivityConfigurationAppliesToGroupArgs:
    def __init__(__self__, *,
                 group_connectivity: pulumi.Input[str],
                 network_group_id: pulumi.Input[str],
                 global_mesh_enabled: Optional[pulumi.Input[bool]] = None,
                 use_hub_gateway: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] group_connectivity: Specifies the group connectivity type. Possible values are `None` and `DirectlyConnected`.
        :param pulumi.Input[str] network_group_id: Specifies the resource ID of Network Group which the configuration applies to.
        :param pulumi.Input[bool] global_mesh_enabled: Indicates whether to global mesh is supported for this group. Possible values are `true` and `false`.
               
               > **NOTE:** A group can be global only if the `group_connectivity` is `DirectlyConnected`.
        :param pulumi.Input[bool] use_hub_gateway: Indicates whether the hub gateway is used. Possible values are `true` and `false`.
        """
        pulumi.set(__self__, "group_connectivity", group_connectivity)
        pulumi.set(__self__, "network_group_id", network_group_id)
        if global_mesh_enabled is not None:
            pulumi.set(__self__, "global_mesh_enabled", global_mesh_enabled)
        if use_hub_gateway is not None:
            pulumi.set(__self__, "use_hub_gateway", use_hub_gateway)

    @property
    @pulumi.getter(name="groupConnectivity")
    def group_connectivity(self) -> pulumi.Input[str]:
        """
        Specifies the group connectivity type. Possible values are `None` and `DirectlyConnected`.
        """
        return pulumi.get(self, "group_connectivity")

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

    @property
    @pulumi.getter(name="networkGroupId")
    def network_group_id(self) -> pulumi.Input[str]:
        """
        Specifies the resource ID of Network Group which the configuration applies to.
        """
        return pulumi.get(self, "network_group_id")

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

    @property
    @pulumi.getter(name="globalMeshEnabled")
    def global_mesh_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether to global mesh is supported for this group. Possible values are `true` and `false`.

        > **NOTE:** A group can be global only if the `group_connectivity` is `DirectlyConnected`.
        """
        return pulumi.get(self, "global_mesh_enabled")

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

    @property
    @pulumi.getter(name="useHubGateway")
    def use_hub_gateway(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether the hub gateway is used. Possible values are `true` and `false`.
        """
        return pulumi.get(self, "use_hub_gateway")

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


if not MYPY:
    class NetworkManagerConnectivityConfigurationHubArgsDict(TypedDict):
        resource_id: pulumi.Input[str]
        """
        Specifies the resource ID used as hub in Hub And Spoke topology.
        """
        resource_type: pulumi.Input[str]
        """
        Specifies the resource Type used as hub in Hub And Spoke topology.
        """
elif False:
    NetworkManagerConnectivityConfigurationHubArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkManagerConnectivityConfigurationHubArgs:
    def __init__(__self__, *,
                 resource_id: pulumi.Input[str],
                 resource_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] resource_id: Specifies the resource ID used as hub in Hub And Spoke topology.
        :param pulumi.Input[str] resource_type: Specifies the resource Type used as hub in Hub And Spoke topology.
        """
        pulumi.set(__self__, "resource_id", resource_id)
        pulumi.set(__self__, "resource_type", resource_type)

    @property
    @pulumi.getter(name="resourceId")
    def resource_id(self) -> pulumi.Input[str]:
        """
        Specifies the resource ID used as hub in Hub And Spoke topology.
        """
        return pulumi.get(self, "resource_id")

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

    @property
    @pulumi.getter(name="resourceType")
    def resource_type(self) -> pulumi.Input[str]:
        """
        Specifies the resource Type used as hub in Hub And Spoke topology.
        """
        return pulumi.get(self, "resource_type")

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


if not MYPY:
    class NetworkManagerCrossTenantScopeArgsDict(TypedDict):
        management_groups: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of management groups.
        """
        subscriptions: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of subscriptions.
        """
        tenant_id: NotRequired[pulumi.Input[str]]
        """
        Tenant ID.
        """
elif False:
    NetworkManagerCrossTenantScopeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkManagerCrossTenantScopeArgs:
    def __init__(__self__, *,
                 management_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subscriptions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tenant_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] management_groups: List of management groups.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subscriptions: List of subscriptions.
        :param pulumi.Input[str] tenant_id: Tenant ID.
        """
        if management_groups is not None:
            pulumi.set(__self__, "management_groups", management_groups)
        if subscriptions is not None:
            pulumi.set(__self__, "subscriptions", subscriptions)
        if tenant_id is not None:
            pulumi.set(__self__, "tenant_id", tenant_id)

    @property
    @pulumi.getter(name="managementGroups")
    def management_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of management groups.
        """
        return pulumi.get(self, "management_groups")

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

    @property
    @pulumi.getter
    def subscriptions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of subscriptions.
        """
        return pulumi.get(self, "subscriptions")

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

    @property
    @pulumi.getter(name="tenantId")
    def tenant_id(self) -> Optional[pulumi.Input[str]]:
        """
        Tenant ID.
        """
        return pulumi.get(self, "tenant_id")

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


if not MYPY:
    class NetworkManagerScopeArgsDict(TypedDict):
        management_group_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of management group IDs.

        > **NOTE:** When specifying a scope at the management group level, you need to register the `Microsoft.Network` at the management group scope before deploying a Network Manager, more information can be found in the [Azure document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-network-manager-scope#scope).
        """
        subscription_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of subscription IDs.
        """
elif False:
    NetworkManagerScopeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkManagerScopeArgs:
    def __init__(__self__, *,
                 management_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subscription_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] management_group_ids: A list of management group IDs.
               
               > **NOTE:** When specifying a scope at the management group level, you need to register the `Microsoft.Network` at the management group scope before deploying a Network Manager, more information can be found in the [Azure document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-network-manager-scope#scope).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] subscription_ids: A list of subscription IDs.
        """
        if management_group_ids is not None:
            pulumi.set(__self__, "management_group_ids", management_group_ids)
        if subscription_ids is not None:
            pulumi.set(__self__, "subscription_ids", subscription_ids)

    @property
    @pulumi.getter(name="managementGroupIds")
    def management_group_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of management group IDs.

        > **NOTE:** When specifying a scope at the management group level, you need to register the `Microsoft.Network` at the management group scope before deploying a Network Manager, more information can be found in the [Azure document](https://learn.microsoft.com/en-us/azure/virtual-network-manager/concept-network-manager-scope#scope).
        """
        return pulumi.get(self, "management_group_ids")

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

    @property
    @pulumi.getter(name="subscriptionIds")
    def subscription_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of subscription IDs.
        """
        return pulumi.get(self, "subscription_ids")

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


if not MYPY:
    class NetworkSecurityGroupSecurityRuleArgsDict(TypedDict):
        access: pulumi.Input[str]
        """
        Specifies whether network traffic is allowed or denied. Possible values are `Allow` and `Deny`.
        """
        direction: pulumi.Input[str]
        """
        The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values are `Inbound` and `Outbound`.
        """
        name: pulumi.Input[str]
        """
        The name of the security rule.
        """
        priority: pulumi.Input[int]
        """
        Specifies the priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.
        """
        protocol: pulumi.Input[str]
        """
        Network protocol this rule applies to. Possible values include `Tcp`, `Udp`, `Icmp`, `Esp`, `Ah` or `*` (which matches all).
        """
        description: NotRequired[pulumi.Input[str]]
        """
        A description for this rule. Restricted to 140 characters.
        """
        destination_address_prefix: NotRequired[pulumi.Input[str]]
        """
        CIDR or destination IP range or * to match any IP. Tags such as `VirtualNetwork`, `AzureLoadBalancer` and `Internet` can also be used. This is required if `destination_address_prefixes` is not specified.
        """
        destination_address_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of destination address prefixes. Tags may not be used. This is required if `destination_address_prefix` is not specified.
        """
        destination_application_security_group_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A List of destination Application Security Group IDs
        """
        destination_port_range: NotRequired[pulumi.Input[str]]
        """
        Destination Port or Range. Integer or range between `0` and `65535` or `*` to match any. This is required if `destination_port_ranges` is not specified.
        """
        destination_port_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of destination ports or port ranges. This is required if `destination_port_range` is not specified.
        """
        source_address_prefix: NotRequired[pulumi.Input[str]]
        """
        CIDR or source IP range or * to match any IP. Tags such as `VirtualNetwork`, `AzureLoadBalancer` and `Internet` can also be used. This is required if `source_address_prefixes` is not specified.
        """
        source_address_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of source address prefixes. Tags may not be used. This is required if `source_address_prefix` is not specified.
        """
        source_application_security_group_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A List of source Application Security Group IDs
        """
        source_port_range: NotRequired[pulumi.Input[str]]
        """
        Source Port or Range. Integer or range between `0` and `65535` or `*` to match any. This is required if `source_port_ranges` is not specified.
        """
        source_port_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of source ports or port ranges. This is required if `source_port_range` is not specified.
        """
elif False:
    NetworkSecurityGroupSecurityRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkSecurityGroupSecurityRuleArgs:
    def __init__(__self__, *,
                 access: pulumi.Input[str],
                 direction: pulumi.Input[str],
                 name: pulumi.Input[str],
                 priority: pulumi.Input[int],
                 protocol: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None,
                 destination_address_prefix: Optional[pulumi.Input[str]] = None,
                 destination_address_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_application_security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_port_range: Optional[pulumi.Input[str]] = None,
                 destination_port_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_address_prefix: Optional[pulumi.Input[str]] = None,
                 source_address_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_application_security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 source_port_range: Optional[pulumi.Input[str]] = None,
                 source_port_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] access: Specifies whether network traffic is allowed or denied. Possible values are `Allow` and `Deny`.
        :param pulumi.Input[str] direction: The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values are `Inbound` and `Outbound`.
        :param pulumi.Input[str] name: The name of the security rule.
        :param pulumi.Input[int] priority: Specifies the priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.
        :param pulumi.Input[str] protocol: Network protocol this rule applies to. Possible values include `Tcp`, `Udp`, `Icmp`, `Esp`, `Ah` or `*` (which matches all).
        :param pulumi.Input[str] description: A description for this rule. Restricted to 140 characters.
        :param pulumi.Input[str] destination_address_prefix: CIDR or destination IP range or * to match any IP. Tags such as `VirtualNetwork`, `AzureLoadBalancer` and `Internet` can also be used. This is required if `destination_address_prefixes` is not specified.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_address_prefixes: List of destination address prefixes. Tags may not be used. This is required if `destination_address_prefix` is not specified.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_application_security_group_ids: A List of destination Application Security Group IDs
        :param pulumi.Input[str] destination_port_range: Destination Port or Range. Integer or range between `0` and `65535` or `*` to match any. This is required if `destination_port_ranges` is not specified.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_port_ranges: List of destination ports or port ranges. This is required if `destination_port_range` is not specified.
        :param pulumi.Input[str] source_address_prefix: CIDR or source IP range or * to match any IP. Tags such as `VirtualNetwork`, `AzureLoadBalancer` and `Internet` can also be used. This is required if `source_address_prefixes` is not specified.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_address_prefixes: List of source address prefixes. Tags may not be used. This is required if `source_address_prefix` is not specified.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_application_security_group_ids: A List of source Application Security Group IDs
        :param pulumi.Input[str] source_port_range: Source Port or Range. Integer or range between `0` and `65535` or `*` to match any. This is required if `source_port_ranges` is not specified.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_port_ranges: List of source ports or port ranges. This is required if `source_port_range` is not specified.
        """
        pulumi.set(__self__, "access", access)
        pulumi.set(__self__, "direction", direction)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "priority", priority)
        pulumi.set(__self__, "protocol", protocol)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_address_prefix is not None:
            pulumi.set(__self__, "destination_address_prefix", destination_address_prefix)
        if destination_address_prefixes is not None:
            pulumi.set(__self__, "destination_address_prefixes", destination_address_prefixes)
        if destination_application_security_group_ids is not None:
            pulumi.set(__self__, "destination_application_security_group_ids", destination_application_security_group_ids)
        if destination_port_range is not None:
            pulumi.set(__self__, "destination_port_range", destination_port_range)
        if destination_port_ranges is not None:
            pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        if source_address_prefix is not None:
            pulumi.set(__self__, "source_address_prefix", source_address_prefix)
        if source_address_prefixes is not None:
            pulumi.set(__self__, "source_address_prefixes", source_address_prefixes)
        if source_application_security_group_ids is not None:
            pulumi.set(__self__, "source_application_security_group_ids", source_application_security_group_ids)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)
        if source_port_ranges is not None:
            pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter
    def access(self) -> pulumi.Input[str]:
        """
        Specifies whether network traffic is allowed or denied. Possible values are `Allow` and `Deny`.
        """
        return pulumi.get(self, "access")

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

    @property
    @pulumi.getter
    def direction(self) -> pulumi.Input[str]:
        """
        The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values are `Inbound` and `Outbound`.
        """
        return pulumi.get(self, "direction")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the security rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def priority(self) -> pulumi.Input[int]:
        """
        Specifies the priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        Network protocol this rule applies to. Possible values include `Tcp`, `Udp`, `Icmp`, `Esp`, `Ah` or `*` (which matches all).
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        A description for this rule. Restricted to 140 characters.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="destinationAddressPrefix")
    def destination_address_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        CIDR or destination IP range or * to match any IP. Tags such as `VirtualNetwork`, `AzureLoadBalancer` and `Internet` can also be used. This is required if `destination_address_prefixes` is not specified.
        """
        return pulumi.get(self, "destination_address_prefix")

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

    @property
    @pulumi.getter(name="destinationAddressPrefixes")
    def destination_address_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of destination address prefixes. Tags may not be used. This is required if `destination_address_prefix` is not specified.
        """
        return pulumi.get(self, "destination_address_prefixes")

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

    @property
    @pulumi.getter(name="destinationApplicationSecurityGroupIds")
    def destination_application_security_group_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A List of destination Application Security Group IDs
        """
        return pulumi.get(self, "destination_application_security_group_ids")

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

    @property
    @pulumi.getter(name="destinationPortRange")
    def destination_port_range(self) -> Optional[pulumi.Input[str]]:
        """
        Destination Port or Range. Integer or range between `0` and `65535` or `*` to match any. This is required if `destination_port_ranges` is not specified.
        """
        return pulumi.get(self, "destination_port_range")

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

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of destination ports or port ranges. This is required if `destination_port_range` is not specified.
        """
        return pulumi.get(self, "destination_port_ranges")

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

    @property
    @pulumi.getter(name="sourceAddressPrefix")
    def source_address_prefix(self) -> Optional[pulumi.Input[str]]:
        """
        CIDR or source IP range or * to match any IP. Tags such as `VirtualNetwork`, `AzureLoadBalancer` and `Internet` can also be used. This is required if `source_address_prefixes` is not specified.
        """
        return pulumi.get(self, "source_address_prefix")

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

    @property
    @pulumi.getter(name="sourceAddressPrefixes")
    def source_address_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of source address prefixes. Tags may not be used. This is required if `source_address_prefix` is not specified.
        """
        return pulumi.get(self, "source_address_prefixes")

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

    @property
    @pulumi.getter(name="sourceApplicationSecurityGroupIds")
    def source_application_security_group_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A List of source Application Security Group IDs
        """
        return pulumi.get(self, "source_application_security_group_ids")

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

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional[pulumi.Input[str]]:
        """
        Source Port or Range. Integer or range between `0` and `65535` or `*` to match any. This is required if `source_port_ranges` is not specified.
        """
        return pulumi.get(self, "source_port_range")

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

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of source ports or port ranges. This is required if `source_port_range` is not specified.
        """
        return pulumi.get(self, "source_port_ranges")

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


if not MYPY:
    class NetworkWatcherFlowLogRetentionPolicyArgsDict(TypedDict):
        days: pulumi.Input[int]
        """
        The number of days to retain flow log records.
        """
        enabled: pulumi.Input[bool]
        """
        Boolean flag to enable/disable retention.
        """
elif False:
    NetworkWatcherFlowLogRetentionPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkWatcherFlowLogRetentionPolicyArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[int],
                 enabled: pulumi.Input[bool]):
        """
        :param pulumi.Input[int] days: The number of days to retain flow log records.
        :param pulumi.Input[bool] enabled: Boolean flag to enable/disable retention.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[int]:
        """
        The number of days to retain flow log records.
        """
        return pulumi.get(self, "days")

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

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        Boolean flag to enable/disable retention.
        """
        return pulumi.get(self, "enabled")

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


if not MYPY:
    class NetworkWatcherFlowLogTrafficAnalyticsArgsDict(TypedDict):
        enabled: pulumi.Input[bool]
        """
        Boolean flag to enable/disable traffic analytics.
        """
        workspace_id: pulumi.Input[str]
        """
        The resource GUID of the attached workspace.
        """
        workspace_region: pulumi.Input[str]
        """
        The location of the attached workspace.
        """
        workspace_resource_id: pulumi.Input[str]
        """
        The resource ID of the attached workspace.
        """
        interval_in_minutes: NotRequired[pulumi.Input[int]]
        """
        How frequently service should do flow analytics in minutes. Defaults to `60`.
        """
elif False:
    NetworkWatcherFlowLogTrafficAnalyticsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class NetworkWatcherFlowLogTrafficAnalyticsArgs:
    def __init__(__self__, *,
                 enabled: pulumi.Input[bool],
                 workspace_id: pulumi.Input[str],
                 workspace_region: pulumi.Input[str],
                 workspace_resource_id: pulumi.Input[str],
                 interval_in_minutes: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[bool] enabled: Boolean flag to enable/disable traffic analytics.
        :param pulumi.Input[str] workspace_id: The resource GUID of the attached workspace.
        :param pulumi.Input[str] workspace_region: The location of the attached workspace.
        :param pulumi.Input[str] workspace_resource_id: The resource ID of the attached workspace.
        :param pulumi.Input[int] interval_in_minutes: How frequently service should do flow analytics in minutes. Defaults to `60`.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "workspace_id", workspace_id)
        pulumi.set(__self__, "workspace_region", workspace_region)
        pulumi.set(__self__, "workspace_resource_id", workspace_resource_id)
        if interval_in_minutes is not None:
            pulumi.set(__self__, "interval_in_minutes", interval_in_minutes)

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        Boolean flag to enable/disable traffic analytics.
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="workspaceId")
    def workspace_id(self) -> pulumi.Input[str]:
        """
        The resource GUID of the attached workspace.
        """
        return pulumi.get(self, "workspace_id")

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

    @property
    @pulumi.getter(name="workspaceRegion")
    def workspace_region(self) -> pulumi.Input[str]:
        """
        The location of the attached workspace.
        """
        return pulumi.get(self, "workspace_region")

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

    @property
    @pulumi.getter(name="workspaceResourceId")
    def workspace_resource_id(self) -> pulumi.Input[str]:
        """
        The resource ID of the attached workspace.
        """
        return pulumi.get(self, "workspace_resource_id")

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

    @property
    @pulumi.getter(name="intervalInMinutes")
    def interval_in_minutes(self) -> Optional[pulumi.Input[int]]:
        """
        How frequently service should do flow analytics in minutes. Defaults to `60`.
        """
        return pulumi.get(self, "interval_in_minutes")

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


if not MYPY:
    class PointToPointVpnGatewayConnectionConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The Name which should be used for this Connection Configuration.
        """
        vpn_client_address_pool: pulumi.Input['PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgsDict']
        """
        A `vpn_client_address_pool` block as defined below.
        """
        internet_security_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should Internet Security be enabled to secure internet traffic? Changing this forces a new resource to be created. Defaults to `false`.
        """
        route: NotRequired[pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRouteArgsDict']]
        """
        A `route` block as defined below.
        """
elif False:
    PointToPointVpnGatewayConnectionConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class PointToPointVpnGatewayConnectionConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 vpn_client_address_pool: pulumi.Input['PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs'],
                 internet_security_enabled: Optional[pulumi.Input[bool]] = None,
                 route: Optional[pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRouteArgs']] = None):
        """
        :param pulumi.Input[str] name: The Name which should be used for this Connection Configuration.
        :param pulumi.Input['PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs'] vpn_client_address_pool: A `vpn_client_address_pool` block as defined below.
        :param pulumi.Input[bool] internet_security_enabled: Should Internet Security be enabled to secure internet traffic? Changing this forces a new resource to be created. Defaults to `false`.
        :param pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRouteArgs'] route: A `route` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "vpn_client_address_pool", vpn_client_address_pool)
        if internet_security_enabled is not None:
            pulumi.set(__self__, "internet_security_enabled", internet_security_enabled)
        if route is not None:
            pulumi.set(__self__, "route", route)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The Name which should be used for this Connection Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="vpnClientAddressPool")
    def vpn_client_address_pool(self) -> pulumi.Input['PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs']:
        """
        A `vpn_client_address_pool` block as defined below.
        """
        return pulumi.get(self, "vpn_client_address_pool")

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

    @property
    @pulumi.getter(name="internetSecurityEnabled")
    def internet_security_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should Internet Security be enabled to secure internet traffic? Changing this forces a new resource to be created. Defaults to `false`.
        """
        return pulumi.get(self, "internet_security_enabled")

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

    @property
    @pulumi.getter
    def route(self) -> Optional[pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRouteArgs']]:
        """
        A `route` block as defined below.
        """
        return pulumi.get(self, "route")

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


if not MYPY:
    class PointToPointVpnGatewayConnectionConfigurationRouteArgsDict(TypedDict):
        associated_route_table_id: pulumi.Input[str]
        """
        The Virtual Hub Route Table resource id associated with this Routing Configuration.
        """
        inbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        """
        outbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        """
        propagated_route_table: NotRequired[pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgsDict']]
        """
        A `propagated_route_table` block as defined below.
        """
elif False:
    PointToPointVpnGatewayConnectionConfigurationRouteArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class PointToPointVpnGatewayConnectionConfigurationRouteArgs:
    def __init__(__self__, *,
                 associated_route_table_id: pulumi.Input[str],
                 inbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 outbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 propagated_route_table: Optional[pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs']] = None):
        """
        :param pulumi.Input[str] associated_route_table_id: The Virtual Hub Route Table resource id associated with this Routing Configuration.
        :param pulumi.Input[str] inbound_route_map_id: The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        :param pulumi.Input[str] outbound_route_map_id: The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        :param pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs'] propagated_route_table: A `propagated_route_table` block as defined below.
        """
        pulumi.set(__self__, "associated_route_table_id", associated_route_table_id)
        if inbound_route_map_id is not None:
            pulumi.set(__self__, "inbound_route_map_id", inbound_route_map_id)
        if outbound_route_map_id is not None:
            pulumi.set(__self__, "outbound_route_map_id", outbound_route_map_id)
        if propagated_route_table is not None:
            pulumi.set(__self__, "propagated_route_table", propagated_route_table)

    @property
    @pulumi.getter(name="associatedRouteTableId")
    def associated_route_table_id(self) -> pulumi.Input[str]:
        """
        The Virtual Hub Route Table resource id associated with this Routing Configuration.
        """
        return pulumi.get(self, "associated_route_table_id")

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

    @property
    @pulumi.getter(name="inboundRouteMapId")
    def inbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        """
        return pulumi.get(self, "inbound_route_map_id")

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

    @property
    @pulumi.getter(name="outboundRouteMapId")
    def outbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        """
        return pulumi.get(self, "outbound_route_map_id")

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

    @property
    @pulumi.getter(name="propagatedRouteTable")
    def propagated_route_table(self) -> Optional[pulumi.Input['PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs']]:
        """
        A `propagated_route_table` block as defined below.
        """
        return pulumi.get(self, "propagated_route_table")

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


if not MYPY:
    class PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgsDict(TypedDict):
        ids: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The list of Virtual Hub Route Table resource id which the routes will be propagated to.
        """
        labels: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of labels to logically group Virtual Hub Route Tables which the routes will be propagated to.
        """
elif False:
    PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs:
    def __init__(__self__, *,
                 ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 labels: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ids: The list of Virtual Hub Route Table resource id which the routes will be propagated to.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] labels: The list of labels to logically group Virtual Hub Route Tables which the routes will be propagated to.
        """
        pulumi.set(__self__, "ids", ids)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)

    @property
    @pulumi.getter
    def ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The list of Virtual Hub Route Table resource id which the routes will be propagated to.
        """
        return pulumi.get(self, "ids")

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

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of labels to logically group Virtual Hub Route Tables which the routes will be propagated to.
        """
        return pulumi.get(self, "labels")

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


if not MYPY:
    class PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgsDict(TypedDict):
        address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of CIDR Ranges which should be used as Address Prefixes.
        """
elif False:
    PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs:
    def __init__(__self__, *,
                 address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_prefixes: A list of CIDR Ranges which should be used as Address Prefixes.
        """
        pulumi.set(__self__, "address_prefixes", address_prefixes)

    @property
    @pulumi.getter(name="addressPrefixes")
    def address_prefixes(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of CIDR Ranges which should be used as Address Prefixes.
        """
        return pulumi.get(self, "address_prefixes")

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


if not MYPY:
    class ProfileContainerNetworkInterfaceArgsDict(TypedDict):
        ip_configurations: pulumi.Input[Sequence[pulumi.Input['ProfileContainerNetworkInterfaceIpConfigurationArgsDict']]]
        """
        One or more `ip_configuration` blocks as documented below.
        """
        name: pulumi.Input[str]
        """
        Specifies the name of the IP Configuration.
        """
elif False:
    ProfileContainerNetworkInterfaceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ProfileContainerNetworkInterfaceArgs:
    def __init__(__self__, *,
                 ip_configurations: pulumi.Input[Sequence[pulumi.Input['ProfileContainerNetworkInterfaceIpConfigurationArgs']]],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input['ProfileContainerNetworkInterfaceIpConfigurationArgs']]] ip_configurations: One or more `ip_configuration` blocks as documented below.
        :param pulumi.Input[str] name: Specifies the name of the IP Configuration.
        """
        pulumi.set(__self__, "ip_configurations", ip_configurations)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="ipConfigurations")
    def ip_configurations(self) -> pulumi.Input[Sequence[pulumi.Input['ProfileContainerNetworkInterfaceIpConfigurationArgs']]]:
        """
        One or more `ip_configuration` blocks as documented below.
        """
        return pulumi.get(self, "ip_configurations")

    @ip_configurations.setter
    def ip_configurations(self, value: pulumi.Input[Sequence[pulumi.Input['ProfileContainerNetworkInterfaceIpConfigurationArgs']]]):
        pulumi.set(self, "ip_configurations", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the IP Configuration.
        """
        return pulumi.get(self, "name")

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


if not MYPY:
    class ProfileContainerNetworkInterfaceIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name of the IP Configuration.
        """
        subnet_id: pulumi.Input[str]
        """
        Reference to the subnet associated with the IP Configuration.
        """
elif False:
    ProfileContainerNetworkInterfaceIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class ProfileContainerNetworkInterfaceIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 subnet_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Specifies the name of the IP Configuration.
        :param pulumi.Input[str] subnet_id: Reference to the subnet associated with the IP Configuration.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the IP Configuration.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[str]:
        """
        Reference to the subnet associated with the IP Configuration.
        """
        return pulumi.get(self, "subnet_id")

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


if not MYPY:
    class RouteFilterRuleArgsDict(TypedDict):
        access: pulumi.Input[str]
        """
        The access type of the rule. The only possible value is `Allow`.
        """
        communities: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
        """
        name: pulumi.Input[str]
        """
        The name of the route filter rule.
        """
        rule_type: pulumi.Input[str]
        """
        The rule type of the rule. The only possible value is `Community`.
        """
elif False:
    RouteFilterRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RouteFilterRuleArgs:
    def __init__(__self__, *,
                 access: pulumi.Input[str],
                 communities: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 rule_type: pulumi.Input[str]):
        """
        :param pulumi.Input[str] access: The access type of the rule. The only possible value is `Allow`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] communities: The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
        :param pulumi.Input[str] name: The name of the route filter rule.
        :param pulumi.Input[str] rule_type: The rule type of the rule. The only possible value is `Community`.
        """
        pulumi.set(__self__, "access", access)
        pulumi.set(__self__, "communities", communities)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "rule_type", rule_type)

    @property
    @pulumi.getter
    def access(self) -> pulumi.Input[str]:
        """
        The access type of the rule. The only possible value is `Allow`.
        """
        return pulumi.get(self, "access")

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

    @property
    @pulumi.getter
    def communities(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
        """
        return pulumi.get(self, "communities")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the route filter rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="ruleType")
    def rule_type(self) -> pulumi.Input[str]:
        """
        The rule type of the rule. The only possible value is `Community`.
        """
        return pulumi.get(self, "rule_type")

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


if not MYPY:
    class RouteMapRuleArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The unique name for the rule.
        """
        actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionArgsDict']]]]
        """
        An `action` block as defined below.
        """
        match_criterions: NotRequired[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleMatchCriterionArgsDict']]]]
        """
        A `match_criterion` block as defined below.
        """
        next_step_if_matched: NotRequired[pulumi.Input[str]]
        """
        The next step after the rule is evaluated. Possible values are `Continue`, `Terminate` and `Unknown`. Defaults to `Unknown`.
        """
elif False:
    RouteMapRuleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RouteMapRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 actions: Optional[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionArgs']]]] = None,
                 match_criterions: Optional[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleMatchCriterionArgs']]]] = None,
                 next_step_if_matched: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The unique name for the rule.
        :param pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionArgs']]] actions: An `action` block as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['RouteMapRuleMatchCriterionArgs']]] match_criterions: A `match_criterion` block as defined below.
        :param pulumi.Input[str] next_step_if_matched: The next step after the rule is evaluated. Possible values are `Continue`, `Terminate` and `Unknown`. Defaults to `Unknown`.
        """
        pulumi.set(__self__, "name", name)
        if actions is not None:
            pulumi.set(__self__, "actions", actions)
        if match_criterions is not None:
            pulumi.set(__self__, "match_criterions", match_criterions)
        if next_step_if_matched is not None:
            pulumi.set(__self__, "next_step_if_matched", next_step_if_matched)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The unique name for the rule.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionArgs']]]]:
        """
        An `action` block as defined below.
        """
        return pulumi.get(self, "actions")

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

    @property
    @pulumi.getter(name="matchCriterions")
    def match_criterions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleMatchCriterionArgs']]]]:
        """
        A `match_criterion` block as defined below.
        """
        return pulumi.get(self, "match_criterions")

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

    @property
    @pulumi.getter(name="nextStepIfMatched")
    def next_step_if_matched(self) -> Optional[pulumi.Input[str]]:
        """
        The next step after the rule is evaluated. Possible values are `Continue`, `Terminate` and `Unknown`. Defaults to `Unknown`.
        """
        return pulumi.get(self, "next_step_if_matched")

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


if not MYPY:
    class RouteMapRuleActionArgsDict(TypedDict):
        type: pulumi.Input[str]
        """
        The type of the action to be taken. Possible values are `Add`, `Drop`, `Remove`, `Replace` and `Unknown`.
        """
        parameters: NotRequired[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionParameterArgsDict']]]]
        """
        A `parameter` block as defined below. Required if `type` is anything other than `Drop`.
        """
elif False:
    RouteMapRuleActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RouteMapRuleActionArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionParameterArgs']]]] = None):
        """
        :param pulumi.Input[str] type: The type of the action to be taken. Possible values are `Add`, `Drop`, `Remove`, `Replace` and `Unknown`.
        :param pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionParameterArgs']]] parameters: A `parameter` block as defined below. Required if `type` is anything other than `Drop`.
        """
        pulumi.set(__self__, "type", type)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of the action to be taken. Possible values are `Add`, `Drop`, `Remove`, `Replace` and `Unknown`.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RouteMapRuleActionParameterArgs']]]]:
        """
        A `parameter` block as defined below. Required if `type` is anything other than `Drop`.
        """
        return pulumi.get(self, "parameters")

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


if not MYPY:
    class RouteMapRuleActionParameterArgsDict(TypedDict):
        as_paths: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of AS paths.
        """
        communities: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of BGP communities.
        """
        route_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of route prefixes.
        """
elif False:
    RouteMapRuleActionParameterArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RouteMapRuleActionParameterArgs:
    def __init__(__self__, *,
                 as_paths: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 communities: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 route_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] as_paths: A list of AS paths.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] communities: A list of BGP communities.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] route_prefixes: A list of route prefixes.
        """
        if as_paths is not None:
            pulumi.set(__self__, "as_paths", as_paths)
        if communities is not None:
            pulumi.set(__self__, "communities", communities)
        if route_prefixes is not None:
            pulumi.set(__self__, "route_prefixes", route_prefixes)

    @property
    @pulumi.getter(name="asPaths")
    def as_paths(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of AS paths.
        """
        return pulumi.get(self, "as_paths")

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

    @property
    @pulumi.getter
    def communities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of BGP communities.
        """
        return pulumi.get(self, "communities")

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

    @property
    @pulumi.getter(name="routePrefixes")
    def route_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of route prefixes.
        """
        return pulumi.get(self, "route_prefixes")

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


if not MYPY:
    class RouteMapRuleMatchCriterionArgsDict(TypedDict):
        match_condition: pulumi.Input[str]
        """
        The match condition to apply the rule of the Route Map. Possible values are `Contains`, `Equals`, `NotContains`, `NotEquals` and `Unknown`.
        """
        as_paths: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of AS paths which this criterion matches.
        """
        communities: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of BGP communities which this criterion matches.
        """
        route_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of route prefixes which this criterion matches.
        """
elif False:
    RouteMapRuleMatchCriterionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RouteMapRuleMatchCriterionArgs:
    def __init__(__self__, *,
                 match_condition: pulumi.Input[str],
                 as_paths: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 communities: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 route_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] match_condition: The match condition to apply the rule of the Route Map. Possible values are `Contains`, `Equals`, `NotContains`, `NotEquals` and `Unknown`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] as_paths: A list of AS paths which this criterion matches.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] communities: A list of BGP communities which this criterion matches.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] route_prefixes: A list of route prefixes which this criterion matches.
        """
        pulumi.set(__self__, "match_condition", match_condition)
        if as_paths is not None:
            pulumi.set(__self__, "as_paths", as_paths)
        if communities is not None:
            pulumi.set(__self__, "communities", communities)
        if route_prefixes is not None:
            pulumi.set(__self__, "route_prefixes", route_prefixes)

    @property
    @pulumi.getter(name="matchCondition")
    def match_condition(self) -> pulumi.Input[str]:
        """
        The match condition to apply the rule of the Route Map. Possible values are `Contains`, `Equals`, `NotContains`, `NotEquals` and `Unknown`.
        """
        return pulumi.get(self, "match_condition")

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

    @property
    @pulumi.getter(name="asPaths")
    def as_paths(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of AS paths which this criterion matches.
        """
        return pulumi.get(self, "as_paths")

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

    @property
    @pulumi.getter
    def communities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of BGP communities which this criterion matches.
        """
        return pulumi.get(self, "communities")

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

    @property
    @pulumi.getter(name="routePrefixes")
    def route_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of route prefixes which this criterion matches.
        """
        return pulumi.get(self, "route_prefixes")

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


if not MYPY:
    class RouteTableRouteArgsDict(TypedDict):
        address_prefix: pulumi.Input[str]
        """
        The destination to which the route applies. Can be CIDR (such as `10.1.0.0/16`) or [Azure Service Tag](https://docs.microsoft.com/azure/virtual-network/service-tags-overview) (such as `ApiManagement`, `AzureBackup` or `AzureMonitor`) format.
        """
        name: pulumi.Input[str]
        """
        The name of the route.
        """
        next_hop_type: pulumi.Input[str]
        """
        The type of Azure hop the packet should be sent to. Possible values are `VirtualNetworkGateway`, `VnetLocal`, `Internet`, `VirtualAppliance` and `None`.
        """
        next_hop_in_ip_address: NotRequired[pulumi.Input[str]]
        """
        Contains the IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is `VirtualAppliance`.
        """
elif False:
    RouteTableRouteArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RouteTableRouteArgs:
    def __init__(__self__, *,
                 address_prefix: pulumi.Input[str],
                 name: pulumi.Input[str],
                 next_hop_type: pulumi.Input[str],
                 next_hop_in_ip_address: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address_prefix: The destination to which the route applies. Can be CIDR (such as `10.1.0.0/16`) or [Azure Service Tag](https://docs.microsoft.com/azure/virtual-network/service-tags-overview) (such as `ApiManagement`, `AzureBackup` or `AzureMonitor`) format.
        :param pulumi.Input[str] name: The name of the route.
        :param pulumi.Input[str] next_hop_type: The type of Azure hop the packet should be sent to. Possible values are `VirtualNetworkGateway`, `VnetLocal`, `Internet`, `VirtualAppliance` and `None`.
        :param pulumi.Input[str] next_hop_in_ip_address: Contains the IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is `VirtualAppliance`.
        """
        pulumi.set(__self__, "address_prefix", address_prefix)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "next_hop_type", next_hop_type)
        if next_hop_in_ip_address is not None:
            pulumi.set(__self__, "next_hop_in_ip_address", next_hop_in_ip_address)

    @property
    @pulumi.getter(name="addressPrefix")
    def address_prefix(self) -> pulumi.Input[str]:
        """
        The destination to which the route applies. Can be CIDR (such as `10.1.0.0/16`) or [Azure Service Tag](https://docs.microsoft.com/azure/virtual-network/service-tags-overview) (such as `ApiManagement`, `AzureBackup` or `AzureMonitor`) format.
        """
        return pulumi.get(self, "address_prefix")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the route.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="nextHopType")
    def next_hop_type(self) -> pulumi.Input[str]:
        """
        The type of Azure hop the packet should be sent to. Possible values are `VirtualNetworkGateway`, `VnetLocal`, `Internet`, `VirtualAppliance` and `None`.
        """
        return pulumi.get(self, "next_hop_type")

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

    @property
    @pulumi.getter(name="nextHopInIpAddress")
    def next_hop_in_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        Contains the IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is `VirtualAppliance`.
        """
        return pulumi.get(self, "next_hop_in_ip_address")

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


if not MYPY:
    class RoutingIntentRoutingPolicyArgsDict(TypedDict):
        destinations: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of destinations which this routing policy is applicable to. Possible values are `Internet` and `PrivateTraffic`.
        """
        name: pulumi.Input[str]
        """
        The unique name for the routing policy.
        """
        next_hop: pulumi.Input[str]
        """
        The resource ID of the next hop on which this routing policy is applicable to.
        """
elif False:
    RoutingIntentRoutingPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class RoutingIntentRoutingPolicyArgs:
    def __init__(__self__, *,
                 destinations: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 next_hop: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destinations: A list of destinations which this routing policy is applicable to. Possible values are `Internet` and `PrivateTraffic`.
        :param pulumi.Input[str] name: The unique name for the routing policy.
        :param pulumi.Input[str] next_hop: The resource ID of the next hop on which this routing policy is applicable to.
        """
        pulumi.set(__self__, "destinations", destinations)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "next_hop", next_hop)

    @property
    @pulumi.getter
    def destinations(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of destinations which this routing policy is applicable to. Possible values are `Internet` and `PrivateTraffic`.
        """
        return pulumi.get(self, "destinations")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The unique name for the routing policy.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="nextHop")
    def next_hop(self) -> pulumi.Input[str]:
        """
        The resource ID of the next hop on which this routing policy is applicable to.
        """
        return pulumi.get(self, "next_hop")

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


if not MYPY:
    class SubnetDelegationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name for this delegation.
        """
        service_delegation: pulumi.Input['SubnetDelegationServiceDelegationArgsDict']
        """
        A `service_delegation` block as defined below.
        """
elif False:
    SubnetDelegationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SubnetDelegationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 service_delegation: pulumi.Input['SubnetDelegationServiceDelegationArgs']):
        """
        :param pulumi.Input[str] name: A name for this delegation.
        :param pulumi.Input['SubnetDelegationServiceDelegationArgs'] service_delegation: A `service_delegation` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "service_delegation", service_delegation)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name for this delegation.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="serviceDelegation")
    def service_delegation(self) -> pulumi.Input['SubnetDelegationServiceDelegationArgs']:
        """
        A `service_delegation` block as defined below.
        """
        return pulumi.get(self, "service_delegation")

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


if not MYPY:
    class SubnetDelegationServiceDelegationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of service to delegate to. Possible values are `GitHub.Network/networkSettings`, `Informatica.DataManagement/organizations`, `Microsoft.ApiManagement/service`, `Microsoft.Apollo/npu`, `Microsoft.App/environments`, `Microsoft.App/testClients`, `Microsoft.AVS/PrivateClouds`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureHostedService`, `Microsoft.BareMetal/AzureHPC`, `Microsoft.BareMetal/AzurePaymentHSM`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.BareMetal/MonitoringServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.CloudTest/hostedpools`, `Microsoft.CloudTest/images`, `Microsoft.CloudTest/pools`, `Microsoft.Codespaces/plans`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.ContainerService/managedClusters`, `Microsoft.ContainerService/TestClients`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/servers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.DelegatedNetwork/controller`, `Microsoft.DevCenter/networkConnection`, `Microsoft.DevOpsInfrastructure/pools`, `Microsoft.DocumentDB/cassandraClusters`, `Microsoft.Fidalgo/networkSettings`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.LabServices/labplans`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`, `Microsoft.Netapp/volumes`, `Microsoft.Network/dnsResolvers`, `Microsoft.Network/managedResolvers`, `Microsoft.Network/fpgaNetworkInterfaces`, `Microsoft.Network/networkWatchers.`, `Microsoft.Network/virtualNetworkGateways`, `Microsoft.Orbital/orbitalGateways`, `Microsoft.PowerPlatform/enterprisePolicies`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.ServiceNetworking/trafficControllers`, `Microsoft.Singularity/accounts/networks`, `Microsoft.Singularity/accounts/npu`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/managedInstancesOnebox`, `Microsoft.Sql/managedInstancesStage`, `Microsoft.Sql/managedInstancesTest`, `Microsoft.Sql/servers`, `Microsoft.StoragePool/diskPools`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, `Microsoft.Web/serverFarms`, `NGINX.NGINXPLUS/nginxDeployments`, `PaloAltoNetworks.Cloudngfw/firewalls`, `Qumulo.Storage/fileSystems`, and `Oracle.Database/networkAttachments`.
        """
        actions: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Actions which should be delegated. This list is specific to the service to delegate to. Possible values are `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/publicIPAddresses/read`, `Microsoft.Network/virtualNetworks/read`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action`, and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.

        > **NOTE:** Azure may add default actions depending on the service delegation name and they can't be changed.
        """
elif False:
    SubnetDelegationServiceDelegationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SubnetDelegationServiceDelegationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 actions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: The name of service to delegate to. Possible values are `GitHub.Network/networkSettings`, `Informatica.DataManagement/organizations`, `Microsoft.ApiManagement/service`, `Microsoft.Apollo/npu`, `Microsoft.App/environments`, `Microsoft.App/testClients`, `Microsoft.AVS/PrivateClouds`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureHostedService`, `Microsoft.BareMetal/AzureHPC`, `Microsoft.BareMetal/AzurePaymentHSM`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.BareMetal/MonitoringServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.CloudTest/hostedpools`, `Microsoft.CloudTest/images`, `Microsoft.CloudTest/pools`, `Microsoft.Codespaces/plans`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.ContainerService/managedClusters`, `Microsoft.ContainerService/TestClients`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/servers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.DelegatedNetwork/controller`, `Microsoft.DevCenter/networkConnection`, `Microsoft.DevOpsInfrastructure/pools`, `Microsoft.DocumentDB/cassandraClusters`, `Microsoft.Fidalgo/networkSettings`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.LabServices/labplans`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`, `Microsoft.Netapp/volumes`, `Microsoft.Network/dnsResolvers`, `Microsoft.Network/managedResolvers`, `Microsoft.Network/fpgaNetworkInterfaces`, `Microsoft.Network/networkWatchers.`, `Microsoft.Network/virtualNetworkGateways`, `Microsoft.Orbital/orbitalGateways`, `Microsoft.PowerPlatform/enterprisePolicies`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.ServiceNetworking/trafficControllers`, `Microsoft.Singularity/accounts/networks`, `Microsoft.Singularity/accounts/npu`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/managedInstancesOnebox`, `Microsoft.Sql/managedInstancesStage`, `Microsoft.Sql/managedInstancesTest`, `Microsoft.Sql/servers`, `Microsoft.StoragePool/diskPools`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, `Microsoft.Web/serverFarms`, `NGINX.NGINXPLUS/nginxDeployments`, `PaloAltoNetworks.Cloudngfw/firewalls`, `Qumulo.Storage/fileSystems`, and `Oracle.Database/networkAttachments`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] actions: A list of Actions which should be delegated. This list is specific to the service to delegate to. Possible values are `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/publicIPAddresses/read`, `Microsoft.Network/virtualNetworks/read`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action`, and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.
               
               > **NOTE:** Azure may add default actions depending on the service delegation name and they can't be changed.
        """
        pulumi.set(__self__, "name", name)
        if actions is not None:
            pulumi.set(__self__, "actions", actions)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of service to delegate to. Possible values are `GitHub.Network/networkSettings`, `Informatica.DataManagement/organizations`, `Microsoft.ApiManagement/service`, `Microsoft.Apollo/npu`, `Microsoft.App/environments`, `Microsoft.App/testClients`, `Microsoft.AVS/PrivateClouds`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureHostedService`, `Microsoft.BareMetal/AzureHPC`, `Microsoft.BareMetal/AzurePaymentHSM`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.BareMetal/MonitoringServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.CloudTest/hostedpools`, `Microsoft.CloudTest/images`, `Microsoft.CloudTest/pools`, `Microsoft.Codespaces/plans`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.ContainerService/managedClusters`, `Microsoft.ContainerService/TestClients`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/servers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.DelegatedNetwork/controller`, `Microsoft.DevCenter/networkConnection`, `Microsoft.DevOpsInfrastructure/pools`, `Microsoft.DocumentDB/cassandraClusters`, `Microsoft.Fidalgo/networkSettings`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.LabServices/labplans`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`, `Microsoft.Netapp/volumes`, `Microsoft.Network/dnsResolvers`, `Microsoft.Network/managedResolvers`, `Microsoft.Network/fpgaNetworkInterfaces`, `Microsoft.Network/networkWatchers.`, `Microsoft.Network/virtualNetworkGateways`, `Microsoft.Orbital/orbitalGateways`, `Microsoft.PowerPlatform/enterprisePolicies`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.ServiceNetworking/trafficControllers`, `Microsoft.Singularity/accounts/networks`, `Microsoft.Singularity/accounts/npu`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/managedInstancesOnebox`, `Microsoft.Sql/managedInstancesStage`, `Microsoft.Sql/managedInstancesTest`, `Microsoft.Sql/servers`, `Microsoft.StoragePool/diskPools`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, `Microsoft.Web/serverFarms`, `NGINX.NGINXPLUS/nginxDeployments`, `PaloAltoNetworks.Cloudngfw/firewalls`, `Qumulo.Storage/fileSystems`, and `Oracle.Database/networkAttachments`.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Actions which should be delegated. This list is specific to the service to delegate to. Possible values are `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/publicIPAddresses/read`, `Microsoft.Network/virtualNetworks/read`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action`, and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.

        > **NOTE:** Azure may add default actions depending on the service delegation name and they can't be changed.
        """
        return pulumi.get(self, "actions")

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


if not MYPY:
    class SubnetServiceEndpointStoragePolicyDefinitionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name which should be used for this Subnet Service Endpoint Storage Policy Definition.
        """
        service_resources: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        Specifies a list of resources or aliases that this Subnet Service Endpoint Storage Policy Definition applies to.

        > **NOTE** The `service_resources` property must contain either Aliases or Resource IDs, but not both.
        """
        description: NotRequired[pulumi.Input[str]]
        """
        The description of this Subnet Service Endpoint Storage Policy Definition.
        """
        service: NotRequired[pulumi.Input[str]]
        """
        The type of service resources. Valid values are `Microsoft.Storage` or `Global`. When the `service_resources` property contains resource IDs, this property must be `Microsoft.Storage`. When the `service_resources` property contains Aliases, this property must be `Global`. Defaults to `Microsoft.Storage`.
        """
elif False:
    SubnetServiceEndpointStoragePolicyDefinitionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SubnetServiceEndpointStoragePolicyDefinitionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 service_resources: pulumi.Input[Sequence[pulumi.Input[str]]],
                 description: Optional[pulumi.Input[str]] = None,
                 service: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this Subnet Service Endpoint Storage Policy Definition.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] service_resources: Specifies a list of resources or aliases that this Subnet Service Endpoint Storage Policy Definition applies to.
               
               > **NOTE** The `service_resources` property must contain either Aliases or Resource IDs, but not both.
        :param pulumi.Input[str] description: The description of this Subnet Service Endpoint Storage Policy Definition.
        :param pulumi.Input[str] service: The type of service resources. Valid values are `Microsoft.Storage` or `Global`. When the `service_resources` property contains resource IDs, this property must be `Microsoft.Storage`. When the `service_resources` property contains Aliases, this property must be `Global`. Defaults to `Microsoft.Storage`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "service_resources", service_resources)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if service is not None:
            pulumi.set(__self__, "service", service)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this Subnet Service Endpoint Storage Policy Definition.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="serviceResources")
    def service_resources(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        Specifies a list of resources or aliases that this Subnet Service Endpoint Storage Policy Definition applies to.

        > **NOTE** The `service_resources` property must contain either Aliases or Resource IDs, but not both.
        """
        return pulumi.get(self, "service_resources")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        The description of this Subnet Service Endpoint Storage Policy Definition.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def service(self) -> Optional[pulumi.Input[str]]:
        """
        The type of service resources. Valid values are `Microsoft.Storage` or `Global`. When the `service_resources` property contains resource IDs, this property must be `Microsoft.Storage`. When the `service_resources` property contains Aliases, this property must be `Global`. Defaults to `Microsoft.Storage`.
        """
        return pulumi.get(self, "service")

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


if not MYPY:
    class TrafficManagerAzureEndpointCustomHeaderArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the custom header.
        """
        value: pulumi.Input[str]
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
elif False:
    TrafficManagerAzureEndpointCustomHeaderArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerAzureEndpointCustomHeaderArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the custom header.
        :param pulumi.Input[str] value: The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the custom header.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class TrafficManagerAzureEndpointSubnetArgsDict(TypedDict):
        first: pulumi.Input[str]
        """
        The first IP Address in this subnet.
        """
        last: NotRequired[pulumi.Input[str]]
        """
        The last IP Address in this subnet.
        """
        scope: NotRequired[pulumi.Input[int]]
        """
        The block size (number of leading bits in the subnet mask).
        """
elif False:
    TrafficManagerAzureEndpointSubnetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerAzureEndpointSubnetArgs:
    def __init__(__self__, *,
                 first: pulumi.Input[str],
                 last: Optional[pulumi.Input[str]] = None,
                 scope: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] first: The first IP Address in this subnet.
        :param pulumi.Input[str] last: The last IP Address in this subnet.
        :param pulumi.Input[int] scope: The block size (number of leading bits in the subnet mask).
        """
        pulumi.set(__self__, "first", first)
        if last is not None:
            pulumi.set(__self__, "last", last)
        if scope is not None:
            pulumi.set(__self__, "scope", scope)

    @property
    @pulumi.getter
    def first(self) -> pulumi.Input[str]:
        """
        The first IP Address in this subnet.
        """
        return pulumi.get(self, "first")

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

    @property
    @pulumi.getter
    def last(self) -> Optional[pulumi.Input[str]]:
        """
        The last IP Address in this subnet.
        """
        return pulumi.get(self, "last")

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

    @property
    @pulumi.getter
    def scope(self) -> Optional[pulumi.Input[int]]:
        """
        The block size (number of leading bits in the subnet mask).
        """
        return pulumi.get(self, "scope")

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


if not MYPY:
    class TrafficManagerExternalEndpointCustomHeaderArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the custom header.
        """
        value: pulumi.Input[str]
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
elif False:
    TrafficManagerExternalEndpointCustomHeaderArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerExternalEndpointCustomHeaderArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the custom header.
        :param pulumi.Input[str] value: The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the custom header.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class TrafficManagerExternalEndpointSubnetArgsDict(TypedDict):
        first: pulumi.Input[str]
        """
        The first IP Address in this subnet.
        """
        last: NotRequired[pulumi.Input[str]]
        """
        The last IP Address in this subnet.
        """
        scope: NotRequired[pulumi.Input[int]]
        """
        The block size (number of leading bits in the subnet mask).
        """
elif False:
    TrafficManagerExternalEndpointSubnetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerExternalEndpointSubnetArgs:
    def __init__(__self__, *,
                 first: pulumi.Input[str],
                 last: Optional[pulumi.Input[str]] = None,
                 scope: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] first: The first IP Address in this subnet.
        :param pulumi.Input[str] last: The last IP Address in this subnet.
        :param pulumi.Input[int] scope: The block size (number of leading bits in the subnet mask).
        """
        pulumi.set(__self__, "first", first)
        if last is not None:
            pulumi.set(__self__, "last", last)
        if scope is not None:
            pulumi.set(__self__, "scope", scope)

    @property
    @pulumi.getter
    def first(self) -> pulumi.Input[str]:
        """
        The first IP Address in this subnet.
        """
        return pulumi.get(self, "first")

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

    @property
    @pulumi.getter
    def last(self) -> Optional[pulumi.Input[str]]:
        """
        The last IP Address in this subnet.
        """
        return pulumi.get(self, "last")

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

    @property
    @pulumi.getter
    def scope(self) -> Optional[pulumi.Input[int]]:
        """
        The block size (number of leading bits in the subnet mask).
        """
        return pulumi.get(self, "scope")

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


if not MYPY:
    class TrafficManagerNestedEndpointCustomHeaderArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the custom header.
        """
        value: pulumi.Input[str]
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
elif False:
    TrafficManagerNestedEndpointCustomHeaderArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerNestedEndpointCustomHeaderArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the custom header.
        :param pulumi.Input[str] value: The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the custom header.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class TrafficManagerNestedEndpointSubnetArgsDict(TypedDict):
        first: pulumi.Input[str]
        """
        The first IP Address in this subnet.
        """
        last: NotRequired[pulumi.Input[str]]
        """
        The last IP Address in this subnet.
        """
        scope: NotRequired[pulumi.Input[int]]
        """
        The block size (number of leading bits in the subnet mask).
        """
elif False:
    TrafficManagerNestedEndpointSubnetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerNestedEndpointSubnetArgs:
    def __init__(__self__, *,
                 first: pulumi.Input[str],
                 last: Optional[pulumi.Input[str]] = None,
                 scope: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] first: The first IP Address in this subnet.
        :param pulumi.Input[str] last: The last IP Address in this subnet.
        :param pulumi.Input[int] scope: The block size (number of leading bits in the subnet mask).
        """
        pulumi.set(__self__, "first", first)
        if last is not None:
            pulumi.set(__self__, "last", last)
        if scope is not None:
            pulumi.set(__self__, "scope", scope)

    @property
    @pulumi.getter
    def first(self) -> pulumi.Input[str]:
        """
        The first IP Address in this subnet.
        """
        return pulumi.get(self, "first")

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

    @property
    @pulumi.getter
    def last(self) -> Optional[pulumi.Input[str]]:
        """
        The last IP Address in this subnet.
        """
        return pulumi.get(self, "last")

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

    @property
    @pulumi.getter
    def scope(self) -> Optional[pulumi.Input[int]]:
        """
        The block size (number of leading bits in the subnet mask).
        """
        return pulumi.get(self, "scope")

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


if not MYPY:
    class TrafficManagerProfileDnsConfigArgsDict(TypedDict):
        relative_name: pulumi.Input[str]
        """
        The relative domain name, this is combined with the domain name used by Traffic Manager to form the FQDN which is exported as documented below. Changing this forces a new resource to be created.
        """
        ttl: pulumi.Input[int]
        """
        The TTL value of the Profile used by Local DNS resolvers and clients.
        """
elif False:
    TrafficManagerProfileDnsConfigArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerProfileDnsConfigArgs:
    def __init__(__self__, *,
                 relative_name: pulumi.Input[str],
                 ttl: pulumi.Input[int]):
        """
        :param pulumi.Input[str] relative_name: The relative domain name, this is combined with the domain name used by Traffic Manager to form the FQDN which is exported as documented below. Changing this forces a new resource to be created.
        :param pulumi.Input[int] ttl: The TTL value of the Profile used by Local DNS resolvers and clients.
        """
        pulumi.set(__self__, "relative_name", relative_name)
        pulumi.set(__self__, "ttl", ttl)

    @property
    @pulumi.getter(name="relativeName")
    def relative_name(self) -> pulumi.Input[str]:
        """
        The relative domain name, this is combined with the domain name used by Traffic Manager to form the FQDN which is exported as documented below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "relative_name")

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

    @property
    @pulumi.getter
    def ttl(self) -> pulumi.Input[int]:
        """
        The TTL value of the Profile used by Local DNS resolvers and clients.
        """
        return pulumi.get(self, "ttl")

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


if not MYPY:
    class TrafficManagerProfileMonitorConfigArgsDict(TypedDict):
        port: pulumi.Input[int]
        """
        The port number used by the monitoring checks.
        """
        protocol: pulumi.Input[str]
        """
        The protocol used by the monitoring checks, supported values are `HTTP`, `HTTPS` and `TCP`.
        """
        custom_headers: NotRequired[pulumi.Input[Sequence[pulumi.Input['TrafficManagerProfileMonitorConfigCustomHeaderArgsDict']]]]
        """
        One or more `custom_header` blocks as defined below.
        """
        expected_status_code_ranges: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of status code ranges in the format of `100-101`.
        """
        interval_in_seconds: NotRequired[pulumi.Input[int]]
        """
        The interval used to check the endpoint health from a Traffic Manager probing agent. You can specify two values here: `30` (normal probing) and `10` (fast probing). The default value is `30`.
        """
        path: NotRequired[pulumi.Input[str]]
        """
        The path used by the monitoring checks. Required when `protocol` is set to `HTTP` or `HTTPS` - cannot be set when `protocol` is set to `TCP`.
        """
        timeout_in_seconds: NotRequired[pulumi.Input[int]]
        """
        The amount of time the Traffic Manager probing agent should wait before considering that check a failure when a health check probe is sent to the endpoint. If `interval_in_seconds` is set to `30`, then `timeout_in_seconds` can be between `5` and `10`. The default value is `10`. If `interval_in_seconds` is set to `10`, then valid values are between `5` and `9` and `timeout_in_seconds` is required.
        """
        tolerated_number_of_failures: NotRequired[pulumi.Input[int]]
        """
        The number of failures a Traffic Manager probing agent tolerates before marking that endpoint as unhealthy. Valid values are between `0` and `9`. The default value is `3`
        """
elif False:
    TrafficManagerProfileMonitorConfigArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerProfileMonitorConfigArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 protocol: pulumi.Input[str],
                 custom_headers: Optional[pulumi.Input[Sequence[pulumi.Input['TrafficManagerProfileMonitorConfigCustomHeaderArgs']]]] = None,
                 expected_status_code_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 interval_in_seconds: Optional[pulumi.Input[int]] = None,
                 path: Optional[pulumi.Input[str]] = None,
                 timeout_in_seconds: Optional[pulumi.Input[int]] = None,
                 tolerated_number_of_failures: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] port: The port number used by the monitoring checks.
        :param pulumi.Input[str] protocol: The protocol used by the monitoring checks, supported values are `HTTP`, `HTTPS` and `TCP`.
        :param pulumi.Input[Sequence[pulumi.Input['TrafficManagerProfileMonitorConfigCustomHeaderArgs']]] custom_headers: One or more `custom_header` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] expected_status_code_ranges: A list of status code ranges in the format of `100-101`.
        :param pulumi.Input[int] interval_in_seconds: The interval used to check the endpoint health from a Traffic Manager probing agent. You can specify two values here: `30` (normal probing) and `10` (fast probing). The default value is `30`.
        :param pulumi.Input[str] path: The path used by the monitoring checks. Required when `protocol` is set to `HTTP` or `HTTPS` - cannot be set when `protocol` is set to `TCP`.
        :param pulumi.Input[int] timeout_in_seconds: The amount of time the Traffic Manager probing agent should wait before considering that check a failure when a health check probe is sent to the endpoint. If `interval_in_seconds` is set to `30`, then `timeout_in_seconds` can be between `5` and `10`. The default value is `10`. If `interval_in_seconds` is set to `10`, then valid values are between `5` and `9` and `timeout_in_seconds` is required.
        :param pulumi.Input[int] tolerated_number_of_failures: The number of failures a Traffic Manager probing agent tolerates before marking that endpoint as unhealthy. Valid values are between `0` and `9`. The default value is `3`
        """
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "protocol", protocol)
        if custom_headers is not None:
            pulumi.set(__self__, "custom_headers", custom_headers)
        if expected_status_code_ranges is not None:
            pulumi.set(__self__, "expected_status_code_ranges", expected_status_code_ranges)
        if interval_in_seconds is not None:
            pulumi.set(__self__, "interval_in_seconds", interval_in_seconds)
        if path is not None:
            pulumi.set(__self__, "path", path)
        if timeout_in_seconds is not None:
            pulumi.set(__self__, "timeout_in_seconds", timeout_in_seconds)
        if tolerated_number_of_failures is not None:
            pulumi.set(__self__, "tolerated_number_of_failures", tolerated_number_of_failures)

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[int]:
        """
        The port number used by the monitoring checks.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The protocol used by the monitoring checks, supported values are `HTTP`, `HTTPS` and `TCP`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="customHeaders")
    def custom_headers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TrafficManagerProfileMonitorConfigCustomHeaderArgs']]]]:
        """
        One or more `custom_header` blocks as defined below.
        """
        return pulumi.get(self, "custom_headers")

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

    @property
    @pulumi.getter(name="expectedStatusCodeRanges")
    def expected_status_code_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of status code ranges in the format of `100-101`.
        """
        return pulumi.get(self, "expected_status_code_ranges")

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

    @property
    @pulumi.getter(name="intervalInSeconds")
    def interval_in_seconds(self) -> Optional[pulumi.Input[int]]:
        """
        The interval used to check the endpoint health from a Traffic Manager probing agent. You can specify two values here: `30` (normal probing) and `10` (fast probing). The default value is `30`.
        """
        return pulumi.get(self, "interval_in_seconds")

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

    @property
    @pulumi.getter
    def path(self) -> Optional[pulumi.Input[str]]:
        """
        The path used by the monitoring checks. Required when `protocol` is set to `HTTP` or `HTTPS` - cannot be set when `protocol` is set to `TCP`.
        """
        return pulumi.get(self, "path")

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

    @property
    @pulumi.getter(name="timeoutInSeconds")
    def timeout_in_seconds(self) -> Optional[pulumi.Input[int]]:
        """
        The amount of time the Traffic Manager probing agent should wait before considering that check a failure when a health check probe is sent to the endpoint. If `interval_in_seconds` is set to `30`, then `timeout_in_seconds` can be between `5` and `10`. The default value is `10`. If `interval_in_seconds` is set to `10`, then valid values are between `5` and `9` and `timeout_in_seconds` is required.
        """
        return pulumi.get(self, "timeout_in_seconds")

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

    @property
    @pulumi.getter(name="toleratedNumberOfFailures")
    def tolerated_number_of_failures(self) -> Optional[pulumi.Input[int]]:
        """
        The number of failures a Traffic Manager probing agent tolerates before marking that endpoint as unhealthy. Valid values are between `0` and `9`. The default value is `3`
        """
        return pulumi.get(self, "tolerated_number_of_failures")

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


if not MYPY:
    class TrafficManagerProfileMonitorConfigCustomHeaderArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the custom header.
        """
        value: pulumi.Input[str]
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
elif False:
    TrafficManagerProfileMonitorConfigCustomHeaderArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class TrafficManagerProfileMonitorConfigCustomHeaderArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the custom header.
        :param pulumi.Input[str] value: The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the custom header.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of custom header. Applicable for HTTP and HTTPS protocol.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class VirtualHubConnectionRoutingArgsDict(TypedDict):
        associated_route_table_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the route table associated with this Virtual Hub connection.
        """
        inbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        """
        outbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        """
        propagated_route_table: NotRequired[pulumi.Input['VirtualHubConnectionRoutingPropagatedRouteTableArgsDict']]
        """
        A `propagated_route_table` block as defined below.
        """
        static_vnet_local_route_override_criteria: NotRequired[pulumi.Input[str]]
        """
        The static VNet local route override criteria that is used to determine whether NVA in spoke VNet is bypassed for traffic with destination in spoke VNet. Possible values are `Contains` and `Equal`. Defaults to `Contains`. Changing this forces a new resource to be created.
        """
        static_vnet_routes: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualHubConnectionRoutingStaticVnetRouteArgsDict']]]]
        """
        A `static_vnet_route` block as defined below.
        """
elif False:
    VirtualHubConnectionRoutingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualHubConnectionRoutingArgs:
    def __init__(__self__, *,
                 associated_route_table_id: Optional[pulumi.Input[str]] = None,
                 inbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 outbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 propagated_route_table: Optional[pulumi.Input['VirtualHubConnectionRoutingPropagatedRouteTableArgs']] = None,
                 static_vnet_local_route_override_criteria: Optional[pulumi.Input[str]] = None,
                 static_vnet_routes: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualHubConnectionRoutingStaticVnetRouteArgs']]]] = None):
        """
        :param pulumi.Input[str] associated_route_table_id: The ID of the route table associated with this Virtual Hub connection.
        :param pulumi.Input[str] inbound_route_map_id: The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        :param pulumi.Input[str] outbound_route_map_id: The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        :param pulumi.Input['VirtualHubConnectionRoutingPropagatedRouteTableArgs'] propagated_route_table: A `propagated_route_table` block as defined below.
        :param pulumi.Input[str] static_vnet_local_route_override_criteria: The static VNet local route override criteria that is used to determine whether NVA in spoke VNet is bypassed for traffic with destination in spoke VNet. Possible values are `Contains` and `Equal`. Defaults to `Contains`. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualHubConnectionRoutingStaticVnetRouteArgs']]] static_vnet_routes: A `static_vnet_route` block as defined below.
        """
        if associated_route_table_id is not None:
            pulumi.set(__self__, "associated_route_table_id", associated_route_table_id)
        if inbound_route_map_id is not None:
            pulumi.set(__self__, "inbound_route_map_id", inbound_route_map_id)
        if outbound_route_map_id is not None:
            pulumi.set(__self__, "outbound_route_map_id", outbound_route_map_id)
        if propagated_route_table is not None:
            pulumi.set(__self__, "propagated_route_table", propagated_route_table)
        if static_vnet_local_route_override_criteria is not None:
            pulumi.set(__self__, "static_vnet_local_route_override_criteria", static_vnet_local_route_override_criteria)
        if static_vnet_routes is not None:
            pulumi.set(__self__, "static_vnet_routes", static_vnet_routes)

    @property
    @pulumi.getter(name="associatedRouteTableId")
    def associated_route_table_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the route table associated with this Virtual Hub connection.
        """
        return pulumi.get(self, "associated_route_table_id")

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

    @property
    @pulumi.getter(name="inboundRouteMapId")
    def inbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        """
        return pulumi.get(self, "inbound_route_map_id")

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

    @property
    @pulumi.getter(name="outboundRouteMapId")
    def outbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        """
        return pulumi.get(self, "outbound_route_map_id")

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

    @property
    @pulumi.getter(name="propagatedRouteTable")
    def propagated_route_table(self) -> Optional[pulumi.Input['VirtualHubConnectionRoutingPropagatedRouteTableArgs']]:
        """
        A `propagated_route_table` block as defined below.
        """
        return pulumi.get(self, "propagated_route_table")

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

    @property
    @pulumi.getter(name="staticVnetLocalRouteOverrideCriteria")
    def static_vnet_local_route_override_criteria(self) -> Optional[pulumi.Input[str]]:
        """
        The static VNet local route override criteria that is used to determine whether NVA in spoke VNet is bypassed for traffic with destination in spoke VNet. Possible values are `Contains` and `Equal`. Defaults to `Contains`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "static_vnet_local_route_override_criteria")

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

    @property
    @pulumi.getter(name="staticVnetRoutes")
    def static_vnet_routes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualHubConnectionRoutingStaticVnetRouteArgs']]]]:
        """
        A `static_vnet_route` block as defined below.
        """
        return pulumi.get(self, "static_vnet_routes")

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


if not MYPY:
    class VirtualHubConnectionRoutingPropagatedRouteTableArgsDict(TypedDict):
        labels: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of labels to assign to this route table.
        """
        route_table_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Route Table IDs to associated with this Virtual Hub Connection.
        """
elif False:
    VirtualHubConnectionRoutingPropagatedRouteTableArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualHubConnectionRoutingPropagatedRouteTableArgs:
    def __init__(__self__, *,
                 labels: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 route_table_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] labels: The list of labels to assign to this route table.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] route_table_ids: A list of Route Table IDs to associated with this Virtual Hub Connection.
        """
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if route_table_ids is not None:
            pulumi.set(__self__, "route_table_ids", route_table_ids)

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of labels to assign to this route table.
        """
        return pulumi.get(self, "labels")

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

    @property
    @pulumi.getter(name="routeTableIds")
    def route_table_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Route Table IDs to associated with this Virtual Hub Connection.
        """
        return pulumi.get(self, "route_table_ids")

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


if not MYPY:
    class VirtualHubConnectionRoutingStaticVnetRouteArgsDict(TypedDict):
        address_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of CIDR Ranges which should be used as Address Prefixes.
        """
        name: NotRequired[pulumi.Input[str]]
        """
        The name which should be used for this Static Route.
        """
        next_hop_ip_address: NotRequired[pulumi.Input[str]]
        """
        The IP Address which should be used for the Next Hop.
        """
elif False:
    VirtualHubConnectionRoutingStaticVnetRouteArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualHubConnectionRoutingStaticVnetRouteArgs:
    def __init__(__self__, *,
                 address_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 next_hop_ip_address: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_prefixes: A list of CIDR Ranges which should be used as Address Prefixes.
        :param pulumi.Input[str] name: The name which should be used for this Static Route.
        :param pulumi.Input[str] next_hop_ip_address: The IP Address which should be used for the Next Hop.
        """
        if address_prefixes is not None:
            pulumi.set(__self__, "address_prefixes", address_prefixes)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if next_hop_ip_address is not None:
            pulumi.set(__self__, "next_hop_ip_address", next_hop_ip_address)

    @property
    @pulumi.getter(name="addressPrefixes")
    def address_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of CIDR Ranges which should be used as Address Prefixes.
        """
        return pulumi.get(self, "address_prefixes")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        The name which should be used for this Static Route.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="nextHopIpAddress")
    def next_hop_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The IP Address which should be used for the Next Hop.
        """
        return pulumi.get(self, "next_hop_ip_address")

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


if not MYPY:
    class VirtualHubRouteArgsDict(TypedDict):
        address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of Address Prefixes.
        """
        next_hop_ip_address: pulumi.Input[str]
        """
        The IP Address that Packets should be forwarded to as the Next Hop.
        """
elif False:
    VirtualHubRouteArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualHubRouteArgs:
    def __init__(__self__, *,
                 address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]],
                 next_hop_ip_address: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_prefixes: A list of Address Prefixes.
        :param pulumi.Input[str] next_hop_ip_address: The IP Address that Packets should be forwarded to as the Next Hop.
        """
        pulumi.set(__self__, "address_prefixes", address_prefixes)
        pulumi.set(__self__, "next_hop_ip_address", next_hop_ip_address)

    @property
    @pulumi.getter(name="addressPrefixes")
    def address_prefixes(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of Address Prefixes.
        """
        return pulumi.get(self, "address_prefixes")

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

    @property
    @pulumi.getter(name="nextHopIpAddress")
    def next_hop_ip_address(self) -> pulumi.Input[str]:
        """
        The IP Address that Packets should be forwarded to as the Next Hop.
        """
        return pulumi.get(self, "next_hop_ip_address")

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


if not MYPY:
    class VirtualHubRouteTableRouteArgsDict(TypedDict):
        destinations: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of destination addresses for this route.
        """
        destinations_type: pulumi.Input[str]
        """
        The type of destinations. Possible values are `CIDR`, `ResourceId` and `Service`.
        """
        name: pulumi.Input[str]
        """
        The name which should be used for this route.
        """
        next_hop: pulumi.Input[str]
        """
        The next hop's resource ID.
        """
        next_hop_type: NotRequired[pulumi.Input[str]]
        """
        The type of next hop. Currently the only possible value is `ResourceId`. Defaults to `ResourceId`.

        > **Note:** The Routes can alternatively be created using the virtual_hub_route_table_route resource. Using both inline and external routes is not supported and may result in unexpected configuration.
        """
elif False:
    VirtualHubRouteTableRouteArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualHubRouteTableRouteArgs:
    def __init__(__self__, *,
                 destinations: pulumi.Input[Sequence[pulumi.Input[str]]],
                 destinations_type: pulumi.Input[str],
                 name: pulumi.Input[str],
                 next_hop: pulumi.Input[str],
                 next_hop_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destinations: A list of destination addresses for this route.
        :param pulumi.Input[str] destinations_type: The type of destinations. Possible values are `CIDR`, `ResourceId` and `Service`.
        :param pulumi.Input[str] name: The name which should be used for this route.
        :param pulumi.Input[str] next_hop: The next hop's resource ID.
        :param pulumi.Input[str] next_hop_type: The type of next hop. Currently the only possible value is `ResourceId`. Defaults to `ResourceId`.
               
               > **Note:** The Routes can alternatively be created using the virtual_hub_route_table_route resource. Using both inline and external routes is not supported and may result in unexpected configuration.
        """
        pulumi.set(__self__, "destinations", destinations)
        pulumi.set(__self__, "destinations_type", destinations_type)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "next_hop", next_hop)
        if next_hop_type is not None:
            pulumi.set(__self__, "next_hop_type", next_hop_type)

    @property
    @pulumi.getter
    def destinations(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of destination addresses for this route.
        """
        return pulumi.get(self, "destinations")

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

    @property
    @pulumi.getter(name="destinationsType")
    def destinations_type(self) -> pulumi.Input[str]:
        """
        The type of destinations. Possible values are `CIDR`, `ResourceId` and `Service`.
        """
        return pulumi.get(self, "destinations_type")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this route.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="nextHop")
    def next_hop(self) -> pulumi.Input[str]:
        """
        The next hop's resource ID.
        """
        return pulumi.get(self, "next_hop")

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

    @property
    @pulumi.getter(name="nextHopType")
    def next_hop_type(self) -> Optional[pulumi.Input[str]]:
        """
        The type of next hop. Currently the only possible value is `ResourceId`. Defaults to `ResourceId`.

        > **Note:** The Routes can alternatively be created using the virtual_hub_route_table_route resource. Using both inline and external routes is not supported and may result in unexpected configuration.
        """
        return pulumi.get(self, "next_hop_type")

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


if not MYPY:
    class VirtualNetworkDdosProtectionPlanArgsDict(TypedDict):
        enable: pulumi.Input[bool]
        """
        Enable/disable DDoS Protection Plan on Virtual Network.
        """
        id: pulumi.Input[str]
        """
        The ID of DDoS Protection Plan.
        """
elif False:
    VirtualNetworkDdosProtectionPlanArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkDdosProtectionPlanArgs:
    def __init__(__self__, *,
                 enable: pulumi.Input[bool],
                 id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] enable: Enable/disable DDoS Protection Plan on Virtual Network.
        :param pulumi.Input[str] id: The ID of DDoS Protection Plan.
        """
        pulumi.set(__self__, "enable", enable)
        pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def enable(self) -> pulumi.Input[bool]:
        """
        Enable/disable DDoS Protection Plan on Virtual Network.
        """
        return pulumi.get(self, "enable")

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

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        The ID of DDoS Protection Plan.
        """
        return pulumi.get(self, "id")

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


if not MYPY:
    class VirtualNetworkEncryptionArgsDict(TypedDict):
        enforcement: pulumi.Input[str]
        """
        Specifies if the encrypted Virtual Network allows VM that does not support encryption. Possible values are `DropUnencrypted` and `AllowUnencrypted`.

        > **NOTE:** Currently `AllowUnencrypted` is the only supported value for the `enforcement` property as `DropUnencrypted` is not yet in public preview or general availability. Please see the [official documentation](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-encryption-overview#limitations) for more information.
        """
elif False:
    VirtualNetworkEncryptionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkEncryptionArgs:
    def __init__(__self__, *,
                 enforcement: pulumi.Input[str]):
        """
        :param pulumi.Input[str] enforcement: Specifies if the encrypted Virtual Network allows VM that does not support encryption. Possible values are `DropUnencrypted` and `AllowUnencrypted`.
               
               > **NOTE:** Currently `AllowUnencrypted` is the only supported value for the `enforcement` property as `DropUnencrypted` is not yet in public preview or general availability. Please see the [official documentation](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-encryption-overview#limitations) for more information.
        """
        pulumi.set(__self__, "enforcement", enforcement)

    @property
    @pulumi.getter
    def enforcement(self) -> pulumi.Input[str]:
        """
        Specifies if the encrypted Virtual Network allows VM that does not support encryption. Possible values are `DropUnencrypted` and `AllowUnencrypted`.

        > **NOTE:** Currently `AllowUnencrypted` is the only supported value for the `enforcement` property as `DropUnencrypted` is not yet in public preview or general availability. Please see the [official documentation](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-encryption-overview#limitations) for more information.
        """
        return pulumi.get(self, "enforcement")

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


if not MYPY:
    class VirtualNetworkGatewayBgpSettingsArgsDict(TypedDict):
        asn: NotRequired[pulumi.Input[int]]
        """
        The Autonomous System Number (ASN) to use as part of the BGP.
        """
        peer_weight: NotRequired[pulumi.Input[int]]
        """
        The weight added to routes which have been learned through BGP peering. Valid values can be between `0` and `100`.
        """
        peering_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayBgpSettingsPeeringAddressArgsDict']]]]
        """
        A list of `peering_addresses` blocks as defined below. Only one `peering_addresses` block can be specified except when `active_active` of this Virtual Network Gateway is `true`.
        """
elif False:
    VirtualNetworkGatewayBgpSettingsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayBgpSettingsArgs:
    def __init__(__self__, *,
                 asn: Optional[pulumi.Input[int]] = None,
                 peer_weight: Optional[pulumi.Input[int]] = None,
                 peering_addresses: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayBgpSettingsPeeringAddressArgs']]]] = None):
        """
        :param pulumi.Input[int] asn: The Autonomous System Number (ASN) to use as part of the BGP.
        :param pulumi.Input[int] peer_weight: The weight added to routes which have been learned through BGP peering. Valid values can be between `0` and `100`.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayBgpSettingsPeeringAddressArgs']]] peering_addresses: A list of `peering_addresses` blocks as defined below. Only one `peering_addresses` block can be specified except when `active_active` of this Virtual Network Gateway is `true`.
        """
        if asn is not None:
            pulumi.set(__self__, "asn", asn)
        if peer_weight is not None:
            pulumi.set(__self__, "peer_weight", peer_weight)
        if peering_addresses is not None:
            pulumi.set(__self__, "peering_addresses", peering_addresses)

    @property
    @pulumi.getter
    def asn(self) -> Optional[pulumi.Input[int]]:
        """
        The Autonomous System Number (ASN) to use as part of the BGP.
        """
        return pulumi.get(self, "asn")

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

    @property
    @pulumi.getter(name="peerWeight")
    def peer_weight(self) -> Optional[pulumi.Input[int]]:
        """
        The weight added to routes which have been learned through BGP peering. Valid values can be between `0` and `100`.
        """
        return pulumi.get(self, "peer_weight")

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

    @property
    @pulumi.getter(name="peeringAddresses")
    def peering_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayBgpSettingsPeeringAddressArgs']]]]:
        """
        A list of `peering_addresses` blocks as defined below. Only one `peering_addresses` block can be specified except when `active_active` of this Virtual Network Gateway is `true`.
        """
        return pulumi.get(self, "peering_addresses")

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


if not MYPY:
    class VirtualNetworkGatewayBgpSettingsPeeringAddressArgsDict(TypedDict):
        apipa_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Azure custom APIPA addresses assigned to the BGP peer of the Virtual Network Gateway.

        > **Note:** The valid range for the reserved APIPA address in Azure Public is from `169.254.21.0` to `169.254.22.255`.
        """
        default_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of peering address assigned to the BGP peer of the Virtual Network Gateway.
        """
        ip_configuration_name: NotRequired[pulumi.Input[str]]
        """
        The name of the IP configuration of this Virtual Network Gateway. In case there are multiple `ip_configuration` blocks defined, this property is **required** to specify.
        """
        tunnel_ip_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of tunnel IP addresses assigned to the BGP peer of the Virtual Network Gateway.
        """
elif False:
    VirtualNetworkGatewayBgpSettingsPeeringAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayBgpSettingsPeeringAddressArgs:
    def __init__(__self__, *,
                 apipa_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 default_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ip_configuration_name: Optional[pulumi.Input[str]] = None,
                 tunnel_ip_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] apipa_addresses: A list of Azure custom APIPA addresses assigned to the BGP peer of the Virtual Network Gateway.
               
               > **Note:** The valid range for the reserved APIPA address in Azure Public is from `169.254.21.0` to `169.254.22.255`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] default_addresses: A list of peering address assigned to the BGP peer of the Virtual Network Gateway.
        :param pulumi.Input[str] ip_configuration_name: The name of the IP configuration of this Virtual Network Gateway. In case there are multiple `ip_configuration` blocks defined, this property is **required** to specify.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tunnel_ip_addresses: A list of tunnel IP addresses assigned to the BGP peer of the Virtual Network Gateway.
        """
        if apipa_addresses is not None:
            pulumi.set(__self__, "apipa_addresses", apipa_addresses)
        if default_addresses is not None:
            pulumi.set(__self__, "default_addresses", default_addresses)
        if ip_configuration_name is not None:
            pulumi.set(__self__, "ip_configuration_name", ip_configuration_name)
        if tunnel_ip_addresses is not None:
            pulumi.set(__self__, "tunnel_ip_addresses", tunnel_ip_addresses)

    @property
    @pulumi.getter(name="apipaAddresses")
    def apipa_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Azure custom APIPA addresses assigned to the BGP peer of the Virtual Network Gateway.

        > **Note:** The valid range for the reserved APIPA address in Azure Public is from `169.254.21.0` to `169.254.22.255`.
        """
        return pulumi.get(self, "apipa_addresses")

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

    @property
    @pulumi.getter(name="defaultAddresses")
    def default_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of peering address assigned to the BGP peer of the Virtual Network Gateway.
        """
        return pulumi.get(self, "default_addresses")

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

    @property
    @pulumi.getter(name="ipConfigurationName")
    def ip_configuration_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the IP configuration of this Virtual Network Gateway. In case there are multiple `ip_configuration` blocks defined, this property is **required** to specify.
        """
        return pulumi.get(self, "ip_configuration_name")

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

    @property
    @pulumi.getter(name="tunnelIpAddresses")
    def tunnel_ip_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of tunnel IP addresses assigned to the BGP peer of the Virtual Network Gateway.
        """
        return pulumi.get(self, "tunnel_ip_addresses")

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


if not MYPY:
    class VirtualNetworkGatewayConnectionCustomBgpAddressesArgsDict(TypedDict):
        primary: pulumi.Input[str]
        """
        single IP address that is part of the `network.VirtualNetworkGateway` ip_configuration (first one)
        """
        secondary: NotRequired[pulumi.Input[str]]
        """
        single IP address that is part of the `network.VirtualNetworkGateway` ip_configuration (second one)
        """
elif False:
    VirtualNetworkGatewayConnectionCustomBgpAddressesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayConnectionCustomBgpAddressesArgs:
    def __init__(__self__, *,
                 primary: pulumi.Input[str],
                 secondary: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] primary: single IP address that is part of the `network.VirtualNetworkGateway` ip_configuration (first one)
        :param pulumi.Input[str] secondary: single IP address that is part of the `network.VirtualNetworkGateway` ip_configuration (second one)
        """
        pulumi.set(__self__, "primary", primary)
        if secondary is not None:
            pulumi.set(__self__, "secondary", secondary)

    @property
    @pulumi.getter
    def primary(self) -> pulumi.Input[str]:
        """
        single IP address that is part of the `network.VirtualNetworkGateway` ip_configuration (first one)
        """
        return pulumi.get(self, "primary")

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

    @property
    @pulumi.getter
    def secondary(self) -> Optional[pulumi.Input[str]]:
        """
        single IP address that is part of the `network.VirtualNetworkGateway` ip_configuration (second one)
        """
        return pulumi.get(self, "secondary")

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


if not MYPY:
    class VirtualNetworkGatewayConnectionIpsecPolicyArgsDict(TypedDict):
        dh_group: pulumi.Input[str]
        """
        The DH group used in IKE phase 1 for initial SA. Valid options are `DHGroup1`, `DHGroup14`, `DHGroup2`, `DHGroup2048`, `DHGroup24`, `ECP256`, `ECP384`, or `None`.
        """
        ike_encryption: pulumi.Input[str]
        """
        The IKE encryption algorithm. Valid options are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, or `GCMAES256`.
        """
        ike_integrity: pulumi.Input[str]
        """
        The IKE integrity algorithm. Valid options are `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256`, or `SHA384`.
        """
        ipsec_encryption: pulumi.Input[str]
        """
        The IPSec encryption algorithm. Valid options are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256`, or `None`.
        """
        ipsec_integrity: pulumi.Input[str]
        """
        The IPSec integrity algorithm. Valid options are `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1`, or `SHA256`.
        """
        pfs_group: pulumi.Input[str]
        """
        The DH group used in IKE phase 2 for new child SA.
        Valid options are `ECP256`, `ECP384`, `PFS1`, `PFS14`, `PFS2`, `PFS2048`, `PFS24`, `PFSMM`,
        or `None`.
        """
        sa_datasize: NotRequired[pulumi.Input[int]]
        """
        The IPSec SA payload size in KB. Must be at least `1024` KB. Defaults to `102400000` KB.
        """
        sa_lifetime: NotRequired[pulumi.Input[int]]
        """
        The IPSec SA lifetime in seconds. Must be at least `300` seconds. Defaults to `27000` seconds.
        """
elif False:
    VirtualNetworkGatewayConnectionIpsecPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayConnectionIpsecPolicyArgs:
    def __init__(__self__, *,
                 dh_group: pulumi.Input[str],
                 ike_encryption: pulumi.Input[str],
                 ike_integrity: pulumi.Input[str],
                 ipsec_encryption: pulumi.Input[str],
                 ipsec_integrity: pulumi.Input[str],
                 pfs_group: pulumi.Input[str],
                 sa_datasize: Optional[pulumi.Input[int]] = None,
                 sa_lifetime: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] dh_group: The DH group used in IKE phase 1 for initial SA. Valid options are `DHGroup1`, `DHGroup14`, `DHGroup2`, `DHGroup2048`, `DHGroup24`, `ECP256`, `ECP384`, or `None`.
        :param pulumi.Input[str] ike_encryption: The IKE encryption algorithm. Valid options are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, or `GCMAES256`.
        :param pulumi.Input[str] ike_integrity: The IKE integrity algorithm. Valid options are `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256`, or `SHA384`.
        :param pulumi.Input[str] ipsec_encryption: The IPSec encryption algorithm. Valid options are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256`, or `None`.
        :param pulumi.Input[str] ipsec_integrity: The IPSec integrity algorithm. Valid options are `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1`, or `SHA256`.
        :param pulumi.Input[str] pfs_group: The DH group used in IKE phase 2 for new child SA.
               Valid options are `ECP256`, `ECP384`, `PFS1`, `PFS14`, `PFS2`, `PFS2048`, `PFS24`, `PFSMM`,
               or `None`.
        :param pulumi.Input[int] sa_datasize: The IPSec SA payload size in KB. Must be at least `1024` KB. Defaults to `102400000` KB.
        :param pulumi.Input[int] sa_lifetime: The IPSec SA lifetime in seconds. Must be at least `300` seconds. Defaults to `27000` seconds.
        """
        pulumi.set(__self__, "dh_group", dh_group)
        pulumi.set(__self__, "ike_encryption", ike_encryption)
        pulumi.set(__self__, "ike_integrity", ike_integrity)
        pulumi.set(__self__, "ipsec_encryption", ipsec_encryption)
        pulumi.set(__self__, "ipsec_integrity", ipsec_integrity)
        pulumi.set(__self__, "pfs_group", pfs_group)
        if sa_datasize is not None:
            pulumi.set(__self__, "sa_datasize", sa_datasize)
        if sa_lifetime is not None:
            pulumi.set(__self__, "sa_lifetime", sa_lifetime)

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> pulumi.Input[str]:
        """
        The DH group used in IKE phase 1 for initial SA. Valid options are `DHGroup1`, `DHGroup14`, `DHGroup2`, `DHGroup2048`, `DHGroup24`, `ECP256`, `ECP384`, or `None`.
        """
        return pulumi.get(self, "dh_group")

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

    @property
    @pulumi.getter(name="ikeEncryption")
    def ike_encryption(self) -> pulumi.Input[str]:
        """
        The IKE encryption algorithm. Valid options are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, or `GCMAES256`.
        """
        return pulumi.get(self, "ike_encryption")

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

    @property
    @pulumi.getter(name="ikeIntegrity")
    def ike_integrity(self) -> pulumi.Input[str]:
        """
        The IKE integrity algorithm. Valid options are `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256`, or `SHA384`.
        """
        return pulumi.get(self, "ike_integrity")

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

    @property
    @pulumi.getter(name="ipsecEncryption")
    def ipsec_encryption(self) -> pulumi.Input[str]:
        """
        The IPSec encryption algorithm. Valid options are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256`, or `None`.
        """
        return pulumi.get(self, "ipsec_encryption")

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

    @property
    @pulumi.getter(name="ipsecIntegrity")
    def ipsec_integrity(self) -> pulumi.Input[str]:
        """
        The IPSec integrity algorithm. Valid options are `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1`, or `SHA256`.
        """
        return pulumi.get(self, "ipsec_integrity")

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

    @property
    @pulumi.getter(name="pfsGroup")
    def pfs_group(self) -> pulumi.Input[str]:
        """
        The DH group used in IKE phase 2 for new child SA.
        Valid options are `ECP256`, `ECP384`, `PFS1`, `PFS14`, `PFS2`, `PFS2048`, `PFS24`, `PFSMM`,
        or `None`.
        """
        return pulumi.get(self, "pfs_group")

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

    @property
    @pulumi.getter(name="saDatasize")
    def sa_datasize(self) -> Optional[pulumi.Input[int]]:
        """
        The IPSec SA payload size in KB. Must be at least `1024` KB. Defaults to `102400000` KB.
        """
        return pulumi.get(self, "sa_datasize")

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

    @property
    @pulumi.getter(name="saLifetime")
    def sa_lifetime(self) -> Optional[pulumi.Input[int]]:
        """
        The IPSec SA lifetime in seconds. Must be at least `300` seconds. Defaults to `27000` seconds.
        """
        return pulumi.get(self, "sa_lifetime")

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


if not MYPY:
    class VirtualNetworkGatewayConnectionTrafficSelectorPolicyArgsDict(TypedDict):
        local_address_cidrs: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        List of local CIDRs.
        """
        remote_address_cidrs: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        List of remote CIDRs.
        """
elif False:
    VirtualNetworkGatewayConnectionTrafficSelectorPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayConnectionTrafficSelectorPolicyArgs:
    def __init__(__self__, *,
                 local_address_cidrs: pulumi.Input[Sequence[pulumi.Input[str]]],
                 remote_address_cidrs: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] local_address_cidrs: List of local CIDRs.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] remote_address_cidrs: List of remote CIDRs.
        """
        pulumi.set(__self__, "local_address_cidrs", local_address_cidrs)
        pulumi.set(__self__, "remote_address_cidrs", remote_address_cidrs)

    @property
    @pulumi.getter(name="localAddressCidrs")
    def local_address_cidrs(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of local CIDRs.
        """
        return pulumi.get(self, "local_address_cidrs")

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

    @property
    @pulumi.getter(name="remoteAddressCidrs")
    def remote_address_cidrs(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of remote CIDRs.
        """
        return pulumi.get(self, "remote_address_cidrs")

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


if not MYPY:
    class VirtualNetworkGatewayCustomRouteArgsDict(TypedDict):
        address_prefixes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of address blocks reserved for this virtual network in CIDR notation.
        """
elif False:
    VirtualNetworkGatewayCustomRouteArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayCustomRouteArgs:
    def __init__(__self__, *,
                 address_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_prefixes: A list of address blocks reserved for this virtual network in CIDR notation.
        """
        if address_prefixes is not None:
            pulumi.set(__self__, "address_prefixes", address_prefixes)

    @property
    @pulumi.getter(name="addressPrefixes")
    def address_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of address blocks reserved for this virtual network in CIDR notation.
        """
        return pulumi.get(self, "address_prefixes")

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


if not MYPY:
    class VirtualNetworkGatewayIpConfigurationArgsDict(TypedDict):
        public_ip_address_id: pulumi.Input[str]
        """
        The ID of the public IP address to associate with the Virtual Network Gateway.
        """
        subnet_id: pulumi.Input[str]
        """
        The ID of the gateway subnet of a virtual network in which the virtual network gateway will be created. It is mandatory that the associated subnet is named `GatewaySubnet`. Therefore, each virtual network can contain at most a single Virtual Network Gateway.
        """
        name: NotRequired[pulumi.Input[str]]
        """
        A user-defined name of the IP configuration. Defaults to `vnetGatewayConfig`.
        """
        private_ip_address_allocation: NotRequired[pulumi.Input[str]]
        """
        Defines how the private IP address of the gateways virtual interface is assigned. The only valid value is `Dynamic` for Virtual Network Gateway (`Static` is not supported by the service yet). Defaults to `Dynamic`.
        """
elif False:
    VirtualNetworkGatewayIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayIpConfigurationArgs:
    def __init__(__self__, *,
                 public_ip_address_id: pulumi.Input[str],
                 subnet_id: pulumi.Input[str],
                 name: Optional[pulumi.Input[str]] = None,
                 private_ip_address_allocation: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] public_ip_address_id: The ID of the public IP address to associate with the Virtual Network Gateway.
        :param pulumi.Input[str] subnet_id: The ID of the gateway subnet of a virtual network in which the virtual network gateway will be created. It is mandatory that the associated subnet is named `GatewaySubnet`. Therefore, each virtual network can contain at most a single Virtual Network Gateway.
        :param pulumi.Input[str] name: A user-defined name of the IP configuration. Defaults to `vnetGatewayConfig`.
        :param pulumi.Input[str] private_ip_address_allocation: Defines how the private IP address of the gateways virtual interface is assigned. The only valid value is `Dynamic` for Virtual Network Gateway (`Static` is not supported by the service yet). Defaults to `Dynamic`.
        """
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)
        pulumi.set(__self__, "subnet_id", subnet_id)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if private_ip_address_allocation is not None:
            pulumi.set(__self__, "private_ip_address_allocation", private_ip_address_allocation)

    @property
    @pulumi.getter(name="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        """
        The ID of the public IP address to associate with the Virtual Network Gateway.
        """
        return pulumi.get(self, "public_ip_address_id")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> pulumi.Input[str]:
        """
        The ID of the gateway subnet of a virtual network in which the virtual network gateway will be created. It is mandatory that the associated subnet is named `GatewaySubnet`. Therefore, each virtual network can contain at most a single Virtual Network Gateway.
        """
        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
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        A user-defined name of the IP configuration. Defaults to `vnetGatewayConfig`.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="privateIpAddressAllocation")
    def private_ip_address_allocation(self) -> Optional[pulumi.Input[str]]:
        """
        Defines how the private IP address of the gateways virtual interface is assigned. The only valid value is `Dynamic` for Virtual Network Gateway (`Static` is not supported by the service yet). Defaults to `Dynamic`.
        """
        return pulumi.get(self, "private_ip_address_allocation")

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


if not MYPY:
    class VirtualNetworkGatewayNatRuleExternalMappingArgsDict(TypedDict):
        address_space: pulumi.Input[str]
        """
        The string CIDR representing the address space for the Virtual Network Gateway Nat Rule external mapping.
        """
        port_range: NotRequired[pulumi.Input[str]]
        """
        The single port range for the Virtual Network Gateway Nat Rule external mapping.
        """
elif False:
    VirtualNetworkGatewayNatRuleExternalMappingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayNatRuleExternalMappingArgs:
    def __init__(__self__, *,
                 address_space: pulumi.Input[str],
                 port_range: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address_space: The string CIDR representing the address space for the Virtual Network Gateway Nat Rule external mapping.
        :param pulumi.Input[str] port_range: The single port range for the Virtual Network Gateway Nat Rule external mapping.
        """
        pulumi.set(__self__, "address_space", address_space)
        if port_range is not None:
            pulumi.set(__self__, "port_range", port_range)

    @property
    @pulumi.getter(name="addressSpace")
    def address_space(self) -> pulumi.Input[str]:
        """
        The string CIDR representing the address space for the Virtual Network Gateway Nat Rule external mapping.
        """
        return pulumi.get(self, "address_space")

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

    @property
    @pulumi.getter(name="portRange")
    def port_range(self) -> Optional[pulumi.Input[str]]:
        """
        The single port range for the Virtual Network Gateway Nat Rule external mapping.
        """
        return pulumi.get(self, "port_range")

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


if not MYPY:
    class VirtualNetworkGatewayNatRuleInternalMappingArgsDict(TypedDict):
        address_space: pulumi.Input[str]
        """
        The string CIDR representing the address space for the Virtual Network Gateway Nat Rule internal mapping.
        """
        port_range: NotRequired[pulumi.Input[str]]
        """
        The single port range for the Virtual Network Gateway Nat Rule internal mapping.
        """
elif False:
    VirtualNetworkGatewayNatRuleInternalMappingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayNatRuleInternalMappingArgs:
    def __init__(__self__, *,
                 address_space: pulumi.Input[str],
                 port_range: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address_space: The string CIDR representing the address space for the Virtual Network Gateway Nat Rule internal mapping.
        :param pulumi.Input[str] port_range: The single port range for the Virtual Network Gateway Nat Rule internal mapping.
        """
        pulumi.set(__self__, "address_space", address_space)
        if port_range is not None:
            pulumi.set(__self__, "port_range", port_range)

    @property
    @pulumi.getter(name="addressSpace")
    def address_space(self) -> pulumi.Input[str]:
        """
        The string CIDR representing the address space for the Virtual Network Gateway Nat Rule internal mapping.
        """
        return pulumi.get(self, "address_space")

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

    @property
    @pulumi.getter(name="portRange")
    def port_range(self) -> Optional[pulumi.Input[str]]:
        """
        The single port range for the Virtual Network Gateway Nat Rule internal mapping.
        """
        return pulumi.get(self, "port_range")

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


if not MYPY:
    class VirtualNetworkGatewayPolicyGroupArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the Virtual Network Gateway Policy Group.
        """
        policy_members: pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayPolicyGroupPolicyMemberArgsDict']]]
        """
        One or more `policy_member` blocks as defined below.
        """
        is_default: NotRequired[pulumi.Input[bool]]
        """
        Is this a Default Virtual Network Gateway Policy Group? Defaults to `false`.
        """
        priority: NotRequired[pulumi.Input[int]]
        """
        The priority for the Virtual Network Gateway Policy Group. Defaults to `0`.
        """
elif False:
    VirtualNetworkGatewayPolicyGroupArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayPolicyGroupArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 policy_members: pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayPolicyGroupPolicyMemberArgs']]],
                 is_default: Optional[pulumi.Input[bool]] = None,
                 priority: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] name: The name of the Virtual Network Gateway Policy Group.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayPolicyGroupPolicyMemberArgs']]] policy_members: One or more `policy_member` blocks as defined below.
        :param pulumi.Input[bool] is_default: Is this a Default Virtual Network Gateway Policy Group? Defaults to `false`.
        :param pulumi.Input[int] priority: The priority for the Virtual Network Gateway Policy Group. Defaults to `0`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "policy_members", policy_members)
        if is_default is not None:
            pulumi.set(__self__, "is_default", is_default)
        if priority is not None:
            pulumi.set(__self__, "priority", priority)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Virtual Network Gateway Policy Group.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="policyMembers")
    def policy_members(self) -> pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayPolicyGroupPolicyMemberArgs']]]:
        """
        One or more `policy_member` blocks as defined below.
        """
        return pulumi.get(self, "policy_members")

    @policy_members.setter
    def policy_members(self, value: pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayPolicyGroupPolicyMemberArgs']]]):
        pulumi.set(self, "policy_members", value)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> Optional[pulumi.Input[bool]]:
        """
        Is this a Default Virtual Network Gateway Policy Group? Defaults to `false`.
        """
        return pulumi.get(self, "is_default")

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

    @property
    @pulumi.getter
    def priority(self) -> Optional[pulumi.Input[int]]:
        """
        The priority for the Virtual Network Gateway Policy Group. Defaults to `0`.
        """
        return pulumi.get(self, "priority")

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


if not MYPY:
    class VirtualNetworkGatewayPolicyGroupPolicyMemberArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the Virtual Network Gateway Policy Group Member.
        """
        type: pulumi.Input[str]
        """
        The VPN Policy Member attribute type. Possible values are `AADGroupId`, `CertificateGroupId` and `RadiusAzureGroupId`.
        """
        value: pulumi.Input[str]
        """
        The value of attribute that is used for this Virtual Network Gateway Policy Group Member.
        """
elif False:
    VirtualNetworkGatewayPolicyGroupPolicyMemberArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayPolicyGroupPolicyMemberArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 type: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the Virtual Network Gateway Policy Group Member.
        :param pulumi.Input[str] type: The VPN Policy Member attribute type. Possible values are `AADGroupId`, `CertificateGroupId` and `RadiusAzureGroupId`.
        :param pulumi.Input[str] value: The value of attribute that is used for this Virtual Network Gateway Policy Group Member.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Virtual Network Gateway Policy Group Member.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The VPN Policy Member attribute type. Possible values are `AADGroupId`, `CertificateGroupId` and `RadiusAzureGroupId`.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of attribute that is used for this Virtual Network Gateway Policy Group Member.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class VirtualNetworkGatewayVpnClientConfigurationArgsDict(TypedDict):
        address_spaces: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The address space out of which IP addresses for vpn clients will be taken. You can provide more than one address space, e.g. in CIDR notation.
        """
        aad_audience: NotRequired[pulumi.Input[str]]
        """
        The client id of the Azure VPN application.
        See [Create an Active Directory (AD) tenant for P2S OpenVPN protocol connections](https://docs.microsoft.com/en-gb/azure/vpn-gateway/openvpn-azure-ad-tenant-multi-app) for values
        """
        aad_issuer: NotRequired[pulumi.Input[str]]
        """
        The STS url for your tenant
        """
        aad_tenant: NotRequired[pulumi.Input[str]]
        """
        AzureAD Tenant URL
        """
        ipsec_policy: NotRequired[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgsDict']]
        """
        An `ipsec_policy` block as defined below.
        """
        radius_server_address: NotRequired[pulumi.Input[str]]
        """
        The address of the Radius server.
        """
        radius_server_secret: NotRequired[pulumi.Input[str]]
        """
        The secret used by the Radius server.
        """
        radius_servers: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgsDict']]]]
        """
        One or more `radius_server` blocks as defined below.
        """
        revoked_certificates: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgsDict']]]]
        """
        One or more `revoked_certificate` blocks which are defined below.
        """
        root_certificates: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgsDict']]]]
        """
        One or more `root_certificate` blocks which are defined below. These root certificates are used to sign the client certificate used by the VPN clients to connect to the gateway.
        """
        virtual_network_gateway_client_connections: NotRequired[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgsDict']]]]
        """
        One or more `virtual_network_gateway_client_connection` blocks as defined below.
        """
        vpn_auth_types: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of the vpn authentication types for the virtual network gateway.
        The supported values are `AAD`, `Radius` and `Certificate`.

        > **NOTE:** `vpn_auth_types` must be set when using multiple vpn authentication types.
        """
        vpn_client_protocols: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        List of the protocols supported by the vpn client.
        The supported values are `SSTP`, `IkeV2` and `OpenVPN`.
        Values `SSTP` and `IkeV2` are incompatible with the use of
        `aad_tenant`, `aad_audience` and `aad_issuer`.
        """
elif False:
    VirtualNetworkGatewayVpnClientConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationArgs:
    def __init__(__self__, *,
                 address_spaces: pulumi.Input[Sequence[pulumi.Input[str]]],
                 aad_audience: Optional[pulumi.Input[str]] = None,
                 aad_issuer: Optional[pulumi.Input[str]] = None,
                 aad_tenant: Optional[pulumi.Input[str]] = None,
                 ipsec_policy: Optional[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgs']] = None,
                 radius_server_address: Optional[pulumi.Input[str]] = None,
                 radius_server_secret: Optional[pulumi.Input[str]] = None,
                 radius_servers: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgs']]]] = None,
                 revoked_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs']]]] = None,
                 root_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs']]]] = None,
                 virtual_network_gateway_client_connections: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgs']]]] = None,
                 vpn_auth_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 vpn_client_protocols: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_spaces: The address space out of which IP addresses for vpn clients will be taken. You can provide more than one address space, e.g. in CIDR notation.
        :param pulumi.Input[str] aad_audience: The client id of the Azure VPN application.
               See [Create an Active Directory (AD) tenant for P2S OpenVPN protocol connections](https://docs.microsoft.com/en-gb/azure/vpn-gateway/openvpn-azure-ad-tenant-multi-app) for values
        :param pulumi.Input[str] aad_issuer: The STS url for your tenant
        :param pulumi.Input[str] aad_tenant: AzureAD Tenant URL
        :param pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgs'] ipsec_policy: An `ipsec_policy` block as defined below.
        :param pulumi.Input[str] radius_server_address: The address of the Radius server.
        :param pulumi.Input[str] radius_server_secret: The secret used by the Radius server.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgs']]] radius_servers: One or more `radius_server` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs']]] revoked_certificates: One or more `revoked_certificate` blocks which are defined below.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs']]] root_certificates: One or more `root_certificate` blocks which are defined below. These root certificates are used to sign the client certificate used by the VPN clients to connect to the gateway.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgs']]] virtual_network_gateway_client_connections: One or more `virtual_network_gateway_client_connection` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] vpn_auth_types: List of the vpn authentication types for the virtual network gateway.
               The supported values are `AAD`, `Radius` and `Certificate`.
               
               > **NOTE:** `vpn_auth_types` must be set when using multiple vpn authentication types.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] vpn_client_protocols: List of the protocols supported by the vpn client.
               The supported values are `SSTP`, `IkeV2` and `OpenVPN`.
               Values `SSTP` and `IkeV2` are incompatible with the use of
               `aad_tenant`, `aad_audience` and `aad_issuer`.
        """
        pulumi.set(__self__, "address_spaces", address_spaces)
        if aad_audience is not None:
            pulumi.set(__self__, "aad_audience", aad_audience)
        if aad_issuer is not None:
            pulumi.set(__self__, "aad_issuer", aad_issuer)
        if aad_tenant is not None:
            pulumi.set(__self__, "aad_tenant", aad_tenant)
        if ipsec_policy is not None:
            pulumi.set(__self__, "ipsec_policy", ipsec_policy)
        if radius_server_address is not None:
            pulumi.set(__self__, "radius_server_address", radius_server_address)
        if radius_server_secret is not None:
            pulumi.set(__self__, "radius_server_secret", radius_server_secret)
        if radius_servers is not None:
            pulumi.set(__self__, "radius_servers", radius_servers)
        if revoked_certificates is not None:
            pulumi.set(__self__, "revoked_certificates", revoked_certificates)
        if root_certificates is not None:
            pulumi.set(__self__, "root_certificates", root_certificates)
        if virtual_network_gateway_client_connections is not None:
            pulumi.set(__self__, "virtual_network_gateway_client_connections", virtual_network_gateway_client_connections)
        if vpn_auth_types is not None:
            pulumi.set(__self__, "vpn_auth_types", vpn_auth_types)
        if vpn_client_protocols is not None:
            pulumi.set(__self__, "vpn_client_protocols", vpn_client_protocols)

    @property
    @pulumi.getter(name="addressSpaces")
    def address_spaces(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The address space out of which IP addresses for vpn clients will be taken. You can provide more than one address space, e.g. in CIDR notation.
        """
        return pulumi.get(self, "address_spaces")

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

    @property
    @pulumi.getter(name="aadAudience")
    def aad_audience(self) -> Optional[pulumi.Input[str]]:
        """
        The client id of the Azure VPN application.
        See [Create an Active Directory (AD) tenant for P2S OpenVPN protocol connections](https://docs.microsoft.com/en-gb/azure/vpn-gateway/openvpn-azure-ad-tenant-multi-app) for values
        """
        return pulumi.get(self, "aad_audience")

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

    @property
    @pulumi.getter(name="aadIssuer")
    def aad_issuer(self) -> Optional[pulumi.Input[str]]:
        """
        The STS url for your tenant
        """
        return pulumi.get(self, "aad_issuer")

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

    @property
    @pulumi.getter(name="aadTenant")
    def aad_tenant(self) -> Optional[pulumi.Input[str]]:
        """
        AzureAD Tenant URL
        """
        return pulumi.get(self, "aad_tenant")

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

    @property
    @pulumi.getter(name="ipsecPolicy")
    def ipsec_policy(self) -> Optional[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgs']]:
        """
        An `ipsec_policy` block as defined below.
        """
        return pulumi.get(self, "ipsec_policy")

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

    @property
    @pulumi.getter(name="radiusServerAddress")
    def radius_server_address(self) -> Optional[pulumi.Input[str]]:
        """
        The address of the Radius server.
        """
        return pulumi.get(self, "radius_server_address")

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

    @property
    @pulumi.getter(name="radiusServerSecret")
    def radius_server_secret(self) -> Optional[pulumi.Input[str]]:
        """
        The secret used by the Radius server.
        """
        return pulumi.get(self, "radius_server_secret")

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

    @property
    @pulumi.getter(name="radiusServers")
    def radius_servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgs']]]]:
        """
        One or more `radius_server` blocks as defined below.
        """
        return pulumi.get(self, "radius_servers")

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

    @property
    @pulumi.getter(name="revokedCertificates")
    def revoked_certificates(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs']]]]:
        """
        One or more `revoked_certificate` blocks which are defined below.
        """
        return pulumi.get(self, "revoked_certificates")

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

    @property
    @pulumi.getter(name="rootCertificates")
    def root_certificates(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs']]]]:
        """
        One or more `root_certificate` blocks which are defined below. These root certificates are used to sign the client certificate used by the VPN clients to connect to the gateway.
        """
        return pulumi.get(self, "root_certificates")

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

    @property
    @pulumi.getter(name="virtualNetworkGatewayClientConnections")
    def virtual_network_gateway_client_connections(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgs']]]]:
        """
        One or more `virtual_network_gateway_client_connection` blocks as defined below.
        """
        return pulumi.get(self, "virtual_network_gateway_client_connections")

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

    @property
    @pulumi.getter(name="vpnAuthTypes")
    def vpn_auth_types(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of the vpn authentication types for the virtual network gateway.
        The supported values are `AAD`, `Radius` and `Certificate`.

        > **NOTE:** `vpn_auth_types` must be set when using multiple vpn authentication types.
        """
        return pulumi.get(self, "vpn_auth_types")

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

    @property
    @pulumi.getter(name="vpnClientProtocols")
    def vpn_client_protocols(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of the protocols supported by the vpn client.
        The supported values are `SSTP`, `IkeV2` and `OpenVPN`.
        Values `SSTP` and `IkeV2` are incompatible with the use of
        `aad_tenant`, `aad_audience` and `aad_issuer`.
        """
        return pulumi.get(self, "vpn_client_protocols")

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


if not MYPY:
    class VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgsDict(TypedDict):
        dh_group: pulumi.Input[str]
        """
        The DH Group, used in IKE Phase 1. Possible values are `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384` and `None`.
        """
        ike_encryption: pulumi.Input[str]
        """
        The IKE encryption algorithm, used for IKE Phase 2. Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128` and `GCMAES256`.
        """
        ike_integrity: pulumi.Input[str]
        """
        The IKE encryption integrity algorithm, used for IKE Phase 2. Possible values are `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256` and `SHA384`.
        """
        ipsec_encryption: pulumi.Input[str]
        """
        The IPSec encryption algorithm, used for IKE phase 1. Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256` and `None`.
        """
        ipsec_integrity: pulumi.Input[str]
        """
        The IPSec integrity algorithm, used for IKE phase 1. Possible values are `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1` and `SHA256`.
        """
        pfs_group: pulumi.Input[str]
        """
        The Pfs Group, used in IKE Phase 2. Possible values are `ECP256`, `ECP384`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM` and `None`.
        """
        sa_data_size_in_kilobytes: pulumi.Input[int]
        """
        The IPSec Security Association payload size in KB for a Site-to-Site VPN tunnel. Possible values are between `1024` and `2147483647`.
        """
        sa_lifetime_in_seconds: pulumi.Input[int]
        """
        The IPSec Security Association lifetime in seconds for a Site-to-Site VPN tunnel. Possible values are between `300` and `172799`.
        """
elif False:
    VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationIpsecPolicyArgs:
    def __init__(__self__, *,
                 dh_group: pulumi.Input[str],
                 ike_encryption: pulumi.Input[str],
                 ike_integrity: pulumi.Input[str],
                 ipsec_encryption: pulumi.Input[str],
                 ipsec_integrity: pulumi.Input[str],
                 pfs_group: pulumi.Input[str],
                 sa_data_size_in_kilobytes: pulumi.Input[int],
                 sa_lifetime_in_seconds: pulumi.Input[int]):
        """
        :param pulumi.Input[str] dh_group: The DH Group, used in IKE Phase 1. Possible values are `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384` and `None`.
        :param pulumi.Input[str] ike_encryption: The IKE encryption algorithm, used for IKE Phase 2. Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128` and `GCMAES256`.
        :param pulumi.Input[str] ike_integrity: The IKE encryption integrity algorithm, used for IKE Phase 2. Possible values are `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256` and `SHA384`.
        :param pulumi.Input[str] ipsec_encryption: The IPSec encryption algorithm, used for IKE phase 1. Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256` and `None`.
        :param pulumi.Input[str] ipsec_integrity: The IPSec integrity algorithm, used for IKE phase 1. Possible values are `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1` and `SHA256`.
        :param pulumi.Input[str] pfs_group: The Pfs Group, used in IKE Phase 2. Possible values are `ECP256`, `ECP384`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM` and `None`.
        :param pulumi.Input[int] sa_data_size_in_kilobytes: The IPSec Security Association payload size in KB for a Site-to-Site VPN tunnel. Possible values are between `1024` and `2147483647`.
        :param pulumi.Input[int] sa_lifetime_in_seconds: The IPSec Security Association lifetime in seconds for a Site-to-Site VPN tunnel. Possible values are between `300` and `172799`.
        """
        pulumi.set(__self__, "dh_group", dh_group)
        pulumi.set(__self__, "ike_encryption", ike_encryption)
        pulumi.set(__self__, "ike_integrity", ike_integrity)
        pulumi.set(__self__, "ipsec_encryption", ipsec_encryption)
        pulumi.set(__self__, "ipsec_integrity", ipsec_integrity)
        pulumi.set(__self__, "pfs_group", pfs_group)
        pulumi.set(__self__, "sa_data_size_in_kilobytes", sa_data_size_in_kilobytes)
        pulumi.set(__self__, "sa_lifetime_in_seconds", sa_lifetime_in_seconds)

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> pulumi.Input[str]:
        """
        The DH Group, used in IKE Phase 1. Possible values are `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384` and `None`.
        """
        return pulumi.get(self, "dh_group")

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

    @property
    @pulumi.getter(name="ikeEncryption")
    def ike_encryption(self) -> pulumi.Input[str]:
        """
        The IKE encryption algorithm, used for IKE Phase 2. Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128` and `GCMAES256`.
        """
        return pulumi.get(self, "ike_encryption")

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

    @property
    @pulumi.getter(name="ikeIntegrity")
    def ike_integrity(self) -> pulumi.Input[str]:
        """
        The IKE encryption integrity algorithm, used for IKE Phase 2. Possible values are `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256` and `SHA384`.
        """
        return pulumi.get(self, "ike_integrity")

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

    @property
    @pulumi.getter(name="ipsecEncryption")
    def ipsec_encryption(self) -> pulumi.Input[str]:
        """
        The IPSec encryption algorithm, used for IKE phase 1. Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256` and `None`.
        """
        return pulumi.get(self, "ipsec_encryption")

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

    @property
    @pulumi.getter(name="ipsecIntegrity")
    def ipsec_integrity(self) -> pulumi.Input[str]:
        """
        The IPSec integrity algorithm, used for IKE phase 1. Possible values are `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1` and `SHA256`.
        """
        return pulumi.get(self, "ipsec_integrity")

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

    @property
    @pulumi.getter(name="pfsGroup")
    def pfs_group(self) -> pulumi.Input[str]:
        """
        The Pfs Group, used in IKE Phase 2. Possible values are `ECP256`, `ECP384`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM` and `None`.
        """
        return pulumi.get(self, "pfs_group")

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

    @property
    @pulumi.getter(name="saDataSizeInKilobytes")
    def sa_data_size_in_kilobytes(self) -> pulumi.Input[int]:
        """
        The IPSec Security Association payload size in KB for a Site-to-Site VPN tunnel. Possible values are between `1024` and `2147483647`.
        """
        return pulumi.get(self, "sa_data_size_in_kilobytes")

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

    @property
    @pulumi.getter(name="saLifetimeInSeconds")
    def sa_lifetime_in_seconds(self) -> pulumi.Input[int]:
        """
        The IPSec Security Association lifetime in seconds for a Site-to-Site VPN tunnel. Possible values are between `300` and `172799`.
        """
        return pulumi.get(self, "sa_lifetime_in_seconds")

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


if not MYPY:
    class VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgsDict(TypedDict):
        address: pulumi.Input[str]
        """
        The address of the Radius Server.
        """
        score: pulumi.Input[int]
        """
        The score of the Radius Server determines the priority of the server. Possible values are between `1` and `30`.
        """
        secret: pulumi.Input[str]
        """
        The secret that is used to communicate with the Radius Server.
        """
elif False:
    VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationRadiusServerArgs:
    def __init__(__self__, *,
                 address: pulumi.Input[str],
                 score: pulumi.Input[int],
                 secret: pulumi.Input[str]):
        """
        :param pulumi.Input[str] address: The address of the Radius Server.
        :param pulumi.Input[int] score: The score of the Radius Server determines the priority of the server. Possible values are between `1` and `30`.
        :param pulumi.Input[str] secret: The secret that is used to communicate with the Radius Server.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "score", score)
        pulumi.set(__self__, "secret", secret)

    @property
    @pulumi.getter
    def address(self) -> pulumi.Input[str]:
        """
        The address of the Radius Server.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter
    def score(self) -> pulumi.Input[int]:
        """
        The score of the Radius Server determines the priority of the server. Possible values are between `1` and `30`.
        """
        return pulumi.get(self, "score")

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

    @property
    @pulumi.getter
    def secret(self) -> pulumi.Input[str]:
        """
        The secret that is used to communicate with the Radius Server.
        """
        return pulumi.get(self, "secret")

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


if not MYPY:
    class VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name of the certificate resource.
        """
        thumbprint: pulumi.Input[str]
        """
        Specifies the public data of the certificate.
        """
elif False:
    VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 thumbprint: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Specifies the name of the certificate resource.
        :param pulumi.Input[str] thumbprint: Specifies the public data of the certificate.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "thumbprint", thumbprint)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name of the certificate resource.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def thumbprint(self) -> pulumi.Input[str]:
        """
        Specifies the public data of the certificate.
        """
        return pulumi.get(self, "thumbprint")

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


if not MYPY:
    class VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A user-defined name of the root certificate.
        """
        public_cert_data: pulumi.Input[str]
        """
        The public certificate of the root certificate authority. The certificate must be provided in Base-64 encoded X.509 format (PEM). In particular, this argument *must not* include the `-----BEGIN CERTIFICATE-----` or `-----END CERTIFICATE-----` markers, nor any newlines.
        """
elif False:
    VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 public_cert_data: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: A user-defined name of the root certificate.
        :param pulumi.Input[str] public_cert_data: The public certificate of the root certificate authority. The certificate must be provided in Base-64 encoded X.509 format (PEM). In particular, this argument *must not* include the `-----BEGIN CERTIFICATE-----` or `-----END CERTIFICATE-----` markers, nor any newlines.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "public_cert_data", public_cert_data)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A user-defined name of the root certificate.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="publicCertData")
    def public_cert_data(self) -> pulumi.Input[str]:
        """
        The public certificate of the root certificate authority. The certificate must be provided in Base-64 encoded X.509 format (PEM). In particular, this argument *must not* include the `-----BEGIN CERTIFICATE-----` or `-----END CERTIFICATE-----` markers, nor any newlines.
        """
        return pulumi.get(self, "public_cert_data")

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


if not MYPY:
    class VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgsDict(TypedDict):
        address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of address prefixes for P2S VPN Client.
        """
        name: pulumi.Input[str]
        """
        The name of the Virtual Network Gateway Client Connection.
        """
        policy_group_names: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of names of Virtual Network Gateway Policy Groups.
        """
elif False:
    VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationVirtualNetworkGatewayClientConnectionArgs:
    def __init__(__self__, *,
                 address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 policy_group_names: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_prefixes: A list of address prefixes for P2S VPN Client.
        :param pulumi.Input[str] name: The name of the Virtual Network Gateway Client Connection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] policy_group_names: A list of names of Virtual Network Gateway Policy Groups.
        """
        pulumi.set(__self__, "address_prefixes", address_prefixes)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "policy_group_names", policy_group_names)

    @property
    @pulumi.getter(name="addressPrefixes")
    def address_prefixes(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of address prefixes for P2S VPN Client.
        """
        return pulumi.get(self, "address_prefixes")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the Virtual Network Gateway Client Connection.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="policyGroupNames")
    def policy_group_names(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of names of Virtual Network Gateway Policy Groups.
        """
        return pulumi.get(self, "policy_group_names")

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


if not MYPY:
    class VirtualNetworkSubnetArgsDict(TypedDict):
        address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The address prefixes to use for the subnet.
        """
        name: pulumi.Input[str]
        """
        The name of the subnet.
        """
        default_outbound_access_enabled: NotRequired[pulumi.Input[bool]]
        """
        Enable default outbound access to the internet for the subnet. Defaults to `true`.
        """
        delegation: NotRequired[pulumi.Input['VirtualNetworkSubnetDelegationArgsDict']]
        """
        One or more `delegation` blocks as defined below.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of this subnet.
        """
        private_endpoint_network_policies: NotRequired[pulumi.Input[str]]
        """
        Enable or Disable network policies for the private endpoint on the subnet. Possible values are `Disabled`, `Enabled`, `NetworkSecurityGroupEnabled` and `RouteTableEnabled`. Defaults to `Disabled`.

        > **NOTE:** If you don't want to use network policies like user-defined Routes and Network Security Groups, you need to set `private_endpoint_network_policies` in the subnet to `Disabled`. This setting only applies to Private Endpoints in the Subnet and affects all Private Endpoints in the Subnet.

        > **NOTE:** If you want to use network policies like user-defined Routes and Network Security Groups, you need to set the `private_endpoint_network_policies` in the Subnet to `Enabled`/`NetworkSecurityGroupEnabled`/`RouteTableEnabled`. This setting only applies to Private Endpoints in the Subnet and affects all Private Endpoints in the Subnet.

        > **NOTE:** See more details from [Manage network policies for Private Endpoints](https://learn.microsoft.com/en-gb/azure/private-link/disable-private-endpoint-network-policy?tabs=network-policy-portal).
        """
        private_link_service_network_policies_enabled: NotRequired[pulumi.Input[bool]]
        """
        Enable or Disable network policies for the private link service on the subnet. Defaults to `true`.

        > **NOTE:** When configuring Azure Private Link service, the explicit setting `private_link_service_network_policies_enabled` must be set to `false` in the subnet since Private Link Service does not support network policies like user-defined Routes and Network Security Groups. This setting only affects the Private Link service. For other resources in the subnet, access is controlled based on the Network Security Group which can be configured using the `network.SubnetNetworkSecurityGroupAssociation` resource. See more details from [Manage network policies for Private Link Services](https://learn.microsoft.com/en-gb/azure/private-link/disable-private-link-service-network-policy?tabs=private-link-network-policy-powershell).
        """
        route_table_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Route Table that should be associated with this subnet.
        """
        security_group: NotRequired[pulumi.Input[str]]
        """
        The Network Security Group to associate with the subnet. (Referenced by `id`, ie. `azurerm_network_security_group.example.id`)
        """
        service_endpoint_policy_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of IDs of Service Endpoint Policies to associate with the subnet.
        """
        service_endpoints: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of Service endpoints to associate with the subnet. Possible values include: `Microsoft.AzureActiveDirectory`, `Microsoft.AzureCosmosDB`, `Microsoft.ContainerRegistry`, `Microsoft.EventHub`, `Microsoft.KeyVault`, `Microsoft.ServiceBus`, `Microsoft.Sql`, `Microsoft.Storage`, `Microsoft.Storage.Global` and `Microsoft.Web`.
        """
elif False:
    VirtualNetworkSubnetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkSubnetArgs:
    def __init__(__self__, *,
                 address_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]],
                 name: pulumi.Input[str],
                 default_outbound_access_enabled: Optional[pulumi.Input[bool]] = None,
                 delegation: Optional[pulumi.Input['VirtualNetworkSubnetDelegationArgs']] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 private_endpoint_network_policies: Optional[pulumi.Input[str]] = None,
                 private_link_service_network_policies_enabled: Optional[pulumi.Input[bool]] = None,
                 route_table_id: Optional[pulumi.Input[str]] = None,
                 security_group: Optional[pulumi.Input[str]] = None,
                 service_endpoint_policy_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 service_endpoints: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] address_prefixes: The address prefixes to use for the subnet.
        :param pulumi.Input[str] name: The name of the subnet.
        :param pulumi.Input[bool] default_outbound_access_enabled: Enable default outbound access to the internet for the subnet. Defaults to `true`.
        :param pulumi.Input['VirtualNetworkSubnetDelegationArgs'] delegation: One or more `delegation` blocks as defined below.
        :param pulumi.Input[str] id: The ID of this subnet.
        :param pulumi.Input[str] private_endpoint_network_policies: Enable or Disable network policies for the private endpoint on the subnet. Possible values are `Disabled`, `Enabled`, `NetworkSecurityGroupEnabled` and `RouteTableEnabled`. Defaults to `Disabled`.
               
               > **NOTE:** If you don't want to use network policies like user-defined Routes and Network Security Groups, you need to set `private_endpoint_network_policies` in the subnet to `Disabled`. This setting only applies to Private Endpoints in the Subnet and affects all Private Endpoints in the Subnet.
               
               > **NOTE:** If you want to use network policies like user-defined Routes and Network Security Groups, you need to set the `private_endpoint_network_policies` in the Subnet to `Enabled`/`NetworkSecurityGroupEnabled`/`RouteTableEnabled`. This setting only applies to Private Endpoints in the Subnet and affects all Private Endpoints in the Subnet.
               
               > **NOTE:** See more details from [Manage network policies for Private Endpoints](https://learn.microsoft.com/en-gb/azure/private-link/disable-private-endpoint-network-policy?tabs=network-policy-portal).
        :param pulumi.Input[bool] private_link_service_network_policies_enabled: Enable or Disable network policies for the private link service on the subnet. Defaults to `true`.
               
               > **NOTE:** When configuring Azure Private Link service, the explicit setting `private_link_service_network_policies_enabled` must be set to `false` in the subnet since Private Link Service does not support network policies like user-defined Routes and Network Security Groups. This setting only affects the Private Link service. For other resources in the subnet, access is controlled based on the Network Security Group which can be configured using the `network.SubnetNetworkSecurityGroupAssociation` resource. See more details from [Manage network policies for Private Link Services](https://learn.microsoft.com/en-gb/azure/private-link/disable-private-link-service-network-policy?tabs=private-link-network-policy-powershell).
        :param pulumi.Input[str] route_table_id: The ID of the Route Table that should be associated with this subnet.
        :param pulumi.Input[str] security_group: The Network Security Group to associate with the subnet. (Referenced by `id`, ie. `azurerm_network_security_group.example.id`)
        :param pulumi.Input[Sequence[pulumi.Input[str]]] service_endpoint_policy_ids: The list of IDs of Service Endpoint Policies to associate with the subnet.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] service_endpoints: The list of Service endpoints to associate with the subnet. Possible values include: `Microsoft.AzureActiveDirectory`, `Microsoft.AzureCosmosDB`, `Microsoft.ContainerRegistry`, `Microsoft.EventHub`, `Microsoft.KeyVault`, `Microsoft.ServiceBus`, `Microsoft.Sql`, `Microsoft.Storage`, `Microsoft.Storage.Global` and `Microsoft.Web`.
        """
        pulumi.set(__self__, "address_prefixes", address_prefixes)
        pulumi.set(__self__, "name", name)
        if default_outbound_access_enabled is not None:
            pulumi.set(__self__, "default_outbound_access_enabled", default_outbound_access_enabled)
        if delegation is not None:
            pulumi.set(__self__, "delegation", delegation)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if private_endpoint_network_policies is not None:
            pulumi.set(__self__, "private_endpoint_network_policies", private_endpoint_network_policies)
        if private_link_service_network_policies_enabled is not None:
            pulumi.set(__self__, "private_link_service_network_policies_enabled", private_link_service_network_policies_enabled)
        if route_table_id is not None:
            pulumi.set(__self__, "route_table_id", route_table_id)
        if security_group is not None:
            pulumi.set(__self__, "security_group", security_group)
        if service_endpoint_policy_ids is not None:
            pulumi.set(__self__, "service_endpoint_policy_ids", service_endpoint_policy_ids)
        if service_endpoints is not None:
            pulumi.set(__self__, "service_endpoints", service_endpoints)

    @property
    @pulumi.getter(name="addressPrefixes")
    def address_prefixes(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The address prefixes to use for the subnet.
        """
        return pulumi.get(self, "address_prefixes")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the subnet.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="defaultOutboundAccessEnabled")
    def default_outbound_access_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable default outbound access to the internet for the subnet. Defaults to `true`.
        """
        return pulumi.get(self, "default_outbound_access_enabled")

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

    @property
    @pulumi.getter
    def delegation(self) -> Optional[pulumi.Input['VirtualNetworkSubnetDelegationArgs']]:
        """
        One or more `delegation` blocks as defined below.
        """
        return pulumi.get(self, "delegation")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of this subnet.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="privateEndpointNetworkPolicies")
    def private_endpoint_network_policies(self) -> Optional[pulumi.Input[str]]:
        """
        Enable or Disable network policies for the private endpoint on the subnet. Possible values are `Disabled`, `Enabled`, `NetworkSecurityGroupEnabled` and `RouteTableEnabled`. Defaults to `Disabled`.

        > **NOTE:** If you don't want to use network policies like user-defined Routes and Network Security Groups, you need to set `private_endpoint_network_policies` in the subnet to `Disabled`. This setting only applies to Private Endpoints in the Subnet and affects all Private Endpoints in the Subnet.

        > **NOTE:** If you want to use network policies like user-defined Routes and Network Security Groups, you need to set the `private_endpoint_network_policies` in the Subnet to `Enabled`/`NetworkSecurityGroupEnabled`/`RouteTableEnabled`. This setting only applies to Private Endpoints in the Subnet and affects all Private Endpoints in the Subnet.

        > **NOTE:** See more details from [Manage network policies for Private Endpoints](https://learn.microsoft.com/en-gb/azure/private-link/disable-private-endpoint-network-policy?tabs=network-policy-portal).
        """
        return pulumi.get(self, "private_endpoint_network_policies")

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

    @property
    @pulumi.getter(name="privateLinkServiceNetworkPoliciesEnabled")
    def private_link_service_network_policies_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable or Disable network policies for the private link service on the subnet. Defaults to `true`.

        > **NOTE:** When configuring Azure Private Link service, the explicit setting `private_link_service_network_policies_enabled` must be set to `false` in the subnet since Private Link Service does not support network policies like user-defined Routes and Network Security Groups. This setting only affects the Private Link service. For other resources in the subnet, access is controlled based on the Network Security Group which can be configured using the `network.SubnetNetworkSecurityGroupAssociation` resource. See more details from [Manage network policies for Private Link Services](https://learn.microsoft.com/en-gb/azure/private-link/disable-private-link-service-network-policy?tabs=private-link-network-policy-powershell).
        """
        return pulumi.get(self, "private_link_service_network_policies_enabled")

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

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Route Table that should be associated with this subnet.
        """
        return pulumi.get(self, "route_table_id")

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

    @property
    @pulumi.getter(name="securityGroup")
    def security_group(self) -> Optional[pulumi.Input[str]]:
        """
        The Network Security Group to associate with the subnet. (Referenced by `id`, ie. `azurerm_network_security_group.example.id`)
        """
        return pulumi.get(self, "security_group")

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

    @property
    @pulumi.getter(name="serviceEndpointPolicyIds")
    def service_endpoint_policy_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of IDs of Service Endpoint Policies to associate with the subnet.
        """
        return pulumi.get(self, "service_endpoint_policy_ids")

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

    @property
    @pulumi.getter(name="serviceEndpoints")
    def service_endpoints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of Service endpoints to associate with the subnet. Possible values include: `Microsoft.AzureActiveDirectory`, `Microsoft.AzureCosmosDB`, `Microsoft.ContainerRegistry`, `Microsoft.EventHub`, `Microsoft.KeyVault`, `Microsoft.ServiceBus`, `Microsoft.Sql`, `Microsoft.Storage`, `Microsoft.Storage.Global` and `Microsoft.Web`.
        """
        return pulumi.get(self, "service_endpoints")

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


if not MYPY:
    class VirtualNetworkSubnetDelegationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name for this delegation.
        """
        service_delegation: pulumi.Input['VirtualNetworkSubnetDelegationServiceDelegationArgsDict']
        """
        A `service_delegation` block as defined below.
        """
elif False:
    VirtualNetworkSubnetDelegationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkSubnetDelegationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 service_delegation: pulumi.Input['VirtualNetworkSubnetDelegationServiceDelegationArgs']):
        """
        :param pulumi.Input[str] name: A name for this delegation.
        :param pulumi.Input['VirtualNetworkSubnetDelegationServiceDelegationArgs'] service_delegation: A `service_delegation` block as defined below.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "service_delegation", service_delegation)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name for this delegation.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="serviceDelegation")
    def service_delegation(self) -> pulumi.Input['VirtualNetworkSubnetDelegationServiceDelegationArgs']:
        """
        A `service_delegation` block as defined below.
        """
        return pulumi.get(self, "service_delegation")

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


if not MYPY:
    class VirtualNetworkSubnetDelegationServiceDelegationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of service to delegate to. Possible values are `GitHub.Network/networkSettings`, `Informatica.DataManagement/organizations`, `Microsoft.ApiManagement/service`, `Microsoft.Apollo/npu`, `Microsoft.App/environments`, `Microsoft.App/testClients`, `Microsoft.AVS/PrivateClouds`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureHostedService`, `Microsoft.BareMetal/AzureHPC`, `Microsoft.BareMetal/AzurePaymentHSM`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.BareMetal/MonitoringServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.CloudTest/hostedpools`, `Microsoft.CloudTest/images`, `Microsoft.CloudTest/pools`, `Microsoft.Codespaces/plans`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.ContainerService/managedClusters`, `Microsoft.ContainerService/TestClients`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/servers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.DelegatedNetwork/controller`, `Microsoft.DevCenter/networkConnection`, `Microsoft.DevOpsInfrastructure/pools`, `Microsoft.DocumentDB/cassandraClusters`, `Microsoft.Fidalgo/networkSettings`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.LabServices/labplans`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`, `Microsoft.Netapp/volumes`, `Microsoft.Network/dnsResolvers`, `Microsoft.Network/managedResolvers`, `Microsoft.Network/fpgaNetworkInterfaces`, `Microsoft.Network/networkWatchers.`, `Microsoft.Network/virtualNetworkGateways`, `Microsoft.Orbital/orbitalGateways`, `Microsoft.PowerPlatform/enterprisePolicies`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.ServiceNetworking/trafficControllers`, `Microsoft.Singularity/accounts/networks`, `Microsoft.Singularity/accounts/npu`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/managedInstancesOnebox`, `Microsoft.Sql/managedInstancesStage`, `Microsoft.Sql/managedInstancesTest`, `Microsoft.Sql/servers`, `Microsoft.StoragePool/diskPools`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, `Microsoft.Web/serverFarms`, `NGINX.NGINXPLUS/nginxDeployments`, `PaloAltoNetworks.Cloudngfw/firewalls`, `Qumulo.Storage/fileSystems`, and `Oracle.Database/networkAttachments`.
        """
        actions: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of Actions which should be delegated. This list is specific to the service to delegate to. Possible values are `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/publicIPAddresses/read`, `Microsoft.Network/virtualNetworks/read`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action`, and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.

        > **NOTE:** Azure may add default actions depending on the service delegation name and they can't be changed.
        """
elif False:
    VirtualNetworkSubnetDelegationServiceDelegationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VirtualNetworkSubnetDelegationServiceDelegationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 actions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] name: The name of service to delegate to. Possible values are `GitHub.Network/networkSettings`, `Informatica.DataManagement/organizations`, `Microsoft.ApiManagement/service`, `Microsoft.Apollo/npu`, `Microsoft.App/environments`, `Microsoft.App/testClients`, `Microsoft.AVS/PrivateClouds`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureHostedService`, `Microsoft.BareMetal/AzureHPC`, `Microsoft.BareMetal/AzurePaymentHSM`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.BareMetal/MonitoringServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.CloudTest/hostedpools`, `Microsoft.CloudTest/images`, `Microsoft.CloudTest/pools`, `Microsoft.Codespaces/plans`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.ContainerService/managedClusters`, `Microsoft.ContainerService/TestClients`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/servers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.DelegatedNetwork/controller`, `Microsoft.DevCenter/networkConnection`, `Microsoft.DevOpsInfrastructure/pools`, `Microsoft.DocumentDB/cassandraClusters`, `Microsoft.Fidalgo/networkSettings`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.LabServices/labplans`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`, `Microsoft.Netapp/volumes`, `Microsoft.Network/dnsResolvers`, `Microsoft.Network/managedResolvers`, `Microsoft.Network/fpgaNetworkInterfaces`, `Microsoft.Network/networkWatchers.`, `Microsoft.Network/virtualNetworkGateways`, `Microsoft.Orbital/orbitalGateways`, `Microsoft.PowerPlatform/enterprisePolicies`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.ServiceNetworking/trafficControllers`, `Microsoft.Singularity/accounts/networks`, `Microsoft.Singularity/accounts/npu`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/managedInstancesOnebox`, `Microsoft.Sql/managedInstancesStage`, `Microsoft.Sql/managedInstancesTest`, `Microsoft.Sql/servers`, `Microsoft.StoragePool/diskPools`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, `Microsoft.Web/serverFarms`, `NGINX.NGINXPLUS/nginxDeployments`, `PaloAltoNetworks.Cloudngfw/firewalls`, `Qumulo.Storage/fileSystems`, and `Oracle.Database/networkAttachments`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] actions: A list of Actions which should be delegated. This list is specific to the service to delegate to. Possible values are `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/publicIPAddresses/read`, `Microsoft.Network/virtualNetworks/read`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action`, and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.
               
               > **NOTE:** Azure may add default actions depending on the service delegation name and they can't be changed.
        """
        pulumi.set(__self__, "name", name)
        if actions is not None:
            pulumi.set(__self__, "actions", actions)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of service to delegate to. Possible values are `GitHub.Network/networkSettings`, `Informatica.DataManagement/organizations`, `Microsoft.ApiManagement/service`, `Microsoft.Apollo/npu`, `Microsoft.App/environments`, `Microsoft.App/testClients`, `Microsoft.AVS/PrivateClouds`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureHostedService`, `Microsoft.BareMetal/AzureHPC`, `Microsoft.BareMetal/AzurePaymentHSM`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.BareMetal/MonitoringServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.CloudTest/hostedpools`, `Microsoft.CloudTest/images`, `Microsoft.CloudTest/pools`, `Microsoft.Codespaces/plans`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.ContainerService/managedClusters`, `Microsoft.ContainerService/TestClients`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/servers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.DelegatedNetwork/controller`, `Microsoft.DevCenter/networkConnection`, `Microsoft.DevOpsInfrastructure/pools`, `Microsoft.DocumentDB/cassandraClusters`, `Microsoft.Fidalgo/networkSettings`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.LabServices/labplans`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`, `Microsoft.Netapp/volumes`, `Microsoft.Network/dnsResolvers`, `Microsoft.Network/managedResolvers`, `Microsoft.Network/fpgaNetworkInterfaces`, `Microsoft.Network/networkWatchers.`, `Microsoft.Network/virtualNetworkGateways`, `Microsoft.Orbital/orbitalGateways`, `Microsoft.PowerPlatform/enterprisePolicies`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.ServiceNetworking/trafficControllers`, `Microsoft.Singularity/accounts/networks`, `Microsoft.Singularity/accounts/npu`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/managedInstancesOnebox`, `Microsoft.Sql/managedInstancesStage`, `Microsoft.Sql/managedInstancesTest`, `Microsoft.Sql/servers`, `Microsoft.StoragePool/diskPools`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, `Microsoft.Web/serverFarms`, `NGINX.NGINXPLUS/nginxDeployments`, `PaloAltoNetworks.Cloudngfw/firewalls`, `Qumulo.Storage/fileSystems`, and `Oracle.Database/networkAttachments`.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of Actions which should be delegated. This list is specific to the service to delegate to. Possible values are `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/publicIPAddresses/read`, `Microsoft.Network/virtualNetworks/read`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action`, and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.

        > **NOTE:** Azure may add default actions depending on the service delegation name and they can't be changed.
        """
        return pulumi.get(self, "actions")

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


if not MYPY:
    class VnpGatewayNatRuleExternalMappingArgsDict(TypedDict):
        address_space: pulumi.Input[str]
        """
        The string CIDR representing the address space for the VPN Gateway Nat Rule external mapping.
        """
        port_range: NotRequired[pulumi.Input[str]]
        """
        The single port range for the VPN Gateway Nat Rule external mapping.
        """
elif False:
    VnpGatewayNatRuleExternalMappingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VnpGatewayNatRuleExternalMappingArgs:
    def __init__(__self__, *,
                 address_space: pulumi.Input[str],
                 port_range: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address_space: The string CIDR representing the address space for the VPN Gateway Nat Rule external mapping.
        :param pulumi.Input[str] port_range: The single port range for the VPN Gateway Nat Rule external mapping.
        """
        pulumi.set(__self__, "address_space", address_space)
        if port_range is not None:
            pulumi.set(__self__, "port_range", port_range)

    @property
    @pulumi.getter(name="addressSpace")
    def address_space(self) -> pulumi.Input[str]:
        """
        The string CIDR representing the address space for the VPN Gateway Nat Rule external mapping.
        """
        return pulumi.get(self, "address_space")

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

    @property
    @pulumi.getter(name="portRange")
    def port_range(self) -> Optional[pulumi.Input[str]]:
        """
        The single port range for the VPN Gateway Nat Rule external mapping.
        """
        return pulumi.get(self, "port_range")

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


if not MYPY:
    class VnpGatewayNatRuleInternalMappingArgsDict(TypedDict):
        address_space: pulumi.Input[str]
        """
        The string CIDR representing the address space for the VPN Gateway Nat Rule internal mapping.
        """
        port_range: NotRequired[pulumi.Input[str]]
        """
        The single port range for the VPN Gateway Nat Rule internal mapping.
        """
elif False:
    VnpGatewayNatRuleInternalMappingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VnpGatewayNatRuleInternalMappingArgs:
    def __init__(__self__, *,
                 address_space: pulumi.Input[str],
                 port_range: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address_space: The string CIDR representing the address space for the VPN Gateway Nat Rule internal mapping.
        :param pulumi.Input[str] port_range: The single port range for the VPN Gateway Nat Rule internal mapping.
        """
        pulumi.set(__self__, "address_space", address_space)
        if port_range is not None:
            pulumi.set(__self__, "port_range", port_range)

    @property
    @pulumi.getter(name="addressSpace")
    def address_space(self) -> pulumi.Input[str]:
        """
        The string CIDR representing the address space for the VPN Gateway Nat Rule internal mapping.
        """
        return pulumi.get(self, "address_space")

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

    @property
    @pulumi.getter(name="portRange")
    def port_range(self) -> Optional[pulumi.Input[str]]:
        """
        The single port range for the VPN Gateway Nat Rule internal mapping.
        """
        return pulumi.get(self, "port_range")

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


if not MYPY:
    class VpnGatewayBgpSettingsArgsDict(TypedDict):
        asn: pulumi.Input[int]
        """
        The ASN of the BGP Speaker. Changing this forces a new resource to be created.
        """
        peer_weight: pulumi.Input[int]
        """
        The weight added to Routes learned from this BGP Speaker. Changing this forces a new resource to be created.
        """
        bgp_peering_address: NotRequired[pulumi.Input[str]]
        """
        The Address which should be used for the BGP Peering.
        """
        instance0_bgp_peering_address: NotRequired[pulumi.Input['VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgsDict']]
        """
        An `instance_bgp_peering_address` block as defined below.
        """
        instance1_bgp_peering_address: NotRequired[pulumi.Input['VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgsDict']]
        """
        An `instance_bgp_peering_address` block as defined below.
        """
elif False:
    VpnGatewayBgpSettingsArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayBgpSettingsArgs:
    def __init__(__self__, *,
                 asn: pulumi.Input[int],
                 peer_weight: pulumi.Input[int],
                 bgp_peering_address: Optional[pulumi.Input[str]] = None,
                 instance0_bgp_peering_address: Optional[pulumi.Input['VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgs']] = None,
                 instance1_bgp_peering_address: Optional[pulumi.Input['VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgs']] = None):
        """
        :param pulumi.Input[int] asn: The ASN of the BGP Speaker. Changing this forces a new resource to be created.
        :param pulumi.Input[int] peer_weight: The weight added to Routes learned from this BGP Speaker. Changing this forces a new resource to be created.
        :param pulumi.Input[str] bgp_peering_address: The Address which should be used for the BGP Peering.
        :param pulumi.Input['VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgs'] instance0_bgp_peering_address: An `instance_bgp_peering_address` block as defined below.
        :param pulumi.Input['VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgs'] instance1_bgp_peering_address: An `instance_bgp_peering_address` block as defined below.
        """
        pulumi.set(__self__, "asn", asn)
        pulumi.set(__self__, "peer_weight", peer_weight)
        if bgp_peering_address is not None:
            pulumi.set(__self__, "bgp_peering_address", bgp_peering_address)
        if instance0_bgp_peering_address is not None:
            pulumi.set(__self__, "instance0_bgp_peering_address", instance0_bgp_peering_address)
        if instance1_bgp_peering_address is not None:
            pulumi.set(__self__, "instance1_bgp_peering_address", instance1_bgp_peering_address)

    @property
    @pulumi.getter
    def asn(self) -> pulumi.Input[int]:
        """
        The ASN of the BGP Speaker. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "asn")

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

    @property
    @pulumi.getter(name="peerWeight")
    def peer_weight(self) -> pulumi.Input[int]:
        """
        The weight added to Routes learned from this BGP Speaker. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "peer_weight")

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

    @property
    @pulumi.getter(name="bgpPeeringAddress")
    def bgp_peering_address(self) -> Optional[pulumi.Input[str]]:
        """
        The Address which should be used for the BGP Peering.
        """
        return pulumi.get(self, "bgp_peering_address")

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

    @property
    @pulumi.getter(name="instance0BgpPeeringAddress")
    def instance0_bgp_peering_address(self) -> Optional[pulumi.Input['VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgs']]:
        """
        An `instance_bgp_peering_address` block as defined below.
        """
        return pulumi.get(self, "instance0_bgp_peering_address")

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

    @property
    @pulumi.getter(name="instance1BgpPeeringAddress")
    def instance1_bgp_peering_address(self) -> Optional[pulumi.Input['VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgs']]:
        """
        An `instance_bgp_peering_address` block as defined below.
        """
        return pulumi.get(self, "instance1_bgp_peering_address")

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


if not MYPY:
    class VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgsDict(TypedDict):
        custom_ips: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of custom BGP peering addresses to assign to this instance.
        """
        default_ips: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of default BGP peering addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        ip_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The pre-defined id of VPN Gateway IP Configuration.
        """
        tunnel_ips: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of tunnel public IP addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
elif False:
    VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgs:
    def __init__(__self__, *,
                 custom_ips: pulumi.Input[Sequence[pulumi.Input[str]]],
                 default_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ip_configuration_id: Optional[pulumi.Input[str]] = None,
                 tunnel_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_ips: A list of custom BGP peering addresses to assign to this instance.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] default_ips: The list of default BGP peering addresses which belong to the pre-defined VPN Gateway IP configuration.
        :param pulumi.Input[str] ip_configuration_id: The pre-defined id of VPN Gateway IP Configuration.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tunnel_ips: The list of tunnel public IP addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        pulumi.set(__self__, "custom_ips", custom_ips)
        if default_ips is not None:
            pulumi.set(__self__, "default_ips", default_ips)
        if ip_configuration_id is not None:
            pulumi.set(__self__, "ip_configuration_id", ip_configuration_id)
        if tunnel_ips is not None:
            pulumi.set(__self__, "tunnel_ips", tunnel_ips)

    @property
    @pulumi.getter(name="customIps")
    def custom_ips(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of custom BGP peering addresses to assign to this instance.
        """
        return pulumi.get(self, "custom_ips")

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

    @property
    @pulumi.getter(name="defaultIps")
    def default_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of default BGP peering addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        return pulumi.get(self, "default_ips")

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

    @property
    @pulumi.getter(name="ipConfigurationId")
    def ip_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The pre-defined id of VPN Gateway IP Configuration.
        """
        return pulumi.get(self, "ip_configuration_id")

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

    @property
    @pulumi.getter(name="tunnelIps")
    def tunnel_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of tunnel public IP addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        return pulumi.get(self, "tunnel_ips")

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


if not MYPY:
    class VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgsDict(TypedDict):
        custom_ips: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of custom BGP peering addresses to assign to this instance.
        """
        default_ips: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of default BGP peering addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        ip_configuration_id: NotRequired[pulumi.Input[str]]
        """
        The pre-defined id of VPN Gateway IP Configuration.
        """
        tunnel_ips: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        The list of tunnel public IP addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
elif False:
    VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgs:
    def __init__(__self__, *,
                 custom_ips: pulumi.Input[Sequence[pulumi.Input[str]]],
                 default_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ip_configuration_id: Optional[pulumi.Input[str]] = None,
                 tunnel_ips: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] custom_ips: A list of custom BGP peering addresses to assign to this instance.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] default_ips: The list of default BGP peering addresses which belong to the pre-defined VPN Gateway IP configuration.
        :param pulumi.Input[str] ip_configuration_id: The pre-defined id of VPN Gateway IP Configuration.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] tunnel_ips: The list of tunnel public IP addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        pulumi.set(__self__, "custom_ips", custom_ips)
        if default_ips is not None:
            pulumi.set(__self__, "default_ips", default_ips)
        if ip_configuration_id is not None:
            pulumi.set(__self__, "ip_configuration_id", ip_configuration_id)
        if tunnel_ips is not None:
            pulumi.set(__self__, "tunnel_ips", tunnel_ips)

    @property
    @pulumi.getter(name="customIps")
    def custom_ips(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of custom BGP peering addresses to assign to this instance.
        """
        return pulumi.get(self, "custom_ips")

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

    @property
    @pulumi.getter(name="defaultIps")
    def default_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of default BGP peering addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        return pulumi.get(self, "default_ips")

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

    @property
    @pulumi.getter(name="ipConfigurationId")
    def ip_configuration_id(self) -> Optional[pulumi.Input[str]]:
        """
        The pre-defined id of VPN Gateway IP Configuration.
        """
        return pulumi.get(self, "ip_configuration_id")

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

    @property
    @pulumi.getter(name="tunnelIps")
    def tunnel_ips(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The list of tunnel public IP addresses which belong to the pre-defined VPN Gateway IP configuration.
        """
        return pulumi.get(self, "tunnel_ips")

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


if not MYPY:
    class VpnGatewayConnectionRoutingArgsDict(TypedDict):
        associated_route_table: pulumi.Input[str]
        """
        The ID of the Route Table associated with this VPN Connection.
        """
        inbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        """
        outbound_route_map_id: NotRequired[pulumi.Input[str]]
        """
        The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        """
        propagated_route_table: NotRequired[pulumi.Input['VpnGatewayConnectionRoutingPropagatedRouteTableArgsDict']]
        """
        A `propagated_route_table` block as defined below.
        """
elif False:
    VpnGatewayConnectionRoutingArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayConnectionRoutingArgs:
    def __init__(__self__, *,
                 associated_route_table: pulumi.Input[str],
                 inbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 outbound_route_map_id: Optional[pulumi.Input[str]] = None,
                 propagated_route_table: Optional[pulumi.Input['VpnGatewayConnectionRoutingPropagatedRouteTableArgs']] = None):
        """
        :param pulumi.Input[str] associated_route_table: The ID of the Route Table associated with this VPN Connection.
        :param pulumi.Input[str] inbound_route_map_id: The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        :param pulumi.Input[str] outbound_route_map_id: The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        :param pulumi.Input['VpnGatewayConnectionRoutingPropagatedRouteTableArgs'] propagated_route_table: A `propagated_route_table` block as defined below.
        """
        pulumi.set(__self__, "associated_route_table", associated_route_table)
        if inbound_route_map_id is not None:
            pulumi.set(__self__, "inbound_route_map_id", inbound_route_map_id)
        if outbound_route_map_id is not None:
            pulumi.set(__self__, "outbound_route_map_id", outbound_route_map_id)
        if propagated_route_table is not None:
            pulumi.set(__self__, "propagated_route_table", propagated_route_table)

    @property
    @pulumi.getter(name="associatedRouteTable")
    def associated_route_table(self) -> pulumi.Input[str]:
        """
        The ID of the Route Table associated with this VPN Connection.
        """
        return pulumi.get(self, "associated_route_table")

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

    @property
    @pulumi.getter(name="inboundRouteMapId")
    def inbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Route Map associated with this Routing Configuration for inbound learned routes.
        """
        return pulumi.get(self, "inbound_route_map_id")

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

    @property
    @pulumi.getter(name="outboundRouteMapId")
    def outbound_route_map_id(self) -> Optional[pulumi.Input[str]]:
        """
        The resource ID of the Route Map associated with this Routing Configuration for outbound advertised routes.
        """
        return pulumi.get(self, "outbound_route_map_id")

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

    @property
    @pulumi.getter(name="propagatedRouteTable")
    def propagated_route_table(self) -> Optional[pulumi.Input['VpnGatewayConnectionRoutingPropagatedRouteTableArgs']]:
        """
        A `propagated_route_table` block as defined below.
        """
        return pulumi.get(self, "propagated_route_table")

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


if not MYPY:
    class VpnGatewayConnectionRoutingPropagatedRouteTableArgsDict(TypedDict):
        route_table_ids: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of Route Table IDs to associated with this VPN Gateway Connection.
        """
        labels: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of labels to assign to this route table.
        """
elif False:
    VpnGatewayConnectionRoutingPropagatedRouteTableArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayConnectionRoutingPropagatedRouteTableArgs:
    def __init__(__self__, *,
                 route_table_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 labels: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] route_table_ids: A list of Route Table IDs to associated with this VPN Gateway Connection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] labels: A list of labels to assign to this route table.
        """
        pulumi.set(__self__, "route_table_ids", route_table_ids)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)

    @property
    @pulumi.getter(name="routeTableIds")
    def route_table_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of Route Table IDs to associated with this VPN Gateway Connection.
        """
        return pulumi.get(self, "route_table_ids")

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

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of labels to assign to this route table.
        """
        return pulumi.get(self, "labels")

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


if not MYPY:
    class VpnGatewayConnectionTrafficSelectorPolicyArgsDict(TypedDict):
        local_address_ranges: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of local address spaces in CIDR format for this VPN Gateway Connection.
        """
        remote_address_ranges: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of remote address spaces in CIDR format for this VPN Gateway Connection.
        """
elif False:
    VpnGatewayConnectionTrafficSelectorPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayConnectionTrafficSelectorPolicyArgs:
    def __init__(__self__, *,
                 local_address_ranges: pulumi.Input[Sequence[pulumi.Input[str]]],
                 remote_address_ranges: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] local_address_ranges: A list of local address spaces in CIDR format for this VPN Gateway Connection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] remote_address_ranges: A list of remote address spaces in CIDR format for this VPN Gateway Connection.
        """
        pulumi.set(__self__, "local_address_ranges", local_address_ranges)
        pulumi.set(__self__, "remote_address_ranges", remote_address_ranges)

    @property
    @pulumi.getter(name="localAddressRanges")
    def local_address_ranges(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of local address spaces in CIDR format for this VPN Gateway Connection.
        """
        return pulumi.get(self, "local_address_ranges")

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

    @property
    @pulumi.getter(name="remoteAddressRanges")
    def remote_address_ranges(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of remote address spaces in CIDR format for this VPN Gateway Connection.
        """
        return pulumi.get(self, "remote_address_ranges")

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


if not MYPY:
    class VpnGatewayConnectionVpnLinkArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name which should be used for this VPN Link Connection.
        """
        vpn_site_link_id: pulumi.Input[str]
        """
        The ID of the connected VPN Site Link. Changing this forces a new VPN Gateway Connection to be created.
        """
        bandwidth_mbps: NotRequired[pulumi.Input[int]]
        """
        The expected connection bandwidth in MBPS. Defaults to `10`.
        """
        bgp_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should the BGP be enabled? Defaults to `false`. Changing this forces a new VPN Gateway Connection to be created.
        """
        connection_mode: NotRequired[pulumi.Input[str]]
        """
        The connection mode of this VPN Link. Possible values are `Default`, `InitiatorOnly` and `ResponderOnly`. Defaults to `Default`.
        """
        custom_bgp_addresses: NotRequired[pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkCustomBgpAddressArgsDict']]]]
        """
        One or more `custom_bgp_address` blocks as defined below.
        """
        egress_nat_rule_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the egress NAT Rule Ids.
        """
        ingress_nat_rule_ids: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the ingress NAT Rule Ids.
        """
        ipsec_policies: NotRequired[pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkIpsecPolicyArgsDict']]]]
        """
        One or more `ipsec_policy` blocks as defined above.
        """
        local_azure_ip_address_enabled: NotRequired[pulumi.Input[bool]]
        """
        Whether to use local Azure IP to initiate connection? Defaults to `false`.
        """
        policy_based_traffic_selector_enabled: NotRequired[pulumi.Input[bool]]
        """
        Whether to enable policy-based traffic selectors? Defaults to `false`.
        """
        protocol: NotRequired[pulumi.Input[str]]
        """
        The protocol used for this VPN Link Connection. Possible values are `IKEv1` and `IKEv2`. Defaults to `IKEv2`.
        """
        ratelimit_enabled: NotRequired[pulumi.Input[bool]]
        """
        Should the rate limit be enabled? Defaults to `false`.
        """
        route_weight: NotRequired[pulumi.Input[int]]
        """
        Routing weight for this VPN Link Connection. Defaults to `0`.
        """
        shared_key: NotRequired[pulumi.Input[str]]
        """
        SharedKey for this VPN Link Connection.
        """
elif False:
    VpnGatewayConnectionVpnLinkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayConnectionVpnLinkArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 vpn_site_link_id: pulumi.Input[str],
                 bandwidth_mbps: Optional[pulumi.Input[int]] = None,
                 bgp_enabled: Optional[pulumi.Input[bool]] = None,
                 connection_mode: Optional[pulumi.Input[str]] = None,
                 custom_bgp_addresses: Optional[pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkCustomBgpAddressArgs']]]] = None,
                 egress_nat_rule_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ingress_nat_rule_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 ipsec_policies: Optional[pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkIpsecPolicyArgs']]]] = None,
                 local_azure_ip_address_enabled: Optional[pulumi.Input[bool]] = None,
                 policy_based_traffic_selector_enabled: Optional[pulumi.Input[bool]] = None,
                 protocol: Optional[pulumi.Input[str]] = None,
                 ratelimit_enabled: Optional[pulumi.Input[bool]] = None,
                 route_weight: Optional[pulumi.Input[int]] = None,
                 shared_key: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this VPN Link Connection.
        :param pulumi.Input[str] vpn_site_link_id: The ID of the connected VPN Site Link. Changing this forces a new VPN Gateway Connection to be created.
        :param pulumi.Input[int] bandwidth_mbps: The expected connection bandwidth in MBPS. Defaults to `10`.
        :param pulumi.Input[bool] bgp_enabled: Should the BGP be enabled? Defaults to `false`. Changing this forces a new VPN Gateway Connection to be created.
        :param pulumi.Input[str] connection_mode: The connection mode of this VPN Link. Possible values are `Default`, `InitiatorOnly` and `ResponderOnly`. Defaults to `Default`.
        :param pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkCustomBgpAddressArgs']]] custom_bgp_addresses: One or more `custom_bgp_address` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] egress_nat_rule_ids: A list of the egress NAT Rule Ids.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ingress_nat_rule_ids: A list of the ingress NAT Rule Ids.
        :param pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkIpsecPolicyArgs']]] ipsec_policies: One or more `ipsec_policy` blocks as defined above.
        :param pulumi.Input[bool] local_azure_ip_address_enabled: Whether to use local Azure IP to initiate connection? Defaults to `false`.
        :param pulumi.Input[bool] policy_based_traffic_selector_enabled: Whether to enable policy-based traffic selectors? Defaults to `false`.
        :param pulumi.Input[str] protocol: The protocol used for this VPN Link Connection. Possible values are `IKEv1` and `IKEv2`. Defaults to `IKEv2`.
        :param pulumi.Input[bool] ratelimit_enabled: Should the rate limit be enabled? Defaults to `false`.
        :param pulumi.Input[int] route_weight: Routing weight for this VPN Link Connection. Defaults to `0`.
        :param pulumi.Input[str] shared_key: SharedKey for this VPN Link Connection.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "vpn_site_link_id", vpn_site_link_id)
        if bandwidth_mbps is not None:
            pulumi.set(__self__, "bandwidth_mbps", bandwidth_mbps)
        if bgp_enabled is not None:
            pulumi.set(__self__, "bgp_enabled", bgp_enabled)
        if connection_mode is not None:
            pulumi.set(__self__, "connection_mode", connection_mode)
        if custom_bgp_addresses is not None:
            pulumi.set(__self__, "custom_bgp_addresses", custom_bgp_addresses)
        if egress_nat_rule_ids is not None:
            pulumi.set(__self__, "egress_nat_rule_ids", egress_nat_rule_ids)
        if ingress_nat_rule_ids is not None:
            pulumi.set(__self__, "ingress_nat_rule_ids", ingress_nat_rule_ids)
        if ipsec_policies is not None:
            pulumi.set(__self__, "ipsec_policies", ipsec_policies)
        if local_azure_ip_address_enabled is not None:
            pulumi.set(__self__, "local_azure_ip_address_enabled", local_azure_ip_address_enabled)
        if policy_based_traffic_selector_enabled is not None:
            pulumi.set(__self__, "policy_based_traffic_selector_enabled", policy_based_traffic_selector_enabled)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if ratelimit_enabled is not None:
            pulumi.set(__self__, "ratelimit_enabled", ratelimit_enabled)
        if route_weight is not None:
            pulumi.set(__self__, "route_weight", route_weight)
        if shared_key is not None:
            pulumi.set(__self__, "shared_key", shared_key)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this VPN Link Connection.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="vpnSiteLinkId")
    def vpn_site_link_id(self) -> pulumi.Input[str]:
        """
        The ID of the connected VPN Site Link. Changing this forces a new VPN Gateway Connection to be created.
        """
        return pulumi.get(self, "vpn_site_link_id")

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

    @property
    @pulumi.getter(name="bandwidthMbps")
    def bandwidth_mbps(self) -> Optional[pulumi.Input[int]]:
        """
        The expected connection bandwidth in MBPS. Defaults to `10`.
        """
        return pulumi.get(self, "bandwidth_mbps")

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

    @property
    @pulumi.getter(name="bgpEnabled")
    def bgp_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should the BGP be enabled? Defaults to `false`. Changing this forces a new VPN Gateway Connection to be created.
        """
        return pulumi.get(self, "bgp_enabled")

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

    @property
    @pulumi.getter(name="connectionMode")
    def connection_mode(self) -> Optional[pulumi.Input[str]]:
        """
        The connection mode of this VPN Link. Possible values are `Default`, `InitiatorOnly` and `ResponderOnly`. Defaults to `Default`.
        """
        return pulumi.get(self, "connection_mode")

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

    @property
    @pulumi.getter(name="customBgpAddresses")
    def custom_bgp_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkCustomBgpAddressArgs']]]]:
        """
        One or more `custom_bgp_address` blocks as defined below.
        """
        return pulumi.get(self, "custom_bgp_addresses")

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

    @property
    @pulumi.getter(name="egressNatRuleIds")
    def egress_nat_rule_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the egress NAT Rule Ids.
        """
        return pulumi.get(self, "egress_nat_rule_ids")

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

    @property
    @pulumi.getter(name="ingressNatRuleIds")
    def ingress_nat_rule_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the ingress NAT Rule Ids.
        """
        return pulumi.get(self, "ingress_nat_rule_ids")

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

    @property
    @pulumi.getter(name="ipsecPolicies")
    def ipsec_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VpnGatewayConnectionVpnLinkIpsecPolicyArgs']]]]:
        """
        One or more `ipsec_policy` blocks as defined above.
        """
        return pulumi.get(self, "ipsec_policies")

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

    @property
    @pulumi.getter(name="localAzureIpAddressEnabled")
    def local_azure_ip_address_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to use local Azure IP to initiate connection? Defaults to `false`.
        """
        return pulumi.get(self, "local_azure_ip_address_enabled")

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

    @property
    @pulumi.getter(name="policyBasedTrafficSelectorEnabled")
    def policy_based_traffic_selector_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to enable policy-based traffic selectors? Defaults to `false`.
        """
        return pulumi.get(self, "policy_based_traffic_selector_enabled")

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

    @property
    @pulumi.getter
    def protocol(self) -> Optional[pulumi.Input[str]]:
        """
        The protocol used for this VPN Link Connection. Possible values are `IKEv1` and `IKEv2`. Defaults to `IKEv2`.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="ratelimitEnabled")
    def ratelimit_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Should the rate limit be enabled? Defaults to `false`.
        """
        return pulumi.get(self, "ratelimit_enabled")

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

    @property
    @pulumi.getter(name="routeWeight")
    def route_weight(self) -> Optional[pulumi.Input[int]]:
        """
        Routing weight for this VPN Link Connection. Defaults to `0`.
        """
        return pulumi.get(self, "route_weight")

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

    @property
    @pulumi.getter(name="sharedKey")
    def shared_key(self) -> Optional[pulumi.Input[str]]:
        """
        SharedKey for this VPN Link Connection.
        """
        return pulumi.get(self, "shared_key")

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


if not MYPY:
    class VpnGatewayConnectionVpnLinkCustomBgpAddressArgsDict(TypedDict):
        ip_address: pulumi.Input[str]
        """
        The custom bgp ip address which belongs to the IP Configuration.
        """
        ip_configuration_id: pulumi.Input[str]
        """
        The ID of the IP Configuration which belongs to the VPN Gateway.
        """
elif False:
    VpnGatewayConnectionVpnLinkCustomBgpAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayConnectionVpnLinkCustomBgpAddressArgs:
    def __init__(__self__, *,
                 ip_address: pulumi.Input[str],
                 ip_configuration_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] ip_address: The custom bgp ip address which belongs to the IP Configuration.
        :param pulumi.Input[str] ip_configuration_id: The ID of the IP Configuration which belongs to the VPN Gateway.
        """
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "ip_configuration_id", ip_configuration_id)

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> pulumi.Input[str]:
        """
        The custom bgp ip address which belongs to the IP Configuration.
        """
        return pulumi.get(self, "ip_address")

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

    @property
    @pulumi.getter(name="ipConfigurationId")
    def ip_configuration_id(self) -> pulumi.Input[str]:
        """
        The ID of the IP Configuration which belongs to the VPN Gateway.
        """
        return pulumi.get(self, "ip_configuration_id")

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


if not MYPY:
    class VpnGatewayConnectionVpnLinkIpsecPolicyArgsDict(TypedDict):
        dh_group: pulumi.Input[str]
        """
        The DH Group used in IKE Phase 1 for initial SA. Possible values are `None`, `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384`.
        """
        encryption_algorithm: pulumi.Input[str]
        """
        The IPSec encryption algorithm (IKE phase 1). Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256`, `None`.
        """
        ike_encryption_algorithm: pulumi.Input[str]
        """
        The IKE encryption algorithm (IKE phase 2). Possible values are `DES`, `DES3`, `AES128`, `AES192`, `AES256`, `GCMAES128`, `GCMAES256`.
        """
        ike_integrity_algorithm: pulumi.Input[str]
        """
        The IKE integrity algorithm (IKE phase 2). Possible values are `MD5`, `SHA1`, `SHA256`, `SHA384`, `GCMAES128`, `GCMAES256`.
        """
        integrity_algorithm: pulumi.Input[str]
        """
        The IPSec integrity algorithm (IKE phase 1). Possible values are `MD5`, `SHA1`, `SHA256`, `GCMAES128`, `GCMAES192`, `GCMAES256`.
        """
        pfs_group: pulumi.Input[str]
        """
        The Pfs Group used in IKE Phase 2 for the new child SA. Possible values are `None`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM`, `ECP256`, `ECP384`.
        """
        sa_data_size_kb: pulumi.Input[int]
        """
        The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for the site to site VPN tunnel.
        """
        sa_lifetime_sec: pulumi.Input[int]
        """
        The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for the site to site VPN tunnel.
        """
elif False:
    VpnGatewayConnectionVpnLinkIpsecPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnGatewayConnectionVpnLinkIpsecPolicyArgs:
    def __init__(__self__, *,
                 dh_group: pulumi.Input[str],
                 encryption_algorithm: pulumi.Input[str],
                 ike_encryption_algorithm: pulumi.Input[str],
                 ike_integrity_algorithm: pulumi.Input[str],
                 integrity_algorithm: pulumi.Input[str],
                 pfs_group: pulumi.Input[str],
                 sa_data_size_kb: pulumi.Input[int],
                 sa_lifetime_sec: pulumi.Input[int]):
        """
        :param pulumi.Input[str] dh_group: The DH Group used in IKE Phase 1 for initial SA. Possible values are `None`, `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384`.
        :param pulumi.Input[str] encryption_algorithm: The IPSec encryption algorithm (IKE phase 1). Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256`, `None`.
        :param pulumi.Input[str] ike_encryption_algorithm: The IKE encryption algorithm (IKE phase 2). Possible values are `DES`, `DES3`, `AES128`, `AES192`, `AES256`, `GCMAES128`, `GCMAES256`.
        :param pulumi.Input[str] ike_integrity_algorithm: The IKE integrity algorithm (IKE phase 2). Possible values are `MD5`, `SHA1`, `SHA256`, `SHA384`, `GCMAES128`, `GCMAES256`.
        :param pulumi.Input[str] integrity_algorithm: The IPSec integrity algorithm (IKE phase 1). Possible values are `MD5`, `SHA1`, `SHA256`, `GCMAES128`, `GCMAES192`, `GCMAES256`.
        :param pulumi.Input[str] pfs_group: The Pfs Group used in IKE Phase 2 for the new child SA. Possible values are `None`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM`, `ECP256`, `ECP384`.
        :param pulumi.Input[int] sa_data_size_kb: The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for the site to site VPN tunnel.
        :param pulumi.Input[int] sa_lifetime_sec: The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for the site to site VPN tunnel.
        """
        pulumi.set(__self__, "dh_group", dh_group)
        pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        pulumi.set(__self__, "ike_encryption_algorithm", ike_encryption_algorithm)
        pulumi.set(__self__, "ike_integrity_algorithm", ike_integrity_algorithm)
        pulumi.set(__self__, "integrity_algorithm", integrity_algorithm)
        pulumi.set(__self__, "pfs_group", pfs_group)
        pulumi.set(__self__, "sa_data_size_kb", sa_data_size_kb)
        pulumi.set(__self__, "sa_lifetime_sec", sa_lifetime_sec)

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> pulumi.Input[str]:
        """
        The DH Group used in IKE Phase 1 for initial SA. Possible values are `None`, `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384`.
        """
        return pulumi.get(self, "dh_group")

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

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> pulumi.Input[str]:
        """
        The IPSec encryption algorithm (IKE phase 1). Possible values are `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256`, `None`.
        """
        return pulumi.get(self, "encryption_algorithm")

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

    @property
    @pulumi.getter(name="ikeEncryptionAlgorithm")
    def ike_encryption_algorithm(self) -> pulumi.Input[str]:
        """
        The IKE encryption algorithm (IKE phase 2). Possible values are `DES`, `DES3`, `AES128`, `AES192`, `AES256`, `GCMAES128`, `GCMAES256`.
        """
        return pulumi.get(self, "ike_encryption_algorithm")

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

    @property
    @pulumi.getter(name="ikeIntegrityAlgorithm")
    def ike_integrity_algorithm(self) -> pulumi.Input[str]:
        """
        The IKE integrity algorithm (IKE phase 2). Possible values are `MD5`, `SHA1`, `SHA256`, `SHA384`, `GCMAES128`, `GCMAES256`.
        """
        return pulumi.get(self, "ike_integrity_algorithm")

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

    @property
    @pulumi.getter(name="integrityAlgorithm")
    def integrity_algorithm(self) -> pulumi.Input[str]:
        """
        The IPSec integrity algorithm (IKE phase 1). Possible values are `MD5`, `SHA1`, `SHA256`, `GCMAES128`, `GCMAES192`, `GCMAES256`.
        """
        return pulumi.get(self, "integrity_algorithm")

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

    @property
    @pulumi.getter(name="pfsGroup")
    def pfs_group(self) -> pulumi.Input[str]:
        """
        The Pfs Group used in IKE Phase 2 for the new child SA. Possible values are `None`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM`, `ECP256`, `ECP384`.
        """
        return pulumi.get(self, "pfs_group")

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

    @property
    @pulumi.getter(name="saDataSizeKb")
    def sa_data_size_kb(self) -> pulumi.Input[int]:
        """
        The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for the site to site VPN tunnel.
        """
        return pulumi.get(self, "sa_data_size_kb")

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

    @property
    @pulumi.getter(name="saLifetimeSec")
    def sa_lifetime_sec(self) -> pulumi.Input[int]:
        """
        The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for the site to site VPN tunnel.
        """
        return pulumi.get(self, "sa_lifetime_sec")

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


if not MYPY:
    class VpnServerConfigurationAzureActiveDirectoryAuthenticationArgsDict(TypedDict):
        audience: pulumi.Input[str]
        """
        The Audience which should be used for authentication.
        """
        issuer: pulumi.Input[str]
        """
        The Issuer which should be used for authentication.
        """
        tenant: pulumi.Input[str]
        """
        The Tenant which should be used for authentication.
        """
elif False:
    VpnServerConfigurationAzureActiveDirectoryAuthenticationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs:
    def __init__(__self__, *,
                 audience: pulumi.Input[str],
                 issuer: pulumi.Input[str],
                 tenant: pulumi.Input[str]):
        """
        :param pulumi.Input[str] audience: The Audience which should be used for authentication.
        :param pulumi.Input[str] issuer: The Issuer which should be used for authentication.
        :param pulumi.Input[str] tenant: The Tenant which should be used for authentication.
        """
        pulumi.set(__self__, "audience", audience)
        pulumi.set(__self__, "issuer", issuer)
        pulumi.set(__self__, "tenant", tenant)

    @property
    @pulumi.getter
    def audience(self) -> pulumi.Input[str]:
        """
        The Audience which should be used for authentication.
        """
        return pulumi.get(self, "audience")

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

    @property
    @pulumi.getter
    def issuer(self) -> pulumi.Input[str]:
        """
        The Issuer which should be used for authentication.
        """
        return pulumi.get(self, "issuer")

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

    @property
    @pulumi.getter
    def tenant(self) -> pulumi.Input[str]:
        """
        The Tenant which should be used for authentication.
        """
        return pulumi.get(self, "tenant")

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


if not MYPY:
    class VpnServerConfigurationClientRevokedCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name used to uniquely identify this certificate.
        """
        thumbprint: pulumi.Input[str]
        """
        The Thumbprint of the Certificate.
        """
elif False:
    VpnServerConfigurationClientRevokedCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationClientRevokedCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 thumbprint: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: A name used to uniquely identify this certificate.
        :param pulumi.Input[str] thumbprint: The Thumbprint of the Certificate.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "thumbprint", thumbprint)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name used to uniquely identify this certificate.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def thumbprint(self) -> pulumi.Input[str]:
        """
        The Thumbprint of the Certificate.
        """
        return pulumi.get(self, "thumbprint")

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


if not MYPY:
    class VpnServerConfigurationClientRootCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name used to uniquely identify this certificate.
        """
        public_cert_data: pulumi.Input[str]
        """
        The Public Key Data associated with the Certificate.
        """
elif False:
    VpnServerConfigurationClientRootCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationClientRootCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 public_cert_data: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: A name used to uniquely identify this certificate.
        :param pulumi.Input[str] public_cert_data: The Public Key Data associated with the Certificate.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "public_cert_data", public_cert_data)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name used to uniquely identify this certificate.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="publicCertData")
    def public_cert_data(self) -> pulumi.Input[str]:
        """
        The Public Key Data associated with the Certificate.
        """
        return pulumi.get(self, "public_cert_data")

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


if not MYPY:
    class VpnServerConfigurationIpsecPolicyArgsDict(TypedDict):
        dh_group: pulumi.Input[str]
        """
        The DH Group, used in IKE Phase 1. Possible values include `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384` and `None`.
        """
        ike_encryption: pulumi.Input[str]
        """
        The IKE encryption algorithm, used for IKE Phase 2. Possible values include `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128` and `GCMAES256`.
        """
        ike_integrity: pulumi.Input[str]
        """
        The IKE encryption integrity algorithm, used for IKE Phase 2. Possible values include `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256` and `SHA384`.
        """
        ipsec_encryption: pulumi.Input[str]
        """
        The IPSec encryption algorithm, used for IKE phase 1. Possible values include `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256` and `None`.
        """
        ipsec_integrity: pulumi.Input[str]
        """
        The IPSec integrity algorithm, used for IKE phase 1. Possible values include `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1` and `SHA256`.
        """
        pfs_group: pulumi.Input[str]
        """
        The Pfs Group, used in IKE Phase 2. Possible values include `ECP256`, `ECP384`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM` and `None`.
        """
        sa_data_size_kilobytes: pulumi.Input[int]
        """
        The IPSec Security Association payload size in KB for a Site-to-Site VPN tunnel.
        """
        sa_lifetime_seconds: pulumi.Input[int]
        """
        The IPSec Security Association lifetime in seconds for a Site-to-Site VPN tunnel.
        """
elif False:
    VpnServerConfigurationIpsecPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationIpsecPolicyArgs:
    def __init__(__self__, *,
                 dh_group: pulumi.Input[str],
                 ike_encryption: pulumi.Input[str],
                 ike_integrity: pulumi.Input[str],
                 ipsec_encryption: pulumi.Input[str],
                 ipsec_integrity: pulumi.Input[str],
                 pfs_group: pulumi.Input[str],
                 sa_data_size_kilobytes: pulumi.Input[int],
                 sa_lifetime_seconds: pulumi.Input[int]):
        """
        :param pulumi.Input[str] dh_group: The DH Group, used in IKE Phase 1. Possible values include `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384` and `None`.
        :param pulumi.Input[str] ike_encryption: The IKE encryption algorithm, used for IKE Phase 2. Possible values include `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128` and `GCMAES256`.
        :param pulumi.Input[str] ike_integrity: The IKE encryption integrity algorithm, used for IKE Phase 2. Possible values include `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256` and `SHA384`.
        :param pulumi.Input[str] ipsec_encryption: The IPSec encryption algorithm, used for IKE phase 1. Possible values include `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256` and `None`.
        :param pulumi.Input[str] ipsec_integrity: The IPSec integrity algorithm, used for IKE phase 1. Possible values include `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1` and `SHA256`.
        :param pulumi.Input[str] pfs_group: The Pfs Group, used in IKE Phase 2. Possible values include `ECP256`, `ECP384`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM` and `None`.
        :param pulumi.Input[int] sa_data_size_kilobytes: The IPSec Security Association payload size in KB for a Site-to-Site VPN tunnel.
        :param pulumi.Input[int] sa_lifetime_seconds: The IPSec Security Association lifetime in seconds for a Site-to-Site VPN tunnel.
        """
        pulumi.set(__self__, "dh_group", dh_group)
        pulumi.set(__self__, "ike_encryption", ike_encryption)
        pulumi.set(__self__, "ike_integrity", ike_integrity)
        pulumi.set(__self__, "ipsec_encryption", ipsec_encryption)
        pulumi.set(__self__, "ipsec_integrity", ipsec_integrity)
        pulumi.set(__self__, "pfs_group", pfs_group)
        pulumi.set(__self__, "sa_data_size_kilobytes", sa_data_size_kilobytes)
        pulumi.set(__self__, "sa_lifetime_seconds", sa_lifetime_seconds)

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> pulumi.Input[str]:
        """
        The DH Group, used in IKE Phase 1. Possible values include `DHGroup1`, `DHGroup2`, `DHGroup14`, `DHGroup24`, `DHGroup2048`, `ECP256`, `ECP384` and `None`.
        """
        return pulumi.get(self, "dh_group")

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

    @property
    @pulumi.getter(name="ikeEncryption")
    def ike_encryption(self) -> pulumi.Input[str]:
        """
        The IKE encryption algorithm, used for IKE Phase 2. Possible values include `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128` and `GCMAES256`.
        """
        return pulumi.get(self, "ike_encryption")

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

    @property
    @pulumi.getter(name="ikeIntegrity")
    def ike_integrity(self) -> pulumi.Input[str]:
        """
        The IKE encryption integrity algorithm, used for IKE Phase 2. Possible values include `GCMAES128`, `GCMAES256`, `MD5`, `SHA1`, `SHA256` and `SHA384`.
        """
        return pulumi.get(self, "ike_integrity")

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

    @property
    @pulumi.getter(name="ipsecEncryption")
    def ipsec_encryption(self) -> pulumi.Input[str]:
        """
        The IPSec encryption algorithm, used for IKE phase 1. Possible values include `AES128`, `AES192`, `AES256`, `DES`, `DES3`, `GCMAES128`, `GCMAES192`, `GCMAES256` and `None`.
        """
        return pulumi.get(self, "ipsec_encryption")

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

    @property
    @pulumi.getter(name="ipsecIntegrity")
    def ipsec_integrity(self) -> pulumi.Input[str]:
        """
        The IPSec integrity algorithm, used for IKE phase 1. Possible values include `GCMAES128`, `GCMAES192`, `GCMAES256`, `MD5`, `SHA1` and `SHA256`.
        """
        return pulumi.get(self, "ipsec_integrity")

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

    @property
    @pulumi.getter(name="pfsGroup")
    def pfs_group(self) -> pulumi.Input[str]:
        """
        The Pfs Group, used in IKE Phase 2. Possible values include `ECP256`, `ECP384`, `PFS1`, `PFS2`, `PFS14`, `PFS24`, `PFS2048`, `PFSMM` and `None`.
        """
        return pulumi.get(self, "pfs_group")

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

    @property
    @pulumi.getter(name="saDataSizeKilobytes")
    def sa_data_size_kilobytes(self) -> pulumi.Input[int]:
        """
        The IPSec Security Association payload size in KB for a Site-to-Site VPN tunnel.
        """
        return pulumi.get(self, "sa_data_size_kilobytes")

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

    @property
    @pulumi.getter(name="saLifetimeSeconds")
    def sa_lifetime_seconds(self) -> pulumi.Input[int]:
        """
        The IPSec Security Association lifetime in seconds for a Site-to-Site VPN tunnel.
        """
        return pulumi.get(self, "sa_lifetime_seconds")

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


if not MYPY:
    class VpnServerConfigurationPolicyGroupPolicyArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the VPN Server Configuration Policy member.
        """
        type: pulumi.Input[str]
        """
        The attribute type of the VPN Server Configuration Policy member. Possible values are `AADGroupId`, `CertificateGroupId` and `RadiusAzureGroupId`.
        """
        value: pulumi.Input[str]
        """
        The value of the attribute that is used for the VPN Server Configuration Policy member.
        """
elif False:
    VpnServerConfigurationPolicyGroupPolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationPolicyGroupPolicyArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 type: pulumi.Input[str],
                 value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the VPN Server Configuration Policy member.
        :param pulumi.Input[str] type: The attribute type of the VPN Server Configuration Policy member. Possible values are `AADGroupId`, `CertificateGroupId` and `RadiusAzureGroupId`.
        :param pulumi.Input[str] value: The value of the attribute that is used for the VPN Server Configuration Policy member.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the VPN Server Configuration Policy member.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The attribute type of the VPN Server Configuration Policy member. Possible values are `AADGroupId`, `CertificateGroupId` and `RadiusAzureGroupId`.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def value(self) -> pulumi.Input[str]:
        """
        The value of the attribute that is used for the VPN Server Configuration Policy member.
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class VpnServerConfigurationRadiusArgsDict(TypedDict):
        client_root_certificates: NotRequired[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusClientRootCertificateArgsDict']]]]
        """
        One or more `client_root_certificate` blocks as defined below.
        """
        server_root_certificates: NotRequired[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerRootCertificateArgsDict']]]]
        """
        One or more `server_root_certificate` blocks as defined below.
        """
        servers: NotRequired[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerArgsDict']]]]
        """
        One or more `server` blocks as defined below.
        """
elif False:
    VpnServerConfigurationRadiusArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationRadiusArgs:
    def __init__(__self__, *,
                 client_root_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusClientRootCertificateArgs']]]] = None,
                 server_root_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerRootCertificateArgs']]]] = None,
                 servers: Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusClientRootCertificateArgs']]] client_root_certificates: One or more `client_root_certificate` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerRootCertificateArgs']]] server_root_certificates: One or more `server_root_certificate` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerArgs']]] servers: One or more `server` blocks as defined below.
        """
        if client_root_certificates is not None:
            pulumi.set(__self__, "client_root_certificates", client_root_certificates)
        if server_root_certificates is not None:
            pulumi.set(__self__, "server_root_certificates", server_root_certificates)
        if servers is not None:
            pulumi.set(__self__, "servers", servers)

    @property
    @pulumi.getter(name="clientRootCertificates")
    def client_root_certificates(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusClientRootCertificateArgs']]]]:
        """
        One or more `client_root_certificate` blocks as defined below.
        """
        return pulumi.get(self, "client_root_certificates")

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

    @property
    @pulumi.getter(name="serverRootCertificates")
    def server_root_certificates(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerRootCertificateArgs']]]]:
        """
        One or more `server_root_certificate` blocks as defined below.
        """
        return pulumi.get(self, "server_root_certificates")

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

    @property
    @pulumi.getter
    def servers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerArgs']]]]:
        """
        One or more `server` blocks as defined below.
        """
        return pulumi.get(self, "servers")

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


if not MYPY:
    class VpnServerConfigurationRadiusClientRootCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name used to uniquely identify this certificate.
        """
        thumbprint: pulumi.Input[str]
        """
        The Thumbprint of the Certificate.
        """
elif False:
    VpnServerConfigurationRadiusClientRootCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationRadiusClientRootCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 thumbprint: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: A name used to uniquely identify this certificate.
        :param pulumi.Input[str] thumbprint: The Thumbprint of the Certificate.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "thumbprint", thumbprint)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name used to uniquely identify this certificate.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def thumbprint(self) -> pulumi.Input[str]:
        """
        The Thumbprint of the Certificate.
        """
        return pulumi.get(self, "thumbprint")

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


if not MYPY:
    class VpnServerConfigurationRadiusServerArgsDict(TypedDict):
        address: pulumi.Input[str]
        """
        The Address of the Radius Server.
        """
        score: pulumi.Input[int]
        """
        The Score of the Radius Server determines the priority of the server. Ranges from 1 to 30.
        """
        secret: pulumi.Input[str]
        """
        The Secret used to communicate with the Radius Server.
        """
elif False:
    VpnServerConfigurationRadiusServerArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationRadiusServerArgs:
    def __init__(__self__, *,
                 address: pulumi.Input[str],
                 score: pulumi.Input[int],
                 secret: pulumi.Input[str]):
        """
        :param pulumi.Input[str] address: The Address of the Radius Server.
        :param pulumi.Input[int] score: The Score of the Radius Server determines the priority of the server. Ranges from 1 to 30.
        :param pulumi.Input[str] secret: The Secret used to communicate with the Radius Server.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "score", score)
        pulumi.set(__self__, "secret", secret)

    @property
    @pulumi.getter
    def address(self) -> pulumi.Input[str]:
        """
        The Address of the Radius Server.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter
    def score(self) -> pulumi.Input[int]:
        """
        The Score of the Radius Server determines the priority of the server. Ranges from 1 to 30.
        """
        return pulumi.get(self, "score")

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

    @property
    @pulumi.getter
    def secret(self) -> pulumi.Input[str]:
        """
        The Secret used to communicate with the Radius Server.
        """
        return pulumi.get(self, "secret")

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


if not MYPY:
    class VpnServerConfigurationRadiusServerRootCertificateArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        A name used to uniquely identify this certificate.
        """
        public_cert_data: pulumi.Input[str]
        """
        The Public Key Data associated with the Certificate.
        """
elif False:
    VpnServerConfigurationRadiusServerRootCertificateArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnServerConfigurationRadiusServerRootCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 public_cert_data: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: A name used to uniquely identify this certificate.
        :param pulumi.Input[str] public_cert_data: The Public Key Data associated with the Certificate.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "public_cert_data", public_cert_data)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        A name used to uniquely identify this certificate.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="publicCertData")
    def public_cert_data(self) -> pulumi.Input[str]:
        """
        The Public Key Data associated with the Certificate.
        """
        return pulumi.get(self, "public_cert_data")

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


if not MYPY:
    class VpnSiteLinkArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name which should be used for this VPN Site Link.
        """
        bgp: NotRequired[pulumi.Input['VpnSiteLinkBgpArgsDict']]
        """
        A `bgp` block as defined above.

        > **NOTE:** The `link.bgp` has to be set when the `address_cidrs` isn't specified.
        """
        fqdn: NotRequired[pulumi.Input[str]]
        """
        The FQDN of this VPN Site Link.
        """
        id: NotRequired[pulumi.Input[str]]
        """
        The ID of the VPN Site Link.
        """
        ip_address: NotRequired[pulumi.Input[str]]
        """
        The IP address of this VPN Site Link.

        > **NOTE:** Either `fqdn` or `ip_address` should be specified.
        """
        provider_name: NotRequired[pulumi.Input[str]]
        """
        The name of the physical link at the VPN Site. Example: `ATT`, `Verizon`.
        """
        speed_in_mbps: NotRequired[pulumi.Input[int]]
        """
        The speed of the VPN device at the branch location in unit of mbps. Defaults to `0`.
        """
elif False:
    VpnSiteLinkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnSiteLinkArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 bgp: Optional[pulumi.Input['VpnSiteLinkBgpArgs']] = None,
                 fqdn: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 ip_address: Optional[pulumi.Input[str]] = None,
                 provider_name: Optional[pulumi.Input[str]] = None,
                 speed_in_mbps: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] name: The name which should be used for this VPN Site Link.
        :param pulumi.Input['VpnSiteLinkBgpArgs'] bgp: A `bgp` block as defined above.
               
               > **NOTE:** The `link.bgp` has to be set when the `address_cidrs` isn't specified.
        :param pulumi.Input[str] fqdn: The FQDN of this VPN Site Link.
        :param pulumi.Input[str] id: The ID of the VPN Site Link.
        :param pulumi.Input[str] ip_address: The IP address of this VPN Site Link.
               
               > **NOTE:** Either `fqdn` or `ip_address` should be specified.
        :param pulumi.Input[str] provider_name: The name of the physical link at the VPN Site. Example: `ATT`, `Verizon`.
        :param pulumi.Input[int] speed_in_mbps: The speed of the VPN device at the branch location in unit of mbps. Defaults to `0`.
        """
        pulumi.set(__self__, "name", name)
        if bgp is not None:
            pulumi.set(__self__, "bgp", bgp)
        if fqdn is not None:
            pulumi.set(__self__, "fqdn", fqdn)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if ip_address is not None:
            pulumi.set(__self__, "ip_address", ip_address)
        if provider_name is not None:
            pulumi.set(__self__, "provider_name", provider_name)
        if speed_in_mbps is not None:
            pulumi.set(__self__, "speed_in_mbps", speed_in_mbps)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this VPN Site Link.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def bgp(self) -> Optional[pulumi.Input['VpnSiteLinkBgpArgs']]:
        """
        A `bgp` block as defined above.

        > **NOTE:** The `link.bgp` has to be set when the `address_cidrs` isn't specified.
        """
        return pulumi.get(self, "bgp")

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

    @property
    @pulumi.getter
    def fqdn(self) -> Optional[pulumi.Input[str]]:
        """
        The FQDN of this VPN Site Link.
        """
        return pulumi.get(self, "fqdn")

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

    @property
    @pulumi.getter
    def id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the VPN Site Link.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The IP address of this VPN Site Link.

        > **NOTE:** Either `fqdn` or `ip_address` should be specified.
        """
        return pulumi.get(self, "ip_address")

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

    @property
    @pulumi.getter(name="providerName")
    def provider_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the physical link at the VPN Site. Example: `ATT`, `Verizon`.
        """
        return pulumi.get(self, "provider_name")

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

    @property
    @pulumi.getter(name="speedInMbps")
    def speed_in_mbps(self) -> Optional[pulumi.Input[int]]:
        """
        The speed of the VPN device at the branch location in unit of mbps. Defaults to `0`.
        """
        return pulumi.get(self, "speed_in_mbps")

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


if not MYPY:
    class VpnSiteLinkBgpArgsDict(TypedDict):
        asn: pulumi.Input[int]
        """
        The BGP speaker's ASN.
        """
        peering_address: pulumi.Input[str]
        """
        The BGP peering IP address.
        """
elif False:
    VpnSiteLinkBgpArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnSiteLinkBgpArgs:
    def __init__(__self__, *,
                 asn: pulumi.Input[int],
                 peering_address: pulumi.Input[str]):
        """
        :param pulumi.Input[int] asn: The BGP speaker's ASN.
        :param pulumi.Input[str] peering_address: The BGP peering IP address.
        """
        pulumi.set(__self__, "asn", asn)
        pulumi.set(__self__, "peering_address", peering_address)

    @property
    @pulumi.getter
    def asn(self) -> pulumi.Input[int]:
        """
        The BGP speaker's ASN.
        """
        return pulumi.get(self, "asn")

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

    @property
    @pulumi.getter(name="peeringAddress")
    def peering_address(self) -> pulumi.Input[str]:
        """
        The BGP peering IP address.
        """
        return pulumi.get(self, "peering_address")

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


if not MYPY:
    class VpnSiteO365PolicyArgsDict(TypedDict):
        traffic_category: NotRequired[pulumi.Input['VpnSiteO365PolicyTrafficCategoryArgsDict']]
        """
        A `traffic_category` block as defined above.
        """
elif False:
    VpnSiteO365PolicyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnSiteO365PolicyArgs:
    def __init__(__self__, *,
                 traffic_category: Optional[pulumi.Input['VpnSiteO365PolicyTrafficCategoryArgs']] = None):
        """
        :param pulumi.Input['VpnSiteO365PolicyTrafficCategoryArgs'] traffic_category: A `traffic_category` block as defined above.
        """
        if traffic_category is not None:
            pulumi.set(__self__, "traffic_category", traffic_category)

    @property
    @pulumi.getter(name="trafficCategory")
    def traffic_category(self) -> Optional[pulumi.Input['VpnSiteO365PolicyTrafficCategoryArgs']]:
        """
        A `traffic_category` block as defined above.
        """
        return pulumi.get(self, "traffic_category")

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


if not MYPY:
    class VpnSiteO365PolicyTrafficCategoryArgsDict(TypedDict):
        allow_endpoint_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is allow endpoint enabled? The `Allow` endpoint is required for connectivity to specific O365 services and features, but are not as sensitive to network performance and latency as other endpoint types. Defaults to `false`.
        """
        default_endpoint_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is default endpoint enabled? The `Default` endpoint represents O365 services and dependencies that do not require any optimization, and can be treated by customer networks as normal Internet bound traffic. Defaults to `false`.
        """
        optimize_endpoint_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is optimize endpoint enabled? The `Optimize` endpoint is required for connectivity to every O365 service and represents the O365 scenario that is the most sensitive to network performance, latency, and availability. Defaults to `false`.
        """
elif False:
    VpnSiteO365PolicyTrafficCategoryArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpnSiteO365PolicyTrafficCategoryArgs:
    def __init__(__self__, *,
                 allow_endpoint_enabled: Optional[pulumi.Input[bool]] = None,
                 default_endpoint_enabled: Optional[pulumi.Input[bool]] = None,
                 optimize_endpoint_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] allow_endpoint_enabled: Is allow endpoint enabled? The `Allow` endpoint is required for connectivity to specific O365 services and features, but are not as sensitive to network performance and latency as other endpoint types. Defaults to `false`.
        :param pulumi.Input[bool] default_endpoint_enabled: Is default endpoint enabled? The `Default` endpoint represents O365 services and dependencies that do not require any optimization, and can be treated by customer networks as normal Internet bound traffic. Defaults to `false`.
        :param pulumi.Input[bool] optimize_endpoint_enabled: Is optimize endpoint enabled? The `Optimize` endpoint is required for connectivity to every O365 service and represents the O365 scenario that is the most sensitive to network performance, latency, and availability. Defaults to `false`.
        """
        if allow_endpoint_enabled is not None:
            pulumi.set(__self__, "allow_endpoint_enabled", allow_endpoint_enabled)
        if default_endpoint_enabled is not None:
            pulumi.set(__self__, "default_endpoint_enabled", default_endpoint_enabled)
        if optimize_endpoint_enabled is not None:
            pulumi.set(__self__, "optimize_endpoint_enabled", optimize_endpoint_enabled)

    @property
    @pulumi.getter(name="allowEndpointEnabled")
    def allow_endpoint_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is allow endpoint enabled? The `Allow` endpoint is required for connectivity to specific O365 services and features, but are not as sensitive to network performance and latency as other endpoint types. Defaults to `false`.
        """
        return pulumi.get(self, "allow_endpoint_enabled")

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

    @property
    @pulumi.getter(name="defaultEndpointEnabled")
    def default_endpoint_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is default endpoint enabled? The `Default` endpoint represents O365 services and dependencies that do not require any optimization, and can be treated by customer networks as normal Internet bound traffic. Defaults to `false`.
        """
        return pulumi.get(self, "default_endpoint_enabled")

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

    @property
    @pulumi.getter(name="optimizeEndpointEnabled")
    def optimize_endpoint_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is optimize endpoint enabled? The `Optimize` endpoint is required for connectivity to every O365 service and represents the O365 scenario that is the most sensitive to network performance, latency, and availability. Defaults to `false`.
        """
        return pulumi.get(self, "optimize_endpoint_enabled")

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


