# 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 warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'ApplicationGatewayAuthenticationCertificateArgs',
    'ApplicationGatewayAutoscaleConfigurationArgs',
    'ApplicationGatewayBackendAddressPoolArgs',
    'ApplicationGatewayBackendHttpSettingArgs',
    'ApplicationGatewayBackendHttpSettingAuthenticationCertificateArgs',
    'ApplicationGatewayBackendHttpSettingConnectionDrainingArgs',
    'ApplicationGatewayCustomErrorConfigurationArgs',
    'ApplicationGatewayFrontendIpConfigurationArgs',
    'ApplicationGatewayFrontendPortArgs',
    'ApplicationGatewayGatewayIpConfigurationArgs',
    'ApplicationGatewayHttpListenerArgs',
    'ApplicationGatewayHttpListenerCustomErrorConfigurationArgs',
    'ApplicationGatewayIdentityArgs',
    'ApplicationGatewayProbeArgs',
    'ApplicationGatewayProbeMatchArgs',
    'ApplicationGatewayRedirectConfigurationArgs',
    'ApplicationGatewayRequestRoutingRuleArgs',
    'ApplicationGatewayRewriteRuleSetArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleConditionArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleRequestHeaderConfigurationArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleResponseHeaderConfigurationArgs',
    'ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs',
    'ApplicationGatewaySkuArgs',
    'ApplicationGatewaySslCertificateArgs',
    'ApplicationGatewaySslPolicyArgs',
    'ApplicationGatewayTrustedRootCertificateArgs',
    'ApplicationGatewayUrlPathMapArgs',
    'ApplicationGatewayUrlPathMapPathRuleArgs',
    'ApplicationGatewayWafConfigurationArgs',
    'ApplicationGatewayWafConfigurationDisabledRuleGroupArgs',
    'ApplicationGatewayWafConfigurationExclusionArgs',
    'ExpressRouteCircuitPeeringIpv6Args',
    'ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs',
    'ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgs',
    'ExpressRouteCircuitSkuArgs',
    'ExpressRoutePortIdentityArgs',
    'ExpressRoutePortLink1Args',
    'ExpressRoutePortLink2Args',
    'FirewallApplicationRuleCollectionRuleArgs',
    'FirewallApplicationRuleCollectionRuleProtocolArgs',
    'FirewallIpConfigurationArgs',
    'FirewallManagementIpConfigurationArgs',
    'FirewallNatRuleCollectionRuleArgs',
    'FirewallNetworkRuleCollectionRuleArgs',
    'FirewallPolicyDnsArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs',
    'FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs',
    'FirewallPolicyRuleCollectionGroupNatRuleCollectionArgs',
    'FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs',
    'FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgs',
    'FirewallPolicyRuleCollectionGroupNetworkRuleCollectionRuleArgs',
    'FirewallPolicyThreatIntelligenceAllowlistArgs',
    'FirewallVirtualHubArgs',
    'LocalNetworkGatewayBgpSettingsArgs',
    'NetworkConnectionMonitorDestinationArgs',
    'NetworkConnectionMonitorEndpointArgs',
    'NetworkConnectionMonitorEndpointFilterArgs',
    'NetworkConnectionMonitorEndpointFilterItemArgs',
    'NetworkConnectionMonitorSourceArgs',
    'NetworkConnectionMonitorTestConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationHttpConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationHttpConfigurationRequestHeaderArgs',
    'NetworkConnectionMonitorTestConfigurationIcmpConfigurationArgs',
    'NetworkConnectionMonitorTestConfigurationSuccessThresholdArgs',
    'NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs',
    'NetworkConnectionMonitorTestGroupArgs',
    'NetworkInterfaceIpConfigurationArgs',
    'NetworkPacketCaptureFilterArgs',
    'NetworkPacketCaptureStorageLocationArgs',
    'NetworkSecurityGroupSecurityRuleArgs',
    'NetworkWatcherFlowLogRetentionPolicyArgs',
    'NetworkWatcherFlowLogTrafficAnalyticsArgs',
    'PacketCaptureFilterArgs',
    'PacketCaptureStorageLocationArgs',
    'PointToPointVpnGatewayConnectionConfigurationArgs',
    'PointToPointVpnGatewayConnectionConfigurationRouteArgs',
    'PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs',
    'PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs',
    'ProfileContainerNetworkInterfaceArgs',
    'ProfileContainerNetworkInterfaceIpConfigurationArgs',
    'RouteFilterRuleArgs',
    'RouteTableRouteArgs',
    'SubnetDelegationArgs',
    'SubnetDelegationServiceDelegationArgs',
    'SubnetServiceEndpointStoragePolicyDefinitionArgs',
    'TrafficManagerEndpointCustomHeaderArgs',
    'TrafficManagerEndpointSubnetArgs',
    'TrafficManagerProfileDnsConfigArgs',
    'TrafficManagerProfileMonitorConfigArgs',
    'TrafficManagerProfileMonitorConfigCustomHeaderArgs',
    'VirtualHubConnectionRoutingArgs',
    'VirtualHubConnectionRoutingPropagatedRouteTableArgs',
    'VirtualHubConnectionRoutingStaticVnetRouteArgs',
    'VirtualHubRouteArgs',
    'VirtualHubRouteTableRouteArgs',
    'VirtualNetworkDdosProtectionPlanArgs',
    'VirtualNetworkGatewayBgpSettingsArgs',
    'VirtualNetworkGatewayBgpSettingsPeeringAddressArgs',
    'VirtualNetworkGatewayConnectionIpsecPolicyArgs',
    'VirtualNetworkGatewayConnectionTrafficSelectorPolicyArgs',
    'VirtualNetworkGatewayCustomRouteArgs',
    'VirtualNetworkGatewayIpConfigurationArgs',
    'VirtualNetworkGatewayVpnClientConfigurationArgs',
    'VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs',
    'VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs',
    'VirtualNetworkSubnetArgs',
    'VpnGatewayBgpSettingsArgs',
    'VpnGatewayBgpSettingsInstance0BgpPeeringAddressArgs',
    'VpnGatewayBgpSettingsInstance1BgpPeeringAddressArgs',
    'VpnGatewayConnectionRoutingArgs',
    'VpnGatewayConnectionVpnLinkArgs',
    'VpnGatewayConnectionVpnLinkIpsecPolicyArgs',
    'VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs',
    'VpnServerConfigurationClientRevokedCertificateArgs',
    'VpnServerConfigurationClientRootCertificateArgs',
    'VpnServerConfigurationIpsecPolicyArgs',
    'VpnServerConfigurationRadiusArgs',
    'VpnServerConfigurationRadiusClientRootCertificateArgs',
    'VpnServerConfigurationRadiusServerArgs',
    'VpnServerConfigurationRadiusServerClientRootCertificateArgs',
    'VpnServerConfigurationRadiusServerRootCertificateArgs',
    'VpnServerConfigurationRadiusServerServerRootCertificateArgs',
    'VpnSiteLinkArgs',
    'VpnSiteLinkBgpArgs',
]

@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.
        :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.
        """
        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)


@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)


@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)


@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 Backend HTTP Settings Collection.
        :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` blocks.
        :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.
        :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 Backend HTTP Settings Collection.
        """
        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` blocks.
        """
        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.
        """
        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)


@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.
        :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.
        """
        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)


@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)


@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 `HttpStatus403` and `HttpStatus502`
        :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 `HttpStatus403` and `HttpStatus502`
        """
        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)


@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,
                 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`.
        :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/en-us/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 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`.
        """
        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="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/en-us/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)


@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)


@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)


@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):
        """
        :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 as a 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.
        :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.
        """
        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)

    @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 as a 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.
        """
        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)


@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 `HttpStatus403` and `HttpStatus502`
        :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 `HttpStatus403` and `HttpStatus502`
        """
        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)


@pulumi.input_type
class ApplicationGatewayIdentityArgs:
    def __init__(__self__, *,
                 identity_ids: pulumi.Input[str],
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] identity_ids: Specifies a list with a single user managed identity id to be assigned to the Application Gateway.
        :param pulumi.Input[str] type: The Managed Service Identity Type of this Application Gateway. The only possible value is `UserAssigned`. Defaults to `UserAssigned`.
        """
        pulumi.set(__self__, "identity_ids", identity_ids)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="identityIds")
    def identity_ids(self) -> pulumi.Input[str]:
        """
        Specifies a list with a single user managed identity id to be assigned to the Application Gateway.
        """
        return pulumi.get(self, "identity_ids")

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        The Managed Service Identity Type of this Application Gateway. The only possible value is `UserAssigned`. Defaults to `UserAssigned`.
        """
        return pulumi.get(self, "type")

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


@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 - 20 seconds.
        :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 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 - 20 seconds.
        """
        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 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)


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

    @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)

    @property
    @pulumi.getter(name="statusCodes")
    def status_codes(self) -> Optional[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: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "status_codes", value)


@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 or not to include the path in the redirected Url. Defaults to `false`
        :param pulumi.Input[bool] include_query_string: Whether or not 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 or not 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 or not 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)


@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,
                 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[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.
        :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 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(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.
        """
        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)


@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 above.
        """
        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 above.
        """
        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)


@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 above
               ---
        """
        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 above
        ---
        """
        return pulumi.get(self, "url")

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


@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/en-us/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/en-us/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)


@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)


@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)


@pulumi.input_type
class ApplicationGatewayRewriteRuleSetRewriteRuleUrlArgs:
    def __init__(__self__, *,
                 path: Optional[pulumi.Input[str]] = None,
                 query_string: Optional[pulumi.Input[str]] = None,
                 reroute: Optional[pulumi.Input[bool]] = None):
        """
        :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 configutation](https://docs.microsoft.com/en-us/azure/application-gateway/rewrite-http-headers-url#rewrite-configuration)
        """
        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 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 configutation](https://docs.microsoft.com/en-us/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)


@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 `Standard_Small`, `Standard_Medium`, `Standard_Large`, `Standard_v2`, `WAF_Medium`, `WAF_Large`, and `WAF_v2`.
        :param pulumi.Input[str] tier: The Tier of the SKU to use for this Application Gateway. Possible values are `Standard`, `Standard_v2`, `WAF` 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. 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 `Standard_Small`, `Standard_Medium`, `Standard_Large`, `Standard_v2`, `WAF_Medium`, `WAF_Large`, 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 `Standard`, `Standard_v2`, `WAF` 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. 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)


@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: PFX certificate. 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: Secret Id of (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for keyvault to use this feature. Required if `data` is not set.
        :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]]:
        """
        PFX certificate. 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]]:
        """
        Secret Id of (base-64 encoded unencrypted pfx) `Secret` or `Certificate` object stored in Azure KeyVault. You need to enable soft delete for keyvault to use this feature. Required if `data` is not set.
        """
        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)


@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]]] cipher_suites: A List of accepted cipher suites. Possible values are: `TLS_DHE_DSS_WITH_AES_128_CBC_SHA`, `TLS_DHE_DSS_WITH_AES_128_CBC_SHA256`, `TLS_DHE_DSS_WITH_AES_256_CBC_SHA`, `TLS_DHE_DSS_WITH_AES_256_CBC_SHA256`, `TLS_DHE_RSA_WITH_AES_128_CBC_SHA`, `TLS_DHE_RSA_WITH_AES_128_GCM_SHA256`, `TLS_DHE_RSA_WITH_AES_256_CBC_SHA`, `TLS_DHE_RSA_WITH_AES_256_GCM_SHA384`, `TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`, `TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`, `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, `TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`, `TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`, `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`, `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`, `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`, `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`, `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`, `TLS_RSA_WITH_3DES_EDE_CBC_SHA`, `TLS_RSA_WITH_AES_128_CBC_SHA`, `TLS_RSA_WITH_AES_128_CBC_SHA256`, `TLS_RSA_WITH_AES_128_GCM_SHA256`, `TLS_RSA_WITH_AES_256_CBC_SHA`, `TLS_RSA_WITH_AES_256_CBC_SHA256` and `TLS_RSA_WITH_AES_256_GCM_SHA384`.
        :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` and `TLSv1_2`.
        :param pulumi.Input[str] min_protocol_version: The minimal TLS version. Possible values are `TLSv1_0`, `TLSv1_1` and `TLSv1_2`.
        :param pulumi.Input[str] policy_name: The Name of the Policy e.g AppGwSslPolicy20170401S. Required if `policy_type` is set to `Predefined`. Possible values can change over time and
               are published here https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-ssl-policy-overview. Not compatible with `disabled_protocols`.
        :param pulumi.Input[str] policy_type: The Type of the Policy. Possible values are `Predefined` and `Custom`.
        """
        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]]]]:
        """
        A List of accepted cipher suites. Possible values are: `TLS_DHE_DSS_WITH_AES_128_CBC_SHA`, `TLS_DHE_DSS_WITH_AES_128_CBC_SHA256`, `TLS_DHE_DSS_WITH_AES_256_CBC_SHA`, `TLS_DHE_DSS_WITH_AES_256_CBC_SHA256`, `TLS_DHE_RSA_WITH_AES_128_CBC_SHA`, `TLS_DHE_RSA_WITH_AES_128_GCM_SHA256`, `TLS_DHE_RSA_WITH_AES_256_CBC_SHA`, `TLS_DHE_RSA_WITH_AES_256_GCM_SHA384`, `TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`, `TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`, `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, `TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`, `TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`, `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`, `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`, `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`, `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`, `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`, `TLS_RSA_WITH_3DES_EDE_CBC_SHA`, `TLS_RSA_WITH_AES_128_CBC_SHA`, `TLS_RSA_WITH_AES_128_CBC_SHA256`, `TLS_RSA_WITH_AES_128_GCM_SHA256`, `TLS_RSA_WITH_AES_256_CBC_SHA`, `TLS_RSA_WITH_AES_256_CBC_SHA256` and `TLS_RSA_WITH_AES_256_GCM_SHA384`.
        """
        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` and `TLSv1_2`.
        """
        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]]:
        """
        The minimal TLS version. Possible values are `TLSv1_0`, `TLSv1_1` and `TLSv1_2`.
        """
        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]]:
        """
        The Name of the Policy e.g AppGwSslPolicy20170401S. Required if `policy_type` is set to `Predefined`. Possible values can change over time and
        are published here https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-ssl-policy-overview. Not compatible with `disabled_protocols`.
        """
        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` and `Custom`.
        """
        return pulumi.get(self, "policy_type")

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


@pulumi.input_type
class ApplicationGatewayTrustedRootCertificateArgs:
    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 Trusted Root Certificate which should be used.
        :param pulumi.Input[str] name: The Name of the Trusted Root 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 Trusted Root 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 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 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)


@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.
        :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.
        """
        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)


@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 a 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 a 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)


@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 be 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 `2.2.9`, `3.0`, and `3.1`.
        :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. Currently, only `OWASP` is supported.
        """
        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 be 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 `2.2.9`, `3.0`, and `3.1`.
        """
        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. Currently, only `OWASP` is supported.
        """
        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)


@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. Accepted values are:  `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`, `General`, `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`
        :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. Accepted values are:  `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`, `General`, `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`
        """
        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)


@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 `RequestHeaderNames`, `RequestArgNames` and `RequestCookieNames`
        :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 `Equals`, `StartsWith`, `EndsWith`, `Contains`. 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 `RequestHeaderNames`, `RequestArgNames` and `RequestCookieNames`
        """
        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 `Equals`, `StartsWith`, `EndsWith`, `Contains`. 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)


@pulumi.input_type
class ExpressRouteCircuitPeeringIpv6Args:
    def __init__(__self__, *,
                 microsoft_peering: pulumi.Input['ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs'],
                 primary_peer_address_prefix: pulumi.Input[str],
                 secondary_peer_address_prefix: pulumi.Input[str],
                 route_filter_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs'] microsoft_peering: A `microsoft_peering` block as defined below.
        :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[str] route_filter_id: The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.
        """
        pulumi.set(__self__, "microsoft_peering", microsoft_peering)
        pulumi.set(__self__, "primary_peer_address_prefix", primary_peer_address_prefix)
        pulumi.set(__self__, "secondary_peer_address_prefix", secondary_peer_address_prefix)
        if route_filter_id is not None:
            pulumi.set(__self__, "route_filter_id", route_filter_id)

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

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

    @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(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`.
        """
        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)


@pulumi.input_type
class ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs:
    def __init__(__self__, *,
                 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_public_prefixes: A list of Advertised Public Prefixes.
        :param pulumi.Input[int] customer_asn: The CustomerASN of the peering.
        :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.
        """
        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="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.
        """
        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.
        """
        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)


@pulumi.input_type
class ExpressRouteCircuitPeeringMicrosoftPeeringConfigArgs:
    def __init__(__self__, *,
                 advertised_public_prefixes: pulumi.Input[Sequence[pulumi.Input[str]]],
                 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[int] customer_asn: The CustomerASN of the peering.
        :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.
        """
        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="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="customerAsn")
    def customer_asn(self) -> Optional[pulumi.Input[int]]:
        """
        The CustomerASN of the peering.
        """
        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.
        """
        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)


@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`.
        :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`.
        """
        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)


@pulumi.input_type
class ExpressRoutePortIdentityArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 identity_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] type: The type of the identity used for the Express Route Port. Currently, the only possible values is `UserAssigned`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] identity_ids: Specifies a list with a single user managed identity id to be assigned to the Express Route Port. Currently, exactly one id is allowed to specify.
        """
        pulumi.set(__self__, "type", type)
        if identity_ids is not None:
            pulumi.set(__self__, "identity_ids", identity_ids)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of the identity used for the Express Route Port. Currently, the only possible values 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 with a single user managed identity id to be assigned to the Express Route Port. Currently, exactly one id is allowed to specify.
        """
        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)


@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,
                 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[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 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="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)


@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,
                 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[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 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="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)


@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.
        :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.
        """
        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)


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

    @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)

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

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


@pulumi.input_type
class FirewallIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 public_ip_address_id: pulumi.Input[str],
                 private_ip_address: 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] public_ip_address_id: The ID of the Public IP Address associated with the firewall.
        :param pulumi.Input[str] private_ip_address: The private IP address associated with the Firewall.
        :param pulumi.Input[str] subnet_id: Reference to the subnet associated with the IP Configuration.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "public_ip_address_id", public_ip_address_id)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        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="publicIpAddressId")
    def public_ip_address_id(self) -> pulumi.Input[str]:
        """
        The ID of the Public IP Address associated with the firewall.
        """
        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="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="subnetId")
    def subnet_id(self) -> Optional[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: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


@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.
        :param pulumi.Input[str] subnet_id: Reference to the subnet associated with the IP Configuration. Changing this forces a new resource to be created.
        :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.
        """
        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.
        """
        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)


@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.
        """
        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.
        """
        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)


@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/en-us/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.
        :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.
        """
        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/en-us/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.
        """
        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.
        """
        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)


@pulumi.input_type
class FirewallPolicyDnsArgs:
    def __init__(__self__, *,
                 network_rule_fqdn_enabled: Optional[pulumi.Input[bool]] = None,
                 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 network_rule_fqdn_enabled is not None:
            warnings.warn("""This property has been deprecated as the service team has removed it from all API versions and is no longer supported by Azure. It will be removed in v3.0 of the provider.""", DeprecationWarning)
            pulumi.log.warn("""network_rule_fqdn_enabled is deprecated: This property has been deprecated as the service team has removed it from all API versions and is no longer supported by Azure. It will be removed in v3.0 of the provider.""")
        if network_rule_fqdn_enabled is not None:
            pulumi.set(__self__, "network_rule_fqdn_enabled", network_rule_fqdn_enabled)
        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="networkRuleFqdnEnabled")
    def network_rule_fqdn_enabled(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "network_rule_fqdn_enabled")

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

    @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)


@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 `rule` (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 `rule` (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)


@pulumi.input_type
class FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocols: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs']]],
                 destination_fqdn_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_fqdns: 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 rule.
        :param pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs']]] protocols: Specifies a list of network protocols this rule applies to. Possible values are `TCP`, `UDP`.
        :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_fqdns: Specifies a list of destination FQDNs.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: Specifies a list of source IP addresses (including CIDR and `*`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: Specifies a list of source IP groups.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocols", protocols)
        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 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 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['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs']]]:
        """
        Specifies a list of network protocols this rule applies to. Possible values are `TCP`, `UDP`.
        """
        return pulumi.get(self, "protocols")

    @protocols.setter
    def protocols(self, value: pulumi.Input[Sequence[pulumi.Input['FirewallPolicyRuleCollectionGroupApplicationRuleCollectionRuleProtocolArgs']]]):
        pulumi.set(self, "protocols", 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]]]]:
        """
        Specifies a list of destination FQDNs.
        """
        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="sourceAddresses")
    def source_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of source IP addresses (including CIDR and `*`).
        """
        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.
        """
        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)


@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)


@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 `rule` (nat rule) block as defined above.
        """
        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 `rule` (nat rule) block as defined above.
        """
        return pulumi.get(self, "rules")

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


@pulumi.input_type
class FirewallPolicyRuleCollectionGroupNatRuleCollectionRuleArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 protocols: pulumi.Input[Sequence[pulumi.Input[str]]],
                 translated_address: pulumi.Input[str],
                 translated_port: pulumi.Input[int],
                 destination_address: Optional[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 rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] protocols: Specifies a list of network protocols this rule applies to. Possible values are `TCP`, `UDP`.
        :param pulumi.Input[str] translated_address: Specifies the translated address.
        :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[Sequence[pulumi.Input[str]]] destination_ports: Specifies a list of destination ports.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: Specifies a list of source IP addresses (including CIDR and `*`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: Specifies a list of source IP groups.
        """
        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 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)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name which should be used for this 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]]]:
        """
        Specifies a list of network protocols this rule applies to. Possible values are `TCP`, `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]:
        """
        Specifies the translated address.
        """
        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[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(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[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination ports.
        """
        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 IP addresses (including CIDR and `*`).
        """
        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.
        """
        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)


@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 `rule` (network rule) blocks as defined above.
        """
        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 `rule` (network rule) blocks as defined above.
        """
        return pulumi.get(self, "rules")

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


@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]]],
                 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: Specifies a list of destination ports.
        :param pulumi.Input[str] name: The name which should be used for this rule.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] protocols: Specifies a list of network protocols this rule applies to. Possible values are `TCP`, `UDP`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_addresses: Specifies a list of destination IP addresses (including CIDR and `*`) or Service Tags.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_fqdns: Specifies a list of destination FQDNs.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ip_groups: Specifies a list of destination IP groups.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_addresses: Specifies a list of source IP addresses (including CIDR and `*`).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] source_ip_groups: Specifies a list of source IP groups.
        """
        pulumi.set(__self__, "destination_ports", destination_ports)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "protocols", protocols)
        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]]]:
        """
        Specifies 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]:
        """
        The name which should be used for this 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]]]:
        """
        Specifies a list of network protocols this rule applies to. Possible values are `TCP`, `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="destinationAddresses")
    def destination_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Specifies a list of destination IP addresses (including CIDR and `*`) or 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]]]]:
        """
        Specifies a list of destination FQDNs.
        """
        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]]]]:
        """
        Specifies a list of source IP addresses (including CIDR and `*`).
        """
        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.
        """
        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)


@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 IP address 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 IP address 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)


@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)


@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)


@pulumi.input_type
class NetworkConnectionMonitorDestinationArgs:
    def __init__(__self__, *,
                 address: Optional[pulumi.Input[str]] = None,
                 port: Optional[pulumi.Input[int]] = None,
                 virtual_machine_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address: The IP address or domain name of the Network Connection Monitor endpoint.
        :param pulumi.Input[int] port: The port for the HTTP connection.
        :param pulumi.Input[str] virtual_machine_id: The ID of the Virtual Machine which is used as the endpoint by the Network Connection Monitor. This property is deprecated in favour of `target_resource_id`.
        """
        if address is not None:
            warnings.warn("""The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""", DeprecationWarning)
            pulumi.log.warn("""address is deprecated: The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""")
        if address is not None:
            pulumi.set(__self__, "address", address)
        if port is not None:
            warnings.warn("""The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""", DeprecationWarning)
            pulumi.log.warn("""port is deprecated: The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""")
        if port is not None:
            pulumi.set(__self__, "port", port)
        if virtual_machine_id is not None:
            warnings.warn("""The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""", DeprecationWarning)
            pulumi.log.warn("""virtual_machine_id is deprecated: The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""")
        if virtual_machine_id is not None:
            pulumi.set(__self__, "virtual_machine_id", virtual_machine_id)

    @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
    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="virtualMachineId")
    def virtual_machine_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Machine which is used as the endpoint by the Network Connection Monitor. This property is deprecated in favour of `target_resource_id`.
        """
        return pulumi.get(self, "virtual_machine_id")

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


@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,
                 virtual_machine_id: 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 `AzureSubnet`, `AzureVM`, `AzureVNet`, `ExternalAddress`, `MMAWorkspaceMachine` and `MMAWorkspaceNetwork`.
        :param pulumi.Input[str] virtual_machine_id: The ID of the Virtual Machine which is used as the endpoint by the Network Connection Monitor. This property is deprecated in favour of `target_resource_id`.
        """
        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)
        if virtual_machine_id is not None:
            warnings.warn("""This property has been renamed to `target_resource_id` and will be removed in v3.0 of the provider.""", DeprecationWarning)
            pulumi.log.warn("""virtual_machine_id is deprecated: This property has been renamed to `target_resource_id` and will be removed in v3.0 of the provider.""")
        if virtual_machine_id is not None:
            pulumi.set(__self__, "virtual_machine_id", virtual_machine_id)

    @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 `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)

    @property
    @pulumi.getter(name="virtualMachineId")
    def virtual_machine_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Machine which is used as the endpoint by the Network Connection Monitor. This property is deprecated in favour of `target_resource_id`.
        """
        return pulumi.get(self, "virtual_machine_id")

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


@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)


@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)


@pulumi.input_type
class NetworkConnectionMonitorSourceArgs:
    def __init__(__self__, *,
                 port: Optional[pulumi.Input[int]] = None,
                 virtual_machine_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] port: The port for the HTTP connection.
        :param pulumi.Input[str] virtual_machine_id: The ID of the Virtual Machine which is used as the endpoint by the Network Connection Monitor. This property is deprecated in favour of `target_resource_id`.
        """
        if port is not None:
            warnings.warn("""The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""", DeprecationWarning)
            pulumi.log.warn("""port is deprecated: The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""")
        if port is not None:
            pulumi.set(__self__, "port", port)
        if virtual_machine_id is not None:
            warnings.warn("""The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""", DeprecationWarning)
            pulumi.log.warn("""virtual_machine_id is deprecated: The field belongs to the v1 network connection monitor, which is now deprecated in favour of v2 by Azure. Please check the document (https://www.terraform.io/docs/providers/azurerm/r/network_connection_monitor.html) for the v2 properties.""")
        if virtual_machine_id is not None:
            pulumi.set(__self__, "virtual_machine_id", virtual_machine_id)

    @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="virtualMachineId")
    def virtual_machine_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Machine which is used as the endpoint by the Network Connection Monitor. This property is deprecated in favour of `target_resource_id`.
        """
        return pulumi.get(self, "virtual_machine_id")

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


@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)


@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)


@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)


@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)


@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)


@pulumi.input_type
class NetworkConnectionMonitorTestConfigurationTcpConfigurationArgs:
    def __init__(__self__, *,
                 port: pulumi.Input[int],
                 trace_route_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[int] port: The port for the Tcp connection.
        :param pulumi.Input[bool] trace_route_enabled: Should path evaluation with trace route be enabled? Defaults to `true`.
        """
        pulumi.set(__self__, "port", port)
        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="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)


@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)


@pulumi.input_type
class NetworkInterfaceIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 private_ip_address_allocation: pulumi.Input[str],
                 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`.
        :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 Static IP Address which should be used.
        :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.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "private_ip_address_allocation", private_ip_address_allocation)
        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`.
        """
        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
    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 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)

    @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.
        """
        return pulumi.get(self, "subnet_id")

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


@pulumi.input_type
class NetworkPacketCaptureFilterArgs:
    def __init__(__self__, *,
                 protocol: pulumi.Input[str],
                 local_ip_address: Optional[pulumi.Input[str]] = None,
                 local_port: Optional[pulumi.Input[str]] = None,
                 remote_ip_address: Optional[pulumi.Input[str]] = None,
                 remote_port: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] protocol: The Protocol to be filtered on. Possible values include `Any`, `TCP` and `UDP`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] local_ip_address: The local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        :param pulumi.Input[str] local_port: The local port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        :param pulumi.Input[str] remote_ip_address: The remote IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported.. Changing this forces a new resource to be created.
        :param pulumi.Input[str] remote_port: The remote port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "protocol", protocol)
        if local_ip_address is not None:
            pulumi.set(__self__, "local_ip_address", local_ip_address)
        if local_port is not None:
            pulumi.set(__self__, "local_port", local_port)
        if remote_ip_address is not None:
            pulumi.set(__self__, "remote_ip_address", remote_ip_address)
        if remote_port is not None:
            pulumi.set(__self__, "remote_port", remote_port)

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol to be filtered on. Possible values include `Any`, `TCP` and `UDP`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="localIpAddress")
    def local_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "local_ip_address")

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

    @property
    @pulumi.getter(name="localPort")
    def local_port(self) -> Optional[pulumi.Input[str]]:
        """
        The local port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "local_port")

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

    @property
    @pulumi.getter(name="remoteIpAddress")
    def remote_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The remote IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported.. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "remote_ip_address")

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

    @property
    @pulumi.getter(name="remotePort")
    def remote_port(self) -> Optional[pulumi.Input[str]]:
        """
        The remote port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "remote_port")

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


@pulumi.input_type
class NetworkPacketCaptureStorageLocationArgs:
    def __init__(__self__, *,
                 file_path: Optional[pulumi.Input[str]] = None,
                 storage_account_id: Optional[pulumi.Input[str]] = None,
                 storage_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] file_path: A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with `/var/captures`.
        :param pulumi.Input[str] storage_account_id: The ID of the storage account to save the packet capture session
        :param pulumi.Input[str] storage_path: The URI of the storage path to save the packet capture.
        """
        if file_path is not None:
            pulumi.set(__self__, "file_path", file_path)
        if storage_account_id is not None:
            pulumi.set(__self__, "storage_account_id", storage_account_id)
        if storage_path is not None:
            pulumi.set(__self__, "storage_path", storage_path)

    @property
    @pulumi.getter(name="filePath")
    def file_path(self) -> Optional[pulumi.Input[str]]:
        """
        A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with `/var/captures`.
        """
        return pulumi.get(self, "file_path")

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

    @property
    @pulumi.getter(name="storageAccountId")
    def storage_account_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the storage account to save the packet capture session
        """
        return pulumi.get(self, "storage_account_id")

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

    @property
    @pulumi.getter(name="storagePath")
    def storage_path(self) -> Optional[pulumi.Input[str]]:
        """
        The URI of the storage path to save the packet capture.
        """
        return pulumi.get(self, "storage_path")

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


@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. Can be `Tcp`, `Udp`, `Icmp`, or `*` to match 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 ID's
        :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 ID's
        :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. Can be `Tcp`, `Udp`, `Icmp`, or `*` to match 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 ID's
        """
        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 ID's
        """
        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)


@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 traffic analytics.
        """
        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 traffic analytics.
        """
        return pulumi.get(self, "enabled")

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


@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.
        """
        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.
        """
        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)


@pulumi.input_type
class PacketCaptureFilterArgs:
    def __init__(__self__, *,
                 protocol: pulumi.Input[str],
                 local_ip_address: Optional[pulumi.Input[str]] = None,
                 local_port: Optional[pulumi.Input[str]] = None,
                 remote_ip_address: Optional[pulumi.Input[str]] = None,
                 remote_port: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] protocol: The Protocol to be filtered on. Possible values include `Any`, `TCP` and `UDP`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] local_ip_address: The local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        :param pulumi.Input[str] local_port: The local port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        :param pulumi.Input[str] remote_ip_address: The remote IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported.. Changing this forces a new resource to be created.
        :param pulumi.Input[str] remote_port: The remote port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "protocol", protocol)
        if local_ip_address is not None:
            pulumi.set(__self__, "local_ip_address", local_ip_address)
        if local_port is not None:
            pulumi.set(__self__, "local_port", local_port)
        if remote_ip_address is not None:
            pulumi.set(__self__, "remote_ip_address", remote_ip_address)
        if remote_port is not None:
            pulumi.set(__self__, "remote_port", remote_port)

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[str]:
        """
        The Protocol to be filtered on. Possible values include `Any`, `TCP` and `UDP`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="localIpAddress")
    def local_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "local_ip_address")

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

    @property
    @pulumi.getter(name="localPort")
    def local_port(self) -> Optional[pulumi.Input[str]]:
        """
        The local port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "local_port")

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

    @property
    @pulumi.getter(name="remoteIpAddress")
    def remote_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The remote IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported.. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "remote_ip_address")

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

    @property
    @pulumi.getter(name="remotePort")
    def remote_port(self) -> Optional[pulumi.Input[str]]:
        """
        The remote port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "remote_port")

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


@pulumi.input_type
class PacketCaptureStorageLocationArgs:
    def __init__(__self__, *,
                 file_path: Optional[pulumi.Input[str]] = None,
                 storage_account_id: Optional[pulumi.Input[str]] = None,
                 storage_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] file_path: A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with `/var/captures`.
        :param pulumi.Input[str] storage_account_id: The ID of the storage account to save the packet capture session
        :param pulumi.Input[str] storage_path: The URI of the storage path to save the packet capture.
        """
        if file_path is not None:
            pulumi.set(__self__, "file_path", file_path)
        if storage_account_id is not None:
            pulumi.set(__self__, "storage_account_id", storage_account_id)
        if storage_path is not None:
            pulumi.set(__self__, "storage_path", storage_path)

    @property
    @pulumi.getter(name="filePath")
    def file_path(self) -> Optional[pulumi.Input[str]]:
        """
        A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with `/var/captures`.
        """
        return pulumi.get(self, "file_path")

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

    @property
    @pulumi.getter(name="storageAccountId")
    def storage_account_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the storage account to save the packet capture session
        """
        return pulumi.get(self, "storage_account_id")

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

    @property
    @pulumi.getter(name="storagePath")
    def storage_path(self) -> Optional[pulumi.Input[str]]:
        """
        The URI of the storage path to save the packet capture.
        """
        return pulumi.get(self, "storage_path")

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


@pulumi.input_type
class PointToPointVpnGatewayConnectionConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 vpn_client_address_pool: pulumi.Input['PointToPointVpnGatewayConnectionConfigurationVpnClientAddressPoolArgs'],
                 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['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 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
    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)


@pulumi.input_type
class PointToPointVpnGatewayConnectionConfigurationRouteArgs:
    def __init__(__self__, *,
                 associated_route_table_id: pulumi.Input[str],
                 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['PointToPointVpnGatewayConnectionConfigurationRoutePropagatedRouteTableArgs'] propagated_route_table: A `propagated_route_table` block as defined below.
        """
        pulumi.set(__self__, "associated_route_table_id", associated_route_table_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="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)


@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)


@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)


@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)


@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)


@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)


@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 CIDR to which the route applies, such as 10.1.0.0/16
        :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 CIDR to which the route applies, such as 10.1.0.0/16
        """
        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)


@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)


@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 include `Microsoft.ApiManagement/service`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`,  `Microsoft.Netapp/volumes`, `Microsoft.Network/managedResolvers`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/servers`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, and `Microsoft.Web/serverFarms`.
        :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 include `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action` and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.
        """
        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 include `Microsoft.ApiManagement/service`, `Microsoft.AzureCosmosDB/clusters`, `Microsoft.BareMetal/AzureVMware`, `Microsoft.BareMetal/CrayServers`, `Microsoft.Batch/batchAccounts`, `Microsoft.ContainerInstance/containerGroups`, `Microsoft.Databricks/workspaces`, `Microsoft.DBforMySQL/flexibleServers`, `Microsoft.DBforMySQL/serversv2`, `Microsoft.DBforPostgreSQL/flexibleServers`, `Microsoft.DBforPostgreSQL/serversv2`, `Microsoft.DBforPostgreSQL/singleServers`, `Microsoft.HardwareSecurityModules/dedicatedHSMs`, `Microsoft.Kusto/clusters`, `Microsoft.Logic/integrationServiceEnvironments`, `Microsoft.MachineLearningServices/workspaces`,  `Microsoft.Netapp/volumes`, `Microsoft.Network/managedResolvers`, `Microsoft.PowerPlatform/vnetaccesslinks`, `Microsoft.ServiceFabricMesh/networks`, `Microsoft.Sql/managedInstances`, `Microsoft.Sql/servers`, `Microsoft.StreamAnalytics/streamingJobs`, `Microsoft.Synapse/workspaces`, `Microsoft.Web/hostingEnvironments`, and `Microsoft.Web/serverFarms`.
        """
        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 include `Microsoft.Network/networkinterfaces/*`, `Microsoft.Network/virtualNetworks/subnets/action`, `Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action` and `Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action`.
        """
        return pulumi.get(self, "actions")

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


@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):
        """
        :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 that this Subnet Service Endpoint Storage Policy Definition applies to.
        :param pulumi.Input[str] description: The description of this Subnet Service Endpoint Storage Policy Definition.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "service_resources", service_resources)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @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 that this Subnet Service Endpoint Storage Policy Definition applies to.
        """
        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)


@pulumi.input_type
class TrafficManagerEndpointCustomHeaderArgs:
    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)


@pulumi.input_type
class TrafficManagerEndpointSubnetArgs:
    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....
        :param pulumi.Input[str] last: The Last IP...
        :param pulumi.Input[int] scope: The Scope...
        """
        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....
        """
        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...
        """
        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 Scope...
        """
        return pulumi.get(self, "scope")

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


@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)


@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)


@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)


@pulumi.input_type
class VirtualHubConnectionRoutingArgs:
    def __init__(__self__, *,
                 associated_route_table_id: Optional[pulumi.Input[str]] = None,
                 propagated_route_table: Optional[pulumi.Input['VirtualHubConnectionRoutingPropagatedRouteTableArgs']] = 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['VirtualHubConnectionRoutingPropagatedRouteTableArgs'] propagated_route_table: A `propagated_route_table` block as defined below.
        :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 propagated_route_table is not None:
            pulumi.set(__self__, "propagated_route_table", propagated_route_table)
        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="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="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)


@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 ID's 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 ID's 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)


@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)


@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)


@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`.
        """
        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`.
        """
        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)


@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)


@pulumi.input_type
class VirtualNetworkGatewayBgpSettingsArgs:
    def __init__(__self__, *,
                 asn: Optional[pulumi.Input[int]] = None,
                 peer_weight: Optional[pulumi.Input[int]] = None,
                 peering_address: Optional[pulumi.Input[str]] = 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` 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_address is not None:
            warnings.warn("""Deprecated in favor of `bgp_settings.0.peering_addresses.0.default_addresses.0`""", DeprecationWarning)
            pulumi.log.warn("""peering_address is deprecated: Deprecated in favor of `bgp_settings.0.peering_addresses.0.default_addresses.0`""")
        if peering_address is not None:
            pulumi.set(__self__, "peering_address", peering_address)
        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="peeringAddress")
    def peering_address(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "peering_address")

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

    @property
    @pulumi.getter(name="peeringAddresses")
    def peering_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayBgpSettingsPeeringAddressArgs']]]]:
        """
        A list of `peering_addresses` 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)


@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.
        :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.
        """
        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)


@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)


@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]]]):
        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]]]:
        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]]]:
        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)


@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)


@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. Valid options are `Static` or
               `Dynamic`. 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. Valid options are `Static` or
        `Dynamic`. 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)


@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,
                 radius_server_address: Optional[pulumi.Input[str]] = None,
                 radius_server_secret: Optional[pulumi.Input[str]] = None,
                 revoked_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs']]]] = None,
                 root_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRootCertificateArgs']]]] = 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
               This setting is incompatible with the use of
               `root_certificate` and `revoked_certificate`, `radius_server_address`, and `radius_server_secret`.
        :param pulumi.Input[str] aad_issuer: The STS url for your tenant
               This setting is incompatible with the use of
               `root_certificate` and `revoked_certificate`, `radius_server_address`, and `radius_server_secret`.
        :param pulumi.Input[str] aad_tenant: AzureAD Tenant URL
               This setting is incompatible with the use of
               `root_certificate` and `revoked_certificate`, `radius_server_address`, and `radius_server_secret`.
        :param pulumi.Input[str] radius_server_address: The address of the Radius server.
               This setting is incompatible with the use of
               `aad_tenant`, `aad_audience`, `aad_issuer`, `root_certificate` and `revoked_certificate`.
        :param pulumi.Input[str] radius_server_secret: The secret used by the Radius server.
               This setting is incompatible with the use of
               `aad_tenant`, `aad_audience`, `aad_issuer`, `root_certificate` and `revoked_certificate`.
        :param pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs']]] revoked_certificates: One or more `revoked_certificate` blocks which
               are defined below.
               This setting is incompatible with the use of
               `aad_tenant`, `aad_audience`, `aad_issuer`, `radius_server_address`, and `radius_server_secret`.
        :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.
               This setting is incompatible with the use of
               `aad_tenant`, `aad_audience`, `aad_issuer`, `radius_server_address`, and `radius_server_secret`.
        :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 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 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 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
        This setting is incompatible with the use of
        `root_certificate` and `revoked_certificate`, `radius_server_address`, and `radius_server_secret`.
        """
        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
        This setting is incompatible with the use of
        `root_certificate` and `revoked_certificate`, `radius_server_address`, and `radius_server_secret`.
        """
        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
        This setting is incompatible with the use of
        `root_certificate` and `revoked_certificate`, `radius_server_address`, and `radius_server_secret`.
        """
        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="radiusServerAddress")
    def radius_server_address(self) -> Optional[pulumi.Input[str]]:
        """
        The address of the Radius server.
        This setting is incompatible with the use of
        `aad_tenant`, `aad_audience`, `aad_issuer`, `root_certificate` and `revoked_certificate`.
        """
        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.
        This setting is incompatible with the use of
        `aad_tenant`, `aad_audience`, `aad_issuer`, `root_certificate` and `revoked_certificate`.
        """
        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="revokedCertificates")
    def revoked_certificates(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs']]]]:
        """
        One or more `revoked_certificate` blocks which
        are defined below.
        This setting is incompatible with the use of
        `aad_tenant`, `aad_audience`, `aad_issuer`, `radius_server_address`, and `radius_server_secret`.
        """
        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.
        This setting is incompatible with the use of
        `aad_tenant`, `aad_audience`, `aad_issuer`, `radius_server_address`, and `radius_server_secret`.
        """
        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="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)


@pulumi.input_type
class VirtualNetworkGatewayVpnClientConfigurationRevokedCertificateArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 thumbprint: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: A user-defined name of the IP configuration. Defaults to
               `vnetGatewayConfig`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "thumbprint", thumbprint)

    @property
    @pulumi.getter
    def name(self) -> 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: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def thumbprint(self) -> pulumi.Input[str]:
        return pulumi.get(self, "thumbprint")

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


@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 IP configuration. Defaults to
               `vnetGatewayConfig`.
        :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.
               revoked.
        """
        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 IP configuration. Defaults to
        `vnetGatewayConfig`.
        """
        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.
        revoked.
        """
        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)


@pulumi.input_type
class VirtualNetworkSubnetArgs:
    def __init__(__self__, *,
                 address_prefix: pulumi.Input[str],
                 name: pulumi.Input[str],
                 id: Optional[pulumi.Input[str]] = None,
                 security_group: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] address_prefix: The address prefix to use for the subnet.
        :param pulumi.Input[str] name: The name of the virtual network. Changing this forces a new resource to be created.
        :param pulumi.Input[str] id: The ID of DDoS Protection Plan.
        :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`)
        """
        pulumi.set(__self__, "address_prefix", address_prefix)
        pulumi.set(__self__, "name", name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if security_group is not None:
            pulumi.set(__self__, "security_group", security_group)

    @property
    @pulumi.getter(name="addressPrefix")
    def address_prefix(self) -> pulumi.Input[str]:
        """
        The address prefix to use for the subnet.
        """
        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 virtual network. Changing this forces a new resource 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 id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of DDoS Protection Plan.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "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)


@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)


@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)


@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)


@pulumi.input_type
class VpnGatewayConnectionRoutingArgs:
    def __init__(__self__, *,
                 associated_route_table: pulumi.Input[str],
                 propagated_route_tables: pulumi.Input[Sequence[pulumi.Input[str]]]):
        """
        :param pulumi.Input[str] associated_route_table: The ID of the Route Table associated with this VPN Connection.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] propagated_route_tables: The list IDs of Route Tables to advertise the routes of this VPN Connection.
        """
        pulumi.set(__self__, "associated_route_table", associated_route_table)
        pulumi.set(__self__, "propagated_route_tables", propagated_route_tables)

    @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="propagatedRouteTables")
    def propagated_route_tables(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The list IDs of Route Tables to advertise the routes of this VPN Connection.
        """
        return pulumi.get(self, "propagated_route_tables")

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


@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,
                 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[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 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="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)


@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)


@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)


@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)


@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)


@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)


@pulumi.input_type
class VpnServerConfigurationRadiusArgs:
    def __init__(__self__, *,
                 server_root_certificates: pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerRootCertificateArgs']]],
                 client_root_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusClientRootCertificateArgs']]]] = None,
                 servers: Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerArgs']]]] = None):
        """
        :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['VpnServerConfigurationRadiusClientRootCertificateArgs']]] client_root_certificates: One or more `client_root_certificate` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerArgs']]] servers: One or more `server` blocks as defined below.
        """
        pulumi.set(__self__, "server_root_certificates", server_root_certificates)
        if client_root_certificates is not None:
            pulumi.set(__self__, "client_root_certificates", client_root_certificates)
        if servers is not None:
            pulumi.set(__self__, "servers", servers)

    @property
    @pulumi.getter(name="serverRootCertificates")
    def server_root_certificates(self) -> 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: pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerRootCertificateArgs']]]):
        pulumi.set(self, "server_root_certificates", value)

    @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 above.
        """
        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
    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)


@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)


@pulumi.input_type
class VpnServerConfigurationRadiusServerArgs:
    def __init__(__self__, *,
                 address: pulumi.Input[str],
                 secret: pulumi.Input[str],
                 server_root_certificates: pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerServerRootCertificateArgs']]],
                 client_root_certificates: Optional[pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerClientRootCertificateArgs']]]] = None):
        """
        :param pulumi.Input[str] address: The Address of the Radius Server.
        :param pulumi.Input[str] secret: The Secret used to communicate with the Radius Server.
        :param pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerServerRootCertificateArgs']]] server_root_certificates: One or more `server_root_certificate` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerClientRootCertificateArgs']]] client_root_certificates: One or more `client_root_certificate` blocks as defined above.
        """
        pulumi.set(__self__, "address", address)
        pulumi.set(__self__, "secret", secret)
        pulumi.set(__self__, "server_root_certificates", server_root_certificates)
        if client_root_certificates is not None:
            pulumi.set(__self__, "client_root_certificates", client_root_certificates)

    @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 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)

    @property
    @pulumi.getter(name="serverRootCertificates")
    def server_root_certificates(self) -> pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerServerRootCertificateArgs']]]:
        """
        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: pulumi.Input[Sequence[pulumi.Input['VpnServerConfigurationRadiusServerServerRootCertificateArgs']]]):
        pulumi.set(self, "server_root_certificates", value)

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

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


@pulumi.input_type
class VpnServerConfigurationRadiusServerClientRootCertificateArgs:
    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)


@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)


@pulumi.input_type
class VpnServerConfigurationRadiusServerServerRootCertificateArgs:
    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)


@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.
        :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.
        :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.
        """
        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.
        """
        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.
        """
        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.
        """
        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)


@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)


