text: # coding=utf-8
  # --------------------------------------------------------------------------
  # Copyright (c) Microsoft Corporation. All rights reserved.
  # Licensed under the MIT License. See License.txt in the project root for
  # license information.
  #
  # Code generated by Microsoft (R) AutoRest Code Generator.
  # Changes may cause incorrect behavior and will be lost if the code is
  # regenerated.
  # --------------------------------------------------------------------------
  
  from msrest.serialization import Model
  from msrest.exceptions import HttpOperationError
  
  
  class AddressSpace(Model):
      """AddressSpace contains an array of IP address ranges that can be used by
      subnets of the virtual network.
  
      :param address_prefixes: A list of address blocks reserved for this
       virtual network in CIDR notation.
      :type address_prefixes: list[str]
      """
  
      _attribute_map = {
          'address_prefixes': {'key': 'addressPrefixes', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(AddressSpace, self).__init__(**kwargs)
          self.address_prefixes = kwargs.get('address_prefixes', None)
  
  
  class Resource(Model):
      """Common resource representation.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
      }
  
      def __init__(self, **kwargs):
          super(Resource, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
          self.name = None
          self.type = None
          self.location = kwargs.get('location', None)
          self.tags = kwargs.get('tags', None)
  
  
  class ApplicationGateway(Resource):
      """Application gateway resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param sku: SKU of the application gateway resource.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySku
      :param ssl_policy: SSL policy of the application gateway resource.
      :type ssl_policy:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslPolicy
      :ivar operational_state: Operational state of the application gateway
       resource. Possible values include: 'Stopped', 'Starting', 'Running',
       'Stopping'
      :vartype operational_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayOperationalState
      :param gateway_ip_configurations: Subnets of the application gateway
       resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type gateway_ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayIPConfiguration]
      :param authentication_certificates: Authentication certificates of the
       application gateway resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type authentication_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayAuthenticationCertificate]
      :param trusted_root_certificates: Trusted Root certificates of the
       application gateway resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type trusted_root_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayTrustedRootCertificate]
      :param ssl_certificates: SSL certificates of the application gateway
       resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type ssl_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslCertificate]
      :param frontend_ip_configurations: Frontend IP addresses of the
       application gateway resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type frontend_ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFrontendIPConfiguration]
      :param frontend_ports: Frontend ports of the application gateway resource.
       For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type frontend_ports:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFrontendPort]
      :param probes: Probes of the application gateway resource.
      :type probes:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProbe]
      :param backend_address_pools: Backend address pool of the application
       gateway resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type backend_address_pools:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendAddressPool]
      :param backend_http_settings_collection: Backend http settings of the
       application gateway resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type backend_http_settings_collection:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHttpSettings]
      :param http_listeners: Http listeners of the application gateway resource.
       For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type http_listeners:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayHttpListener]
      :param url_path_maps: URL path map of the application gateway resource.
       For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type url_path_maps:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayUrlPathMap]
      :param request_routing_rules: Request routing rules of the application
       gateway resource.
      :type request_routing_rules:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRequestRoutingRule]
      :param rewrite_rule_sets: Rewrite rules for the application gateway
       resource.
      :type rewrite_rule_sets:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRewriteRuleSet]
      :param redirect_configurations: Redirect configurations of the application
       gateway resource. For default limits, see [Application Gateway
       limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
      :type redirect_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRedirectConfiguration]
      :param web_application_firewall_configuration: Web application firewall
       configuration.
      :type web_application_firewall_configuration:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayWebApplicationFirewallConfiguration
      :param firewall_policy: Reference of the FirewallPolicy resource.
      :type firewall_policy: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param enable_http2: Whether HTTP2 is enabled on the application gateway
       resource.
      :type enable_http2: bool
      :param enable_fips: Whether FIPS is enabled on the application gateway
       resource.
      :type enable_fips: bool
      :param autoscale_configuration: Autoscale Configuration.
      :type autoscale_configuration:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayAutoscaleConfiguration
      :param resource_guid: Resource GUID property of the application gateway
       resource.
      :type resource_guid: str
      :param provisioning_state: Provisioning state of the application gateway
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param custom_error_configurations: Custom error configurations of the
       application gateway resource.
      :type custom_error_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayCustomError]
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param zones: A list of availability zones denoting where the resource
       needs to come from.
      :type zones: list[str]
      :param identity: The identity of the application gateway, if configured.
      :type identity:
       ~azure.mgmt.network.v2019_02_01.models.ManagedServiceIdentity
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'operational_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'properties.sku', 'type': 'ApplicationGatewaySku'},
          'ssl_policy': {'key': 'properties.sslPolicy', 'type': 'ApplicationGatewaySslPolicy'},
          'operational_state': {'key': 'properties.operationalState', 'type': 'str'},
          'gateway_ip_configurations': {'key': 'properties.gatewayIPConfigurations', 'type': '[ApplicationGatewayIPConfiguration]'},
          'authentication_certificates': {'key': 'properties.authenticationCertificates', 'type': '[ApplicationGatewayAuthenticationCertificate]'},
          'trusted_root_certificates': {'key': 'properties.trustedRootCertificates', 'type': '[ApplicationGatewayTrustedRootCertificate]'},
          'ssl_certificates': {'key': 'properties.sslCertificates', 'type': '[ApplicationGatewaySslCertificate]'},
          'frontend_ip_configurations': {'key': 'properties.frontendIPConfigurations', 'type': '[ApplicationGatewayFrontendIPConfiguration]'},
          'frontend_ports': {'key': 'properties.frontendPorts', 'type': '[ApplicationGatewayFrontendPort]'},
          'probes': {'key': 'properties.probes', 'type': '[ApplicationGatewayProbe]'},
          'backend_address_pools': {'key': 'properties.backendAddressPools', 'type': '[ApplicationGatewayBackendAddressPool]'},
          'backend_http_settings_collection': {'key': 'properties.backendHttpSettingsCollection', 'type': '[ApplicationGatewayBackendHttpSettings]'},
          'http_listeners': {'key': 'properties.httpListeners', 'type': '[ApplicationGatewayHttpListener]'},
          'url_path_maps': {'key': 'properties.urlPathMaps', 'type': '[ApplicationGatewayUrlPathMap]'},
          'request_routing_rules': {'key': 'properties.requestRoutingRules', 'type': '[ApplicationGatewayRequestRoutingRule]'},
          'rewrite_rule_sets': {'key': 'properties.rewriteRuleSets', 'type': '[ApplicationGatewayRewriteRuleSet]'},
          'redirect_configurations': {'key': 'properties.redirectConfigurations', 'type': '[ApplicationGatewayRedirectConfiguration]'},
          'web_application_firewall_configuration': {'key': 'properties.webApplicationFirewallConfiguration', 'type': 'ApplicationGatewayWebApplicationFirewallConfiguration'},
          'firewall_policy': {'key': 'properties.firewallPolicy', 'type': 'SubResource'},
          'enable_http2': {'key': 'properties.enableHttp2', 'type': 'bool'},
          'enable_fips': {'key': 'properties.enableFips', 'type': 'bool'},
          'autoscale_configuration': {'key': 'properties.autoscaleConfiguration', 'type': 'ApplicationGatewayAutoscaleConfiguration'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'custom_error_configurations': {'key': 'properties.customErrorConfigurations', 'type': '[ApplicationGatewayCustomError]'},
          'etag': {'key': 'etag', 'type': 'str'},
          'zones': {'key': 'zones', 'type': '[str]'},
          'identity': {'key': 'identity', 'type': 'ManagedServiceIdentity'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGateway, self).__init__(**kwargs)
          self.sku = kwargs.get('sku', None)
          self.ssl_policy = kwargs.get('ssl_policy', None)
          self.operational_state = None
          self.gateway_ip_configurations = kwargs.get('gateway_ip_configurations', None)
          self.authentication_certificates = kwargs.get('authentication_certificates', None)
          self.trusted_root_certificates = kwargs.get('trusted_root_certificates', None)
          self.ssl_certificates = kwargs.get('ssl_certificates', None)
          self.frontend_ip_configurations = kwargs.get('frontend_ip_configurations', None)
          self.frontend_ports = kwargs.get('frontend_ports', None)
          self.probes = kwargs.get('probes', None)
          self.backend_address_pools = kwargs.get('backend_address_pools', None)
          self.backend_http_settings_collection = kwargs.get('backend_http_settings_collection', None)
          self.http_listeners = kwargs.get('http_listeners', None)
          self.url_path_maps = kwargs.get('url_path_maps', None)
          self.request_routing_rules = kwargs.get('request_routing_rules', None)
          self.rewrite_rule_sets = kwargs.get('rewrite_rule_sets', None)
          self.redirect_configurations = kwargs.get('redirect_configurations', None)
          self.web_application_firewall_configuration = kwargs.get('web_application_firewall_configuration', None)
          self.firewall_policy = kwargs.get('firewall_policy', None)
          self.enable_http2 = kwargs.get('enable_http2', None)
          self.enable_fips = kwargs.get('enable_fips', None)
          self.autoscale_configuration = kwargs.get('autoscale_configuration', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.custom_error_configurations = kwargs.get('custom_error_configurations', None)
          self.etag = kwargs.get('etag', None)
          self.zones = kwargs.get('zones', None)
          self.identity = kwargs.get('identity', None)
  
  
  class SubResource(Model):
      """Reference to another subresource.
  
      :param id: Resource ID.
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(SubResource, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class ApplicationGatewayAuthenticationCertificate(SubResource):
      """Authentication certificates of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param data: Certificate public data.
      :type data: str
      :param provisioning_state: Provisioning state of the authentication
       certificate resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :type provisioning_state: str
      :param name: Name of the authentication certificate that is unique within
       an Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'data': {'key': 'properties.data', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayAuthenticationCertificate, self).__init__(**kwargs)
          self.data = kwargs.get('data', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayAutoscaleConfiguration(Model):
      """Application Gateway autoscale configuration.
  
      All required parameters must be populated in order to send to Azure.
  
      :param min_capacity: Required. Lower bound on number of Application
       Gateway capacity
      :type min_capacity: int
      :param max_capacity: Upper bound on number of Application Gateway capacity
      :type max_capacity: int
      """
  
      _validation = {
          'min_capacity': {'required': True, 'minimum': 0},
          'max_capacity': {'minimum': 2},
      }
  
      _attribute_map = {
          'min_capacity': {'key': 'minCapacity', 'type': 'int'},
          'max_capacity': {'key': 'maxCapacity', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayAutoscaleConfiguration, self).__init__(**kwargs)
          self.min_capacity = kwargs.get('min_capacity', None)
          self.max_capacity = kwargs.get('max_capacity', None)
  
  
  class ApplicationGatewayAvailableSslOptions(Resource):
      """Response for ApplicationGatewayAvailableSslOptions API service call.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param predefined_policies: List of available Ssl predefined policy.
      :type predefined_policies:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param default_policy: Name of the Ssl predefined policy applied by
       default to application gateway. Possible values include:
       'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401',
       'AppGwSslPolicy20170401S'
      :type default_policy: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslPolicyName
      :param available_cipher_suites: List of available Ssl cipher suites.
      :type available_cipher_suites: list[str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslCipherSuite]
      :param available_protocols: List of available Ssl protocols.
      :type available_protocols: list[str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslProtocol]
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'predefined_policies': {'key': 'properties.predefinedPolicies', 'type': '[SubResource]'},
          'default_policy': {'key': 'properties.defaultPolicy', 'type': 'str'},
          'available_cipher_suites': {'key': 'properties.availableCipherSuites', 'type': '[str]'},
          'available_protocols': {'key': 'properties.availableProtocols', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayAvailableSslOptions, self).__init__(**kwargs)
          self.predefined_policies = kwargs.get('predefined_policies', None)
          self.default_policy = kwargs.get('default_policy', None)
          self.available_cipher_suites = kwargs.get('available_cipher_suites', None)
          self.available_protocols = kwargs.get('available_protocols', None)
  
  
  class ApplicationGatewayAvailableWafRuleSetsResult(Model):
      """Response for ApplicationGatewayAvailableWafRuleSets API service call.
  
      :param value: The list of application gateway rule sets.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFirewallRuleSet]
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ApplicationGatewayFirewallRuleSet]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayAvailableWafRuleSetsResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
  
  
  class ApplicationGatewayBackendAddress(Model):
      """Backend address of an application gateway.
  
      :param fqdn: Fully qualified domain name (FQDN).
      :type fqdn: str
      :param ip_address: IP address
      :type ip_address: str
      """
  
      _attribute_map = {
          'fqdn': {'key': 'fqdn', 'type': 'str'},
          'ip_address': {'key': 'ipAddress', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendAddress, self).__init__(**kwargs)
          self.fqdn = kwargs.get('fqdn', None)
          self.ip_address = kwargs.get('ip_address', None)
  
  
  class ApplicationGatewayBackendAddressPool(SubResource):
      """Backend Address Pool of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param backend_ip_configurations: Collection of references to IPs defined
       in network interfaces.
      :type backend_ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceIPConfiguration]
      :param backend_addresses: Backend addresses
      :type backend_addresses:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendAddress]
      :param provisioning_state: Provisioning state of the backend address pool
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the backend address pool that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'backend_ip_configurations': {'key': 'properties.backendIPConfigurations', 'type': '[NetworkInterfaceIPConfiguration]'},
          'backend_addresses': {'key': 'properties.backendAddresses', 'type': '[ApplicationGatewayBackendAddress]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendAddressPool, self).__init__(**kwargs)
          self.backend_ip_configurations = kwargs.get('backend_ip_configurations', None)
          self.backend_addresses = kwargs.get('backend_addresses', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayBackendHealth(Model):
      """Response for ApplicationGatewayBackendHealth API service call.
  
      :param backend_address_pools: A list of
       ApplicationGatewayBackendHealthPool resources.
      :type backend_address_pools:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHealthPool]
      """
  
      _attribute_map = {
          'backend_address_pools': {'key': 'backendAddressPools', 'type': '[ApplicationGatewayBackendHealthPool]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendHealth, self).__init__(**kwargs)
          self.backend_address_pools = kwargs.get('backend_address_pools', None)
  
  
  class ApplicationGatewayBackendHealthHttpSettings(Model):
      """Application gateway BackendHealthHttp settings.
  
      :param backend_http_settings: Reference of an
       ApplicationGatewayBackendHttpSettings resource.
      :type backend_http_settings:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHttpSettings
      :param servers: List of ApplicationGatewayBackendHealthServer resources.
      :type servers:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHealthServer]
      """
  
      _attribute_map = {
          'backend_http_settings': {'key': 'backendHttpSettings', 'type': 'ApplicationGatewayBackendHttpSettings'},
          'servers': {'key': 'servers', 'type': '[ApplicationGatewayBackendHealthServer]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendHealthHttpSettings, self).__init__(**kwargs)
          self.backend_http_settings = kwargs.get('backend_http_settings', None)
          self.servers = kwargs.get('servers', None)
  
  
  class ApplicationGatewayBackendHealthOnDemand(Model):
      """Result of on demand test probe.
  
      :param backend_address_pool: Reference of an
       ApplicationGatewayBackendAddressPool resource.
      :type backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendAddressPool
      :param backend_health_http_settings: Application gateway BackendHealthHttp
       settings.
      :type backend_health_http_settings:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHealthHttpSettings
      """
  
      _attribute_map = {
          'backend_address_pool': {'key': 'backendAddressPool', 'type': 'ApplicationGatewayBackendAddressPool'},
          'backend_health_http_settings': {'key': 'backendHealthHttpSettings', 'type': 'ApplicationGatewayBackendHealthHttpSettings'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendHealthOnDemand, self).__init__(**kwargs)
          self.backend_address_pool = kwargs.get('backend_address_pool', None)
          self.backend_health_http_settings = kwargs.get('backend_health_http_settings', None)
  
  
  class ApplicationGatewayBackendHealthPool(Model):
      """Application gateway BackendHealth pool.
  
      :param backend_address_pool: Reference of an
       ApplicationGatewayBackendAddressPool resource.
      :type backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendAddressPool
      :param backend_http_settings_collection: List of
       ApplicationGatewayBackendHealthHttpSettings resources.
      :type backend_http_settings_collection:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHealthHttpSettings]
      """
  
      _attribute_map = {
          'backend_address_pool': {'key': 'backendAddressPool', 'type': 'ApplicationGatewayBackendAddressPool'},
          'backend_http_settings_collection': {'key': 'backendHttpSettingsCollection', 'type': '[ApplicationGatewayBackendHealthHttpSettings]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendHealthPool, self).__init__(**kwargs)
          self.backend_address_pool = kwargs.get('backend_address_pool', None)
          self.backend_http_settings_collection = kwargs.get('backend_http_settings_collection', None)
  
  
  class ApplicationGatewayBackendHealthServer(Model):
      """Application gateway backendhealth http settings.
  
      :param address: IP address or FQDN of backend server.
      :type address: str
      :param ip_configuration: Reference of IP configuration of backend server.
      :type ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceIPConfiguration
      :param health: Health of backend server. Possible values include:
       'Unknown', 'Up', 'Down', 'Partial', 'Draining'
      :type health: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendHealthServerHealth
      :param health_probe_log: Health Probe Log.
      :type health_probe_log: str
      """
  
      _attribute_map = {
          'address': {'key': 'address', 'type': 'str'},
          'ip_configuration': {'key': 'ipConfiguration', 'type': 'NetworkInterfaceIPConfiguration'},
          'health': {'key': 'health', 'type': 'str'},
          'health_probe_log': {'key': 'healthProbeLog', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendHealthServer, self).__init__(**kwargs)
          self.address = kwargs.get('address', None)
          self.ip_configuration = kwargs.get('ip_configuration', None)
          self.health = kwargs.get('health', None)
          self.health_probe_log = kwargs.get('health_probe_log', None)
  
  
  class ApplicationGatewayBackendHttpSettings(SubResource):
      """Backend address pool settings of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param port: The destination port on the backend.
      :type port: int
      :param protocol: The protocol used to communicate with the backend.
       Possible values include: 'Http', 'Https'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProtocol
      :param cookie_based_affinity: Cookie based affinity. Possible values
       include: 'Enabled', 'Disabled'
      :type cookie_based_affinity: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayCookieBasedAffinity
      :param request_timeout: Request timeout in seconds. Application Gateway
       will fail the request if response is not received within RequestTimeout.
       Acceptable values are from 1 second to 86400 seconds.
      :type request_timeout: int
      :param probe: Probe resource of an application gateway.
      :type probe: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param authentication_certificates: Array of references to application
       gateway authentication certificates.
      :type authentication_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param trusted_root_certificates: Array of references to application
       gateway trusted root certificates.
      :type trusted_root_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param connection_draining: Connection draining of the backend http
       settings resource.
      :type connection_draining:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayConnectionDraining
      :param host_name: Host header to be sent to the backend servers.
      :type host_name: str
      :param pick_host_name_from_backend_address: Whether to pick host header
       should be picked from the host name of the backend server. Default value
       is false.
      :type pick_host_name_from_backend_address: bool
      :param affinity_cookie_name: Cookie name to use for the affinity cookie.
      :type affinity_cookie_name: str
      :param probe_enabled: Whether the probe is enabled. Default value is
       false.
      :type probe_enabled: bool
      :param path: Path which should be used as a prefix for all HTTP requests.
       Null means no path will be prefixed. Default value is null.
      :type path: str
      :param provisioning_state: Provisioning state of the backend http settings
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the backend http settings that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'port': {'key': 'properties.port', 'type': 'int'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'cookie_based_affinity': {'key': 'properties.cookieBasedAffinity', 'type': 'str'},
          'request_timeout': {'key': 'properties.requestTimeout', 'type': 'int'},
          'probe': {'key': 'properties.probe', 'type': 'SubResource'},
          'authentication_certificates': {'key': 'properties.authenticationCertificates', 'type': '[SubResource]'},
          'trusted_root_certificates': {'key': 'properties.trustedRootCertificates', 'type': '[SubResource]'},
          'connection_draining': {'key': 'properties.connectionDraining', 'type': 'ApplicationGatewayConnectionDraining'},
          'host_name': {'key': 'properties.hostName', 'type': 'str'},
          'pick_host_name_from_backend_address': {'key': 'properties.pickHostNameFromBackendAddress', 'type': 'bool'},
          'affinity_cookie_name': {'key': 'properties.affinityCookieName', 'type': 'str'},
          'probe_enabled': {'key': 'properties.probeEnabled', 'type': 'bool'},
          'path': {'key': 'properties.path', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayBackendHttpSettings, self).__init__(**kwargs)
          self.port = kwargs.get('port', None)
          self.protocol = kwargs.get('protocol', None)
          self.cookie_based_affinity = kwargs.get('cookie_based_affinity', None)
          self.request_timeout = kwargs.get('request_timeout', None)
          self.probe = kwargs.get('probe', None)
          self.authentication_certificates = kwargs.get('authentication_certificates', None)
          self.trusted_root_certificates = kwargs.get('trusted_root_certificates', None)
          self.connection_draining = kwargs.get('connection_draining', None)
          self.host_name = kwargs.get('host_name', None)
          self.pick_host_name_from_backend_address = kwargs.get('pick_host_name_from_backend_address', None)
          self.affinity_cookie_name = kwargs.get('affinity_cookie_name', None)
          self.probe_enabled = kwargs.get('probe_enabled', None)
          self.path = kwargs.get('path', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayConnectionDraining(Model):
      """Connection draining allows open connections to a backend server to be
      active for a specified time after the backend server got removed from the
      configuration.
  
      All required parameters must be populated in order to send to Azure.
  
      :param enabled: Required. Whether connection draining is enabled or not.
      :type enabled: bool
      :param drain_timeout_in_sec: Required. The number of seconds connection
       draining is active. Acceptable values are from 1 second to 3600 seconds.
      :type drain_timeout_in_sec: int
      """
  
      _validation = {
          'enabled': {'required': True},
          'drain_timeout_in_sec': {'required': True, 'maximum': 3600, 'minimum': 1},
      }
  
      _attribute_map = {
          'enabled': {'key': 'enabled', 'type': 'bool'},
          'drain_timeout_in_sec': {'key': 'drainTimeoutInSec', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayConnectionDraining, self).__init__(**kwargs)
          self.enabled = kwargs.get('enabled', None)
          self.drain_timeout_in_sec = kwargs.get('drain_timeout_in_sec', None)
  
  
  class ApplicationGatewayCustomError(Model):
      """Customer error of an application gateway.
  
      :param status_code: Status code of the application gateway customer error.
       Possible values include: 'HttpStatus403', 'HttpStatus502'
      :type status_code: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayCustomErrorStatusCode
      :param custom_error_page_url: Error page URL of the application gateway
       customer error.
      :type custom_error_page_url: str
      """
  
      _attribute_map = {
          'status_code': {'key': 'statusCode', 'type': 'str'},
          'custom_error_page_url': {'key': 'customErrorPageUrl', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayCustomError, self).__init__(**kwargs)
          self.status_code = kwargs.get('status_code', None)
          self.custom_error_page_url = kwargs.get('custom_error_page_url', None)
  
  
  class ApplicationGatewayFirewallDisabledRuleGroup(Model):
      """Allows to disable rules within a rule group or an entire rule group.
  
      All required parameters must be populated in order to send to Azure.
  
      :param rule_group_name: Required. The name of the rule group that will be
       disabled.
      :type rule_group_name: str
      :param rules: The list of rules that will be disabled. If null, all rules
       of the rule group will be disabled.
      :type rules: list[int]
      """
  
      _validation = {
          'rule_group_name': {'required': True},
      }
  
      _attribute_map = {
          'rule_group_name': {'key': 'ruleGroupName', 'type': 'str'},
          'rules': {'key': 'rules', 'type': '[int]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFirewallDisabledRuleGroup, self).__init__(**kwargs)
          self.rule_group_name = kwargs.get('rule_group_name', None)
          self.rules = kwargs.get('rules', None)
  
  
  class ApplicationGatewayFirewallExclusion(Model):
      """Allow to exclude some variable satisfy the condition for the WAF check.
  
      All required parameters must be populated in order to send to Azure.
  
      :param match_variable: Required. The variable to be excluded.
      :type match_variable: str
      :param selector_match_operator: Required. When matchVariable is a
       collection, operate on the selector to specify which elements in the
       collection this exclusion applies to.
      :type selector_match_operator: str
      :param selector: Required. When matchVariable is a collection, operator
       used to specify which elements in the collection this exclusion applies
       to.
      :type selector: str
      """
  
      _validation = {
          'match_variable': {'required': True},
          'selector_match_operator': {'required': True},
          'selector': {'required': True},
      }
  
      _attribute_map = {
          'match_variable': {'key': 'matchVariable', 'type': 'str'},
          'selector_match_operator': {'key': 'selectorMatchOperator', 'type': 'str'},
          'selector': {'key': 'selector', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFirewallExclusion, self).__init__(**kwargs)
          self.match_variable = kwargs.get('match_variable', None)
          self.selector_match_operator = kwargs.get('selector_match_operator', None)
          self.selector = kwargs.get('selector', None)
  
  
  class ApplicationGatewayFirewallRule(Model):
      """A web application firewall rule.
  
      All required parameters must be populated in order to send to Azure.
  
      :param rule_id: Required. The identifier of the web application firewall
       rule.
      :type rule_id: int
      :param description: The description of the web application firewall rule.
      :type description: str
      """
  
      _validation = {
          'rule_id': {'required': True},
      }
  
      _attribute_map = {
          'rule_id': {'key': 'ruleId', 'type': 'int'},
          'description': {'key': 'description', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFirewallRule, self).__init__(**kwargs)
          self.rule_id = kwargs.get('rule_id', None)
          self.description = kwargs.get('description', None)
  
  
  class ApplicationGatewayFirewallRuleGroup(Model):
      """A web application firewall rule group.
  
      All required parameters must be populated in order to send to Azure.
  
      :param rule_group_name: Required. The name of the web application firewall
       rule group.
      :type rule_group_name: str
      :param description: The description of the web application firewall rule
       group.
      :type description: str
      :param rules: Required. The rules of the web application firewall rule
       group.
      :type rules:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFirewallRule]
      """
  
      _validation = {
          'rule_group_name': {'required': True},
          'rules': {'required': True},
      }
  
      _attribute_map = {
          'rule_group_name': {'key': 'ruleGroupName', 'type': 'str'},
          'description': {'key': 'description', 'type': 'str'},
          'rules': {'key': 'rules', 'type': '[ApplicationGatewayFirewallRule]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFirewallRuleGroup, self).__init__(**kwargs)
          self.rule_group_name = kwargs.get('rule_group_name', None)
          self.description = kwargs.get('description', None)
          self.rules = kwargs.get('rules', None)
  
  
  class ApplicationGatewayFirewallRuleSet(Resource):
      """A web application firewall rule set.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param provisioning_state: The provisioning state of the web application
       firewall rule set.
      :type provisioning_state: str
      :param rule_set_type: Required. The type of the web application firewall
       rule set.
      :type rule_set_type: str
      :param rule_set_version: Required. The version of the web application
       firewall rule set type.
      :type rule_set_version: str
      :param rule_groups: Required. The rule groups of the web application
       firewall rule set.
      :type rule_groups:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFirewallRuleGroup]
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'rule_set_type': {'required': True},
          'rule_set_version': {'required': True},
          'rule_groups': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'rule_set_type': {'key': 'properties.ruleSetType', 'type': 'str'},
          'rule_set_version': {'key': 'properties.ruleSetVersion', 'type': 'str'},
          'rule_groups': {'key': 'properties.ruleGroups', 'type': '[ApplicationGatewayFirewallRuleGroup]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFirewallRuleSet, self).__init__(**kwargs)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.rule_set_type = kwargs.get('rule_set_type', None)
          self.rule_set_version = kwargs.get('rule_set_version', None)
          self.rule_groups = kwargs.get('rule_groups', None)
  
  
  class ApplicationGatewayFrontendIPConfiguration(SubResource):
      """Frontend IP configuration of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param private_ip_address: PrivateIPAddress of the network interface IP
       Configuration.
      :type private_ip_address: str
      :param private_ip_allocation_method: The private IP address allocation
       method. Possible values include: 'Static', 'Dynamic'
      :type private_ip_allocation_method: str or
       ~azure.mgmt.network.v2019_02_01.models.IPAllocationMethod
      :param subnet: Reference of the subnet resource.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param public_ip_address: Reference of the PublicIP resource.
      :type public_ip_address:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Provisioning state of the public IP resource.
       Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the frontend IP configuration that is unique within
       an Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
          'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
          'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFrontendIPConfiguration, self).__init__(**kwargs)
          self.private_ip_address = kwargs.get('private_ip_address', None)
          self.private_ip_allocation_method = kwargs.get('private_ip_allocation_method', None)
          self.subnet = kwargs.get('subnet', None)
          self.public_ip_address = kwargs.get('public_ip_address', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayFrontendPort(SubResource):
      """Frontend port of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param port: Frontend port
      :type port: int
      :param provisioning_state: Provisioning state of the frontend port
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the frontend port that is unique within an
       Application Gateway
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'port': {'key': 'properties.port', 'type': 'int'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayFrontendPort, self).__init__(**kwargs)
          self.port = kwargs.get('port', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayHeaderConfiguration(Model):
      """Header configuration of the Actions set in Application Gateway.
  
      :param header_name: Header name of the header configuration
      :type header_name: str
      :param header_value: Header value of the header configuration
      :type header_value: str
      """
  
      _attribute_map = {
          'header_name': {'key': 'headerName', 'type': 'str'},
          'header_value': {'key': 'headerValue', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayHeaderConfiguration, self).__init__(**kwargs)
          self.header_name = kwargs.get('header_name', None)
          self.header_value = kwargs.get('header_value', None)
  
  
  class ApplicationGatewayHttpListener(SubResource):
      """Http listener of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param frontend_ip_configuration: Frontend IP configuration resource of an
       application gateway.
      :type frontend_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param frontend_port: Frontend port resource of an application gateway.
      :type frontend_port: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param protocol: Protocol of the HTTP listener. Possible values include:
       'Http', 'Https'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProtocol
      :param host_name: Host name of HTTP listener.
      :type host_name: str
      :param ssl_certificate: SSL certificate resource of an application
       gateway.
      :type ssl_certificate: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param require_server_name_indication: Applicable only if protocol is
       https. Enables SNI for multi-hosting.
      :type require_server_name_indication: bool
      :param provisioning_state: Provisioning state of the HTTP listener
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param custom_error_configurations: Custom error configurations of the
       HTTP listener.
      :type custom_error_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayCustomError]
      :param name: Name of the HTTP listener that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
          'frontend_port': {'key': 'properties.frontendPort', 'type': 'SubResource'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'host_name': {'key': 'properties.hostName', 'type': 'str'},
          'ssl_certificate': {'key': 'properties.sslCertificate', 'type': 'SubResource'},
          'require_server_name_indication': {'key': 'properties.requireServerNameIndication', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'custom_error_configurations': {'key': 'properties.customErrorConfigurations', 'type': '[ApplicationGatewayCustomError]'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayHttpListener, self).__init__(**kwargs)
          self.frontend_ip_configuration = kwargs.get('frontend_ip_configuration', None)
          self.frontend_port = kwargs.get('frontend_port', None)
          self.protocol = kwargs.get('protocol', None)
          self.host_name = kwargs.get('host_name', None)
          self.ssl_certificate = kwargs.get('ssl_certificate', None)
          self.require_server_name_indication = kwargs.get('require_server_name_indication', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.custom_error_configurations = kwargs.get('custom_error_configurations', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayIPConfiguration(SubResource):
      """IP configuration of an application gateway. Currently 1 public and 1
      private IP configuration is allowed.
  
      :param id: Resource ID.
      :type id: str
      :param subnet: Reference of the subnet resource. A subnet from where
       application gateway gets its private address.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Provisioning state of the application gateway
       subnet resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :type provisioning_state: str
      :param name: Name of the IP configuration that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayIPConfiguration, self).__init__(**kwargs)
          self.subnet = kwargs.get('subnet', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayOnDemandProbe(Model):
      """Details of on demand test probe request.
  
      :param protocol: The protocol used for the probe. Possible values include:
       'Http', 'Https'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProtocol
      :param host: Host name to send the probe to.
      :type host: str
      :param path: Relative path of probe. Valid path starts from '/'. Probe is
       sent to <Protocol>://<host>:<port><path>
      :type path: str
      :param timeout: The probe timeout in seconds. Probe marked as failed if
       valid response is not received with this timeout period. Acceptable values
       are from 1 second to 86400 seconds.
      :type timeout: int
      :param pick_host_name_from_backend_http_settings: Whether the host header
       should be picked from the backend http settings. Default value is false.
      :type pick_host_name_from_backend_http_settings: bool
      :param match: Criterion for classifying a healthy probe response.
      :type match:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProbeHealthResponseMatch
      :param backend_pool_name: Name of backend pool of application gateway to
       which probe request will be sent.
      :type backend_pool_name: str
      :param backend_http_setting_name: Name of backend http setting of
       application gateway to be used for test probe
      :type backend_http_setting_name: str
      """
  
      _attribute_map = {
          'protocol': {'key': 'protocol', 'type': 'str'},
          'host': {'key': 'host', 'type': 'str'},
          'path': {'key': 'path', 'type': 'str'},
          'timeout': {'key': 'timeout', 'type': 'int'},
          'pick_host_name_from_backend_http_settings': {'key': 'pickHostNameFromBackendHttpSettings', 'type': 'bool'},
          'match': {'key': 'match', 'type': 'ApplicationGatewayProbeHealthResponseMatch'},
          'backend_pool_name': {'key': 'backendPoolName', 'type': 'str'},
          'backend_http_setting_name': {'key': 'backendHttpSettingName', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayOnDemandProbe, self).__init__(**kwargs)
          self.protocol = kwargs.get('protocol', None)
          self.host = kwargs.get('host', None)
          self.path = kwargs.get('path', None)
          self.timeout = kwargs.get('timeout', None)
          self.pick_host_name_from_backend_http_settings = kwargs.get('pick_host_name_from_backend_http_settings', None)
          self.match = kwargs.get('match', None)
          self.backend_pool_name = kwargs.get('backend_pool_name', None)
          self.backend_http_setting_name = kwargs.get('backend_http_setting_name', None)
  
  
  class ApplicationGatewayPathRule(SubResource):
      """Path rule of URL path map of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param paths: Path rules of URL path map.
      :type paths: list[str]
      :param backend_address_pool: Backend address pool resource of URL path map
       path rule.
      :type backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param backend_http_settings: Backend http settings resource of URL path
       map path rule.
      :type backend_http_settings:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param redirect_configuration: Redirect configuration resource of URL path
       map path rule.
      :type redirect_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param rewrite_rule_set: Rewrite rule set resource of URL path map path
       rule.
      :type rewrite_rule_set: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Path rule of URL path map resource. Possible
       values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the path rule that is unique within an Application
       Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'paths': {'key': 'properties.paths', 'type': '[str]'},
          'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
          'backend_http_settings': {'key': 'properties.backendHttpSettings', 'type': 'SubResource'},
          'redirect_configuration': {'key': 'properties.redirectConfiguration', 'type': 'SubResource'},
          'rewrite_rule_set': {'key': 'properties.rewriteRuleSet', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayPathRule, self).__init__(**kwargs)
          self.paths = kwargs.get('paths', None)
          self.backend_address_pool = kwargs.get('backend_address_pool', None)
          self.backend_http_settings = kwargs.get('backend_http_settings', None)
          self.redirect_configuration = kwargs.get('redirect_configuration', None)
          self.rewrite_rule_set = kwargs.get('rewrite_rule_set', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayProbe(SubResource):
      """Probe of the application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param protocol: The protocol used for the probe. Possible values include:
       'Http', 'Https'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProtocol
      :param host: Host name to send the probe to.
      :type host: str
      :param path: Relative path of probe. Valid path starts from '/'. Probe is
       sent to <Protocol>://<host>:<port><path>
      :type path: str
      :param interval: The probing interval in seconds. This is the time
       interval between two consecutive probes. Acceptable values are from 1
       second to 86400 seconds.
      :type interval: int
      :param timeout: The probe timeout in seconds. Probe marked as failed if
       valid response is not received with this timeout period. Acceptable values
       are from 1 second to 86400 seconds.
      :type timeout: int
      :param unhealthy_threshold: The probe retry count. Backend server is
       marked down after consecutive probe failure count reaches
       UnhealthyThreshold. Acceptable values are from 1 second to 20.
      :type unhealthy_threshold: int
      :param pick_host_name_from_backend_http_settings: Whether the host header
       should be picked from the backend http settings. Default value is false.
      :type pick_host_name_from_backend_http_settings: bool
      :param min_servers: Minimum number of servers that are always marked
       healthy. Default value is 0.
      :type min_servers: int
      :param match: Criterion for classifying a healthy probe response.
      :type match:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayProbeHealthResponseMatch
      :param provisioning_state: Provisioning state of the backend http settings
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the probe that is unique within an Application
       Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'host': {'key': 'properties.host', 'type': 'str'},
          'path': {'key': 'properties.path', 'type': 'str'},
          'interval': {'key': 'properties.interval', 'type': 'int'},
          'timeout': {'key': 'properties.timeout', 'type': 'int'},
          'unhealthy_threshold': {'key': 'properties.unhealthyThreshold', 'type': 'int'},
          'pick_host_name_from_backend_http_settings': {'key': 'properties.pickHostNameFromBackendHttpSettings', 'type': 'bool'},
          'min_servers': {'key': 'properties.minServers', 'type': 'int'},
          'match': {'key': 'properties.match', 'type': 'ApplicationGatewayProbeHealthResponseMatch'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayProbe, self).__init__(**kwargs)
          self.protocol = kwargs.get('protocol', None)
          self.host = kwargs.get('host', None)
          self.path = kwargs.get('path', None)
          self.interval = kwargs.get('interval', None)
          self.timeout = kwargs.get('timeout', None)
          self.unhealthy_threshold = kwargs.get('unhealthy_threshold', None)
          self.pick_host_name_from_backend_http_settings = kwargs.get('pick_host_name_from_backend_http_settings', None)
          self.min_servers = kwargs.get('min_servers', None)
          self.match = kwargs.get('match', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayProbeHealthResponseMatch(Model):
      """Application gateway probe health response match.
  
      :param body: Body that must be contained in the health response. Default
       value is empty.
      :type body: str
      :param status_codes: Allowed ranges of healthy status codes. Default range
       of healthy status codes is 200-399.
      :type status_codes: list[str]
      """
  
      _attribute_map = {
          'body': {'key': 'body', 'type': 'str'},
          'status_codes': {'key': 'statusCodes', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayProbeHealthResponseMatch, self).__init__(**kwargs)
          self.body = kwargs.get('body', None)
          self.status_codes = kwargs.get('status_codes', None)
  
  
  class ApplicationGatewayRedirectConfiguration(SubResource):
      """Redirect configuration of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param redirect_type: HTTP redirection type. Possible values include:
       'Permanent', 'Found', 'SeeOther', 'Temporary'
      :type redirect_type: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRedirectType
      :param target_listener: Reference to a listener to redirect the request
       to.
      :type target_listener: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param target_url: Url to redirect the request to.
      :type target_url: str
      :param include_path: Include path in the redirected url.
      :type include_path: bool
      :param include_query_string: Include query string in the redirected url.
      :type include_query_string: bool
      :param request_routing_rules: Request routing specifying redirect
       configuration.
      :type request_routing_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param url_path_maps: Url path maps specifying default redirect
       configuration.
      :type url_path_maps:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param path_rules: Path rules specifying redirect configuration.
      :type path_rules: list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param name: Name of the redirect configuration that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'redirect_type': {'key': 'properties.redirectType', 'type': 'str'},
          'target_listener': {'key': 'properties.targetListener', 'type': 'SubResource'},
          'target_url': {'key': 'properties.targetUrl', 'type': 'str'},
          'include_path': {'key': 'properties.includePath', 'type': 'bool'},
          'include_query_string': {'key': 'properties.includeQueryString', 'type': 'bool'},
          'request_routing_rules': {'key': 'properties.requestRoutingRules', 'type': '[SubResource]'},
          'url_path_maps': {'key': 'properties.urlPathMaps', 'type': '[SubResource]'},
          'path_rules': {'key': 'properties.pathRules', 'type': '[SubResource]'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayRedirectConfiguration, self).__init__(**kwargs)
          self.redirect_type = kwargs.get('redirect_type', None)
          self.target_listener = kwargs.get('target_listener', None)
          self.target_url = kwargs.get('target_url', None)
          self.include_path = kwargs.get('include_path', None)
          self.include_query_string = kwargs.get('include_query_string', None)
          self.request_routing_rules = kwargs.get('request_routing_rules', None)
          self.url_path_maps = kwargs.get('url_path_maps', None)
          self.path_rules = kwargs.get('path_rules', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayRequestRoutingRule(SubResource):
      """Request routing rule of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param rule_type: Rule type. Possible values include: 'Basic',
       'PathBasedRouting'
      :type rule_type: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRequestRoutingRuleType
      :param backend_address_pool: Backend address pool resource of the
       application gateway.
      :type backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param backend_http_settings: Backend http settings resource of the
       application gateway.
      :type backend_http_settings:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param http_listener: Http listener resource of the application gateway.
      :type http_listener: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param url_path_map: URL path map resource of the application gateway.
      :type url_path_map: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param rewrite_rule_set: Rewrite Rule Set resource in Basic rule of the
       application gateway.
      :type rewrite_rule_set: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param redirect_configuration: Redirect configuration resource of the
       application gateway.
      :type redirect_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Provisioning state of the request routing rule
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the request routing rule that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'rule_type': {'key': 'properties.ruleType', 'type': 'str'},
          'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
          'backend_http_settings': {'key': 'properties.backendHttpSettings', 'type': 'SubResource'},
          'http_listener': {'key': 'properties.httpListener', 'type': 'SubResource'},
          'url_path_map': {'key': 'properties.urlPathMap', 'type': 'SubResource'},
          'rewrite_rule_set': {'key': 'properties.rewriteRuleSet', 'type': 'SubResource'},
          'redirect_configuration': {'key': 'properties.redirectConfiguration', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayRequestRoutingRule, self).__init__(**kwargs)
          self.rule_type = kwargs.get('rule_type', None)
          self.backend_address_pool = kwargs.get('backend_address_pool', None)
          self.backend_http_settings = kwargs.get('backend_http_settings', None)
          self.http_listener = kwargs.get('http_listener', None)
          self.url_path_map = kwargs.get('url_path_map', None)
          self.rewrite_rule_set = kwargs.get('rewrite_rule_set', None)
          self.redirect_configuration = kwargs.get('redirect_configuration', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayRewriteRule(Model):
      """Rewrite rule of an application gateway.
  
      :param name: Name of the rewrite rule that is unique within an Application
       Gateway.
      :type name: str
      :param rule_sequence: Rule Sequence of the rewrite rule that determines
       the order of execution of a particular rule in a RewriteRuleSet.
      :type rule_sequence: int
      :param conditions: Conditions based on which the action set execution will
       be evaluated.
      :type conditions:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRewriteRuleCondition]
      :param action_set: Set of actions to be done as part of the rewrite Rule.
      :type action_set:
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRewriteRuleActionSet
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'rule_sequence': {'key': 'ruleSequence', 'type': 'int'},
          'conditions': {'key': 'conditions', 'type': '[ApplicationGatewayRewriteRuleCondition]'},
          'action_set': {'key': 'actionSet', 'type': 'ApplicationGatewayRewriteRuleActionSet'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayRewriteRule, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.rule_sequence = kwargs.get('rule_sequence', None)
          self.conditions = kwargs.get('conditions', None)
          self.action_set = kwargs.get('action_set', None)
  
  
  class ApplicationGatewayRewriteRuleActionSet(Model):
      """Set of actions in the Rewrite Rule in Application Gateway.
  
      :param request_header_configurations: Request Header Actions in the Action
       Set
      :type request_header_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayHeaderConfiguration]
      :param response_header_configurations: Response Header Actions in the
       Action Set
      :type response_header_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayHeaderConfiguration]
      """
  
      _attribute_map = {
          'request_header_configurations': {'key': 'requestHeaderConfigurations', 'type': '[ApplicationGatewayHeaderConfiguration]'},
          'response_header_configurations': {'key': 'responseHeaderConfigurations', 'type': '[ApplicationGatewayHeaderConfiguration]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayRewriteRuleActionSet, self).__init__(**kwargs)
          self.request_header_configurations = kwargs.get('request_header_configurations', None)
          self.response_header_configurations = kwargs.get('response_header_configurations', None)
  
  
  class ApplicationGatewayRewriteRuleCondition(Model):
      """Set of conditions in the Rewrite Rule in Application Gateway.
  
      :param variable: The condition parameter of the RewriteRuleCondition.
      :type variable: str
      :param pattern: The pattern, either fixed string or regular expression,
       that evaluates the truthfulness of the condition
      :type pattern: str
      :param ignore_case: Setting this paramter to truth value with force the
       pattern to do a case in-sensitive comparison.
      :type ignore_case: bool
      :param negate: Setting this value as truth will force to check the
       negation of the condition given by the user.
      :type negate: bool
      """
  
      _attribute_map = {
          'variable': {'key': 'variable', 'type': 'str'},
          'pattern': {'key': 'pattern', 'type': 'str'},
          'ignore_case': {'key': 'ignoreCase', 'type': 'bool'},
          'negate': {'key': 'negate', 'type': 'bool'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayRewriteRuleCondition, self).__init__(**kwargs)
          self.variable = kwargs.get('variable', None)
          self.pattern = kwargs.get('pattern', None)
          self.ignore_case = kwargs.get('ignore_case', None)
          self.negate = kwargs.get('negate', None)
  
  
  class ApplicationGatewayRewriteRuleSet(SubResource):
      """Rewrite rule set of an application gateway.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param rewrite_rules: Rewrite rules in the rewrite rule set.
      :type rewrite_rules:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayRewriteRule]
      :ivar provisioning_state: Provisioning state of the rewrite rule set
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param name: Name of the rewrite rule set that is unique within an
       Application Gateway.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'rewrite_rules': {'key': 'properties.rewriteRules', 'type': '[ApplicationGatewayRewriteRule]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayRewriteRuleSet, self).__init__(**kwargs)
          self.rewrite_rules = kwargs.get('rewrite_rules', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ApplicationGatewaySku(Model):
      """SKU of an application gateway.
  
      :param name: Name of an application gateway SKU. Possible values include:
       'Standard_Small', 'Standard_Medium', 'Standard_Large', 'WAF_Medium',
       'WAF_Large', 'Standard_v2', 'WAF_v2'
      :type name: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySkuName
      :param tier: Tier of an application gateway. Possible values include:
       'Standard', 'WAF', 'Standard_v2', 'WAF_v2'
      :type tier: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayTier
      :param capacity: Capacity (instance count) of an application gateway.
      :type capacity: int
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'tier': {'key': 'tier', 'type': 'str'},
          'capacity': {'key': 'capacity', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewaySku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.tier = kwargs.get('tier', None)
          self.capacity = kwargs.get('capacity', None)
  
  
  class ApplicationGatewaySslCertificate(SubResource):
      """SSL certificates of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param data: Base-64 encoded pfx certificate. Only applicable in PUT
       Request.
      :type data: str
      :param password: Password for the pfx file specified in data. Only
       applicable in PUT request.
      :type password: str
      :param public_cert_data: Base-64 encoded Public cert data corresponding to
       pfx specified in data. Only applicable in GET request.
      :type public_cert_data: str
      :param key_vault_secret_id: Secret Id of (base-64 encoded unencrypted pfx)
       'Secret' or 'Certificate' object stored in KeyVault.
      :type key_vault_secret_id: str
      :param provisioning_state: Provisioning state of the SSL certificate
       resource Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the SSL certificate that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'data': {'key': 'properties.data', 'type': 'str'},
          'password': {'key': 'properties.password', 'type': 'str'},
          'public_cert_data': {'key': 'properties.publicCertData', 'type': 'str'},
          'key_vault_secret_id': {'key': 'properties.keyVaultSecretId', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewaySslCertificate, self).__init__(**kwargs)
          self.data = kwargs.get('data', None)
          self.password = kwargs.get('password', None)
          self.public_cert_data = kwargs.get('public_cert_data', None)
          self.key_vault_secret_id = kwargs.get('key_vault_secret_id', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewaySslPolicy(Model):
      """Application Gateway Ssl policy.
  
      :param disabled_ssl_protocols: Ssl protocols to be disabled on application
       gateway.
      :type disabled_ssl_protocols: list[str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslProtocol]
      :param policy_type: Type of Ssl Policy. Possible values include:
       'Predefined', 'Custom'
      :type policy_type: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslPolicyType
      :param policy_name: Name of Ssl predefined policy. Possible values
       include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401',
       'AppGwSslPolicy20170401S'
      :type policy_name: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslPolicyName
      :param cipher_suites: Ssl cipher suites to be enabled in the specified
       order to application gateway.
      :type cipher_suites: list[str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslCipherSuite]
      :param min_protocol_version: Minimum version of Ssl protocol to be
       supported on application gateway. Possible values include: 'TLSv1_0',
       'TLSv1_1', 'TLSv1_2'
      :type min_protocol_version: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslProtocol
      """
  
      _attribute_map = {
          'disabled_ssl_protocols': {'key': 'disabledSslProtocols', 'type': '[str]'},
          'policy_type': {'key': 'policyType', 'type': 'str'},
          'policy_name': {'key': 'policyName', 'type': 'str'},
          'cipher_suites': {'key': 'cipherSuites', 'type': '[str]'},
          'min_protocol_version': {'key': 'minProtocolVersion', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewaySslPolicy, self).__init__(**kwargs)
          self.disabled_ssl_protocols = kwargs.get('disabled_ssl_protocols', None)
          self.policy_type = kwargs.get('policy_type', None)
          self.policy_name = kwargs.get('policy_name', None)
          self.cipher_suites = kwargs.get('cipher_suites', None)
          self.min_protocol_version = kwargs.get('min_protocol_version', None)
  
  
  class ApplicationGatewaySslPredefinedPolicy(SubResource):
      """An Ssl predefined policy.
  
      :param id: Resource ID.
      :type id: str
      :param name: Name of the Ssl predefined policy.
      :type name: str
      :param cipher_suites: Ssl cipher suites to be enabled in the specified
       order for application gateway.
      :type cipher_suites: list[str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslCipherSuite]
      :param min_protocol_version: Minimum version of Ssl protocol to be
       supported on application gateway. Possible values include: 'TLSv1_0',
       'TLSv1_1', 'TLSv1_2'
      :type min_protocol_version: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewaySslProtocol
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'cipher_suites': {'key': 'properties.cipherSuites', 'type': '[str]'},
          'min_protocol_version': {'key': 'properties.minProtocolVersion', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewaySslPredefinedPolicy, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.cipher_suites = kwargs.get('cipher_suites', None)
          self.min_protocol_version = kwargs.get('min_protocol_version', None)
  
  
  class ApplicationGatewayTrustedRootCertificate(SubResource):
      """Trusted Root certificates of an application gateway.
  
      :param id: Resource ID.
      :type id: str
      :param data: Certificate public data.
      :type data: str
      :param key_vault_secret_id: Secret Id of (base-64 encoded unencrypted pfx)
       'Secret' or 'Certificate' object stored in KeyVault.
      :type key_vault_secret_id: str
      :param provisioning_state: Provisioning state of the trusted root
       certificate resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :type provisioning_state: str
      :param name: Name of the trusted root certificate that is unique within an
       Application Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'data': {'key': 'properties.data', 'type': 'str'},
          'key_vault_secret_id': {'key': 'properties.keyVaultSecretId', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayTrustedRootCertificate, self).__init__(**kwargs)
          self.data = kwargs.get('data', None)
          self.key_vault_secret_id = kwargs.get('key_vault_secret_id', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayUrlPathMap(SubResource):
      """UrlPathMaps give a url path to the backend mapping information for
      PathBasedRouting.
  
      :param id: Resource ID.
      :type id: str
      :param default_backend_address_pool: Default backend address pool resource
       of URL path map.
      :type default_backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param default_backend_http_settings: Default backend http settings
       resource of URL path map.
      :type default_backend_http_settings:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param default_rewrite_rule_set: Default Rewrite rule set resource of URL
       path map.
      :type default_rewrite_rule_set:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param default_redirect_configuration: Default redirect configuration
       resource of URL path map.
      :type default_redirect_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param path_rules: Path rule of URL path map resource.
      :type path_rules:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayPathRule]
      :param provisioning_state: Provisioning state of the backend http settings
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Name of the URL path map that is unique within an Application
       Gateway.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param type: Type of the resource.
      :type type: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'default_backend_address_pool': {'key': 'properties.defaultBackendAddressPool', 'type': 'SubResource'},
          'default_backend_http_settings': {'key': 'properties.defaultBackendHttpSettings', 'type': 'SubResource'},
          'default_rewrite_rule_set': {'key': 'properties.defaultRewriteRuleSet', 'type': 'SubResource'},
          'default_redirect_configuration': {'key': 'properties.defaultRedirectConfiguration', 'type': 'SubResource'},
          'path_rules': {'key': 'properties.pathRules', 'type': '[ApplicationGatewayPathRule]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayUrlPathMap, self).__init__(**kwargs)
          self.default_backend_address_pool = kwargs.get('default_backend_address_pool', None)
          self.default_backend_http_settings = kwargs.get('default_backend_http_settings', None)
          self.default_rewrite_rule_set = kwargs.get('default_rewrite_rule_set', None)
          self.default_redirect_configuration = kwargs.get('default_redirect_configuration', None)
          self.path_rules = kwargs.get('path_rules', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = kwargs.get('type', None)
  
  
  class ApplicationGatewayWebApplicationFirewallConfiguration(Model):
      """Application gateway web application firewall configuration.
  
      All required parameters must be populated in order to send to Azure.
  
      :param enabled: Required. Whether the web application firewall is enabled
       or not.
      :type enabled: bool
      :param firewall_mode: Required. Web application firewall mode. Possible
       values include: 'Detection', 'Prevention'
      :type firewall_mode: str or
       ~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFirewallMode
      :param rule_set_type: Required. The type of the web application firewall
       rule set. Possible values are: 'OWASP'.
      :type rule_set_type: str
      :param rule_set_version: Required. The version of the rule set type.
      :type rule_set_version: str
      :param disabled_rule_groups: The disabled rule groups.
      :type disabled_rule_groups:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFirewallDisabledRuleGroup]
      :param request_body_check: Whether allow WAF to check request Body.
      :type request_body_check: bool
      :param max_request_body_size: Maximum request body size for WAF.
      :type max_request_body_size: int
      :param max_request_body_size_in_kb: Maximum request body size in Kb for
       WAF.
      :type max_request_body_size_in_kb: int
      :param file_upload_limit_in_mb: Maximum file upload size in Mb for WAF.
      :type file_upload_limit_in_mb: int
      :param exclusions: The exclusion list.
      :type exclusions:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayFirewallExclusion]
      """
  
      _validation = {
          'enabled': {'required': True},
          'firewall_mode': {'required': True},
          'rule_set_type': {'required': True},
          'rule_set_version': {'required': True},
          'max_request_body_size': {'maximum': 128, 'minimum': 8},
          'max_request_body_size_in_kb': {'maximum': 128, 'minimum': 8},
          'file_upload_limit_in_mb': {'minimum': 0},
      }
  
      _attribute_map = {
          'enabled': {'key': 'enabled', 'type': 'bool'},
          'firewall_mode': {'key': 'firewallMode', 'type': 'str'},
          'rule_set_type': {'key': 'ruleSetType', 'type': 'str'},
          'rule_set_version': {'key': 'ruleSetVersion', 'type': 'str'},
          'disabled_rule_groups': {'key': 'disabledRuleGroups', 'type': '[ApplicationGatewayFirewallDisabledRuleGroup]'},
          'request_body_check': {'key': 'requestBodyCheck', 'type': 'bool'},
          'max_request_body_size': {'key': 'maxRequestBodySize', 'type': 'int'},
          'max_request_body_size_in_kb': {'key': 'maxRequestBodySizeInKb', 'type': 'int'},
          'file_upload_limit_in_mb': {'key': 'fileUploadLimitInMb', 'type': 'int'},
          'exclusions': {'key': 'exclusions', 'type': '[ApplicationGatewayFirewallExclusion]'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationGatewayWebApplicationFirewallConfiguration, self).__init__(**kwargs)
          self.enabled = kwargs.get('enabled', None)
          self.firewall_mode = kwargs.get('firewall_mode', None)
          self.rule_set_type = kwargs.get('rule_set_type', None)
          self.rule_set_version = kwargs.get('rule_set_version', None)
          self.disabled_rule_groups = kwargs.get('disabled_rule_groups', None)
          self.request_body_check = kwargs.get('request_body_check', None)
          self.max_request_body_size = kwargs.get('max_request_body_size', None)
          self.max_request_body_size_in_kb = kwargs.get('max_request_body_size_in_kb', None)
          self.file_upload_limit_in_mb = kwargs.get('file_upload_limit_in_mb', None)
          self.exclusions = kwargs.get('exclusions', None)
  
  
  class ApplicationSecurityGroup(Resource):
      """An application security group in a resource group.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar resource_guid: The resource GUID property of the application
       security group resource. It uniquely identifies a resource, even if the
       user changes its name or migrate the resource across subscriptions or
       resource groups.
      :vartype resource_guid: str
      :ivar provisioning_state: The provisioning state of the application
       security group resource. Possible values are: 'Succeeded', 'Updating',
       'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'resource_guid': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ApplicationSecurityGroup, self).__init__(**kwargs)
          self.resource_guid = None
          self.provisioning_state = None
          self.etag = None
  
  
  class Availability(Model):
      """Availability of the metric.
  
      :param time_grain: The time grain of the availability.
      :type time_grain: str
      :param retention: The retention of the availability.
      :type retention: str
      :param blob_duration: Duration of the availability blob.
      :type blob_duration: str
      """
  
      _attribute_map = {
          'time_grain': {'key': 'timeGrain', 'type': 'str'},
          'retention': {'key': 'retention', 'type': 'str'},
          'blob_duration': {'key': 'blobDuration', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Availability, self).__init__(**kwargs)
          self.time_grain = kwargs.get('time_grain', None)
          self.retention = kwargs.get('retention', None)
          self.blob_duration = kwargs.get('blob_duration', None)
  
  
  class AvailableDelegation(Model):
      """The serviceName of an AvailableDelegation indicates a possible delegation
      for a subnet.
  
      :param name: The name of the AvailableDelegation resource.
      :type name: str
      :param id: A unique identifier of the AvailableDelegation resource.
      :type id: str
      :param type: Resource type.
      :type type: str
      :param service_name: The name of the service and resource
      :type service_name: str
      :param actions: Describes the actions permitted to the service upon
       delegation
      :type actions: list[str]
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'service_name': {'key': 'serviceName', 'type': 'str'},
          'actions': {'key': 'actions', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(AvailableDelegation, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.id = kwargs.get('id', None)
          self.type = kwargs.get('type', None)
          self.service_name = kwargs.get('service_name', None)
          self.actions = kwargs.get('actions', None)
  
  
  class AvailableProvidersList(Model):
      """List of available countries with details.
  
      All required parameters must be populated in order to send to Azure.
  
      :param countries: Required. List of available countries.
      :type countries:
       list[~azure.mgmt.network.v2019_02_01.models.AvailableProvidersListCountry]
      """
  
      _validation = {
          'countries': {'required': True},
      }
  
      _attribute_map = {
          'countries': {'key': 'countries', 'type': '[AvailableProvidersListCountry]'},
      }
  
      def __init__(self, **kwargs):
          super(AvailableProvidersList, self).__init__(**kwargs)
          self.countries = kwargs.get('countries', None)
  
  
  class AvailableProvidersListCity(Model):
      """City or town details.
  
      :param city_name: The city or town name.
      :type city_name: str
      :param providers: A list of Internet service providers.
      :type providers: list[str]
      """
  
      _attribute_map = {
          'city_name': {'key': 'cityName', 'type': 'str'},
          'providers': {'key': 'providers', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(AvailableProvidersListCity, self).__init__(**kwargs)
          self.city_name = kwargs.get('city_name', None)
          self.providers = kwargs.get('providers', None)
  
  
  class AvailableProvidersListCountry(Model):
      """Country details.
  
      :param country_name: The country name.
      :type country_name: str
      :param providers: A list of Internet service providers.
      :type providers: list[str]
      :param states: List of available states in the country.
      :type states:
       list[~azure.mgmt.network.v2019_02_01.models.AvailableProvidersListState]
      """
  
      _attribute_map = {
          'country_name': {'key': 'countryName', 'type': 'str'},
          'providers': {'key': 'providers', 'type': '[str]'},
          'states': {'key': 'states', 'type': '[AvailableProvidersListState]'},
      }
  
      def __init__(self, **kwargs):
          super(AvailableProvidersListCountry, self).__init__(**kwargs)
          self.country_name = kwargs.get('country_name', None)
          self.providers = kwargs.get('providers', None)
          self.states = kwargs.get('states', None)
  
  
  class AvailableProvidersListParameters(Model):
      """Constraints that determine the list of available Internet service
      providers.
  
      :param azure_locations: A list of Azure regions.
      :type azure_locations: list[str]
      :param country: The country for available providers list.
      :type country: str
      :param state: The state for available providers list.
      :type state: str
      :param city: The city or town for available providers list.
      :type city: str
      """
  
      _attribute_map = {
          'azure_locations': {'key': 'azureLocations', 'type': '[str]'},
          'country': {'key': 'country', 'type': 'str'},
          'state': {'key': 'state', 'type': 'str'},
          'city': {'key': 'city', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AvailableProvidersListParameters, self).__init__(**kwargs)
          self.azure_locations = kwargs.get('azure_locations', None)
          self.country = kwargs.get('country', None)
          self.state = kwargs.get('state', None)
          self.city = kwargs.get('city', None)
  
  
  class AvailableProvidersListState(Model):
      """State details.
  
      :param state_name: The state name.
      :type state_name: str
      :param providers: A list of Internet service providers.
      :type providers: list[str]
      :param cities: List of available cities or towns in the state.
      :type cities:
       list[~azure.mgmt.network.v2019_02_01.models.AvailableProvidersListCity]
      """
  
      _attribute_map = {
          'state_name': {'key': 'stateName', 'type': 'str'},
          'providers': {'key': 'providers', 'type': '[str]'},
          'cities': {'key': 'cities', 'type': '[AvailableProvidersListCity]'},
      }
  
      def __init__(self, **kwargs):
          super(AvailableProvidersListState, self).__init__(**kwargs)
          self.state_name = kwargs.get('state_name', None)
          self.providers = kwargs.get('providers', None)
          self.cities = kwargs.get('cities', None)
  
  
  class AzureAsyncOperationResult(Model):
      """The response body contains the status of the specified asynchronous
      operation, indicating whether it has succeeded, is in progress, or has
      failed. Note that this status is distinct from the HTTP status code
      returned for the Get Operation Status operation itself. If the asynchronous
      operation succeeded, the response body includes the HTTP status code for
      the successful request. If the asynchronous operation failed, the response
      body includes the HTTP status code for the failed request and error
      information regarding the failure.
  
      :param status: Status of the Azure async operation. Possible values are:
       'InProgress', 'Succeeded', and 'Failed'. Possible values include:
       'InProgress', 'Succeeded', 'Failed'
      :type status: str or
       ~azure.mgmt.network.v2019_02_01.models.NetworkOperationStatus
      :param error: Details of the error occurred during specified asynchronous
       operation.
      :type error: ~azure.mgmt.network.v2019_02_01.models.Error
      """
  
      _attribute_map = {
          'status': {'key': 'status', 'type': 'str'},
          'error': {'key': 'error', 'type': 'Error'},
      }
  
      def __init__(self, **kwargs):
          super(AzureAsyncOperationResult, self).__init__(**kwargs)
          self.status = kwargs.get('status', None)
          self.error = kwargs.get('error', None)
  
  
  class AzureFirewall(Resource):
      """Azure Firewall resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param application_rule_collections: Collection of application rule
       collections used by Azure Firewall.
      :type application_rule_collections:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallApplicationRuleCollection]
      :param nat_rule_collections: Collection of NAT rule collections used by
       Azure Firewall.
      :type nat_rule_collections:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallNatRuleCollection]
      :param network_rule_collections: Collection of network rule collections
       used by Azure Firewall.
      :type network_rule_collections:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallNetworkRuleCollection]
      :param ip_configurations: IP configuration of the Azure Firewall resource.
      :type ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallIPConfiguration]
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param threat_intel_mode: The operation mode for Threat Intelligence.
       Possible values include: 'Alert', 'Deny', 'Off'
      :type threat_intel_mode: str or
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallThreatIntelMode
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'application_rule_collections': {'key': 'properties.applicationRuleCollections', 'type': '[AzureFirewallApplicationRuleCollection]'},
          'nat_rule_collections': {'key': 'properties.natRuleCollections', 'type': '[AzureFirewallNatRuleCollection]'},
          'network_rule_collections': {'key': 'properties.networkRuleCollections', 'type': '[AzureFirewallNetworkRuleCollection]'},
          'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[AzureFirewallIPConfiguration]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'threat_intel_mode': {'key': 'properties.threatIntelMode', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewall, self).__init__(**kwargs)
          self.application_rule_collections = kwargs.get('application_rule_collections', None)
          self.nat_rule_collections = kwargs.get('nat_rule_collections', None)
          self.network_rule_collections = kwargs.get('network_rule_collections', None)
          self.ip_configurations = kwargs.get('ip_configurations', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.threat_intel_mode = kwargs.get('threat_intel_mode', None)
          self.etag = None
  
  
  class AzureFirewallApplicationRule(Model):
      """Properties of an application rule.
  
      :param name: Name of the application rule.
      :type name: str
      :param description: Description of the rule.
      :type description: str
      :param source_addresses: List of source IP addresses for this rule.
      :type source_addresses: list[str]
      :param protocols: Array of ApplicationRuleProtocols.
      :type protocols:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallApplicationRuleProtocol]
      :param target_fqdns: List of FQDNs for this rule.
      :type target_fqdns: list[str]
      :param fqdn_tags: List of FQDN Tags for this rule.
      :type fqdn_tags: list[str]
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'description': {'key': 'description', 'type': 'str'},
          'source_addresses': {'key': 'sourceAddresses', 'type': '[str]'},
          'protocols': {'key': 'protocols', 'type': '[AzureFirewallApplicationRuleProtocol]'},
          'target_fqdns': {'key': 'targetFqdns', 'type': '[str]'},
          'fqdn_tags': {'key': 'fqdnTags', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallApplicationRule, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.description = kwargs.get('description', None)
          self.source_addresses = kwargs.get('source_addresses', None)
          self.protocols = kwargs.get('protocols', None)
          self.target_fqdns = kwargs.get('target_fqdns', None)
          self.fqdn_tags = kwargs.get('fqdn_tags', None)
  
  
  class AzureFirewallApplicationRuleCollection(SubResource):
      """Application rule collection resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param priority: Priority of the application rule collection resource.
      :type priority: int
      :param action: The action type of a rule collection
      :type action: ~azure.mgmt.network.v2019_02_01.models.AzureFirewallRCAction
      :param rules: Collection of rules used by a application rule collection.
      :type rules:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallApplicationRule]
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'priority': {'maximum': 65000, 'minimum': 100},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'priority': {'key': 'properties.priority', 'type': 'int'},
          'action': {'key': 'properties.action', 'type': 'AzureFirewallRCAction'},
          'rules': {'key': 'properties.rules', 'type': '[AzureFirewallApplicationRule]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallApplicationRuleCollection, self).__init__(**kwargs)
          self.priority = kwargs.get('priority', None)
          self.action = kwargs.get('action', None)
          self.rules = kwargs.get('rules', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class AzureFirewallApplicationRuleProtocol(Model):
      """Properties of the application rule protocol.
  
      :param protocol_type: Protocol type. Possible values include: 'Http',
       'Https'
      :type protocol_type: str or
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallApplicationRuleProtocolType
      :param port: Port number for the protocol, cannot be greater than 64000.
       This field is optional.
      :type port: int
      """
  
      _validation = {
          'port': {'maximum': 64000, 'minimum': 0},
      }
  
      _attribute_map = {
          'protocol_type': {'key': 'protocolType', 'type': 'str'},
          'port': {'key': 'port', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallApplicationRuleProtocol, self).__init__(**kwargs)
          self.protocol_type = kwargs.get('protocol_type', None)
          self.port = kwargs.get('port', None)
  
  
  class AzureFirewallFqdnTag(Resource):
      """Azure Firewall FQDN Tag Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :ivar fqdn_tag_name: The name of this FQDN Tag.
      :vartype fqdn_tag_name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'fqdn_tag_name': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'fqdn_tag_name': {'key': 'properties.fqdnTagName', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallFqdnTag, self).__init__(**kwargs)
          self.provisioning_state = None
          self.fqdn_tag_name = None
          self.etag = None
  
  
  class AzureFirewallIPConfiguration(SubResource):
      """IP configuration of an Azure Firewall.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar private_ip_address: The Firewall Internal Load Balancer IP to be
       used as the next hop in User Defined Routes.
      :vartype private_ip_address: str
      :param subnet: Reference of the subnet resource. This resource must be
       named 'AzureFirewallSubnet'.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param public_ip_address: Reference of the PublicIP resource. This field
       is a mandatory input if subnet is not null.
      :type public_ip_address:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param name: Name of the resource that is unique within a resource group.
       This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'private_ip_address': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
          'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallIPConfiguration, self).__init__(**kwargs)
          self.private_ip_address = None
          self.subnet = kwargs.get('subnet', None)
          self.public_ip_address = kwargs.get('public_ip_address', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class AzureFirewallNatRCAction(Model):
      """AzureFirewall NAT Rule Collection Action.
  
      :param type: The type of action. Possible values include: 'Snat', 'Dnat'
      :type type: str or
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallNatRCActionType
      """
  
      _attribute_map = {
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallNatRCAction, self).__init__(**kwargs)
          self.type = kwargs.get('type', None)
  
  
  class AzureFirewallNatRule(Model):
      """Properties of a NAT rule.
  
      :param name: Name of the NAT rule.
      :type name: str
      :param description: Description of the rule.
      :type description: str
      :param source_addresses: List of source IP addresses for this rule.
      :type source_addresses: list[str]
      :param destination_addresses: List of destination IP addresses for this
       rule. Supports IP ranges, prefixes, and service tags.
      :type destination_addresses: list[str]
      :param destination_ports: List of destination ports.
      :type destination_ports: list[str]
      :param protocols: Array of AzureFirewallNetworkRuleProtocols applicable to
       this NAT rule.
      :type protocols: list[str or
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallNetworkRuleProtocol]
      :param translated_address: The translated address for this NAT rule.
      :type translated_address: str
      :param translated_port: The translated port for this NAT rule.
      :type translated_port: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'description': {'key': 'description', 'type': 'str'},
          'source_addresses': {'key': 'sourceAddresses', 'type': '[str]'},
          'destination_addresses': {'key': 'destinationAddresses', 'type': '[str]'},
          'destination_ports': {'key': 'destinationPorts', 'type': '[str]'},
          'protocols': {'key': 'protocols', 'type': '[str]'},
          'translated_address': {'key': 'translatedAddress', 'type': 'str'},
          'translated_port': {'key': 'translatedPort', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallNatRule, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.description = kwargs.get('description', None)
          self.source_addresses = kwargs.get('source_addresses', None)
          self.destination_addresses = kwargs.get('destination_addresses', None)
          self.destination_ports = kwargs.get('destination_ports', None)
          self.protocols = kwargs.get('protocols', None)
          self.translated_address = kwargs.get('translated_address', None)
          self.translated_port = kwargs.get('translated_port', None)
  
  
  class AzureFirewallNatRuleCollection(SubResource):
      """NAT rule collection resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param priority: Priority of the NAT rule collection resource.
      :type priority: int
      :param action: The action type of a NAT rule collection
      :type action:
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallNatRCAction
      :param rules: Collection of rules used by a NAT rule collection.
      :type rules:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallNatRule]
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'priority': {'maximum': 65000, 'minimum': 100},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'priority': {'key': 'properties.priority', 'type': 'int'},
          'action': {'key': 'properties.action', 'type': 'AzureFirewallNatRCAction'},
          'rules': {'key': 'properties.rules', 'type': '[AzureFirewallNatRule]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallNatRuleCollection, self).__init__(**kwargs)
          self.priority = kwargs.get('priority', None)
          self.action = kwargs.get('action', None)
          self.rules = kwargs.get('rules', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class AzureFirewallNetworkRule(Model):
      """Properties of the network rule.
  
      :param name: Name of the network rule.
      :type name: str
      :param description: Description of the rule.
      :type description: str
      :param protocols: Array of AzureFirewallNetworkRuleProtocols.
      :type protocols: list[str or
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallNetworkRuleProtocol]
      :param source_addresses: List of source IP addresses for this rule.
      :type source_addresses: list[str]
      :param destination_addresses: List of destination IP addresses.
      :type destination_addresses: list[str]
      :param destination_ports: List of destination ports.
      :type destination_ports: list[str]
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'description': {'key': 'description', 'type': 'str'},
          'protocols': {'key': 'protocols', 'type': '[str]'},
          'source_addresses': {'key': 'sourceAddresses', 'type': '[str]'},
          'destination_addresses': {'key': 'destinationAddresses', 'type': '[str]'},
          'destination_ports': {'key': 'destinationPorts', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallNetworkRule, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.description = kwargs.get('description', None)
          self.protocols = kwargs.get('protocols', None)
          self.source_addresses = kwargs.get('source_addresses', None)
          self.destination_addresses = kwargs.get('destination_addresses', None)
          self.destination_ports = kwargs.get('destination_ports', None)
  
  
  class AzureFirewallNetworkRuleCollection(SubResource):
      """Network rule collection resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param priority: Priority of the network rule collection resource.
      :type priority: int
      :param action: The action type of a rule collection
      :type action: ~azure.mgmt.network.v2019_02_01.models.AzureFirewallRCAction
      :param rules: Collection of rules used by a network rule collection.
      :type rules:
       list[~azure.mgmt.network.v2019_02_01.models.AzureFirewallNetworkRule]
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'priority': {'maximum': 65000, 'minimum': 100},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'priority': {'key': 'properties.priority', 'type': 'int'},
          'action': {'key': 'properties.action', 'type': 'AzureFirewallRCAction'},
          'rules': {'key': 'properties.rules', 'type': '[AzureFirewallNetworkRule]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallNetworkRuleCollection, self).__init__(**kwargs)
          self.priority = kwargs.get('priority', None)
          self.action = kwargs.get('action', None)
          self.rules = kwargs.get('rules', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class AzureFirewallRCAction(Model):
      """Properties of the AzureFirewallRCAction.
  
      :param type: The type of action. Possible values include: 'Allow', 'Deny'
      :type type: str or
       ~azure.mgmt.network.v2019_02_01.models.AzureFirewallRCActionType
      """
  
      _attribute_map = {
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureFirewallRCAction, self).__init__(**kwargs)
          self.type = kwargs.get('type', None)
  
  
  class AzureReachabilityReport(Model):
      """Azure reachability report details.
  
      All required parameters must be populated in order to send to Azure.
  
      :param aggregation_level: Required. The aggregation level of Azure
       reachability report. Can be Country, State or City.
      :type aggregation_level: str
      :param provider_location: Required. Parameters that define a geographic
       location.
      :type provider_location:
       ~azure.mgmt.network.v2019_02_01.models.AzureReachabilityReportLocation
      :param reachability_report: Required. List of Azure reachability report
       items.
      :type reachability_report:
       list[~azure.mgmt.network.v2019_02_01.models.AzureReachabilityReportItem]
      """
  
      _validation = {
          'aggregation_level': {'required': True},
          'provider_location': {'required': True},
          'reachability_report': {'required': True},
      }
  
      _attribute_map = {
          'aggregation_level': {'key': 'aggregationLevel', 'type': 'str'},
          'provider_location': {'key': 'providerLocation', 'type': 'AzureReachabilityReportLocation'},
          'reachability_report': {'key': 'reachabilityReport', 'type': '[AzureReachabilityReportItem]'},
      }
  
      def __init__(self, **kwargs):
          super(AzureReachabilityReport, self).__init__(**kwargs)
          self.aggregation_level = kwargs.get('aggregation_level', None)
          self.provider_location = kwargs.get('provider_location', None)
          self.reachability_report = kwargs.get('reachability_report', None)
  
  
  class AzureReachabilityReportItem(Model):
      """Azure reachability report details for a given provider location.
  
      :param provider: The Internet service provider.
      :type provider: str
      :param azure_location: The Azure region.
      :type azure_location: str
      :param latencies: List of latency details for each of the time series.
      :type latencies:
       list[~azure.mgmt.network.v2019_02_01.models.AzureReachabilityReportLatencyInfo]
      """
  
      _attribute_map = {
          'provider': {'key': 'provider', 'type': 'str'},
          'azure_location': {'key': 'azureLocation', 'type': 'str'},
          'latencies': {'key': 'latencies', 'type': '[AzureReachabilityReportLatencyInfo]'},
      }
  
      def __init__(self, **kwargs):
          super(AzureReachabilityReportItem, self).__init__(**kwargs)
          self.provider = kwargs.get('provider', None)
          self.azure_location = kwargs.get('azure_location', None)
          self.latencies = kwargs.get('latencies', None)
  
  
  class AzureReachabilityReportLatencyInfo(Model):
      """Details on latency for a time series.
  
      :param time_stamp: The time stamp.
      :type time_stamp: datetime
      :param score: The relative latency score between 1 and 100, higher values
       indicating a faster connection.
      :type score: int
      """
  
      _validation = {
          'score': {'maximum': 100, 'minimum': 1},
      }
  
      _attribute_map = {
          'time_stamp': {'key': 'timeStamp', 'type': 'iso-8601'},
          'score': {'key': 'score', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(AzureReachabilityReportLatencyInfo, self).__init__(**kwargs)
          self.time_stamp = kwargs.get('time_stamp', None)
          self.score = kwargs.get('score', None)
  
  
  class AzureReachabilityReportLocation(Model):
      """Parameters that define a geographic location.
  
      All required parameters must be populated in order to send to Azure.
  
      :param country: Required. The name of the country.
      :type country: str
      :param state: The name of the state.
      :type state: str
      :param city: The name of the city or town.
      :type city: str
      """
  
      _validation = {
          'country': {'required': True},
      }
  
      _attribute_map = {
          'country': {'key': 'country', 'type': 'str'},
          'state': {'key': 'state', 'type': 'str'},
          'city': {'key': 'city', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(AzureReachabilityReportLocation, self).__init__(**kwargs)
          self.country = kwargs.get('country', None)
          self.state = kwargs.get('state', None)
          self.city = kwargs.get('city', None)
  
  
  class AzureReachabilityReportParameters(Model):
      """Geographic and time constraints for Azure reachability report.
  
      All required parameters must be populated in order to send to Azure.
  
      :param provider_location: Required. Parameters that define a geographic
       location.
      :type provider_location:
       ~azure.mgmt.network.v2019_02_01.models.AzureReachabilityReportLocation
      :param providers: List of Internet service providers.
      :type providers: list[str]
      :param azure_locations: Optional Azure regions to scope the query to.
      :type azure_locations: list[str]
      :param start_time: Required. The start time for the Azure reachability
       report.
      :type start_time: datetime
      :param end_time: Required. The end time for the Azure reachability report.
      :type end_time: datetime
      """
  
      _validation = {
          'provider_location': {'required': True},
          'start_time': {'required': True},
          'end_time': {'required': True},
      }
  
      _attribute_map = {
          'provider_location': {'key': 'providerLocation', 'type': 'AzureReachabilityReportLocation'},
          'providers': {'key': 'providers', 'type': '[str]'},
          'azure_locations': {'key': 'azureLocations', 'type': '[str]'},
          'start_time': {'key': 'startTime', 'type': 'iso-8601'},
          'end_time': {'key': 'endTime', 'type': 'iso-8601'},
      }
  
      def __init__(self, **kwargs):
          super(AzureReachabilityReportParameters, self).__init__(**kwargs)
          self.provider_location = kwargs.get('provider_location', None)
          self.providers = kwargs.get('providers', None)
          self.azure_locations = kwargs.get('azure_locations', None)
          self.start_time = kwargs.get('start_time', None)
          self.end_time = kwargs.get('end_time', None)
  
  
  class BackendAddressPool(SubResource):
      """Pool of backend IP addresses.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar backend_ip_configurations: Gets collection of references to IP
       addresses defined in network interfaces.
      :vartype backend_ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceIPConfiguration]
      :ivar load_balancing_rules: Gets load balancing rules that use this
       backend address pool.
      :vartype load_balancing_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar outbound_rule: Gets outbound rules that use this backend address
       pool.
      :vartype outbound_rule: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Get provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'backend_ip_configurations': {'readonly': True},
          'load_balancing_rules': {'readonly': True},
          'outbound_rule': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'backend_ip_configurations': {'key': 'properties.backendIPConfigurations', 'type': '[NetworkInterfaceIPConfiguration]'},
          'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[SubResource]'},
          'outbound_rule': {'key': 'properties.outboundRule', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(BackendAddressPool, self).__init__(**kwargs)
          self.backend_ip_configurations = None
          self.load_balancing_rules = None
          self.outbound_rule = None
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class BGPCommunity(Model):
      """Contains bgp community information offered in Service Community resources.
  
      :param service_supported_region: The region which the service support.
       e.g. For O365, region is Global.
      :type service_supported_region: str
      :param community_name: The name of the bgp community. e.g. Skype.
      :type community_name: str
      :param community_value: The value of the bgp community. For more
       information:
       https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
      :type community_value: str
      :param community_prefixes: The prefixes that the bgp community contains.
      :type community_prefixes: list[str]
      :param is_authorized_to_use: Customer is authorized to use bgp community
       or not.
      :type is_authorized_to_use: bool
      :param service_group: The service group of the bgp community contains.
      :type service_group: str
      """
  
      _attribute_map = {
          'service_supported_region': {'key': 'serviceSupportedRegion', 'type': 'str'},
          'community_name': {'key': 'communityName', 'type': 'str'},
          'community_value': {'key': 'communityValue', 'type': 'str'},
          'community_prefixes': {'key': 'communityPrefixes', 'type': '[str]'},
          'is_authorized_to_use': {'key': 'isAuthorizedToUse', 'type': 'bool'},
          'service_group': {'key': 'serviceGroup', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(BGPCommunity, self).__init__(**kwargs)
          self.service_supported_region = kwargs.get('service_supported_region', None)
          self.community_name = kwargs.get('community_name', None)
          self.community_value = kwargs.get('community_value', None)
          self.community_prefixes = kwargs.get('community_prefixes', None)
          self.is_authorized_to_use = kwargs.get('is_authorized_to_use', None)
          self.service_group = kwargs.get('service_group', None)
  
  
  class BgpPeerStatus(Model):
      """BGP peer status details.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar local_address: The virtual network gateway's local address
      :vartype local_address: str
      :ivar neighbor: The remote BGP peer
      :vartype neighbor: str
      :ivar asn: The autonomous system number of the remote BGP peer
      :vartype asn: int
      :ivar state: The BGP peer state. Possible values include: 'Unknown',
       'Stopped', 'Idle', 'Connecting', 'Connected'
      :vartype state: str or ~azure.mgmt.network.v2019_02_01.models.BgpPeerState
      :ivar connected_duration: For how long the peering has been up
      :vartype connected_duration: str
      :ivar routes_received: The number of routes learned from this peer
      :vartype routes_received: long
      :ivar messages_sent: The number of BGP messages sent
      :vartype messages_sent: long
      :ivar messages_received: The number of BGP messages received
      :vartype messages_received: long
      """
  
      _validation = {
          'local_address': {'readonly': True},
          'neighbor': {'readonly': True},
          'asn': {'readonly': True},
          'state': {'readonly': True},
          'connected_duration': {'readonly': True},
          'routes_received': {'readonly': True},
          'messages_sent': {'readonly': True},
          'messages_received': {'readonly': True},
      }
  
      _attribute_map = {
          'local_address': {'key': 'localAddress', 'type': 'str'},
          'neighbor': {'key': 'neighbor', 'type': 'str'},
          'asn': {'key': 'asn', 'type': 'int'},
          'state': {'key': 'state', 'type': 'str'},
          'connected_duration': {'key': 'connectedDuration', 'type': 'str'},
          'routes_received': {'key': 'routesReceived', 'type': 'long'},
          'messages_sent': {'key': 'messagesSent', 'type': 'long'},
          'messages_received': {'key': 'messagesReceived', 'type': 'long'},
      }
  
      def __init__(self, **kwargs):
          super(BgpPeerStatus, self).__init__(**kwargs)
          self.local_address = None
          self.neighbor = None
          self.asn = None
          self.state = None
          self.connected_duration = None
          self.routes_received = None
          self.messages_sent = None
          self.messages_received = None
  
  
  class BgpPeerStatusListResult(Model):
      """Response for list BGP peer status API service call.
  
      :param value: List of BGP peers
      :type value: list[~azure.mgmt.network.v2019_02_01.models.BgpPeerStatus]
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[BgpPeerStatus]'},
      }
  
      def __init__(self, **kwargs):
          super(BgpPeerStatusListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
  
  
  class BgpServiceCommunity(Resource):
      """Service Community Properties.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param service_name: The name of the bgp community. e.g. Skype.
      :type service_name: str
      :param bgp_communities: Get a list of bgp communities.
      :type bgp_communities:
       list[~azure.mgmt.network.v2019_02_01.models.BGPCommunity]
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'service_name': {'key': 'properties.serviceName', 'type': 'str'},
          'bgp_communities': {'key': 'properties.bgpCommunities', 'type': '[BGPCommunity]'},
      }
  
      def __init__(self, **kwargs):
          super(BgpServiceCommunity, self).__init__(**kwargs)
          self.service_name = kwargs.get('service_name', None)
          self.bgp_communities = kwargs.get('bgp_communities', None)
  
  
  class BgpSettings(Model):
      """BGP settings details.
  
      :param asn: The BGP speaker's ASN.
      :type asn: long
      :param bgp_peering_address: The BGP peering address and BGP identifier of
       this BGP speaker.
      :type bgp_peering_address: str
      :param peer_weight: The weight added to routes learned from this BGP
       speaker.
      :type peer_weight: int
      """
  
      _attribute_map = {
          'asn': {'key': 'asn', 'type': 'long'},
          'bgp_peering_address': {'key': 'bgpPeeringAddress', 'type': 'str'},
          'peer_weight': {'key': 'peerWeight', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(BgpSettings, self).__init__(**kwargs)
          self.asn = kwargs.get('asn', None)
          self.bgp_peering_address = kwargs.get('bgp_peering_address', None)
          self.peer_weight = kwargs.get('peer_weight', None)
  
  
  class CloudError(Model):
      """An error response from the Batch service.
  
      :param error: Cloud error body.
      :type error: ~azure.mgmt.network.v2019_02_01.models.CloudErrorBody
      """
  
      _attribute_map = {
          'error': {'key': 'error', 'type': 'CloudErrorBody'},
      }
  
      def __init__(self, **kwargs):
          super(CloudError, self).__init__(**kwargs)
          self.error = kwargs.get('error', None)
  
  
  class CloudErrorException(HttpOperationError):
      """Server responsed with exception of type: 'CloudError'.
  
      :param deserialize: A deserializer
      :param response: Server response to be deserialized.
      """
  
      def __init__(self, deserialize, response, *args):
  
          super(CloudErrorException, self).__init__(deserialize, response, 'CloudError', *args)
  
  
  class CloudErrorBody(Model):
      """An error response from the Batch service.
  
      :param code: An identifier for the error. Codes are invariant and are
       intended to be consumed programmatically.
      :type code: str
      :param message: A message describing the error, intended to be suitable
       for display in a user interface.
      :type message: str
      :param target: The target of the particular error. For example, the name
       of the property in error.
      :type target: str
      :param details: A list of additional details about the error.
      :type details: list[~azure.mgmt.network.v2019_02_01.models.CloudErrorBody]
      """
  
      _attribute_map = {
          'code': {'key': 'code', 'type': 'str'},
          'message': {'key': 'message', 'type': 'str'},
          'target': {'key': 'target', 'type': 'str'},
          'details': {'key': 'details', 'type': '[CloudErrorBody]'},
      }
  
      def __init__(self, **kwargs):
          super(CloudErrorBody, self).__init__(**kwargs)
          self.code = kwargs.get('code', None)
          self.message = kwargs.get('message', None)
          self.target = kwargs.get('target', None)
          self.details = kwargs.get('details', None)
  
  
  class ConnectionMonitor(Model):
      """Parameters that define the operation to create a connection monitor.
  
      All required parameters must be populated in order to send to Azure.
  
      :param location: Connection monitor location.
      :type location: str
      :param tags: Connection monitor tags.
      :type tags: dict[str, str]
      :param source: Required. Describes the source of connection monitor.
      :type source:
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorSource
      :param destination: Required. Describes the destination of connection
       monitor.
      :type destination:
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorDestination
      :param auto_start: Determines if the connection monitor will start
       automatically once created. Default value: True .
      :type auto_start: bool
      :param monitoring_interval_in_seconds: Monitoring interval in seconds.
       Default value: 60 .
      :type monitoring_interval_in_seconds: int
      """
  
      _validation = {
          'source': {'required': True},
          'destination': {'required': True},
      }
  
      _attribute_map = {
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'source': {'key': 'properties.source', 'type': 'ConnectionMonitorSource'},
          'destination': {'key': 'properties.destination', 'type': 'ConnectionMonitorDestination'},
          'auto_start': {'key': 'properties.autoStart', 'type': 'bool'},
          'monitoring_interval_in_seconds': {'key': 'properties.monitoringIntervalInSeconds', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionMonitor, self).__init__(**kwargs)
          self.location = kwargs.get('location', None)
          self.tags = kwargs.get('tags', None)
          self.source = kwargs.get('source', None)
          self.destination = kwargs.get('destination', None)
          self.auto_start = kwargs.get('auto_start', True)
          self.monitoring_interval_in_seconds = kwargs.get('monitoring_interval_in_seconds', 60)
  
  
  class ConnectionMonitorDestination(Model):
      """Describes the destination of connection monitor.
  
      :param resource_id: The ID of the resource used as the destination by
       connection monitor.
      :type resource_id: str
      :param address: Address of the connection monitor destination (IP or
       domain name).
      :type address: str
      :param port: The destination port used by connection monitor.
      :type port: int
      """
  
      _attribute_map = {
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'address': {'key': 'address', 'type': 'str'},
          'port': {'key': 'port', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionMonitorDestination, self).__init__(**kwargs)
          self.resource_id = kwargs.get('resource_id', None)
          self.address = kwargs.get('address', None)
          self.port = kwargs.get('port', None)
  
  
  class ConnectionMonitorParameters(Model):
      """Parameters that define the operation to create a connection monitor.
  
      All required parameters must be populated in order to send to Azure.
  
      :param source: Required. Describes the source of connection monitor.
      :type source:
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorSource
      :param destination: Required. Describes the destination of connection
       monitor.
      :type destination:
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorDestination
      :param auto_start: Determines if the connection monitor will start
       automatically once created. Default value: True .
      :type auto_start: bool
      :param monitoring_interval_in_seconds: Monitoring interval in seconds.
       Default value: 60 .
      :type monitoring_interval_in_seconds: int
      """
  
      _validation = {
          'source': {'required': True},
          'destination': {'required': True},
      }
  
      _attribute_map = {
          'source': {'key': 'source', 'type': 'ConnectionMonitorSource'},
          'destination': {'key': 'destination', 'type': 'ConnectionMonitorDestination'},
          'auto_start': {'key': 'autoStart', 'type': 'bool'},
          'monitoring_interval_in_seconds': {'key': 'monitoringIntervalInSeconds', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionMonitorParameters, self).__init__(**kwargs)
          self.source = kwargs.get('source', None)
          self.destination = kwargs.get('destination', None)
          self.auto_start = kwargs.get('auto_start', True)
          self.monitoring_interval_in_seconds = kwargs.get('monitoring_interval_in_seconds', 60)
  
  
  class ConnectionMonitorQueryResult(Model):
      """List of connection states snapshots.
  
      :param source_status: Status of connection monitor source. Possible values
       include: 'Unknown', 'Active', 'Inactive'
      :type source_status: str or
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorSourceStatus
      :param states: Information about connection states.
      :type states:
       list[~azure.mgmt.network.v2019_02_01.models.ConnectionStateSnapshot]
      """
  
      _attribute_map = {
          'source_status': {'key': 'sourceStatus', 'type': 'str'},
          'states': {'key': 'states', 'type': '[ConnectionStateSnapshot]'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionMonitorQueryResult, self).__init__(**kwargs)
          self.source_status = kwargs.get('source_status', None)
          self.states = kwargs.get('states', None)
  
  
  class ConnectionMonitorResult(Model):
      """Information about the connection monitor.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :ivar name: Name of the connection monitor.
      :vartype name: str
      :ivar id: ID of the connection monitor.
      :vartype id: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated. Default value: "A unique read-only string that changes
       whenever the resource is updated." .
      :type etag: str
      :ivar type: Connection monitor type.
      :vartype type: str
      :param location: Connection monitor location.
      :type location: str
      :param tags: Connection monitor tags.
      :type tags: dict[str, str]
      :param source: Required. Describes the source of connection monitor.
      :type source:
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorSource
      :param destination: Required. Describes the destination of connection
       monitor.
      :type destination:
       ~azure.mgmt.network.v2019_02_01.models.ConnectionMonitorDestination
      :param auto_start: Determines if the connection monitor will start
       automatically once created. Default value: True .
      :type auto_start: bool
      :param monitoring_interval_in_seconds: Monitoring interval in seconds.
       Default value: 60 .
      :type monitoring_interval_in_seconds: int
      :param provisioning_state: The provisioning state of the connection
       monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting',
       'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param start_time: The date and time when the connection monitor was
       started.
      :type start_time: datetime
      :param monitoring_status: The monitoring status of the connection monitor.
      :type monitoring_status: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'id': {'readonly': True},
          'type': {'readonly': True},
          'source': {'required': True},
          'destination': {'required': True},
      }
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'source': {'key': 'properties.source', 'type': 'ConnectionMonitorSource'},
          'destination': {'key': 'properties.destination', 'type': 'ConnectionMonitorDestination'},
          'auto_start': {'key': 'properties.autoStart', 'type': 'bool'},
          'monitoring_interval_in_seconds': {'key': 'properties.monitoringIntervalInSeconds', 'type': 'int'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'},
          'monitoring_status': {'key': 'properties.monitoringStatus', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionMonitorResult, self).__init__(**kwargs)
          self.name = None
          self.id = None
          self.etag = kwargs.get('etag', "A unique read-only string that changes whenever the resource is updated.")
          self.type = None
          self.location = kwargs.get('location', None)
          self.tags = kwargs.get('tags', None)
          self.source = kwargs.get('source', None)
          self.destination = kwargs.get('destination', None)
          self.auto_start = kwargs.get('auto_start', True)
          self.monitoring_interval_in_seconds = kwargs.get('monitoring_interval_in_seconds', 60)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.start_time = kwargs.get('start_time', None)
          self.monitoring_status = kwargs.get('monitoring_status', None)
  
  
  class ConnectionMonitorSource(Model):
      """Describes the source of connection monitor.
  
      All required parameters must be populated in order to send to Azure.
  
      :param resource_id: Required. The ID of the resource used as the source by
       connection monitor.
      :type resource_id: str
      :param port: The source port used by connection monitor.
      :type port: int
      """
  
      _validation = {
          'resource_id': {'required': True},
      }
  
      _attribute_map = {
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'port': {'key': 'port', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionMonitorSource, self).__init__(**kwargs)
          self.resource_id = kwargs.get('resource_id', None)
          self.port = kwargs.get('port', None)
  
  
  class ConnectionResetSharedKey(Model):
      """The virtual network connection reset shared key.
  
      All required parameters must be populated in order to send to Azure.
  
      :param key_length: Required. The virtual network connection reset shared
       key length, should between 1 and 128.
      :type key_length: int
      """
  
      _validation = {
          'key_length': {'required': True, 'maximum': 128, 'minimum': 1},
      }
  
      _attribute_map = {
          'key_length': {'key': 'keyLength', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionResetSharedKey, self).__init__(**kwargs)
          self.key_length = kwargs.get('key_length', None)
  
  
  class ConnectionSharedKey(SubResource):
      """Response for GetConnectionSharedKey API service call.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param value: Required. The virtual network connection shared key value.
      :type value: str
      """
  
      _validation = {
          'value': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'value': {'key': 'value', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionSharedKey, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
  
  
  class ConnectionStateSnapshot(Model):
      """Connection state snapshot.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param connection_state: The connection state. Possible values include:
       'Reachable', 'Unreachable', 'Unknown'
      :type connection_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ConnectionState
      :param start_time: The start time of the connection snapshot.
      :type start_time: datetime
      :param end_time: The end time of the connection snapshot.
      :type end_time: datetime
      :param evaluation_state: Connectivity analysis evaluation state. Possible
       values include: 'NotStarted', 'InProgress', 'Completed'
      :type evaluation_state: str or
       ~azure.mgmt.network.v2019_02_01.models.EvaluationState
      :param avg_latency_in_ms: Average latency in ms.
      :type avg_latency_in_ms: int
      :param min_latency_in_ms: Minimum latency in ms.
      :type min_latency_in_ms: int
      :param max_latency_in_ms: Maximum latency in ms.
      :type max_latency_in_ms: int
      :param probes_sent: The number of sent probes.
      :type probes_sent: int
      :param probes_failed: The number of failed probes.
      :type probes_failed: int
      :ivar hops: List of hops between the source and the destination.
      :vartype hops:
       list[~azure.mgmt.network.v2019_02_01.models.ConnectivityHop]
      """
  
      _validation = {
          'hops': {'readonly': True},
      }
  
      _attribute_map = {
          'connection_state': {'key': 'connectionState', 'type': 'str'},
          'start_time': {'key': 'startTime', 'type': 'iso-8601'},
          'end_time': {'key': 'endTime', 'type': 'iso-8601'},
          'evaluation_state': {'key': 'evaluationState', 'type': 'str'},
          'avg_latency_in_ms': {'key': 'avgLatencyInMs', 'type': 'int'},
          'min_latency_in_ms': {'key': 'minLatencyInMs', 'type': 'int'},
          'max_latency_in_ms': {'key': 'maxLatencyInMs', 'type': 'int'},
          'probes_sent': {'key': 'probesSent', 'type': 'int'},
          'probes_failed': {'key': 'probesFailed', 'type': 'int'},
          'hops': {'key': 'hops', 'type': '[ConnectivityHop]'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectionStateSnapshot, self).__init__(**kwargs)
          self.connection_state = kwargs.get('connection_state', None)
          self.start_time = kwargs.get('start_time', None)
          self.end_time = kwargs.get('end_time', None)
          self.evaluation_state = kwargs.get('evaluation_state', None)
          self.avg_latency_in_ms = kwargs.get('avg_latency_in_ms', None)
          self.min_latency_in_ms = kwargs.get('min_latency_in_ms', None)
          self.max_latency_in_ms = kwargs.get('max_latency_in_ms', None)
          self.probes_sent = kwargs.get('probes_sent', None)
          self.probes_failed = kwargs.get('probes_failed', None)
          self.hops = None
  
  
  class ConnectivityDestination(Model):
      """Parameters that define destination of connection.
  
      :param resource_id: The ID of the resource to which a connection attempt
       will be made.
      :type resource_id: str
      :param address: The IP address or URI the resource to which a connection
       attempt will be made.
      :type address: str
      :param port: Port on which check connectivity will be performed.
      :type port: int
      """
  
      _attribute_map = {
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'address': {'key': 'address', 'type': 'str'},
          'port': {'key': 'port', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectivityDestination, self).__init__(**kwargs)
          self.resource_id = kwargs.get('resource_id', None)
          self.address = kwargs.get('address', None)
          self.port = kwargs.get('port', None)
  
  
  class ConnectivityHop(Model):
      """Information about a hop between the source and the destination.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar type: The type of the hop.
      :vartype type: str
      :ivar id: The ID of the hop.
      :vartype id: str
      :ivar address: The IP address of the hop.
      :vartype address: str
      :ivar resource_id: The ID of the resource corresponding to this hop.
      :vartype resource_id: str
      :ivar next_hop_ids: List of next hop identifiers.
      :vartype next_hop_ids: list[str]
      :ivar issues: List of issues.
      :vartype issues:
       list[~azure.mgmt.network.v2019_02_01.models.ConnectivityIssue]
      """
  
      _validation = {
          'type': {'readonly': True},
          'id': {'readonly': True},
          'address': {'readonly': True},
          'resource_id': {'readonly': True},
          'next_hop_ids': {'readonly': True},
          'issues': {'readonly': True},
      }
  
      _attribute_map = {
          'type': {'key': 'type', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'address': {'key': 'address', 'type': 'str'},
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'next_hop_ids': {'key': 'nextHopIds', 'type': '[str]'},
          'issues': {'key': 'issues', 'type': '[ConnectivityIssue]'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectivityHop, self).__init__(**kwargs)
          self.type = None
          self.id = None
          self.address = None
          self.resource_id = None
          self.next_hop_ids = None
          self.issues = None
  
  
  class ConnectivityInformation(Model):
      """Information on the connectivity status.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar hops: List of hops between the source and the destination.
      :vartype hops:
       list[~azure.mgmt.network.v2019_02_01.models.ConnectivityHop]
      :ivar connection_status: The connection status. Possible values include:
       'Unknown', 'Connected', 'Disconnected', 'Degraded'
      :vartype connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.ConnectionStatus
      :ivar avg_latency_in_ms: Average latency in milliseconds.
      :vartype avg_latency_in_ms: int
      :ivar min_latency_in_ms: Minimum latency in milliseconds.
      :vartype min_latency_in_ms: int
      :ivar max_latency_in_ms: Maximum latency in milliseconds.
      :vartype max_latency_in_ms: int
      :ivar probes_sent: Total number of probes sent.
      :vartype probes_sent: int
      :ivar probes_failed: Number of failed probes.
      :vartype probes_failed: int
      """
  
      _validation = {
          'hops': {'readonly': True},
          'connection_status': {'readonly': True},
          'avg_latency_in_ms': {'readonly': True},
          'min_latency_in_ms': {'readonly': True},
          'max_latency_in_ms': {'readonly': True},
          'probes_sent': {'readonly': True},
          'probes_failed': {'readonly': True},
      }
  
      _attribute_map = {
          'hops': {'key': 'hops', 'type': '[ConnectivityHop]'},
          'connection_status': {'key': 'connectionStatus', 'type': 'str'},
          'avg_latency_in_ms': {'key': 'avgLatencyInMs', 'type': 'int'},
          'min_latency_in_ms': {'key': 'minLatencyInMs', 'type': 'int'},
          'max_latency_in_ms': {'key': 'maxLatencyInMs', 'type': 'int'},
          'probes_sent': {'key': 'probesSent', 'type': 'int'},
          'probes_failed': {'key': 'probesFailed', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectivityInformation, self).__init__(**kwargs)
          self.hops = None
          self.connection_status = None
          self.avg_latency_in_ms = None
          self.min_latency_in_ms = None
          self.max_latency_in_ms = None
          self.probes_sent = None
          self.probes_failed = None
  
  
  class ConnectivityIssue(Model):
      """Information about an issue encountered in the process of checking for
      connectivity.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar origin: The origin of the issue. Possible values include: 'Local',
       'Inbound', 'Outbound'
      :vartype origin: str or ~azure.mgmt.network.v2019_02_01.models.Origin
      :ivar severity: The severity of the issue. Possible values include:
       'Error', 'Warning'
      :vartype severity: str or ~azure.mgmt.network.v2019_02_01.models.Severity
      :ivar type: The type of issue. Possible values include: 'Unknown',
       'AgentStopped', 'GuestFirewall', 'DnsResolution', 'SocketBind',
       'NetworkSecurityRule', 'UserDefinedRoute', 'PortThrottled', 'Platform'
      :vartype type: str or ~azure.mgmt.network.v2019_02_01.models.IssueType
      :ivar context: Provides additional context on the issue.
      :vartype context: list[dict[str, str]]
      """
  
      _validation = {
          'origin': {'readonly': True},
          'severity': {'readonly': True},
          'type': {'readonly': True},
          'context': {'readonly': True},
      }
  
      _attribute_map = {
          'origin': {'key': 'origin', 'type': 'str'},
          'severity': {'key': 'severity', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'context': {'key': 'context', 'type': '[{str}]'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectivityIssue, self).__init__(**kwargs)
          self.origin = None
          self.severity = None
          self.type = None
          self.context = None
  
  
  class ConnectivityParameters(Model):
      """Parameters that determine how the connectivity check will be performed.
  
      All required parameters must be populated in order to send to Azure.
  
      :param source: Required. Describes the source of the connection.
      :type source: ~azure.mgmt.network.v2019_02_01.models.ConnectivitySource
      :param destination: Required. Describes the destination of connection.
      :type destination:
       ~azure.mgmt.network.v2019_02_01.models.ConnectivityDestination
      :param protocol: Network protocol. Possible values include: 'Tcp', 'Http',
       'Https', 'Icmp'
      :type protocol: str or ~azure.mgmt.network.v2019_02_01.models.Protocol
      :param protocol_configuration: Configuration of the protocol.
      :type protocol_configuration:
       ~azure.mgmt.network.v2019_02_01.models.ProtocolConfiguration
      """
  
      _validation = {
          'source': {'required': True},
          'destination': {'required': True},
      }
  
      _attribute_map = {
          'source': {'key': 'source', 'type': 'ConnectivitySource'},
          'destination': {'key': 'destination', 'type': 'ConnectivityDestination'},
          'protocol': {'key': 'protocol', 'type': 'str'},
          'protocol_configuration': {'key': 'protocolConfiguration', 'type': 'ProtocolConfiguration'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectivityParameters, self).__init__(**kwargs)
          self.source = kwargs.get('source', None)
          self.destination = kwargs.get('destination', None)
          self.protocol = kwargs.get('protocol', None)
          self.protocol_configuration = kwargs.get('protocol_configuration', None)
  
  
  class ConnectivitySource(Model):
      """Parameters that define the source of the connection.
  
      All required parameters must be populated in order to send to Azure.
  
      :param resource_id: Required. The ID of the resource from which a
       connectivity check will be initiated.
      :type resource_id: str
      :param port: The source port from which a connectivity check will be
       performed.
      :type port: int
      """
  
      _validation = {
          'resource_id': {'required': True},
      }
  
      _attribute_map = {
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'port': {'key': 'port', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ConnectivitySource, self).__init__(**kwargs)
          self.resource_id = kwargs.get('resource_id', None)
          self.port = kwargs.get('port', None)
  
  
  class Container(SubResource):
      """Reference to container resource in remote resource provider.
  
      :param id: Resource ID.
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Container, self).__init__(**kwargs)
  
  
  class ContainerNetworkInterface(SubResource):
      """Container network interface child resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param container_network_interface_configuration: Container network
       interface configuration from which this container network interface is
       created.
      :type container_network_interface_configuration:
       ~azure.mgmt.network.v2019_02_01.models.ContainerNetworkInterfaceConfiguration
      :param container: Reference to the container to which this container
       network interface is attached.
      :type container: ~azure.mgmt.network.v2019_02_01.models.Container
      :param ip_configurations: Reference to the ip configuration on this
       container nic.
      :type ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ContainerNetworkInterfaceIpConfiguration]
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :param name: The name of the resource. This name can be used to access the
       resource.
      :type name: str
      :ivar type: Sub Resource type.
      :vartype type: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'container_network_interface_configuration': {'key': 'properties.containerNetworkInterfaceConfiguration', 'type': 'ContainerNetworkInterfaceConfiguration'},
          'container': {'key': 'properties.container', 'type': 'Container'},
          'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[ContainerNetworkInterfaceIpConfiguration]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ContainerNetworkInterface, self).__init__(**kwargs)
          self.container_network_interface_configuration = kwargs.get('container_network_interface_configuration', None)
          self.container = kwargs.get('container', None)
          self.ip_configurations = kwargs.get('ip_configurations', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.type = None
          self.etag = kwargs.get('etag', None)
  
  
  class ContainerNetworkInterfaceConfiguration(SubResource):
      """Container network interface configuration child resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param ip_configurations: A list of ip configurations of the container
       network interface configuration.
      :type ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.IPConfigurationProfile]
      :param container_network_interfaces: A list of container network
       interfaces created from this container network interface configuration.
      :type container_network_interfaces:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :param name: The name of the resource. This name can be used to access the
       resource.
      :type name: str
      :ivar type: Sub Resource type.
      :vartype type: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[IPConfigurationProfile]'},
          'container_network_interfaces': {'key': 'properties.containerNetworkInterfaces', 'type': '[SubResource]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ContainerNetworkInterfaceConfiguration, self).__init__(**kwargs)
          self.ip_configurations = kwargs.get('ip_configurations', None)
          self.container_network_interfaces = kwargs.get('container_network_interfaces', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.type = None
          self.etag = kwargs.get('etag', None)
  
  
  class ContainerNetworkInterfaceIpConfiguration(Model):
      """The ip configuration for a container network interface.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :param name: The name of the resource. This name can be used to access the
       resource.
      :type name: str
      :ivar type: Sub Resource type.
      :vartype type: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ContainerNetworkInterfaceIpConfiguration, self).__init__(**kwargs)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.type = None
          self.etag = kwargs.get('etag', None)
  
  
  class DdosCustomPolicy(Resource):
      """A DDoS custom policy in a resource group.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar resource_guid: The resource GUID property of the DDoS custom policy
       resource. It uniquely identifies the resource, even if the user changes
       its name or migrate the resource across subscriptions or resource groups.
      :vartype resource_guid: str
      :ivar provisioning_state: The provisioning state of the DDoS custom policy
       resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :ivar public_ip_addresses: The list of public IPs associated with the DDoS
       custom policy resource. This list is read-only.
      :vartype public_ip_addresses:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param protocol_custom_settings: The protocol-specific DDoS policy
       customization parameters.
      :type protocol_custom_settings:
       list[~azure.mgmt.network.v2019_02_01.models.ProtocolCustomSettingsFormat]
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'resource_guid': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'public_ip_addresses': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'public_ip_addresses': {'key': 'properties.publicIPAddresses', 'type': '[SubResource]'},
          'protocol_custom_settings': {'key': 'properties.protocolCustomSettings', 'type': '[ProtocolCustomSettingsFormat]'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(DdosCustomPolicy, self).__init__(**kwargs)
          self.resource_guid = None
          self.provisioning_state = None
          self.public_ip_addresses = None
          self.protocol_custom_settings = kwargs.get('protocol_custom_settings', None)
          self.etag = None
  
  
  class DdosProtectionPlan(Model):
      """A DDoS protection plan in a resource group.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar id: Resource ID.
      :vartype id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar resource_guid: The resource GUID property of the DDoS protection
       plan resource. It uniquely identifies the resource, even if the user
       changes its name or migrate the resource across subscriptions or resource
       groups.
      :vartype resource_guid: str
      :ivar provisioning_state: The provisioning state of the DDoS protection
       plan resource. Possible values are: 'Succeeded', 'Updating', 'Deleting',
       and 'Failed'.
      :vartype provisioning_state: str
      :ivar virtual_networks: The list of virtual networks associated with the
       DDoS protection plan resource. This list is read-only.
      :vartype virtual_networks:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'resource_guid': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'virtual_networks': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'virtual_networks': {'key': 'properties.virtualNetworks', 'type': '[SubResource]'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(DdosProtectionPlan, self).__init__(**kwargs)
          self.id = None
          self.name = None
          self.type = None
          self.location = kwargs.get('location', None)
          self.tags = kwargs.get('tags', None)
          self.resource_guid = None
          self.provisioning_state = None
          self.virtual_networks = None
          self.etag = None
  
  
  class DdosSettings(Model):
      """Contains the DDoS protection settings of the public IP.
  
      :param ddos_custom_policy: The DDoS custom policy associated with the
       public IP.
      :type ddos_custom_policy:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param protection_coverage: The DDoS protection policy customizability of
       the public IP. Only standard coverage will have the ability to be
       customized. Possible values include: 'Basic', 'Standard'
      :type protection_coverage: str or
       ~azure.mgmt.network.v2019_02_01.models.DdosSettingsProtectionCoverage
      """
  
      _attribute_map = {
          'ddos_custom_policy': {'key': 'ddosCustomPolicy', 'type': 'SubResource'},
          'protection_coverage': {'key': 'protectionCoverage', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(DdosSettings, self).__init__(**kwargs)
          self.ddos_custom_policy = kwargs.get('ddos_custom_policy', None)
          self.protection_coverage = kwargs.get('protection_coverage', None)
  
  
  class Delegation(SubResource):
      """Details the service to which the subnet is delegated.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param service_name: The name of the service to whom the subnet should be
       delegated (e.g. Microsoft.Sql/servers)
      :type service_name: str
      :param actions: Describes the actions permitted to the service upon
       delegation
      :type actions: list[str]
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a subnet. This
       name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'service_name': {'key': 'properties.serviceName', 'type': 'str'},
          'actions': {'key': 'properties.actions', 'type': '[str]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Delegation, self).__init__(**kwargs)
          self.service_name = kwargs.get('service_name', None)
          self.actions = kwargs.get('actions', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class DeviceProperties(Model):
      """List of properties of the device.
  
      :param device_vendor: Name of the device Vendor.
      :type device_vendor: str
      :param device_model: Model of the device.
      :type device_model: str
      :param link_speed_in_mbps: Link speed.
      :type link_speed_in_mbps: int
      """
  
      _attribute_map = {
          'device_vendor': {'key': 'deviceVendor', 'type': 'str'},
          'device_model': {'key': 'deviceModel', 'type': 'str'},
          'link_speed_in_mbps': {'key': 'linkSpeedInMbps', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(DeviceProperties, self).__init__(**kwargs)
          self.device_vendor = kwargs.get('device_vendor', None)
          self.device_model = kwargs.get('device_model', None)
          self.link_speed_in_mbps = kwargs.get('link_speed_in_mbps', None)
  
  
  class DhcpOptions(Model):
      """DhcpOptions contains an array of DNS servers available to VMs deployed in
      the virtual network. Standard DHCP option for a subnet overrides VNET DHCP
      options.
  
      :param dns_servers: The list of DNS servers IP addresses.
      :type dns_servers: list[str]
      """
  
      _attribute_map = {
          'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(DhcpOptions, self).__init__(**kwargs)
          self.dns_servers = kwargs.get('dns_servers', None)
  
  
  class Dimension(Model):
      """Dimension of the metric.
  
      :param name: The name of the dimension.
      :type name: str
      :param display_name: The display name of the dimension.
      :type display_name: str
      :param internal_name: The internal name of the dimension.
      :type internal_name: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'display_name': {'key': 'displayName', 'type': 'str'},
          'internal_name': {'key': 'internalName', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Dimension, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.display_name = kwargs.get('display_name', None)
          self.internal_name = kwargs.get('internal_name', None)
  
  
  class DnsNameAvailabilityResult(Model):
      """Response for the CheckDnsNameAvailability API service call.
  
      :param available: Domain availability (True/False).
      :type available: bool
      """
  
      _attribute_map = {
          'available': {'key': 'available', 'type': 'bool'},
      }
  
      def __init__(self, **kwargs):
          super(DnsNameAvailabilityResult, self).__init__(**kwargs)
          self.available = kwargs.get('available', None)
  
  
  class EffectiveNetworkSecurityGroup(Model):
      """Effective network security group.
  
      :param network_security_group: The ID of network security group that is
       applied.
      :type network_security_group:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param association: Associated resources.
      :type association:
       ~azure.mgmt.network.v2019_02_01.models.EffectiveNetworkSecurityGroupAssociation
      :param effective_security_rules: A collection of effective security rules.
      :type effective_security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.EffectiveNetworkSecurityRule]
      :param tag_map: Mapping of tags to list of IP Addresses included within
       the tag.
      :type tag_map: dict[str, list[str]]
      """
  
      _attribute_map = {
          'network_security_group': {'key': 'networkSecurityGroup', 'type': 'SubResource'},
          'association': {'key': 'association', 'type': 'EffectiveNetworkSecurityGroupAssociation'},
          'effective_security_rules': {'key': 'effectiveSecurityRules', 'type': '[EffectiveNetworkSecurityRule]'},
          'tag_map': {'key': 'tagMap', 'type': '{[str]}'},
      }
  
      def __init__(self, **kwargs):
          super(EffectiveNetworkSecurityGroup, self).__init__(**kwargs)
          self.network_security_group = kwargs.get('network_security_group', None)
          self.association = kwargs.get('association', None)
          self.effective_security_rules = kwargs.get('effective_security_rules', None)
          self.tag_map = kwargs.get('tag_map', None)
  
  
  class EffectiveNetworkSecurityGroupAssociation(Model):
      """The effective network security group association.
  
      :param subnet: The ID of the subnet if assigned.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param network_interface: The ID of the network interface if assigned.
      :type network_interface:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      """
  
      _attribute_map = {
          'subnet': {'key': 'subnet', 'type': 'SubResource'},
          'network_interface': {'key': 'networkInterface', 'type': 'SubResource'},
      }
  
      def __init__(self, **kwargs):
          super(EffectiveNetworkSecurityGroupAssociation, self).__init__(**kwargs)
          self.subnet = kwargs.get('subnet', None)
          self.network_interface = kwargs.get('network_interface', None)
  
  
  class EffectiveNetworkSecurityGroupListResult(Model):
      """Response for list effective network security groups API service call.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param value: A list of effective network security groups.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.EffectiveNetworkSecurityGroup]
      :ivar next_link: The URL to get the next set of results.
      :vartype next_link: str
      """
  
      _validation = {
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[EffectiveNetworkSecurityGroup]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(EffectiveNetworkSecurityGroupListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = None
  
  
  class EffectiveNetworkSecurityRule(Model):
      """Effective network security rules.
  
      :param name: The name of the security rule specified by the user (if
       created by the user).
      :type name: str
      :param protocol: The network protocol this rule applies to. Possible
       values are: 'Tcp', 'Udp', and 'All'. Possible values include: 'Tcp',
       'Udp', 'All'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.EffectiveSecurityRuleProtocol
      :param source_port_range: The source port or range.
      :type source_port_range: str
      :param destination_port_range: The destination port or range.
      :type destination_port_range: str
      :param source_port_ranges: The source port ranges. Expected values include
       a single integer between 0 and 65535, a range using '-' as separator (e.g.
       100-400), or an asterisk (*)
      :type source_port_ranges: list[str]
      :param destination_port_ranges: The destination port ranges. Expected
       values include a single integer between 0 and 65535, a range using '-' as
       separator (e.g. 100-400), or an asterisk (*)
      :type destination_port_ranges: list[str]
      :param source_address_prefix: The source address prefix.
      :type source_address_prefix: str
      :param destination_address_prefix: The destination address prefix.
      :type destination_address_prefix: str
      :param source_address_prefixes: The source address prefixes. Expected
       values include CIDR IP ranges, Default Tags (VirtualNetwork,
       AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
      :type source_address_prefixes: list[str]
      :param destination_address_prefixes: The destination address prefixes.
       Expected values include CIDR IP ranges, Default Tags (VirtualNetwork,
       AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
      :type destination_address_prefixes: list[str]
      :param expanded_source_address_prefix: The expanded source address prefix.
      :type expanded_source_address_prefix: list[str]
      :param expanded_destination_address_prefix: Expanded destination address
       prefix.
      :type expanded_destination_address_prefix: list[str]
      :param access: Whether network traffic is allowed or denied. Possible
       values include: 'Allow', 'Deny'
      :type access: str or
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleAccess
      :param priority: The priority of the rule.
      :type priority: int
      :param direction: The direction of the rule. Possible values include:
       'Inbound', 'Outbound'
      :type direction: str or
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleDirection
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'protocol': {'key': 'protocol', 'type': 'str'},
          'source_port_range': {'key': 'sourcePortRange', 'type': 'str'},
          'destination_port_range': {'key': 'destinationPortRange', 'type': 'str'},
          'source_port_ranges': {'key': 'sourcePortRanges', 'type': '[str]'},
          'destination_port_ranges': {'key': 'destinationPortRanges', 'type': '[str]'},
          'source_address_prefix': {'key': 'sourceAddressPrefix', 'type': 'str'},
          'destination_address_prefix': {'key': 'destinationAddressPrefix', 'type': 'str'},
          'source_address_prefixes': {'key': 'sourceAddressPrefixes', 'type': '[str]'},
          'destination_address_prefixes': {'key': 'destinationAddressPrefixes', 'type': '[str]'},
          'expanded_source_address_prefix': {'key': 'expandedSourceAddressPrefix', 'type': '[str]'},
          'expanded_destination_address_prefix': {'key': 'expandedDestinationAddressPrefix', 'type': '[str]'},
          'access': {'key': 'access', 'type': 'str'},
          'priority': {'key': 'priority', 'type': 'int'},
          'direction': {'key': 'direction', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(EffectiveNetworkSecurityRule, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.protocol = kwargs.get('protocol', None)
          self.source_port_range = kwargs.get('source_port_range', None)
          self.destination_port_range = kwargs.get('destination_port_range', None)
          self.source_port_ranges = kwargs.get('source_port_ranges', None)
          self.destination_port_ranges = kwargs.get('destination_port_ranges', None)
          self.source_address_prefix = kwargs.get('source_address_prefix', None)
          self.destination_address_prefix = kwargs.get('destination_address_prefix', None)
          self.source_address_prefixes = kwargs.get('source_address_prefixes', None)
          self.destination_address_prefixes = kwargs.get('destination_address_prefixes', None)
          self.expanded_source_address_prefix = kwargs.get('expanded_source_address_prefix', None)
          self.expanded_destination_address_prefix = kwargs.get('expanded_destination_address_prefix', None)
          self.access = kwargs.get('access', None)
          self.priority = kwargs.get('priority', None)
          self.direction = kwargs.get('direction', None)
  
  
  class EffectiveRoute(Model):
      """Effective Route.
  
      :param name: The name of the user defined route. This is optional.
      :type name: str
      :param disable_bgp_route_propagation: If true, on-premises routes are not
       propagated to the network interfaces in the subnet.
      :type disable_bgp_route_propagation: bool
      :param source: Who created the route. Possible values are: 'Unknown',
       'User', 'VirtualNetworkGateway', and 'Default'. Possible values include:
       'Unknown', 'User', 'VirtualNetworkGateway', 'Default'
      :type source: str or
       ~azure.mgmt.network.v2019_02_01.models.EffectiveRouteSource
      :param state: The value of effective route. Possible values are: 'Active'
       and 'Invalid'. Possible values include: 'Active', 'Invalid'
      :type state: str or
       ~azure.mgmt.network.v2019_02_01.models.EffectiveRouteState
      :param address_prefix: The address prefixes of the effective routes in
       CIDR notation.
      :type address_prefix: list[str]
      :param next_hop_ip_address: The IP address of the next hop of the
       effective route.
      :type next_hop_ip_address: list[str]
      :param next_hop_type: The type of Azure hop the packet should be sent to.
       Possible values include: 'VirtualNetworkGateway', 'VnetLocal', 'Internet',
       'VirtualAppliance', 'None'
      :type next_hop_type: str or
       ~azure.mgmt.network.v2019_02_01.models.RouteNextHopType
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'disable_bgp_route_propagation': {'key': 'disableBgpRoutePropagation', 'type': 'bool'},
          'source': {'key': 'source', 'type': 'str'},
          'state': {'key': 'state', 'type': 'str'},
          'address_prefix': {'key': 'addressPrefix', 'type': '[str]'},
          'next_hop_ip_address': {'key': 'nextHopIpAddress', 'type': '[str]'},
          'next_hop_type': {'key': 'nextHopType', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(EffectiveRoute, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.disable_bgp_route_propagation = kwargs.get('disable_bgp_route_propagation', None)
          self.source = kwargs.get('source', None)
          self.state = kwargs.get('state', None)
          self.address_prefix = kwargs.get('address_prefix', None)
          self.next_hop_ip_address = kwargs.get('next_hop_ip_address', None)
          self.next_hop_type = kwargs.get('next_hop_type', None)
  
  
  class EffectiveRouteListResult(Model):
      """Response for list effective route API service call.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param value: A list of effective routes.
      :type value: list[~azure.mgmt.network.v2019_02_01.models.EffectiveRoute]
      :ivar next_link: The URL to get the next set of results.
      :vartype next_link: str
      """
  
      _validation = {
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[EffectiveRoute]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(EffectiveRouteListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = None
  
  
  class EndpointService(Model):
      """Identifies the service being brought into the virtual network.
  
      :param id: A unique identifier of the service being referenced by the
       interface endpoint.
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(EndpointService, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class EndpointServiceResult(SubResource):
      """Endpoint service.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Name of the endpoint service.
      :vartype name: str
      :ivar type: Type of the endpoint service.
      :vartype type: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(EndpointServiceResult, self).__init__(**kwargs)
          self.name = None
          self.type = None
  
  
  class Error(Model):
      """Common error representation.
  
      :param code: Error code.
      :type code: str
      :param message: Error message.
      :type message: str
      :param target: Error target.
      :type target: str
      :param details: Error details.
      :type details: list[~azure.mgmt.network.v2019_02_01.models.ErrorDetails]
      :param inner_error: Inner error message.
      :type inner_error: str
      """
  
      _attribute_map = {
          'code': {'key': 'code', 'type': 'str'},
          'message': {'key': 'message', 'type': 'str'},
          'target': {'key': 'target', 'type': 'str'},
          'details': {'key': 'details', 'type': '[ErrorDetails]'},
          'inner_error': {'key': 'innerError', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Error, self).__init__(**kwargs)
          self.code = kwargs.get('code', None)
          self.message = kwargs.get('message', None)
          self.target = kwargs.get('target', None)
          self.details = kwargs.get('details', None)
          self.inner_error = kwargs.get('inner_error', None)
  
  
  class ErrorException(HttpOperationError):
      """Server responsed with exception of type: 'Error'.
  
      :param deserialize: A deserializer
      :param response: Server response to be deserialized.
      """
  
      def __init__(self, deserialize, response, *args):
  
          super(ErrorException, self).__init__(deserialize, response, 'Error', *args)
  
  
  class ErrorDetails(Model):
      """Common error details representation.
  
      :param code: Error code.
      :type code: str
      :param target: Error target.
      :type target: str
      :param message: Error message.
      :type message: str
      """
  
      _attribute_map = {
          'code': {'key': 'code', 'type': 'str'},
          'target': {'key': 'target', 'type': 'str'},
          'message': {'key': 'message', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ErrorDetails, self).__init__(**kwargs)
          self.code = kwargs.get('code', None)
          self.target = kwargs.get('target', None)
          self.message = kwargs.get('message', None)
  
  
  class ErrorResponse(Model):
      """The error object.
  
      :param error: Error. The error details object.
      :type error: ~azure.mgmt.network.v2019_02_01.models.ErrorDetails
      """
  
      _attribute_map = {
          'error': {'key': 'error', 'type': 'ErrorDetails'},
      }
  
      def __init__(self, **kwargs):
          super(ErrorResponse, self).__init__(**kwargs)
          self.error = kwargs.get('error', None)
  
  
  class ErrorResponseException(HttpOperationError):
      """Server responsed with exception of type: 'ErrorResponse'.
  
      :param deserialize: A deserializer
      :param response: Server response to be deserialized.
      """
  
      def __init__(self, deserialize, response, *args):
  
          super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)
  
  
  class EvaluatedNetworkSecurityGroup(Model):
      """Results of network security group evaluation.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param network_security_group_id: Network security group ID.
      :type network_security_group_id: str
      :param applied_to: Resource ID of nic or subnet to which network security
       group is applied.
      :type applied_to: str
      :param matched_rule: Matched network security rule.
      :type matched_rule: ~azure.mgmt.network.v2019_02_01.models.MatchedRule
      :ivar rules_evaluation_result: List of network security rules evaluation
       results.
      :vartype rules_evaluation_result:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkSecurityRulesEvaluationResult]
      """
  
      _validation = {
          'rules_evaluation_result': {'readonly': True},
      }
  
      _attribute_map = {
          'network_security_group_id': {'key': 'networkSecurityGroupId', 'type': 'str'},
          'applied_to': {'key': 'appliedTo', 'type': 'str'},
          'matched_rule': {'key': 'matchedRule', 'type': 'MatchedRule'},
          'rules_evaluation_result': {'key': 'rulesEvaluationResult', 'type': '[NetworkSecurityRulesEvaluationResult]'},
      }
  
      def __init__(self, **kwargs):
          super(EvaluatedNetworkSecurityGroup, self).__init__(**kwargs)
          self.network_security_group_id = kwargs.get('network_security_group_id', None)
          self.applied_to = kwargs.get('applied_to', None)
          self.matched_rule = kwargs.get('matched_rule', None)
          self.rules_evaluation_result = None
  
  
  class ExpressRouteCircuit(Resource):
      """ExpressRouteCircuit resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param sku: The SKU.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitSku
      :param allow_classic_operations: Allow classic operations
      :type allow_classic_operations: bool
      :param circuit_provisioning_state: The CircuitProvisioningState state of
       the resource.
      :type circuit_provisioning_state: str
      :param service_provider_provisioning_state: The
       ServiceProviderProvisioningState state of the resource. Possible values
       include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
      :type service_provider_provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ServiceProviderProvisioningState
      :param authorizations: The list of authorizations.
      :type authorizations:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitAuthorization]
      :param peerings: The list of peerings.
      :type peerings:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeering]
      :param service_key: The ServiceKey.
      :type service_key: str
      :param service_provider_notes: The ServiceProviderNotes.
      :type service_provider_notes: str
      :param service_provider_properties: The ServiceProviderProperties.
      :type service_provider_properties:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitServiceProviderProperties
      :param express_route_port: The reference to the ExpressRoutePort resource
       when the circuit is provisioned on an ExpressRoutePort resource.
      :type express_route_port:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param bandwidth_in_gbps: The bandwidth of the circuit when the circuit is
       provisioned on an ExpressRoutePort resource.
      :type bandwidth_in_gbps: float
      :ivar stag: The identifier of the circuit traffic. Outer tag for QinQ
       encapsulation.
      :vartype stag: int
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param gateway_manager_etag: The GatewayManager Etag.
      :type gateway_manager_etag: str
      :param global_reach_enabled: Flag denoting Global reach status.
      :type global_reach_enabled: bool
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'stag': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'sku', 'type': 'ExpressRouteCircuitSku'},
          'allow_classic_operations': {'key': 'properties.allowClassicOperations', 'type': 'bool'},
          'circuit_provisioning_state': {'key': 'properties.circuitProvisioningState', 'type': 'str'},
          'service_provider_provisioning_state': {'key': 'properties.serviceProviderProvisioningState', 'type': 'str'},
          'authorizations': {'key': 'properties.authorizations', 'type': '[ExpressRouteCircuitAuthorization]'},
          'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCircuitPeering]'},
          'service_key': {'key': 'properties.serviceKey', 'type': 'str'},
          'service_provider_notes': {'key': 'properties.serviceProviderNotes', 'type': 'str'},
          'service_provider_properties': {'key': 'properties.serviceProviderProperties', 'type': 'ExpressRouteCircuitServiceProviderProperties'},
          'express_route_port': {'key': 'properties.expressRoutePort', 'type': 'SubResource'},
          'bandwidth_in_gbps': {'key': 'properties.bandwidthInGbps', 'type': 'float'},
          'stag': {'key': 'properties.stag', 'type': 'int'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'gateway_manager_etag': {'key': 'properties.gatewayManagerEtag', 'type': 'str'},
          'global_reach_enabled': {'key': 'properties.globalReachEnabled', 'type': 'bool'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuit, self).__init__(**kwargs)
          self.sku = kwargs.get('sku', None)
          self.allow_classic_operations = kwargs.get('allow_classic_operations', None)
          self.circuit_provisioning_state = kwargs.get('circuit_provisioning_state', None)
          self.service_provider_provisioning_state = kwargs.get('service_provider_provisioning_state', None)
          self.authorizations = kwargs.get('authorizations', None)
          self.peerings = kwargs.get('peerings', None)
          self.service_key = kwargs.get('service_key', None)
          self.service_provider_notes = kwargs.get('service_provider_notes', None)
          self.service_provider_properties = kwargs.get('service_provider_properties', None)
          self.express_route_port = kwargs.get('express_route_port', None)
          self.bandwidth_in_gbps = kwargs.get('bandwidth_in_gbps', None)
          self.stag = None
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.gateway_manager_etag = kwargs.get('gateway_manager_etag', None)
          self.global_reach_enabled = kwargs.get('global_reach_enabled', None)
          self.etag = None
  
  
  class ExpressRouteCircuitArpTable(Model):
      """The ARP table associated with the ExpressRouteCircuit.
  
      :param age: Entry age in minutes
      :type age: int
      :param interface: Interface address
      :type interface: str
      :param ip_address: The IP address.
      :type ip_address: str
      :param mac_address: The MAC address.
      :type mac_address: str
      """
  
      _attribute_map = {
          'age': {'key': 'age', 'type': 'int'},
          'interface': {'key': 'interface', 'type': 'str'},
          'ip_address': {'key': 'ipAddress', 'type': 'str'},
          'mac_address': {'key': 'macAddress', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitArpTable, self).__init__(**kwargs)
          self.age = kwargs.get('age', None)
          self.interface = kwargs.get('interface', None)
          self.ip_address = kwargs.get('ip_address', None)
          self.mac_address = kwargs.get('mac_address', None)
  
  
  class ExpressRouteCircuitAuthorization(SubResource):
      """Authorization in an ExpressRouteCircuit resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param authorization_key: The authorization key.
      :type authorization_key: str
      :param authorization_use_status: AuthorizationUseStatus. Possible values
       are: 'Available' and 'InUse'. Possible values include: 'Available',
       'InUse'
      :type authorization_use_status: str or
       ~azure.mgmt.network.v2019_02_01.models.AuthorizationUseStatus
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
          'authorization_use_status': {'key': 'properties.authorizationUseStatus', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitAuthorization, self).__init__(**kwargs)
          self.authorization_key = kwargs.get('authorization_key', None)
          self.authorization_use_status = kwargs.get('authorization_use_status', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ExpressRouteCircuitConnection(SubResource):
      """Express Route Circuit Connection in an ExpressRouteCircuitPeering resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param express_route_circuit_peering: Reference to Express Route Circuit
       Private Peering Resource of the circuit initiating connection.
      :type express_route_circuit_peering:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param peer_express_route_circuit_peering: Reference to Express Route
       Circuit Private Peering Resource of the peered circuit.
      :type peer_express_route_circuit_peering:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param address_prefix: /29 IP address space to carve out Customer
       addresses for tunnels.
      :type address_prefix: str
      :param authorization_key: The authorization key.
      :type authorization_key: str
      :param circuit_connection_status: Express Route Circuit connection state.
       Possible values include: 'Connected', 'Connecting', 'Disconnected'
      :type circuit_connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.CircuitConnectionStatus
      :ivar provisioning_state: Provisioning state of the circuit connection
       resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'express_route_circuit_peering': {'key': 'properties.expressRouteCircuitPeering', 'type': 'SubResource'},
          'peer_express_route_circuit_peering': {'key': 'properties.peerExpressRouteCircuitPeering', 'type': 'SubResource'},
          'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
          'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
          'circuit_connection_status': {'key': 'properties.circuitConnectionStatus', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitConnection, self).__init__(**kwargs)
          self.express_route_circuit_peering = kwargs.get('express_route_circuit_peering', None)
          self.peer_express_route_circuit_peering = kwargs.get('peer_express_route_circuit_peering', None)
          self.address_prefix = kwargs.get('address_prefix', None)
          self.authorization_key = kwargs.get('authorization_key', None)
          self.circuit_connection_status = kwargs.get('circuit_connection_status', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ExpressRouteCircuitPeering(SubResource):
      """Peering in an ExpressRouteCircuit resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param peering_type: The peering type. Possible values include:
       'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
      :type peering_type: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRoutePeeringType
      :param state: The peering state. Possible values include: 'Disabled',
       'Enabled'
      :type state: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRoutePeeringState
      :param azure_asn: The Azure ASN.
      :type azure_asn: int
      :param peer_asn: The peer ASN.
      :type peer_asn: long
      :param primary_peer_address_prefix: The primary address prefix.
      :type primary_peer_address_prefix: str
      :param secondary_peer_address_prefix: The secondary address prefix.
      :type secondary_peer_address_prefix: str
      :param primary_azure_port: The primary port.
      :type primary_azure_port: str
      :param secondary_azure_port: The secondary port.
      :type secondary_azure_port: str
      :param shared_key: The shared key.
      :type shared_key: str
      :param vlan_id: The VLAN ID.
      :type vlan_id: int
      :param microsoft_peering_config: The Microsoft peering configuration.
      :type microsoft_peering_config:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeeringConfig
      :param stats: Gets peering stats.
      :type stats:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitStats
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param gateway_manager_etag: The GatewayManager Etag.
      :type gateway_manager_etag: str
      :param last_modified_by: Gets whether the provider or the customer last
       modified the peering.
      :type last_modified_by: str
      :param route_filter: The reference of the RouteFilter resource.
      :type route_filter: ~azure.mgmt.network.v2019_02_01.models.RouteFilter
      :param ipv6_peering_config: The IPv6 peering configuration.
      :type ipv6_peering_config:
       ~azure.mgmt.network.v2019_02_01.models.Ipv6ExpressRouteCircuitPeeringConfig
      :param express_route_connection: The ExpressRoute connection.
      :type express_route_connection:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteConnectionId
      :param connections: The list of circuit connections associated with Azure
       Private Peering for this circuit.
      :type connections:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitConnection]
      :ivar peered_connections: The list of peered circuit connections
       associated with Azure Private Peering for this circuit.
      :vartype peered_connections:
       list[~azure.mgmt.network.v2019_02_01.models.PeerExpressRouteCircuitConnection]
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'peer_asn': {'maximum': 4294967295, 'minimum': 1},
          'peered_connections': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'peering_type': {'key': 'properties.peeringType', 'type': 'str'},
          'state': {'key': 'properties.state', 'type': 'str'},
          'azure_asn': {'key': 'properties.azureASN', 'type': 'int'},
          'peer_asn': {'key': 'properties.peerASN', 'type': 'long'},
          'primary_peer_address_prefix': {'key': 'properties.primaryPeerAddressPrefix', 'type': 'str'},
          'secondary_peer_address_prefix': {'key': 'properties.secondaryPeerAddressPrefix', 'type': 'str'},
          'primary_azure_port': {'key': 'properties.primaryAzurePort', 'type': 'str'},
          'secondary_azure_port': {'key': 'properties.secondaryAzurePort', 'type': 'str'},
          'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
          'vlan_id': {'key': 'properties.vlanId', 'type': 'int'},
          'microsoft_peering_config': {'key': 'properties.microsoftPeeringConfig', 'type': 'ExpressRouteCircuitPeeringConfig'},
          'stats': {'key': 'properties.stats', 'type': 'ExpressRouteCircuitStats'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'gateway_manager_etag': {'key': 'properties.gatewayManagerEtag', 'type': 'str'},
          'last_modified_by': {'key': 'properties.lastModifiedBy', 'type': 'str'},
          'route_filter': {'key': 'properties.routeFilter', 'type': 'RouteFilter'},
          'ipv6_peering_config': {'key': 'properties.ipv6PeeringConfig', 'type': 'Ipv6ExpressRouteCircuitPeeringConfig'},
          'express_route_connection': {'key': 'properties.expressRouteConnection', 'type': 'ExpressRouteConnectionId'},
          'connections': {'key': 'properties.connections', 'type': '[ExpressRouteCircuitConnection]'},
          'peered_connections': {'key': 'properties.peeredConnections', 'type': '[PeerExpressRouteCircuitConnection]'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitPeering, self).__init__(**kwargs)
          self.peering_type = kwargs.get('peering_type', None)
          self.state = kwargs.get('state', None)
          self.azure_asn = kwargs.get('azure_asn', None)
          self.peer_asn = kwargs.get('peer_asn', None)
          self.primary_peer_address_prefix = kwargs.get('primary_peer_address_prefix', None)
          self.secondary_peer_address_prefix = kwargs.get('secondary_peer_address_prefix', None)
          self.primary_azure_port = kwargs.get('primary_azure_port', None)
          self.secondary_azure_port = kwargs.get('secondary_azure_port', None)
          self.shared_key = kwargs.get('shared_key', None)
          self.vlan_id = kwargs.get('vlan_id', None)
          self.microsoft_peering_config = kwargs.get('microsoft_peering_config', None)
          self.stats = kwargs.get('stats', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.gateway_manager_etag = kwargs.get('gateway_manager_etag', None)
          self.last_modified_by = kwargs.get('last_modified_by', None)
          self.route_filter = kwargs.get('route_filter', None)
          self.ipv6_peering_config = kwargs.get('ipv6_peering_config', None)
          self.express_route_connection = kwargs.get('express_route_connection', None)
          self.connections = kwargs.get('connections', None)
          self.peered_connections = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ExpressRouteCircuitPeeringConfig(Model):
      """Specifies the peering configuration.
  
      :param advertised_public_prefixes: The reference of
       AdvertisedPublicPrefixes.
      :type advertised_public_prefixes: list[str]
      :param advertised_communities: The communities of bgp peering. Specified
       for microsoft peering
      :type advertised_communities: list[str]
      :param advertised_public_prefixes_state: AdvertisedPublicPrefixState of
       the Peering resource. Possible values are 'NotConfigured', 'Configuring',
       'Configured', and 'ValidationNeeded'. Possible values include:
       'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
      :type advertised_public_prefixes_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeeringAdvertisedPublicPrefixState
      :param legacy_mode: The legacy mode of the peering.
      :type legacy_mode: int
      :param customer_asn: The CustomerASN of the peering.
      :type customer_asn: int
      :param routing_registry_name: The RoutingRegistryName of the
       configuration.
      :type routing_registry_name: str
      """
  
      _attribute_map = {
          'advertised_public_prefixes': {'key': 'advertisedPublicPrefixes', 'type': '[str]'},
          'advertised_communities': {'key': 'advertisedCommunities', 'type': '[str]'},
          'advertised_public_prefixes_state': {'key': 'advertisedPublicPrefixesState', 'type': 'str'},
          'legacy_mode': {'key': 'legacyMode', 'type': 'int'},
          'customer_asn': {'key': 'customerASN', 'type': 'int'},
          'routing_registry_name': {'key': 'routingRegistryName', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitPeeringConfig, self).__init__(**kwargs)
          self.advertised_public_prefixes = kwargs.get('advertised_public_prefixes', None)
          self.advertised_communities = kwargs.get('advertised_communities', None)
          self.advertised_public_prefixes_state = kwargs.get('advertised_public_prefixes_state', None)
          self.legacy_mode = kwargs.get('legacy_mode', None)
          self.customer_asn = kwargs.get('customer_asn', None)
          self.routing_registry_name = kwargs.get('routing_registry_name', None)
  
  
  class ExpressRouteCircuitPeeringId(Model):
      """ExpressRoute circuit peering identifier.
  
      :param id: The ID of the ExpressRoute circuit peering.
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitPeeringId, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class ExpressRouteCircuitReference(Model):
      """Reference to an express route circuit.
  
      :param id: Corresponding Express Route Circuit Id.
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitReference, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class ExpressRouteCircuitRoutesTable(Model):
      """The routes table associated with the ExpressRouteCircuit.
  
      :param network: IP address of a network entity
      :type network: str
      :param next_hop: NextHop address
      :type next_hop: str
      :param loc_prf: Local preference value as set with the set
       local-preference route-map configuration command
      :type loc_prf: str
      :param weight: Route Weight.
      :type weight: int
      :param path: Autonomous system paths to the destination network.
      :type path: str
      """
  
      _attribute_map = {
          'network': {'key': 'network', 'type': 'str'},
          'next_hop': {'key': 'nextHop', 'type': 'str'},
          'loc_prf': {'key': 'locPrf', 'type': 'str'},
          'weight': {'key': 'weight', 'type': 'int'},
          'path': {'key': 'path', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitRoutesTable, self).__init__(**kwargs)
          self.network = kwargs.get('network', None)
          self.next_hop = kwargs.get('next_hop', None)
          self.loc_prf = kwargs.get('loc_prf', None)
          self.weight = kwargs.get('weight', None)
          self.path = kwargs.get('path', None)
  
  
  class ExpressRouteCircuitRoutesTableSummary(Model):
      """The routes table associated with the ExpressRouteCircuit.
  
      :param neighbor: IP address of the neighbor.
      :type neighbor: str
      :param v: BGP version number spoken to the neighbor.
      :type v: int
      :param as_property: Autonomous system number.
      :type as_property: int
      :param up_down: The length of time that the BGP session has been in the
       Established state, or the current status if not in the Established state.
      :type up_down: str
      :param state_pfx_rcd: Current state of the BGP session, and the number of
       prefixes that have been received from a neighbor or peer group.
      :type state_pfx_rcd: str
      """
  
      _attribute_map = {
          'neighbor': {'key': 'neighbor', 'type': 'str'},
          'v': {'key': 'v', 'type': 'int'},
          'as_property': {'key': 'as', 'type': 'int'},
          'up_down': {'key': 'upDown', 'type': 'str'},
          'state_pfx_rcd': {'key': 'statePfxRcd', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitRoutesTableSummary, self).__init__(**kwargs)
          self.neighbor = kwargs.get('neighbor', None)
          self.v = kwargs.get('v', None)
          self.as_property = kwargs.get('as_property', None)
          self.up_down = kwargs.get('up_down', None)
          self.state_pfx_rcd = kwargs.get('state_pfx_rcd', None)
  
  
  class ExpressRouteCircuitsArpTableListResult(Model):
      """Response for ListArpTable associated with the Express Route Circuits API.
  
      :param value: Gets list of the ARP table.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitArpTable]
      :param next_link: The URL to get the next set of results.
      :type next_link: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ExpressRouteCircuitArpTable]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitsArpTableListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = kwargs.get('next_link', None)
  
  
  class ExpressRouteCircuitServiceProviderProperties(Model):
      """Contains ServiceProviderProperties in an ExpressRouteCircuit.
  
      :param service_provider_name: The serviceProviderName.
      :type service_provider_name: str
      :param peering_location: The peering location.
      :type peering_location: str
      :param bandwidth_in_mbps: The BandwidthInMbps.
      :type bandwidth_in_mbps: int
      """
  
      _attribute_map = {
          'service_provider_name': {'key': 'serviceProviderName', 'type': 'str'},
          'peering_location': {'key': 'peeringLocation', 'type': 'str'},
          'bandwidth_in_mbps': {'key': 'bandwidthInMbps', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitServiceProviderProperties, self).__init__(**kwargs)
          self.service_provider_name = kwargs.get('service_provider_name', None)
          self.peering_location = kwargs.get('peering_location', None)
          self.bandwidth_in_mbps = kwargs.get('bandwidth_in_mbps', None)
  
  
  class ExpressRouteCircuitSku(Model):
      """Contains SKU in an ExpressRouteCircuit.
  
      :param name: The name of the SKU.
      :type name: str
      :param tier: The tier of the SKU. Possible values are 'Standard',
       'Premium' or 'Local'. Possible values include: 'Standard', 'Premium',
       'Basic', 'Local'
      :type tier: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitSkuTier
      :param family: The family of the SKU. Possible values are: 'UnlimitedData'
       and 'MeteredData'. Possible values include: 'UnlimitedData', 'MeteredData'
      :type family: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitSkuFamily
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'tier': {'key': 'tier', 'type': 'str'},
          'family': {'key': 'family', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitSku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.tier = kwargs.get('tier', None)
          self.family = kwargs.get('family', None)
  
  
  class ExpressRouteCircuitsRoutesTableListResult(Model):
      """Response for ListRoutesTable associated with the Express Route Circuits
      API.
  
      :param value: The list of routes table.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitRoutesTable]
      :param next_link: The URL to get the next set of results.
      :type next_link: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ExpressRouteCircuitRoutesTable]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitsRoutesTableListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = kwargs.get('next_link', None)
  
  
  class ExpressRouteCircuitsRoutesTableSummaryListResult(Model):
      """Response for ListRoutesTable associated with the Express Route Circuits
      API.
  
      :param value: A list of the routes table.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitRoutesTableSummary]
      :param next_link: The URL to get the next set of results.
      :type next_link: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ExpressRouteCircuitRoutesTableSummary]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitsRoutesTableSummaryListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = kwargs.get('next_link', None)
  
  
  class ExpressRouteCircuitStats(Model):
      """Contains stats associated with the peering.
  
      :param primarybytes_in: Gets BytesIn of the peering.
      :type primarybytes_in: long
      :param primarybytes_out: Gets BytesOut of the peering.
      :type primarybytes_out: long
      :param secondarybytes_in: Gets BytesIn of the peering.
      :type secondarybytes_in: long
      :param secondarybytes_out: Gets BytesOut of the peering.
      :type secondarybytes_out: long
      """
  
      _attribute_map = {
          'primarybytes_in': {'key': 'primarybytesIn', 'type': 'long'},
          'primarybytes_out': {'key': 'primarybytesOut', 'type': 'long'},
          'secondarybytes_in': {'key': 'secondarybytesIn', 'type': 'long'},
          'secondarybytes_out': {'key': 'secondarybytesOut', 'type': 'long'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCircuitStats, self).__init__(**kwargs)
          self.primarybytes_in = kwargs.get('primarybytes_in', None)
          self.primarybytes_out = kwargs.get('primarybytes_out', None)
          self.secondarybytes_in = kwargs.get('secondarybytes_in', None)
          self.secondarybytes_out = kwargs.get('secondarybytes_out', None)
  
  
  class ExpressRouteConnection(SubResource):
      """ExpressRouteConnection resource.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param express_route_circuit_peering: Required. The ExpressRoute circuit
       peering.
      :type express_route_circuit_peering:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeeringId
      :param authorization_key: Authorization key to establish the connection.
      :type authorization_key: str
      :param routing_weight: The routing weight associated to the connection.
      :type routing_weight: int
      :param name: Required. The name of the resource.
      :type name: str
      """
  
      _validation = {
          'express_route_circuit_peering': {'required': True},
          'name': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'express_route_circuit_peering': {'key': 'properties.expressRouteCircuitPeering', 'type': 'ExpressRouteCircuitPeeringId'},
          'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
          'routing_weight': {'key': 'properties.routingWeight', 'type': 'int'},
          'name': {'key': 'name', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteConnection, self).__init__(**kwargs)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.express_route_circuit_peering = kwargs.get('express_route_circuit_peering', None)
          self.authorization_key = kwargs.get('authorization_key', None)
          self.routing_weight = kwargs.get('routing_weight', None)
          self.name = kwargs.get('name', None)
  
  
  class ExpressRouteConnectionId(Model):
      """The ID of the ExpressRouteConnection.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar id: The ID of the ExpressRouteConnection.
      :vartype id: str
      """
  
      _validation = {
          'id': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteConnectionId, self).__init__(**kwargs)
          self.id = None
  
  
  class ExpressRouteConnectionList(Model):
      """ExpressRouteConnection list.
  
      :param value: The list of ExpressRoute connections
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteConnection]
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ExpressRouteConnection]'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteConnectionList, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
  
  
  class ExpressRouteCrossConnection(Resource):
      """ExpressRouteCrossConnection resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar primary_azure_port: The name of the primary  port.
      :vartype primary_azure_port: str
      :ivar secondary_azure_port: The name of the secondary  port.
      :vartype secondary_azure_port: str
      :ivar s_tag: The identifier of the circuit traffic.
      :vartype s_tag: int
      :param peering_location: The peering location of the ExpressRoute circuit.
      :type peering_location: str
      :param bandwidth_in_mbps: The circuit bandwidth In Mbps.
      :type bandwidth_in_mbps: int
      :param express_route_circuit: The ExpressRouteCircuit
      :type express_route_circuit:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitReference
      :param service_provider_provisioning_state: The provisioning state of the
       circuit in the connectivity provider system. Possible values include:
       'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
      :type service_provider_provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ServiceProviderProvisioningState
      :param service_provider_notes: Additional read only notes set by the
       connectivity provider.
      :type service_provider_notes: str
      :ivar provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param peerings: The list of peerings.
      :type peerings:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCrossConnectionPeering]
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'primary_azure_port': {'readonly': True},
          'secondary_azure_port': {'readonly': True},
          's_tag': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'primary_azure_port': {'key': 'properties.primaryAzurePort', 'type': 'str'},
          'secondary_azure_port': {'key': 'properties.secondaryAzurePort', 'type': 'str'},
          's_tag': {'key': 'properties.sTag', 'type': 'int'},
          'peering_location': {'key': 'properties.peeringLocation', 'type': 'str'},
          'bandwidth_in_mbps': {'key': 'properties.bandwidthInMbps', 'type': 'int'},
          'express_route_circuit': {'key': 'properties.expressRouteCircuit', 'type': 'ExpressRouteCircuitReference'},
          'service_provider_provisioning_state': {'key': 'properties.serviceProviderProvisioningState', 'type': 'str'},
          'service_provider_notes': {'key': 'properties.serviceProviderNotes', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCrossConnectionPeering]'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCrossConnection, self).__init__(**kwargs)
          self.primary_azure_port = None
          self.secondary_azure_port = None
          self.s_tag = None
          self.peering_location = kwargs.get('peering_location', None)
          self.bandwidth_in_mbps = kwargs.get('bandwidth_in_mbps', None)
          self.express_route_circuit = kwargs.get('express_route_circuit', None)
          self.service_provider_provisioning_state = kwargs.get('service_provider_provisioning_state', None)
          self.service_provider_notes = kwargs.get('service_provider_notes', None)
          self.provisioning_state = None
          self.peerings = kwargs.get('peerings', None)
          self.etag = None
  
  
  class ExpressRouteCrossConnectionPeering(SubResource):
      """Peering in an ExpressRoute Cross Connection resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param peering_type: The peering type. Possible values include:
       'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
      :type peering_type: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRoutePeeringType
      :param state: The peering state. Possible values include: 'Disabled',
       'Enabled'
      :type state: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRoutePeeringState
      :ivar azure_asn: The Azure ASN.
      :vartype azure_asn: int
      :param peer_asn: The peer ASN.
      :type peer_asn: long
      :param primary_peer_address_prefix: The primary address prefix.
      :type primary_peer_address_prefix: str
      :param secondary_peer_address_prefix: The secondary address prefix.
      :type secondary_peer_address_prefix: str
      :ivar primary_azure_port: The primary port.
      :vartype primary_azure_port: str
      :ivar secondary_azure_port: The secondary port.
      :vartype secondary_azure_port: str
      :param shared_key: The shared key.
      :type shared_key: str
      :param vlan_id: The VLAN ID.
      :type vlan_id: int
      :param microsoft_peering_config: The Microsoft peering configuration.
      :type microsoft_peering_config:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeeringConfig
      :ivar provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param gateway_manager_etag: The GatewayManager Etag.
      :type gateway_manager_etag: str
      :param last_modified_by: Gets whether the provider or the customer last
       modified the peering.
      :type last_modified_by: str
      :param ipv6_peering_config: The IPv6 peering configuration.
      :type ipv6_peering_config:
       ~azure.mgmt.network.v2019_02_01.models.Ipv6ExpressRouteCircuitPeeringConfig
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'azure_asn': {'readonly': True},
          'peer_asn': {'maximum': 4294967295, 'minimum': 1},
          'primary_azure_port': {'readonly': True},
          'secondary_azure_port': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'peering_type': {'key': 'properties.peeringType', 'type': 'str'},
          'state': {'key': 'properties.state', 'type': 'str'},
          'azure_asn': {'key': 'properties.azureASN', 'type': 'int'},
          'peer_asn': {'key': 'properties.peerASN', 'type': 'long'},
          'primary_peer_address_prefix': {'key': 'properties.primaryPeerAddressPrefix', 'type': 'str'},
          'secondary_peer_address_prefix': {'key': 'properties.secondaryPeerAddressPrefix', 'type': 'str'},
          'primary_azure_port': {'key': 'properties.primaryAzurePort', 'type': 'str'},
          'secondary_azure_port': {'key': 'properties.secondaryAzurePort', 'type': 'str'},
          'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
          'vlan_id': {'key': 'properties.vlanId', 'type': 'int'},
          'microsoft_peering_config': {'key': 'properties.microsoftPeeringConfig', 'type': 'ExpressRouteCircuitPeeringConfig'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'gateway_manager_etag': {'key': 'properties.gatewayManagerEtag', 'type': 'str'},
          'last_modified_by': {'key': 'properties.lastModifiedBy', 'type': 'str'},
          'ipv6_peering_config': {'key': 'properties.ipv6PeeringConfig', 'type': 'Ipv6ExpressRouteCircuitPeeringConfig'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCrossConnectionPeering, self).__init__(**kwargs)
          self.peering_type = kwargs.get('peering_type', None)
          self.state = kwargs.get('state', None)
          self.azure_asn = None
          self.peer_asn = kwargs.get('peer_asn', None)
          self.primary_peer_address_prefix = kwargs.get('primary_peer_address_prefix', None)
          self.secondary_peer_address_prefix = kwargs.get('secondary_peer_address_prefix', None)
          self.primary_azure_port = None
          self.secondary_azure_port = None
          self.shared_key = kwargs.get('shared_key', None)
          self.vlan_id = kwargs.get('vlan_id', None)
          self.microsoft_peering_config = kwargs.get('microsoft_peering_config', None)
          self.provisioning_state = None
          self.gateway_manager_etag = kwargs.get('gateway_manager_etag', None)
          self.last_modified_by = kwargs.get('last_modified_by', None)
          self.ipv6_peering_config = kwargs.get('ipv6_peering_config', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ExpressRouteCrossConnectionRoutesTableSummary(Model):
      """The routes table associated with the ExpressRouteCircuit.
  
      :param neighbor: IP address of Neighbor router
      :type neighbor: str
      :param asn: Autonomous system number.
      :type asn: int
      :param up_down: The length of time that the BGP session has been in the
       Established state, or the current status if not in the Established state.
      :type up_down: str
      :param state_or_prefixes_received: Current state of the BGP session, and
       the number of prefixes that have been received from a neighbor or peer
       group.
      :type state_or_prefixes_received: str
      """
  
      _attribute_map = {
          'neighbor': {'key': 'neighbor', 'type': 'str'},
          'asn': {'key': 'asn', 'type': 'int'},
          'up_down': {'key': 'upDown', 'type': 'str'},
          'state_or_prefixes_received': {'key': 'stateOrPrefixesReceived', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCrossConnectionRoutesTableSummary, self).__init__(**kwargs)
          self.neighbor = kwargs.get('neighbor', None)
          self.asn = kwargs.get('asn', None)
          self.up_down = kwargs.get('up_down', None)
          self.state_or_prefixes_received = kwargs.get('state_or_prefixes_received', None)
  
  
  class ExpressRouteCrossConnectionsRoutesTableSummaryListResult(Model):
      """Response for ListRoutesTable associated with the Express Route Cross
      Connections.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param value: A list of the routes table.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCrossConnectionRoutesTableSummary]
      :ivar next_link: The URL to get the next set of results.
      :vartype next_link: str
      """
  
      _validation = {
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ExpressRouteCrossConnectionRoutesTableSummary]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteCrossConnectionsRoutesTableSummaryListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = None
  
  
  class ExpressRouteGateway(Resource):
      """ExpressRoute gateway resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param auto_scale_configuration: Configuration for auto scaling.
      :type auto_scale_configuration:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteGatewayPropertiesAutoScaleConfiguration
      :ivar express_route_connections: List of ExpressRoute connections to the
       ExpressRoute gateway.
      :vartype express_route_connections:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteConnection]
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param virtual_hub: Required. The Virtual Hub where the ExpressRoute
       gateway is or will be deployed.
      :type virtual_hub: ~azure.mgmt.network.v2019_02_01.models.VirtualHubId
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'express_route_connections': {'readonly': True},
          'virtual_hub': {'required': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'auto_scale_configuration': {'key': 'properties.autoScaleConfiguration', 'type': 'ExpressRouteGatewayPropertiesAutoScaleConfiguration'},
          'express_route_connections': {'key': 'properties.expressRouteConnections', 'type': '[ExpressRouteConnection]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'virtual_hub': {'key': 'properties.virtualHub', 'type': 'VirtualHubId'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteGateway, self).__init__(**kwargs)
          self.auto_scale_configuration = kwargs.get('auto_scale_configuration', None)
          self.express_route_connections = None
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.virtual_hub = kwargs.get('virtual_hub', None)
          self.etag = None
  
  
  class ExpressRouteGatewayList(Model):
      """List of ExpressRoute gateways.
  
      :param value: List of ExpressRoute gateways.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteGateway]
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ExpressRouteGateway]'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteGatewayList, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
  
  
  class ExpressRouteGatewayPropertiesAutoScaleConfiguration(Model):
      """Configuration for auto scaling.
  
      :param bounds: Minimum and maximum number of scale units to deploy.
      :type bounds:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds
      """
  
      _attribute_map = {
          'bounds': {'key': 'bounds', 'type': 'ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteGatewayPropertiesAutoScaleConfiguration, self).__init__(**kwargs)
          self.bounds = kwargs.get('bounds', None)
  
  
  class ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds(Model):
      """Minimum and maximum number of scale units to deploy.
  
      :param min: Minimum number of scale units deployed for ExpressRoute
       gateway.
      :type min: int
      :param max: Maximum number of scale units deployed for ExpressRoute
       gateway.
      :type max: int
      """
  
      _attribute_map = {
          'min': {'key': 'min', 'type': 'int'},
          'max': {'key': 'max', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds, self).__init__(**kwargs)
          self.min = kwargs.get('min', None)
          self.max = kwargs.get('max', None)
  
  
  class ExpressRouteLink(SubResource):
      """ExpressRouteLink.
  
      ExpressRouteLink child resource definition.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar router_name: Name of Azure router associated with physical port.
      :vartype router_name: str
      :ivar interface_name: Name of Azure router interface.
      :vartype interface_name: str
      :ivar patch_panel_id: Mapping between physical port to patch panel port.
      :vartype patch_panel_id: str
      :ivar rack_id: Mapping of physical patch panel to rack.
      :vartype rack_id: str
      :ivar connector_type: Physical fiber port type. Possible values include:
       'LC', 'SC'
      :vartype connector_type: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteLinkConnectorType
      :param admin_state: Administrative state of the physical port. Possible
       values include: 'Enabled', 'Disabled'
      :type admin_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteLinkAdminState
      :ivar provisioning_state: The provisioning state of the ExpressRouteLink
       resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: Name of child port resource that is unique among child port
       resources of the parent.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'router_name': {'readonly': True},
          'interface_name': {'readonly': True},
          'patch_panel_id': {'readonly': True},
          'rack_id': {'readonly': True},
          'connector_type': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'router_name': {'key': 'properties.routerName', 'type': 'str'},
          'interface_name': {'key': 'properties.interfaceName', 'type': 'str'},
          'patch_panel_id': {'key': 'properties.patchPanelId', 'type': 'str'},
          'rack_id': {'key': 'properties.rackId', 'type': 'str'},
          'connector_type': {'key': 'properties.connectorType', 'type': 'str'},
          'admin_state': {'key': 'properties.adminState', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteLink, self).__init__(**kwargs)
          self.router_name = None
          self.interface_name = None
          self.patch_panel_id = None
          self.rack_id = None
          self.connector_type = None
          self.admin_state = kwargs.get('admin_state', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ExpressRoutePort(Resource):
      """ExpressRoute Port.
  
      ExpressRoutePort resource definition.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param peering_location: The name of the peering location that the
       ExpressRoutePort is mapped to physically.
      :type peering_location: str
      :param bandwidth_in_gbps: Bandwidth of procured ports in Gbps
      :type bandwidth_in_gbps: int
      :ivar provisioned_bandwidth_in_gbps: Aggregate Gbps of associated circuit
       bandwidths.
      :vartype provisioned_bandwidth_in_gbps: float
      :ivar mtu: Maximum transmission unit of the physical port pair(s)
      :vartype mtu: str
      :param encapsulation: Encapsulation method on physical ports. Possible
       values include: 'Dot1Q', 'QinQ'
      :type encapsulation: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRoutePortsEncapsulation
      :ivar ether_type: Ether type of the physical port.
      :vartype ether_type: str
      :ivar allocation_date: Date of the physical port allocation to be used in
       Letter of Authorization.
      :vartype allocation_date: str
      :param links: ExpressRouteLink Sub-Resources. The set of physical links of
       the ExpressRoutePort resource
      :type links: list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteLink]
      :ivar circuits: Reference the ExpressRoute circuit(s) that are provisioned
       on this ExpressRoutePort resource.
      :vartype circuits:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar provisioning_state: The provisioning state of the ExpressRoutePort
       resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param resource_guid: The resource GUID property of the ExpressRoutePort
       resource.
      :type resource_guid: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'provisioned_bandwidth_in_gbps': {'readonly': True},
          'mtu': {'readonly': True},
          'ether_type': {'readonly': True},
          'allocation_date': {'readonly': True},
          'circuits': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'peering_location': {'key': 'properties.peeringLocation', 'type': 'str'},
          'bandwidth_in_gbps': {'key': 'properties.bandwidthInGbps', 'type': 'int'},
          'provisioned_bandwidth_in_gbps': {'key': 'properties.provisionedBandwidthInGbps', 'type': 'float'},
          'mtu': {'key': 'properties.mtu', 'type': 'str'},
          'encapsulation': {'key': 'properties.encapsulation', 'type': 'str'},
          'ether_type': {'key': 'properties.etherType', 'type': 'str'},
          'allocation_date': {'key': 'properties.allocationDate', 'type': 'str'},
          'links': {'key': 'properties.links', 'type': '[ExpressRouteLink]'},
          'circuits': {'key': 'properties.circuits', 'type': '[SubResource]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRoutePort, self).__init__(**kwargs)
          self.peering_location = kwargs.get('peering_location', None)
          self.bandwidth_in_gbps = kwargs.get('bandwidth_in_gbps', None)
          self.provisioned_bandwidth_in_gbps = None
          self.mtu = None
          self.encapsulation = kwargs.get('encapsulation', None)
          self.ether_type = None
          self.allocation_date = None
          self.links = kwargs.get('links', None)
          self.circuits = None
          self.provisioning_state = None
          self.resource_guid = kwargs.get('resource_guid', None)
          self.etag = None
  
  
  class ExpressRoutePortsLocation(Resource):
      """ExpressRoutePorts Peering Location.
  
      Definition of the ExpressRoutePorts peering location resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar address: Address of peering location.
      :vartype address: str
      :ivar contact: Contact details of peering locations.
      :vartype contact: str
      :param available_bandwidths: The inventory of available ExpressRoutePort
       bandwidths.
      :type available_bandwidths:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRoutePortsLocationBandwidths]
      :ivar provisioning_state: The provisioning state of the
       ExpressRoutePortLocation resource. Possible values are: 'Succeeded',
       'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'address': {'readonly': True},
          'contact': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'address': {'key': 'properties.address', 'type': 'str'},
          'contact': {'key': 'properties.contact', 'type': 'str'},
          'available_bandwidths': {'key': 'properties.availableBandwidths', 'type': '[ExpressRoutePortsLocationBandwidths]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRoutePortsLocation, self).__init__(**kwargs)
          self.address = None
          self.contact = None
          self.available_bandwidths = kwargs.get('available_bandwidths', None)
          self.provisioning_state = None
  
  
  class ExpressRoutePortsLocationBandwidths(Model):
      """ExpressRoutePorts Location Bandwidths.
  
      Real-time inventory of available ExpressRoute port bandwidths.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar offer_name: Bandwidth descriptive name
      :vartype offer_name: str
      :ivar value_in_gbps: Bandwidth value in Gbps
      :vartype value_in_gbps: int
      """
  
      _validation = {
          'offer_name': {'readonly': True},
          'value_in_gbps': {'readonly': True},
      }
  
      _attribute_map = {
          'offer_name': {'key': 'offerName', 'type': 'str'},
          'value_in_gbps': {'key': 'valueInGbps', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRoutePortsLocationBandwidths, self).__init__(**kwargs)
          self.offer_name = None
          self.value_in_gbps = None
  
  
  class ExpressRouteServiceProvider(Resource):
      """A ExpressRouteResourceProvider object.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param peering_locations: Get a list of peering locations.
      :type peering_locations: list[str]
      :param bandwidths_offered: Gets bandwidths offered.
      :type bandwidths_offered:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteServiceProviderBandwidthsOffered]
      :param provisioning_state: Gets the provisioning state of the resource.
      :type provisioning_state: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'peering_locations': {'key': 'properties.peeringLocations', 'type': '[str]'},
          'bandwidths_offered': {'key': 'properties.bandwidthsOffered', 'type': '[ExpressRouteServiceProviderBandwidthsOffered]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteServiceProvider, self).__init__(**kwargs)
          self.peering_locations = kwargs.get('peering_locations', None)
          self.bandwidths_offered = kwargs.get('bandwidths_offered', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
  
  
  class ExpressRouteServiceProviderBandwidthsOffered(Model):
      """Contains bandwidths offered in ExpressRouteServiceProvider resources.
  
      :param offer_name: The OfferName.
      :type offer_name: str
      :param value_in_mbps: The ValueInMbps.
      :type value_in_mbps: int
      """
  
      _attribute_map = {
          'offer_name': {'key': 'offerName', 'type': 'str'},
          'value_in_mbps': {'key': 'valueInMbps', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(ExpressRouteServiceProviderBandwidthsOffered, self).__init__(**kwargs)
          self.offer_name = kwargs.get('offer_name', None)
          self.value_in_mbps = kwargs.get('value_in_mbps', None)
  
  
  class FlowLogFormatParameters(Model):
      """Parameters that define the flow log format.
  
      :param type: The file type of flow log. Possible values include: 'JSON'
      :type type: str or
       ~azure.mgmt.network.v2019_02_01.models.FlowLogFormatType
      :param version: The version (revision) of the flow log. Default value: 0 .
      :type version: int
      """
  
      _attribute_map = {
          'type': {'key': 'type', 'type': 'str'},
          'version': {'key': 'version', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(FlowLogFormatParameters, self).__init__(**kwargs)
          self.type = kwargs.get('type', None)
          self.version = kwargs.get('version', 0)
  
  
  class FlowLogInformation(Model):
      """Information on the configuration of flow log and traffic analytics
      (optional) .
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The ID of the resource to configure
       for flow log and traffic analytics (optional) .
      :type target_resource_id: str
      :param storage_id: Required. ID of the storage account which is used to
       store the flow log.
      :type storage_id: str
      :param enabled: Required. Flag to enable/disable flow logging.
      :type enabled: bool
      :param retention_policy: Parameters that define the retention policy for
       flow log.
      :type retention_policy:
       ~azure.mgmt.network.v2019_02_01.models.RetentionPolicyParameters
      :param format: Parameters that define the flow log format.
      :type format:
       ~azure.mgmt.network.v2019_02_01.models.FlowLogFormatParameters
      :param flow_analytics_configuration: Parameters that define the
       configuration of traffic analytics.
      :type flow_analytics_configuration:
       ~azure.mgmt.network.v2019_02_01.models.TrafficAnalyticsProperties
      """
  
      _validation = {
          'target_resource_id': {'required': True},
          'storage_id': {'required': True},
          'enabled': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
          'storage_id': {'key': 'properties.storageId', 'type': 'str'},
          'enabled': {'key': 'properties.enabled', 'type': 'bool'},
          'retention_policy': {'key': 'properties.retentionPolicy', 'type': 'RetentionPolicyParameters'},
          'format': {'key': 'properties.format', 'type': 'FlowLogFormatParameters'},
          'flow_analytics_configuration': {'key': 'flowAnalyticsConfiguration', 'type': 'TrafficAnalyticsProperties'},
      }
  
      def __init__(self, **kwargs):
          super(FlowLogInformation, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
          self.storage_id = kwargs.get('storage_id', None)
          self.enabled = kwargs.get('enabled', None)
          self.retention_policy = kwargs.get('retention_policy', None)
          self.format = kwargs.get('format', None)
          self.flow_analytics_configuration = kwargs.get('flow_analytics_configuration', None)
  
  
  class FlowLogStatusParameters(Model):
      """Parameters that define a resource to query flow log and traffic analytics
      (optional) status.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The target resource where getting the
       flow log and traffic analytics (optional) status.
      :type target_resource_id: str
      """
  
      _validation = {
          'target_resource_id': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(FlowLogStatusParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
  
  
  class FrontendIPConfiguration(SubResource):
      """Frontend IP address of the load balancer.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar inbound_nat_rules: Read only. Inbound rules URIs that use this
       frontend IP.
      :vartype inbound_nat_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar inbound_nat_pools: Read only. Inbound pools URIs that use this
       frontend IP.
      :vartype inbound_nat_pools:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar outbound_rules: Read only. Outbound rules URIs that use this
       frontend IP.
      :vartype outbound_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar load_balancing_rules: Gets load balancing rules URIs that use this
       frontend IP.
      :vartype load_balancing_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param private_ip_address: The private IP address of the IP configuration.
      :type private_ip_address: str
      :param private_ip_allocation_method: The Private IP allocation method.
       Possible values include: 'Static', 'Dynamic'
      :type private_ip_allocation_method: str or
       ~azure.mgmt.network.v2019_02_01.models.IPAllocationMethod
      :param subnet: The reference of the subnet resource.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.Subnet
      :param public_ip_address: The reference of the Public IP resource.
      :type public_ip_address:
       ~azure.mgmt.network.v2019_02_01.models.PublicIPAddress
      :param public_ip_prefix: The reference of the Public IP Prefix resource.
      :type public_ip_prefix: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param zones: A list of availability zones denoting the IP allocated for
       the resource needs to come from.
      :type zones: list[str]
      """
  
      _validation = {
          'inbound_nat_rules': {'readonly': True},
          'inbound_nat_pools': {'readonly': True},
          'outbound_rules': {'readonly': True},
          'load_balancing_rules': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'inbound_nat_rules': {'key': 'properties.inboundNatRules', 'type': '[SubResource]'},
          'inbound_nat_pools': {'key': 'properties.inboundNatPools', 'type': '[SubResource]'},
          'outbound_rules': {'key': 'properties.outboundRules', 'type': '[SubResource]'},
          'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[SubResource]'},
          'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
          'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
          'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'PublicIPAddress'},
          'public_ip_prefix': {'key': 'properties.publicIPPrefix', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'zones': {'key': 'zones', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(FrontendIPConfiguration, self).__init__(**kwargs)
          self.inbound_nat_rules = None
          self.inbound_nat_pools = None
          self.outbound_rules = None
          self.load_balancing_rules = None
          self.private_ip_address = kwargs.get('private_ip_address', None)
          self.private_ip_allocation_method = kwargs.get('private_ip_allocation_method', None)
          self.subnet = kwargs.get('subnet', None)
          self.public_ip_address = kwargs.get('public_ip_address', None)
          self.public_ip_prefix = kwargs.get('public_ip_prefix', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.zones = kwargs.get('zones', None)
  
  
  class GatewayRoute(Model):
      """Gateway routing details.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar local_address: The gateway's local address
      :vartype local_address: str
      :ivar network: The route's network prefix
      :vartype network: str
      :ivar next_hop: The route's next hop
      :vartype next_hop: str
      :ivar source_peer: The peer this route was learned from
      :vartype source_peer: str
      :ivar origin: The source this route was learned from
      :vartype origin: str
      :ivar as_path: The route's AS path sequence
      :vartype as_path: str
      :ivar weight: The route's weight
      :vartype weight: int
      """
  
      _validation = {
          'local_address': {'readonly': True},
          'network': {'readonly': True},
          'next_hop': {'readonly': True},
          'source_peer': {'readonly': True},
          'origin': {'readonly': True},
          'as_path': {'readonly': True},
          'weight': {'readonly': True},
      }
  
      _attribute_map = {
          'local_address': {'key': 'localAddress', 'type': 'str'},
          'network': {'key': 'network', 'type': 'str'},
          'next_hop': {'key': 'nextHop', 'type': 'str'},
          'source_peer': {'key': 'sourcePeer', 'type': 'str'},
          'origin': {'key': 'origin', 'type': 'str'},
          'as_path': {'key': 'asPath', 'type': 'str'},
          'weight': {'key': 'weight', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(GatewayRoute, self).__init__(**kwargs)
          self.local_address = None
          self.network = None
          self.next_hop = None
          self.source_peer = None
          self.origin = None
          self.as_path = None
          self.weight = None
  
  
  class GatewayRouteListResult(Model):
      """List of virtual network gateway routes.
  
      :param value: List of gateway routes
      :type value: list[~azure.mgmt.network.v2019_02_01.models.GatewayRoute]
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[GatewayRoute]'},
      }
  
      def __init__(self, **kwargs):
          super(GatewayRouteListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
  
  
  class GetVpnSitesConfigurationRequest(Model):
      """List of Vpn-Sites.
  
      All required parameters must be populated in order to send to Azure.
  
      :param vpn_sites: List of resource-ids of the vpn-sites for which config
       is to be downloaded.
      :type vpn_sites: list[str]
      :param output_blob_sas_url: Required. The sas-url to download the
       configurations for vpn-sites
      :type output_blob_sas_url: str
      """
  
      _validation = {
          'output_blob_sas_url': {'required': True},
      }
  
      _attribute_map = {
          'vpn_sites': {'key': 'vpnSites', 'type': '[str]'},
          'output_blob_sas_url': {'key': 'outputBlobSasUrl', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(GetVpnSitesConfigurationRequest, self).__init__(**kwargs)
          self.vpn_sites = kwargs.get('vpn_sites', None)
          self.output_blob_sas_url = kwargs.get('output_blob_sas_url', None)
  
  
  class HTTPConfiguration(Model):
      """HTTP configuration of the connectivity check.
  
      :param method: HTTP method. Possible values include: 'Get'
      :type method: str or ~azure.mgmt.network.v2019_02_01.models.HTTPMethod
      :param headers: List of HTTP headers.
      :type headers: list[~azure.mgmt.network.v2019_02_01.models.HTTPHeader]
      :param valid_status_codes: Valid status codes.
      :type valid_status_codes: list[int]
      """
  
      _attribute_map = {
          'method': {'key': 'method', 'type': 'str'},
          'headers': {'key': 'headers', 'type': '[HTTPHeader]'},
          'valid_status_codes': {'key': 'validStatusCodes', 'type': '[int]'},
      }
  
      def __init__(self, **kwargs):
          super(HTTPConfiguration, self).__init__(**kwargs)
          self.method = kwargs.get('method', None)
          self.headers = kwargs.get('headers', None)
          self.valid_status_codes = kwargs.get('valid_status_codes', None)
  
  
  class HTTPHeader(Model):
      """Describes the HTTP header.
  
      :param name: The name in HTTP header.
      :type name: str
      :param value: The value in HTTP header.
      :type value: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'value': {'key': 'value', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(HTTPHeader, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.value = kwargs.get('value', None)
  
  
  class HubVirtualNetworkConnection(SubResource):
      """HubVirtualNetworkConnection Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param remote_virtual_network: Reference to the remote virtual network.
      :type remote_virtual_network:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param allow_hub_to_remote_vnet_transit: VirtualHub to RemoteVnet transit
       to enabled or not.
      :type allow_hub_to_remote_vnet_transit: bool
      :param allow_remote_vnet_to_use_hub_vnet_gateways: Allow RemoteVnet to use
       Virtual Hub's gateways.
      :type allow_remote_vnet_to_use_hub_vnet_gateways: bool
      :param enable_internet_security: Enable internet security
      :type enable_internet_security: bool
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'remote_virtual_network': {'key': 'properties.remoteVirtualNetwork', 'type': 'SubResource'},
          'allow_hub_to_remote_vnet_transit': {'key': 'properties.allowHubToRemoteVnetTransit', 'type': 'bool'},
          'allow_remote_vnet_to_use_hub_vnet_gateways': {'key': 'properties.allowRemoteVnetToUseHubVnetGateways', 'type': 'bool'},
          'enable_internet_security': {'key': 'properties.enableInternetSecurity', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(HubVirtualNetworkConnection, self).__init__(**kwargs)
          self.remote_virtual_network = kwargs.get('remote_virtual_network', None)
          self.allow_hub_to_remote_vnet_transit = kwargs.get('allow_hub_to_remote_vnet_transit', None)
          self.allow_remote_vnet_to_use_hub_vnet_gateways = kwargs.get('allow_remote_vnet_to_use_hub_vnet_gateways', None)
          self.enable_internet_security = kwargs.get('enable_internet_security', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class InboundNatPool(SubResource):
      """Inbound NAT pool of the load balancer.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param frontend_ip_configuration: A reference to frontend IP addresses.
      :type frontend_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param protocol: Required. The reference to the transport protocol used by
       the inbound NAT pool. Possible values include: 'Udp', 'Tcp', 'All'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.TransportProtocol
      :param frontend_port_range_start: Required. The first port number in the
       range of external ports that will be used to provide Inbound Nat to NICs
       associated with a load balancer. Acceptable values range between 1 and
       65534.
      :type frontend_port_range_start: int
      :param frontend_port_range_end: Required. The last port number in the
       range of external ports that will be used to provide Inbound Nat to NICs
       associated with a load balancer. Acceptable values range between 1 and
       65535.
      :type frontend_port_range_end: int
      :param backend_port: Required. The port used for internal connections on
       the endpoint. Acceptable values are between 1 and 65535.
      :type backend_port: int
      :param idle_timeout_in_minutes: The timeout for the TCP idle connection.
       The value can be set between 4 and 30 minutes. The default value is 4
       minutes. This element is only used when the protocol is set to TCP.
      :type idle_timeout_in_minutes: int
      :param enable_floating_ip: Configures a virtual machine's endpoint for the
       floating IP capability required to configure a SQL AlwaysOn Availability
       Group. This setting is required when using the SQL AlwaysOn Availability
       Groups in SQL server. This setting can't be changed after you create the
       endpoint.
      :type enable_floating_ip: bool
      :param enable_tcp_reset: Receive bidirectional TCP Reset on TCP flow idle
       timeout or unexpected connection termination. This element is only used
       when the protocol is set to TCP.
      :type enable_tcp_reset: bool
      :param provisioning_state: Gets the provisioning state of the PublicIP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'protocol': {'required': True},
          'frontend_port_range_start': {'required': True},
          'frontend_port_range_end': {'required': True},
          'backend_port': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'frontend_port_range_start': {'key': 'properties.frontendPortRangeStart', 'type': 'int'},
          'frontend_port_range_end': {'key': 'properties.frontendPortRangeEnd', 'type': 'int'},
          'backend_port': {'key': 'properties.backendPort', 'type': 'int'},
          'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
          'enable_floating_ip': {'key': 'properties.enableFloatingIP', 'type': 'bool'},
          'enable_tcp_reset': {'key': 'properties.enableTcpReset', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(InboundNatPool, self).__init__(**kwargs)
          self.frontend_ip_configuration = kwargs.get('frontend_ip_configuration', None)
          self.protocol = kwargs.get('protocol', None)
          self.frontend_port_range_start = kwargs.get('frontend_port_range_start', None)
          self.frontend_port_range_end = kwargs.get('frontend_port_range_end', None)
          self.backend_port = kwargs.get('backend_port', None)
          self.idle_timeout_in_minutes = kwargs.get('idle_timeout_in_minutes', None)
          self.enable_floating_ip = kwargs.get('enable_floating_ip', None)
          self.enable_tcp_reset = kwargs.get('enable_tcp_reset', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class InboundNatRule(SubResource):
      """Inbound NAT rule of the load balancer.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param frontend_ip_configuration: A reference to frontend IP addresses.
      :type frontend_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :ivar backend_ip_configuration: A reference to a private IP address
       defined on a network interface of a VM. Traffic sent to the frontend port
       of each of the frontend IP configurations is forwarded to the backend IP.
      :vartype backend_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceIPConfiguration
      :param protocol: The reference to the transport protocol used by the load
       balancing rule. Possible values include: 'Udp', 'Tcp', 'All'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.TransportProtocol
      :param frontend_port: The port for the external endpoint. Port numbers for
       each rule must be unique within the Load Balancer. Acceptable values range
       from 1 to 65534.
      :type frontend_port: int
      :param backend_port: The port used for the internal endpoint. Acceptable
       values range from 1 to 65535.
      :type backend_port: int
      :param idle_timeout_in_minutes: The timeout for the TCP idle connection.
       The value can be set between 4 and 30 minutes. The default value is 4
       minutes. This element is only used when the protocol is set to TCP.
      :type idle_timeout_in_minutes: int
      :param enable_floating_ip: Configures a virtual machine's endpoint for the
       floating IP capability required to configure a SQL AlwaysOn Availability
       Group. This setting is required when using the SQL AlwaysOn Availability
       Groups in SQL server. This setting can't be changed after you create the
       endpoint.
      :type enable_floating_ip: bool
      :param enable_tcp_reset: Receive bidirectional TCP Reset on TCP flow idle
       timeout or unexpected connection termination. This element is only used
       when the protocol is set to TCP.
      :type enable_tcp_reset: bool
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'backend_ip_configuration': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
          'backend_ip_configuration': {'key': 'properties.backendIPConfiguration', 'type': 'NetworkInterfaceIPConfiguration'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'frontend_port': {'key': 'properties.frontendPort', 'type': 'int'},
          'backend_port': {'key': 'properties.backendPort', 'type': 'int'},
          'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
          'enable_floating_ip': {'key': 'properties.enableFloatingIP', 'type': 'bool'},
          'enable_tcp_reset': {'key': 'properties.enableTcpReset', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(InboundNatRule, self).__init__(**kwargs)
          self.frontend_ip_configuration = kwargs.get('frontend_ip_configuration', None)
          self.backend_ip_configuration = None
          self.protocol = kwargs.get('protocol', None)
          self.frontend_port = kwargs.get('frontend_port', None)
          self.backend_port = kwargs.get('backend_port', None)
          self.idle_timeout_in_minutes = kwargs.get('idle_timeout_in_minutes', None)
          self.enable_floating_ip = kwargs.get('enable_floating_ip', None)
          self.enable_tcp_reset = kwargs.get('enable_tcp_reset', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class InterfaceEndpoint(Resource):
      """Interface endpoint resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param fqdn: A first-party service's FQDN that is mapped to the private IP
       allocated via this interface endpoint.
      :type fqdn: str
      :param endpoint_service: A reference to the service being brought into the
       virtual network.
      :type endpoint_service:
       ~azure.mgmt.network.v2019_02_01.models.EndpointService
      :param subnet: The ID of the subnet from which the private IP will be
       allocated.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.Subnet
      :ivar network_interfaces: Gets an array of references to the network
       interfaces created for this interface endpoint.
      :vartype network_interfaces:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterface]
      :ivar owner: A read-only property that identifies who created this
       interface endpoint.
      :vartype owner: str
      :ivar provisioning_state: The provisioning state of the interface
       endpoint. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'network_interfaces': {'readonly': True},
          'owner': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'fqdn': {'key': 'properties.fqdn', 'type': 'str'},
          'endpoint_service': {'key': 'properties.endpointService', 'type': 'EndpointService'},
          'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
          'network_interfaces': {'key': 'properties.networkInterfaces', 'type': '[NetworkInterface]'},
          'owner': {'key': 'properties.owner', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(InterfaceEndpoint, self).__init__(**kwargs)
          self.fqdn = kwargs.get('fqdn', None)
          self.endpoint_service = kwargs.get('endpoint_service', None)
          self.subnet = kwargs.get('subnet', None)
          self.network_interfaces = None
          self.owner = None
          self.provisioning_state = None
          self.etag = kwargs.get('etag', None)
  
  
  class IPAddressAvailabilityResult(Model):
      """Response for CheckIPAddressAvailability API service call.
  
      :param available: Private IP address availability.
      :type available: bool
      :param available_ip_addresses: Contains other available private IP
       addresses if the asked for address is taken.
      :type available_ip_addresses: list[str]
      """
  
      _attribute_map = {
          'available': {'key': 'available', 'type': 'bool'},
          'available_ip_addresses': {'key': 'availableIPAddresses', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(IPAddressAvailabilityResult, self).__init__(**kwargs)
          self.available = kwargs.get('available', None)
          self.available_ip_addresses = kwargs.get('available_ip_addresses', None)
  
  
  class IPConfiguration(SubResource):
      """IP configuration.
  
      :param id: Resource ID.
      :type id: str
      :param private_ip_address: The private IP address of the IP configuration.
      :type private_ip_address: str
      :param private_ip_allocation_method: The private IP address allocation
       method. Possible values include: 'Static', 'Dynamic'
      :type private_ip_allocation_method: str or
       ~azure.mgmt.network.v2019_02_01.models.IPAllocationMethod
      :param subnet: The reference of the subnet resource.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.Subnet
      :param public_ip_address: The reference of the public IP resource.
      :type public_ip_address:
       ~azure.mgmt.network.v2019_02_01.models.PublicIPAddress
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
          'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
          'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'PublicIPAddress'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(IPConfiguration, self).__init__(**kwargs)
          self.private_ip_address = kwargs.get('private_ip_address', None)
          self.private_ip_allocation_method = kwargs.get('private_ip_allocation_method', None)
          self.subnet = kwargs.get('subnet', None)
          self.public_ip_address = kwargs.get('public_ip_address', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class IPConfigurationProfile(SubResource):
      """IP configuration profile child resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param subnet: The reference of the subnet resource to create a container
       network interface ip configuration.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.Subnet
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :param name: The name of the resource. This name can be used to access the
       resource.
      :type name: str
      :ivar type: Sub Resource type.
      :vartype type: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(IPConfigurationProfile, self).__init__(**kwargs)
          self.subnet = kwargs.get('subnet', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.type = None
          self.etag = kwargs.get('etag', None)
  
  
  class IpsecPolicy(Model):
      """An IPSec Policy configuration for a virtual network gateway connection.
  
      All required parameters must be populated in order to send to Azure.
  
      :param sa_life_time_seconds: Required. The IPSec Security Association
       (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to
       site VPN tunnel.
      :type sa_life_time_seconds: int
      :param sa_data_size_kilobytes: Required. The IPSec Security Association
       (also called Quick Mode or Phase 2 SA) payload size in KB for a site to
       site VPN tunnel.
      :type sa_data_size_kilobytes: int
      :param ipsec_encryption: Required. The IPSec encryption algorithm (IKE
       phase 1). Possible values include: 'None', 'DES', 'DES3', 'AES128',
       'AES192', 'AES256', 'GCMAES128', 'GCMAES192', 'GCMAES256'
      :type ipsec_encryption: str or
       ~azure.mgmt.network.v2019_02_01.models.IpsecEncryption
      :param ipsec_integrity: Required. The IPSec integrity algorithm (IKE phase
       1). Possible values include: 'MD5', 'SHA1', 'SHA256', 'GCMAES128',
       'GCMAES192', 'GCMAES256'
      :type ipsec_integrity: str or
       ~azure.mgmt.network.v2019_02_01.models.IpsecIntegrity
      :param ike_encryption: Required. The IKE encryption algorithm (IKE phase
       2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256',
       'GCMAES256', 'GCMAES128'
      :type ike_encryption: str or
       ~azure.mgmt.network.v2019_02_01.models.IkeEncryption
      :param ike_integrity: Required. The IKE integrity algorithm (IKE phase 2).
       Possible values include: 'MD5', 'SHA1', 'SHA256', 'SHA384', 'GCMAES256',
       'GCMAES128'
      :type ike_integrity: str or
       ~azure.mgmt.network.v2019_02_01.models.IkeIntegrity
      :param dh_group: Required. The DH Group used in IKE Phase 1 for initial
       SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14',
       'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
      :type dh_group: str or ~azure.mgmt.network.v2019_02_01.models.DhGroup
      :param pfs_group: Required. The Pfs Group used in IKE Phase 2 for new
       child SA. Possible values include: 'None', 'PFS1', 'PFS2', 'PFS2048',
       'ECP256', 'ECP384', 'PFS24', 'PFS14', 'PFSMM'
      :type pfs_group: str or ~azure.mgmt.network.v2019_02_01.models.PfsGroup
      """
  
      _validation = {
          'sa_life_time_seconds': {'required': True},
          'sa_data_size_kilobytes': {'required': True},
          'ipsec_encryption': {'required': True},
          'ipsec_integrity': {'required': True},
          'ike_encryption': {'required': True},
          'ike_integrity': {'required': True},
          'dh_group': {'required': True},
          'pfs_group': {'required': True},
      }
  
      _attribute_map = {
          'sa_life_time_seconds': {'key': 'saLifeTimeSeconds', 'type': 'int'},
          'sa_data_size_kilobytes': {'key': 'saDataSizeKilobytes', 'type': 'int'},
          'ipsec_encryption': {'key': 'ipsecEncryption', 'type': 'str'},
          'ipsec_integrity': {'key': 'ipsecIntegrity', 'type': 'str'},
          'ike_encryption': {'key': 'ikeEncryption', 'type': 'str'},
          'ike_integrity': {'key': 'ikeIntegrity', 'type': 'str'},
          'dh_group': {'key': 'dhGroup', 'type': 'str'},
          'pfs_group': {'key': 'pfsGroup', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(IpsecPolicy, self).__init__(**kwargs)
          self.sa_life_time_seconds = kwargs.get('sa_life_time_seconds', None)
          self.sa_data_size_kilobytes = kwargs.get('sa_data_size_kilobytes', None)
          self.ipsec_encryption = kwargs.get('ipsec_encryption', None)
          self.ipsec_integrity = kwargs.get('ipsec_integrity', None)
          self.ike_encryption = kwargs.get('ike_encryption', None)
          self.ike_integrity = kwargs.get('ike_integrity', None)
          self.dh_group = kwargs.get('dh_group', None)
          self.pfs_group = kwargs.get('pfs_group', None)
  
  
  class IpTag(Model):
      """Contains the IpTag associated with the object.
  
      :param ip_tag_type: Gets or sets the ipTag type: Example FirstPartyUsage.
      :type ip_tag_type: str
      :param tag: Gets or sets value of the IpTag associated with the public IP.
       Example SQL, Storage etc
      :type tag: str
      """
  
      _attribute_map = {
          'ip_tag_type': {'key': 'ipTagType', 'type': 'str'},
          'tag': {'key': 'tag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(IpTag, self).__init__(**kwargs)
          self.ip_tag_type = kwargs.get('ip_tag_type', None)
          self.tag = kwargs.get('tag', None)
  
  
  class Ipv6ExpressRouteCircuitPeeringConfig(Model):
      """Contains IPv6 peering config.
  
      :param primary_peer_address_prefix: The primary address prefix.
      :type primary_peer_address_prefix: str
      :param secondary_peer_address_prefix: The secondary address prefix.
      :type secondary_peer_address_prefix: str
      :param microsoft_peering_config: The Microsoft peering configuration.
      :type microsoft_peering_config:
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeeringConfig
      :param route_filter: The reference of the RouteFilter resource.
      :type route_filter: ~azure.mgmt.network.v2019_02_01.models.RouteFilter
      :param state: The state of peering. Possible values are: 'Disabled' and
       'Enabled'. Possible values include: 'Disabled', 'Enabled'
      :type state: str or
       ~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeeringState
      """
  
      _attribute_map = {
          'primary_peer_address_prefix': {'key': 'primaryPeerAddressPrefix', 'type': 'str'},
          'secondary_peer_address_prefix': {'key': 'secondaryPeerAddressPrefix', 'type': 'str'},
          'microsoft_peering_config': {'key': 'microsoftPeeringConfig', 'type': 'ExpressRouteCircuitPeeringConfig'},
          'route_filter': {'key': 'routeFilter', 'type': 'RouteFilter'},
          'state': {'key': 'state', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Ipv6ExpressRouteCircuitPeeringConfig, self).__init__(**kwargs)
          self.primary_peer_address_prefix = kwargs.get('primary_peer_address_prefix', None)
          self.secondary_peer_address_prefix = kwargs.get('secondary_peer_address_prefix', None)
          self.microsoft_peering_config = kwargs.get('microsoft_peering_config', None)
          self.route_filter = kwargs.get('route_filter', None)
          self.state = kwargs.get('state', None)
  
  
  class LoadBalancer(Resource):
      """LoadBalancer resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param sku: The load balancer SKU.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.LoadBalancerSku
      :param frontend_ip_configurations: Object representing the frontend IPs to
       be used for the load balancer
      :type frontend_ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.FrontendIPConfiguration]
      :param backend_address_pools: Collection of backend address pools used by
       a load balancer
      :type backend_address_pools:
       list[~azure.mgmt.network.v2019_02_01.models.BackendAddressPool]
      :param load_balancing_rules: Object collection representing the load
       balancing rules Gets the provisioning
      :type load_balancing_rules:
       list[~azure.mgmt.network.v2019_02_01.models.LoadBalancingRule]
      :param probes: Collection of probe objects used in the load balancer
      :type probes: list[~azure.mgmt.network.v2019_02_01.models.Probe]
      :param inbound_nat_rules: Collection of inbound NAT Rules used by a load
       balancer. Defining inbound NAT rules on your load balancer is mutually
       exclusive with defining an inbound NAT pool. Inbound NAT pools are
       referenced from virtual machine scale sets. NICs that are associated with
       individual virtual machines cannot reference an Inbound NAT pool. They
       have to reference individual inbound NAT rules.
      :type inbound_nat_rules:
       list[~azure.mgmt.network.v2019_02_01.models.InboundNatRule]
      :param inbound_nat_pools: Defines an external port range for inbound NAT
       to a single backend port on NICs associated with a load balancer. Inbound
       NAT rules are created automatically for each NIC associated with the Load
       Balancer using an external port from this range. Defining an Inbound NAT
       pool on your Load Balancer is mutually exclusive with defining inbound Nat
       rules. Inbound NAT pools are referenced from virtual machine scale sets.
       NICs that are associated with individual virtual machines cannot reference
       an inbound NAT pool. They have to reference individual inbound NAT rules.
      :type inbound_nat_pools:
       list[~azure.mgmt.network.v2019_02_01.models.InboundNatPool]
      :param outbound_rules: The outbound rules.
      :type outbound_rules:
       list[~azure.mgmt.network.v2019_02_01.models.OutboundRule]
      :param resource_guid: The resource GUID property of the load balancer
       resource.
      :type resource_guid: str
      :param provisioning_state: Gets the provisioning state of the PublicIP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'sku', 'type': 'LoadBalancerSku'},
          'frontend_ip_configurations': {'key': 'properties.frontendIPConfigurations', 'type': '[FrontendIPConfiguration]'},
          'backend_address_pools': {'key': 'properties.backendAddressPools', 'type': '[BackendAddressPool]'},
          'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[LoadBalancingRule]'},
          'probes': {'key': 'properties.probes', 'type': '[Probe]'},
          'inbound_nat_rules': {'key': 'properties.inboundNatRules', 'type': '[InboundNatRule]'},
          'inbound_nat_pools': {'key': 'properties.inboundNatPools', 'type': '[InboundNatPool]'},
          'outbound_rules': {'key': 'properties.outboundRules', 'type': '[OutboundRule]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(LoadBalancer, self).__init__(**kwargs)
          self.sku = kwargs.get('sku', None)
          self.frontend_ip_configurations = kwargs.get('frontend_ip_configurations', None)
          self.backend_address_pools = kwargs.get('backend_address_pools', None)
          self.load_balancing_rules = kwargs.get('load_balancing_rules', None)
          self.probes = kwargs.get('probes', None)
          self.inbound_nat_rules = kwargs.get('inbound_nat_rules', None)
          self.inbound_nat_pools = kwargs.get('inbound_nat_pools', None)
          self.outbound_rules = kwargs.get('outbound_rules', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
  
  
  class LoadBalancerSku(Model):
      """SKU of a load balancer.
  
      :param name: Name of a load balancer SKU. Possible values include:
       'Basic', 'Standard'
      :type name: str or
       ~azure.mgmt.network.v2019_02_01.models.LoadBalancerSkuName
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(LoadBalancerSku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
  
  
  class LoadBalancingRule(SubResource):
      """A load balancing rule for a load balancer.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param frontend_ip_configuration: A reference to frontend IP addresses.
      :type frontend_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param backend_address_pool: A reference to a pool of DIPs. Inbound
       traffic is randomly load balanced across IPs in the backend IPs.
      :type backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param probe: The reference of the load balancer probe used by the load
       balancing rule.
      :type probe: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param protocol: Required. The reference to the transport protocol used by
       the load balancing rule. Possible values include: 'Udp', 'Tcp', 'All'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.TransportProtocol
      :param load_distribution: The load distribution policy for this rule.
       Possible values are 'Default', 'SourceIP', and 'SourceIPProtocol'.
       Possible values include: 'Default', 'SourceIP', 'SourceIPProtocol'
      :type load_distribution: str or
       ~azure.mgmt.network.v2019_02_01.models.LoadDistribution
      :param frontend_port: Required. The port for the external endpoint. Port
       numbers for each rule must be unique within the Load Balancer. Acceptable
       values are between 0 and 65534. Note that value 0 enables "Any Port"
      :type frontend_port: int
      :param backend_port: The port used for internal connections on the
       endpoint. Acceptable values are between 0 and 65535. Note that value 0
       enables "Any Port"
      :type backend_port: int
      :param idle_timeout_in_minutes: The timeout for the TCP idle connection.
       The value can be set between 4 and 30 minutes. The default value is 4
       minutes. This element is only used when the protocol is set to TCP.
      :type idle_timeout_in_minutes: int
      :param enable_floating_ip: Configures a virtual machine's endpoint for the
       floating IP capability required to configure a SQL AlwaysOn Availability
       Group. This setting is required when using the SQL AlwaysOn Availability
       Groups in SQL server. This setting can't be changed after you create the
       endpoint.
      :type enable_floating_ip: bool
      :param enable_tcp_reset: Receive bidirectional TCP Reset on TCP flow idle
       timeout or unexpected connection termination. This element is only used
       when the protocol is set to TCP.
      :type enable_tcp_reset: bool
      :param disable_outbound_snat: Configures SNAT for the VMs in the backend
       pool to use the publicIP address specified in the frontend of the load
       balancing rule.
      :type disable_outbound_snat: bool
      :param provisioning_state: Gets the provisioning state of the PublicIP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'protocol': {'required': True},
          'frontend_port': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
          'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
          'probe': {'key': 'properties.probe', 'type': 'SubResource'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'load_distribution': {'key': 'properties.loadDistribution', 'type': 'str'},
          'frontend_port': {'key': 'properties.frontendPort', 'type': 'int'},
          'backend_port': {'key': 'properties.backendPort', 'type': 'int'},
          'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
          'enable_floating_ip': {'key': 'properties.enableFloatingIP', 'type': 'bool'},
          'enable_tcp_reset': {'key': 'properties.enableTcpReset', 'type': 'bool'},
          'disable_outbound_snat': {'key': 'properties.disableOutboundSnat', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(LoadBalancingRule, self).__init__(**kwargs)
          self.frontend_ip_configuration = kwargs.get('frontend_ip_configuration', None)
          self.backend_address_pool = kwargs.get('backend_address_pool', None)
          self.probe = kwargs.get('probe', None)
          self.protocol = kwargs.get('protocol', None)
          self.load_distribution = kwargs.get('load_distribution', None)
          self.frontend_port = kwargs.get('frontend_port', None)
          self.backend_port = kwargs.get('backend_port', None)
          self.idle_timeout_in_minutes = kwargs.get('idle_timeout_in_minutes', None)
          self.enable_floating_ip = kwargs.get('enable_floating_ip', None)
          self.enable_tcp_reset = kwargs.get('enable_tcp_reset', None)
          self.disable_outbound_snat = kwargs.get('disable_outbound_snat', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class LocalNetworkGateway(Resource):
      """A common class for general resource information.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param local_network_address_space: Local network site address space.
      :type local_network_address_space:
       ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param gateway_ip_address: IP address of local network gateway.
      :type gateway_ip_address: str
      :param bgp_settings: Local network gateway's BGP speaker settings.
      :type bgp_settings: ~azure.mgmt.network.v2019_02_01.models.BgpSettings
      :param resource_guid: The resource GUID property of the
       LocalNetworkGateway resource.
      :type resource_guid: str
      :ivar provisioning_state: The provisioning state of the
       LocalNetworkGateway resource. Possible values are: 'Updating', 'Deleting',
       and 'Failed'.
      :vartype provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'local_network_address_space': {'key': 'properties.localNetworkAddressSpace', 'type': 'AddressSpace'},
          'gateway_ip_address': {'key': 'properties.gatewayIpAddress', 'type': 'str'},
          'bgp_settings': {'key': 'properties.bgpSettings', 'type': 'BgpSettings'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(LocalNetworkGateway, self).__init__(**kwargs)
          self.local_network_address_space = kwargs.get('local_network_address_space', None)
          self.gateway_ip_address = kwargs.get('gateway_ip_address', None)
          self.bgp_settings = kwargs.get('bgp_settings', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = None
          self.etag = kwargs.get('etag', None)
  
  
  class LogSpecification(Model):
      """Description of logging specification.
  
      :param name: The name of the specification.
      :type name: str
      :param display_name: The display name of the specification.
      :type display_name: str
      :param blob_duration: Duration of the blob.
      :type blob_duration: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'display_name': {'key': 'displayName', 'type': 'str'},
          'blob_duration': {'key': 'blobDuration', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(LogSpecification, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.display_name = kwargs.get('display_name', None)
          self.blob_duration = kwargs.get('blob_duration', None)
  
  
  class ManagedServiceIdentity(Model):
      """Identity for the resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar principal_id: The principal id of the system assigned identity. This
       property will only be provided for a system assigned identity.
      :vartype principal_id: str
      :ivar tenant_id: The tenant id of the system assigned identity. This
       property will only be provided for a system assigned identity.
      :vartype tenant_id: str
      :param type: The type of identity used for the resource. The type
       'SystemAssigned, UserAssigned' includes both an implicitly created
       identity and a set of user assigned identities. The type 'None' will
       remove any identities from the virtual machine. Possible values include:
       'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None'
      :type type: str or
       ~azure.mgmt.network.v2019_02_01.models.ResourceIdentityType
      :param user_assigned_identities: The list of user identities associated
       with resource. The user identity dictionary key references will be ARM
       resource ids in the form:
       '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
      :type user_assigned_identities: dict[str,
       ~azure.mgmt.network.v2019_02_01.models.ManagedServiceIdentityUserAssignedIdentitiesValue]
      """
  
      _validation = {
          'principal_id': {'readonly': True},
          'tenant_id': {'readonly': True},
      }
  
      _attribute_map = {
          'principal_id': {'key': 'principalId', 'type': 'str'},
          'tenant_id': {'key': 'tenantId', 'type': 'str'},
          'type': {'key': 'type', 'type': 'ResourceIdentityType'},
          'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{ManagedServiceIdentityUserAssignedIdentitiesValue}'},
      }
  
      def __init__(self, **kwargs):
          super(ManagedServiceIdentity, self).__init__(**kwargs)
          self.principal_id = None
          self.tenant_id = None
          self.type = kwargs.get('type', None)
          self.user_assigned_identities = kwargs.get('user_assigned_identities', None)
  
  
  class ManagedServiceIdentityUserAssignedIdentitiesValue(Model):
      """ManagedServiceIdentityUserAssignedIdentitiesValue.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar principal_id: The principal id of user assigned identity.
      :vartype principal_id: str
      :ivar client_id: The client id of user assigned identity.
      :vartype client_id: str
      """
  
      _validation = {
          'principal_id': {'readonly': True},
          'client_id': {'readonly': True},
      }
  
      _attribute_map = {
          'principal_id': {'key': 'principalId', 'type': 'str'},
          'client_id': {'key': 'clientId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ManagedServiceIdentityUserAssignedIdentitiesValue, self).__init__(**kwargs)
          self.principal_id = None
          self.client_id = None
  
  
  class MatchCondition(Model):
      """Define match conditions.
  
      All required parameters must be populated in order to send to Azure.
  
      :param match_variables: Required. List of match variables
      :type match_variables:
       list[~azure.mgmt.network.v2019_02_01.models.MatchVariable]
      :param operator: Required. Describes operator to be matched. Possible
       values include: 'IPMatch', 'Equal', 'Contains', 'LessThan', 'GreaterThan',
       'LessThanOrEqual', 'GreaterThanOrEqual', 'BeginsWith', 'EndsWith', 'Regex'
      :type operator: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallOperator
      :param negation_conditon: Describes if this is negate condition or not
      :type negation_conditon: bool
      :param match_values: Required. Match value
      :type match_values: list[str]
      :param transforms: List of transforms
      :type transforms: list[str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallTransform]
      """
  
      _validation = {
          'match_variables': {'required': True},
          'operator': {'required': True},
          'match_values': {'required': True},
      }
  
      _attribute_map = {
          'match_variables': {'key': 'matchVariables', 'type': '[MatchVariable]'},
          'operator': {'key': 'operator', 'type': 'str'},
          'negation_conditon': {'key': 'negationConditon', 'type': 'bool'},
          'match_values': {'key': 'matchValues', 'type': '[str]'},
          'transforms': {'key': 'transforms', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(MatchCondition, self).__init__(**kwargs)
          self.match_variables = kwargs.get('match_variables', None)
          self.operator = kwargs.get('operator', None)
          self.negation_conditon = kwargs.get('negation_conditon', None)
          self.match_values = kwargs.get('match_values', None)
          self.transforms = kwargs.get('transforms', None)
  
  
  class MatchedRule(Model):
      """Matched rule.
  
      :param rule_name: Name of the matched network security rule.
      :type rule_name: str
      :param action: The network traffic is allowed or denied. Possible values
       are 'Allow' and 'Deny'.
      :type action: str
      """
  
      _attribute_map = {
          'rule_name': {'key': 'ruleName', 'type': 'str'},
          'action': {'key': 'action', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(MatchedRule, self).__init__(**kwargs)
          self.rule_name = kwargs.get('rule_name', None)
          self.action = kwargs.get('action', None)
  
  
  class MatchVariable(Model):
      """Define match variables.
  
      All required parameters must be populated in order to send to Azure.
  
      :param variable_name: Required. Match Variable. Possible values include:
       'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestUri',
       'RequestHeaders', 'RequestBody', 'RequestCookies'
      :type variable_name: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallMatchVariable
      :param selector: Describes field of the matchVariable collection
      :type selector: str
      """
  
      _validation = {
          'variable_name': {'required': True},
      }
  
      _attribute_map = {
          'variable_name': {'key': 'variableName', 'type': 'str'},
          'selector': {'key': 'selector', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(MatchVariable, self).__init__(**kwargs)
          self.variable_name = kwargs.get('variable_name', None)
          self.selector = kwargs.get('selector', None)
  
  
  class MetricSpecification(Model):
      """Description of metrics specification.
  
      :param name: The name of the metric.
      :type name: str
      :param display_name: The display name of the metric.
      :type display_name: str
      :param display_description: The description of the metric.
      :type display_description: str
      :param unit: Units the metric to be displayed in.
      :type unit: str
      :param aggregation_type: The aggregation type.
      :type aggregation_type: str
      :param availabilities: List of availability.
      :type availabilities:
       list[~azure.mgmt.network.v2019_02_01.models.Availability]
      :param enable_regional_mdm_account: Whether regional MDM account enabled.
      :type enable_regional_mdm_account: bool
      :param fill_gap_with_zero: Whether gaps would be filled with zeros.
      :type fill_gap_with_zero: bool
      :param metric_filter_pattern: Pattern for the filter of the metric.
      :type metric_filter_pattern: str
      :param dimensions: List of dimensions.
      :type dimensions: list[~azure.mgmt.network.v2019_02_01.models.Dimension]
      :param is_internal: Whether the metric is internal.
      :type is_internal: bool
      :param source_mdm_account: The source MDM account.
      :type source_mdm_account: str
      :param source_mdm_namespace: The source MDM namespace.
      :type source_mdm_namespace: str
      :param resource_id_dimension_name_override: The resource Id dimension name
       override.
      :type resource_id_dimension_name_override: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'display_name': {'key': 'displayName', 'type': 'str'},
          'display_description': {'key': 'displayDescription', 'type': 'str'},
          'unit': {'key': 'unit', 'type': 'str'},
          'aggregation_type': {'key': 'aggregationType', 'type': 'str'},
          'availabilities': {'key': 'availabilities', 'type': '[Availability]'},
          'enable_regional_mdm_account': {'key': 'enableRegionalMdmAccount', 'type': 'bool'},
          'fill_gap_with_zero': {'key': 'fillGapWithZero', 'type': 'bool'},
          'metric_filter_pattern': {'key': 'metricFilterPattern', 'type': 'str'},
          'dimensions': {'key': 'dimensions', 'type': '[Dimension]'},
          'is_internal': {'key': 'isInternal', 'type': 'bool'},
          'source_mdm_account': {'key': 'sourceMdmAccount', 'type': 'str'},
          'source_mdm_namespace': {'key': 'sourceMdmNamespace', 'type': 'str'},
          'resource_id_dimension_name_override': {'key': 'resourceIdDimensionNameOverride', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(MetricSpecification, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.display_name = kwargs.get('display_name', None)
          self.display_description = kwargs.get('display_description', None)
          self.unit = kwargs.get('unit', None)
          self.aggregation_type = kwargs.get('aggregation_type', None)
          self.availabilities = kwargs.get('availabilities', None)
          self.enable_regional_mdm_account = kwargs.get('enable_regional_mdm_account', None)
          self.fill_gap_with_zero = kwargs.get('fill_gap_with_zero', None)
          self.metric_filter_pattern = kwargs.get('metric_filter_pattern', None)
          self.dimensions = kwargs.get('dimensions', None)
          self.is_internal = kwargs.get('is_internal', None)
          self.source_mdm_account = kwargs.get('source_mdm_account', None)
          self.source_mdm_namespace = kwargs.get('source_mdm_namespace', None)
          self.resource_id_dimension_name_override = kwargs.get('resource_id_dimension_name_override', None)
  
  
  class NatGateway(Resource):
      """Nat Gateway resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param sku: The nat gateway SKU.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.NatGatewaySku
      :param idle_timeout_in_minutes: The idle timeout of the nat gateway.
      :type idle_timeout_in_minutes: int
      :param public_ip_addresses: An array of public ip addresses associated
       with the nat gateway resource.
      :type public_ip_addresses:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param public_ip_prefixes: An array of public ip prefixes associated with
       the nat gateway resource.
      :type public_ip_prefixes:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar subnets: An array of references to the subnets using this nat
       gateway resource.
      :vartype subnets: list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param resource_guid: The resource GUID property of the nat gateway
       resource.
      :type resource_guid: str
      :param provisioning_state: The provisioning state of the NatGateway
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'subnets': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'sku', 'type': 'NatGatewaySku'},
          'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
          'public_ip_addresses': {'key': 'properties.publicIpAddresses', 'type': '[SubResource]'},
          'public_ip_prefixes': {'key': 'properties.publicIpPrefixes', 'type': '[SubResource]'},
          'subnets': {'key': 'properties.subnets', 'type': '[SubResource]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NatGateway, self).__init__(**kwargs)
          self.sku = kwargs.get('sku', None)
          self.idle_timeout_in_minutes = kwargs.get('idle_timeout_in_minutes', None)
          self.public_ip_addresses = kwargs.get('public_ip_addresses', None)
          self.public_ip_prefixes = kwargs.get('public_ip_prefixes', None)
          self.subnets = None
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
  
  
  class NatGatewaySku(Model):
      """SKU of nat gateway.
  
      :param name: Name of Nat Gateway SKU. Possible values include: 'Standard'
      :type name: str or
       ~azure.mgmt.network.v2019_02_01.models.NatGatewaySkuName
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NatGatewaySku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
  
  
  class NetworkConfigurationDiagnosticParameters(Model):
      """Parameters to get network configuration diagnostic.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The ID of the target resource to
       perform network configuration diagnostic. Valid options are VM,
       NetworkInterface, VMSS/NetworkInterface and Application Gateway.
      :type target_resource_id: str
      :param verbosity_level: Verbosity level. Accepted values are 'Normal',
       'Minimum', 'Full'. Possible values include: 'Normal', 'Minimum', 'Full'
      :type verbosity_level: str or
       ~azure.mgmt.network.v2019_02_01.models.VerbosityLevel
      :param profiles: Required. List of network configuration diagnostic
       profiles.
      :type profiles:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkConfigurationDiagnosticProfile]
      """
  
      _validation = {
          'target_resource_id': {'required': True},
          'profiles': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
          'verbosity_level': {'key': 'verbosityLevel', 'type': 'str'},
          'profiles': {'key': 'profiles', 'type': '[NetworkConfigurationDiagnosticProfile]'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkConfigurationDiagnosticParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
          self.verbosity_level = kwargs.get('verbosity_level', None)
          self.profiles = kwargs.get('profiles', None)
  
  
  class NetworkConfigurationDiagnosticProfile(Model):
      """Parameters to compare with network configuration.
  
      All required parameters must be populated in order to send to Azure.
  
      :param direction: Required. The direction of the traffic. Possible values
       include: 'Inbound', 'Outbound'
      :type direction: str or ~azure.mgmt.network.v2019_02_01.models.Direction
      :param protocol: Required. Protocol to be verified on. Accepted values are
       '*', TCP, UDP.
      :type protocol: str
      :param source: Required. Traffic source. Accepted values are '*', IP
       Address/CIDR, Service Tag.
      :type source: str
      :param destination: Required. Traffic destination. Accepted values are:
       '*', IP Address/CIDR, Service Tag.
      :type destination: str
      :param destination_port: Required. Traffic destination port. Accepted
       values are '*', port (for example, 3389) and port range (for example,
       80-100).
      :type destination_port: str
      """
  
      _validation = {
          'direction': {'required': True},
          'protocol': {'required': True},
          'source': {'required': True},
          'destination': {'required': True},
          'destination_port': {'required': True},
      }
  
      _attribute_map = {
          'direction': {'key': 'direction', 'type': 'str'},
          'protocol': {'key': 'protocol', 'type': 'str'},
          'source': {'key': 'source', 'type': 'str'},
          'destination': {'key': 'destination', 'type': 'str'},
          'destination_port': {'key': 'destinationPort', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkConfigurationDiagnosticProfile, self).__init__(**kwargs)
          self.direction = kwargs.get('direction', None)
          self.protocol = kwargs.get('protocol', None)
          self.source = kwargs.get('source', None)
          self.destination = kwargs.get('destination', None)
          self.destination_port = kwargs.get('destination_port', None)
  
  
  class NetworkConfigurationDiagnosticResponse(Model):
      """Results of network configuration diagnostic on the target resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar results: List of network configuration diagnostic results.
      :vartype results:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkConfigurationDiagnosticResult]
      """
  
      _validation = {
          'results': {'readonly': True},
      }
  
      _attribute_map = {
          'results': {'key': 'results', 'type': '[NetworkConfigurationDiagnosticResult]'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkConfigurationDiagnosticResponse, self).__init__(**kwargs)
          self.results = None
  
  
  class NetworkConfigurationDiagnosticResult(Model):
      """Network configuration diagnostic result corresponded to provided traffic
      query.
  
      :param profile: Network configuration diagnostic profile.
      :type profile:
       ~azure.mgmt.network.v2019_02_01.models.NetworkConfigurationDiagnosticProfile
      :param network_security_group_result: Network security group result.
      :type network_security_group_result:
       ~azure.mgmt.network.v2019_02_01.models.NetworkSecurityGroupResult
      """
  
      _attribute_map = {
          'profile': {'key': 'profile', 'type': 'NetworkConfigurationDiagnosticProfile'},
          'network_security_group_result': {'key': 'networkSecurityGroupResult', 'type': 'NetworkSecurityGroupResult'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkConfigurationDiagnosticResult, self).__init__(**kwargs)
          self.profile = kwargs.get('profile', None)
          self.network_security_group_result = kwargs.get('network_security_group_result', None)
  
  
  class NetworkIntentPolicy(Resource):
      """Network Intent Policy resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkIntentPolicy, self).__init__(**kwargs)
          self.etag = kwargs.get('etag', None)
  
  
  class NetworkIntentPolicyConfiguration(Model):
      """Details of NetworkIntentPolicyConfiguration for
      PrepareNetworkPoliciesRequest.
  
      :param network_intent_policy_name: The name of the Network Intent Policy
       for storing in target subscription.
      :type network_intent_policy_name: str
      :param source_network_intent_policy: Source network intent policy.
      :type source_network_intent_policy:
       ~azure.mgmt.network.v2019_02_01.models.NetworkIntentPolicy
      """
  
      _attribute_map = {
          'network_intent_policy_name': {'key': 'networkIntentPolicyName', 'type': 'str'},
          'source_network_intent_policy': {'key': 'sourceNetworkIntentPolicy', 'type': 'NetworkIntentPolicy'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkIntentPolicyConfiguration, self).__init__(**kwargs)
          self.network_intent_policy_name = kwargs.get('network_intent_policy_name', None)
          self.source_network_intent_policy = kwargs.get('source_network_intent_policy', None)
  
  
  class NetworkInterface(Resource):
      """A network interface in a resource group.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar virtual_machine: The reference of a virtual machine.
      :vartype virtual_machine:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param network_security_group: The reference of the NetworkSecurityGroup
       resource.
      :type network_security_group:
       ~azure.mgmt.network.v2019_02_01.models.NetworkSecurityGroup
      :ivar interface_endpoint: A reference to the interface endpoint to which
       the network interface is linked.
      :vartype interface_endpoint:
       ~azure.mgmt.network.v2019_02_01.models.InterfaceEndpoint
      :param ip_configurations: A list of IPConfigurations of the network
       interface.
      :type ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceIPConfiguration]
      :param tap_configurations: A list of TapConfigurations of the network
       interface.
      :type tap_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceTapConfiguration]
      :param dns_settings: The DNS settings in network interface.
      :type dns_settings:
       ~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceDnsSettings
      :param mac_address: The MAC address of the network interface.
      :type mac_address: str
      :param primary: Gets whether this is a primary network interface on a
       virtual machine.
      :type primary: bool
      :param enable_accelerated_networking: If the network interface is
       accelerated networking enabled.
      :type enable_accelerated_networking: bool
      :param enable_ip_forwarding: Indicates whether IP forwarding is enabled on
       this network interface.
      :type enable_ip_forwarding: bool
      :ivar hosted_workloads: A list of references to linked BareMetal resources
      :vartype hosted_workloads: list[str]
      :param resource_guid: The resource GUID property of the network interface
       resource.
      :type resource_guid: str
      :param provisioning_state: The provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'virtual_machine': {'readonly': True},
          'interface_endpoint': {'readonly': True},
          'hosted_workloads': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'virtual_machine': {'key': 'properties.virtualMachine', 'type': 'SubResource'},
          'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'NetworkSecurityGroup'},
          'interface_endpoint': {'key': 'properties.interfaceEndpoint', 'type': 'InterfaceEndpoint'},
          'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[NetworkInterfaceIPConfiguration]'},
          'tap_configurations': {'key': 'properties.tapConfigurations', 'type': '[NetworkInterfaceTapConfiguration]'},
          'dns_settings': {'key': 'properties.dnsSettings', 'type': 'NetworkInterfaceDnsSettings'},
          'mac_address': {'key': 'properties.macAddress', 'type': 'str'},
          'primary': {'key': 'properties.primary', 'type': 'bool'},
          'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
          'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
          'hosted_workloads': {'key': 'properties.hostedWorkloads', 'type': '[str]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkInterface, self).__init__(**kwargs)
          self.virtual_machine = None
          self.network_security_group = kwargs.get('network_security_group', None)
          self.interface_endpoint = None
          self.ip_configurations = kwargs.get('ip_configurations', None)
          self.tap_configurations = kwargs.get('tap_configurations', None)
          self.dns_settings = kwargs.get('dns_settings', None)
          self.mac_address = kwargs.get('mac_address', None)
          self.primary = kwargs.get('primary', None)
          self.enable_accelerated_networking = kwargs.get('enable_accelerated_networking', None)
          self.enable_ip_forwarding = kwargs.get('enable_ip_forwarding', None)
          self.hosted_workloads = None
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
  
  
  class NetworkInterfaceAssociation(Model):
      """Network interface and its custom security rules.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar id: Network interface ID.
      :vartype id: str
      :param security_rules: Collection of custom security rules.
      :type security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SecurityRule]
      """
  
      _validation = {
          'id': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'security_rules': {'key': 'securityRules', 'type': '[SecurityRule]'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkInterfaceAssociation, self).__init__(**kwargs)
          self.id = None
          self.security_rules = kwargs.get('security_rules', None)
  
  
  class NetworkInterfaceDnsSettings(Model):
      """DNS settings of a network interface.
  
      :param dns_servers: List of DNS servers IP addresses. Use
       'AzureProvidedDNS' to switch to azure provided DNS resolution.
       'AzureProvidedDNS' value cannot be combined with other IPs, it must be the
       only value in dnsServers collection.
      :type dns_servers: list[str]
      :param applied_dns_servers: If the VM that uses this NIC is part of an
       Availability Set, then this list will have the union of all DNS servers
       from all NICs that are part of the Availability Set. This property is what
       is configured on each of those VMs.
      :type applied_dns_servers: list[str]
      :param internal_dns_name_label: Relative DNS name for this NIC used for
       internal communications between VMs in the same virtual network.
      :type internal_dns_name_label: str
      :param internal_fqdn: Fully qualified DNS name supporting internal
       communications between VMs in the same virtual network.
      :type internal_fqdn: str
      :param internal_domain_name_suffix: Even if internalDnsNameLabel is not
       specified, a DNS entry is created for the primary NIC of the VM. This DNS
       name can be constructed by concatenating the VM name with the value of
       internalDomainNameSuffix.
      :type internal_domain_name_suffix: str
      """
  
      _attribute_map = {
          'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
          'applied_dns_servers': {'key': 'appliedDnsServers', 'type': '[str]'},
          'internal_dns_name_label': {'key': 'internalDnsNameLabel', 'type': 'str'},
          'internal_fqdn': {'key': 'internalFqdn', 'type': 'str'},
          'internal_domain_name_suffix': {'key': 'internalDomainNameSuffix', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkInterfaceDnsSettings, self).__init__(**kwargs)
          self.dns_servers = kwargs.get('dns_servers', None)
          self.applied_dns_servers = kwargs.get('applied_dns_servers', None)
          self.internal_dns_name_label = kwargs.get('internal_dns_name_label', None)
          self.internal_fqdn = kwargs.get('internal_fqdn', None)
          self.internal_domain_name_suffix = kwargs.get('internal_domain_name_suffix', None)
  
  
  class NetworkInterfaceIPConfiguration(SubResource):
      """IPConfiguration in a network interface.
  
      :param id: Resource ID.
      :type id: str
      :param virtual_network_taps: The reference to Virtual Network Taps.
      :type virtual_network_taps:
       list[~azure.mgmt.network.v2019_02_01.models.VirtualNetworkTap]
      :param application_gateway_backend_address_pools: The reference of
       ApplicationGatewayBackendAddressPool resource.
      :type application_gateway_backend_address_pools:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGatewayBackendAddressPool]
      :param load_balancer_backend_address_pools: The reference of
       LoadBalancerBackendAddressPool resource.
      :type load_balancer_backend_address_pools:
       list[~azure.mgmt.network.v2019_02_01.models.BackendAddressPool]
      :param load_balancer_inbound_nat_rules: A list of references of
       LoadBalancerInboundNatRules.
      :type load_balancer_inbound_nat_rules:
       list[~azure.mgmt.network.v2019_02_01.models.InboundNatRule]
      :param private_ip_address: Private IP address of the IP configuration.
      :type private_ip_address: str
      :param private_ip_allocation_method: The private IP address allocation
       method. Possible values include: 'Static', 'Dynamic'
      :type private_ip_allocation_method: str or
       ~azure.mgmt.network.v2019_02_01.models.IPAllocationMethod
      :param private_ip_address_version: Available from Api-Version 2016-03-30
       onwards, it represents whether the specific ipconfiguration is IPv4 or
       IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
      :type private_ip_address_version: str or
       ~azure.mgmt.network.v2019_02_01.models.IPVersion
      :param subnet: Subnet bound to the IP configuration.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.Subnet
      :param primary: Gets whether this is a primary customer address on the
       network interface.
      :type primary: bool
      :param public_ip_address: Public IP address bound to the IP configuration.
      :type public_ip_address:
       ~azure.mgmt.network.v2019_02_01.models.PublicIPAddress
      :param application_security_groups: Application security groups in which
       the IP configuration is included.
      :type application_security_groups:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationSecurityGroup]
      :param provisioning_state: The provisioning state of the network interface
       IP configuration. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'virtual_network_taps': {'key': 'properties.virtualNetworkTaps', 'type': '[VirtualNetworkTap]'},
          'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[ApplicationGatewayBackendAddressPool]'},
          'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[BackendAddressPool]'},
          'load_balancer_inbound_nat_rules': {'key': 'properties.loadBalancerInboundNatRules', 'type': '[InboundNatRule]'},
          'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
          'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
          'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
          'primary': {'key': 'properties.primary', 'type': 'bool'},
          'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'PublicIPAddress'},
          'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[ApplicationSecurityGroup]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkInterfaceIPConfiguration, self).__init__(**kwargs)
          self.virtual_network_taps = kwargs.get('virtual_network_taps', None)
          self.application_gateway_backend_address_pools = kwargs.get('application_gateway_backend_address_pools', None)
          self.load_balancer_backend_address_pools = kwargs.get('load_balancer_backend_address_pools', None)
          self.load_balancer_inbound_nat_rules = kwargs.get('load_balancer_inbound_nat_rules', None)
          self.private_ip_address = kwargs.get('private_ip_address', None)
          self.private_ip_allocation_method = kwargs.get('private_ip_allocation_method', None)
          self.private_ip_address_version = kwargs.get('private_ip_address_version', None)
          self.subnet = kwargs.get('subnet', None)
          self.primary = kwargs.get('primary', None)
          self.public_ip_address = kwargs.get('public_ip_address', None)
          self.application_security_groups = kwargs.get('application_security_groups', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class NetworkInterfaceTapConfiguration(SubResource):
      """Tap configuration in a Network Interface.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param virtual_network_tap: The reference of the Virtual Network Tap
       resource.
      :type virtual_network_tap:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkTap
      :ivar provisioning_state: The provisioning state of the network interface
       tap configuration. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :ivar type: Sub Resource type.
      :vartype type: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'virtual_network_tap': {'key': 'properties.virtualNetworkTap', 'type': 'VirtualNetworkTap'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkInterfaceTapConfiguration, self).__init__(**kwargs)
          self.virtual_network_tap = kwargs.get('virtual_network_tap', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
          self.type = None
  
  
  class NetworkProfile(Resource):
      """Network profile resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param container_network_interfaces: List of child container network
       interfaces.
      :type container_network_interfaces:
       list[~azure.mgmt.network.v2019_02_01.models.ContainerNetworkInterface]
      :param container_network_interface_configurations: List of chid container
       network interface configurations.
      :type container_network_interface_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.ContainerNetworkInterfaceConfiguration]
      :ivar resource_guid: The resource GUID property of the network interface
       resource.
      :vartype resource_guid: str
      :ivar provisioning_state: The provisioning state of the resource.
      :vartype provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'resource_guid': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'container_network_interfaces': {'key': 'properties.containerNetworkInterfaces', 'type': '[ContainerNetworkInterface]'},
          'container_network_interface_configurations': {'key': 'properties.containerNetworkInterfaceConfigurations', 'type': '[ContainerNetworkInterfaceConfiguration]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkProfile, self).__init__(**kwargs)
          self.container_network_interfaces = kwargs.get('container_network_interfaces', None)
          self.container_network_interface_configurations = kwargs.get('container_network_interface_configurations', None)
          self.resource_guid = None
          self.provisioning_state = None
          self.etag = kwargs.get('etag', None)
  
  
  class NetworkSecurityGroup(Resource):
      """NetworkSecurityGroup resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param security_rules: A collection of security rules of the network
       security group.
      :type security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SecurityRule]
      :param default_security_rules: The default security rules of network
       security group.
      :type default_security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SecurityRule]
      :ivar network_interfaces: A collection of references to network
       interfaces.
      :vartype network_interfaces:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterface]
      :ivar subnets: A collection of references to subnets.
      :vartype subnets: list[~azure.mgmt.network.v2019_02_01.models.Subnet]
      :param resource_guid: The resource GUID property of the network security
       group resource.
      :type resource_guid: str
      :param provisioning_state: The provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'network_interfaces': {'readonly': True},
          'subnets': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'security_rules': {'key': 'properties.securityRules', 'type': '[SecurityRule]'},
          'default_security_rules': {'key': 'properties.defaultSecurityRules', 'type': '[SecurityRule]'},
          'network_interfaces': {'key': 'properties.networkInterfaces', 'type': '[NetworkInterface]'},
          'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkSecurityGroup, self).__init__(**kwargs)
          self.security_rules = kwargs.get('security_rules', None)
          self.default_security_rules = kwargs.get('default_security_rules', None)
          self.network_interfaces = None
          self.subnets = None
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
  
  
  class NetworkSecurityGroupResult(Model):
      """Network configuration diagnostic result corresponded provided traffic
      query.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param security_rule_access_result: The network traffic is allowed or
       denied. Possible values include: 'Allow', 'Deny'
      :type security_rule_access_result: str or
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleAccess
      :ivar evaluated_network_security_groups: List of results network security
       groups diagnostic.
      :vartype evaluated_network_security_groups:
       list[~azure.mgmt.network.v2019_02_01.models.EvaluatedNetworkSecurityGroup]
      """
  
      _validation = {
          'evaluated_network_security_groups': {'readonly': True},
      }
  
      _attribute_map = {
          'security_rule_access_result': {'key': 'securityRuleAccessResult', 'type': 'str'},
          'evaluated_network_security_groups': {'key': 'evaluatedNetworkSecurityGroups', 'type': '[EvaluatedNetworkSecurityGroup]'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkSecurityGroupResult, self).__init__(**kwargs)
          self.security_rule_access_result = kwargs.get('security_rule_access_result', None)
          self.evaluated_network_security_groups = None
  
  
  class NetworkSecurityRulesEvaluationResult(Model):
      """Network security rules evaluation result.
  
      :param name: Name of the network security rule.
      :type name: str
      :param protocol_matched: Value indicating whether protocol is matched.
      :type protocol_matched: bool
      :param source_matched: Value indicating whether source is matched.
      :type source_matched: bool
      :param source_port_matched: Value indicating whether source port is
       matched.
      :type source_port_matched: bool
      :param destination_matched: Value indicating whether destination is
       matched.
      :type destination_matched: bool
      :param destination_port_matched: Value indicating whether destination port
       is matched.
      :type destination_port_matched: bool
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'protocol_matched': {'key': 'protocolMatched', 'type': 'bool'},
          'source_matched': {'key': 'sourceMatched', 'type': 'bool'},
          'source_port_matched': {'key': 'sourcePortMatched', 'type': 'bool'},
          'destination_matched': {'key': 'destinationMatched', 'type': 'bool'},
          'destination_port_matched': {'key': 'destinationPortMatched', 'type': 'bool'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkSecurityRulesEvaluationResult, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.protocol_matched = kwargs.get('protocol_matched', None)
          self.source_matched = kwargs.get('source_matched', None)
          self.source_port_matched = kwargs.get('source_port_matched', None)
          self.destination_matched = kwargs.get('destination_matched', None)
          self.destination_port_matched = kwargs.get('destination_port_matched', None)
  
  
  class NetworkWatcher(Resource):
      """Network watcher in a resource group.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'etag': {'key': 'etag', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NetworkWatcher, self).__init__(**kwargs)
          self.etag = kwargs.get('etag', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
  
  
  class NextHopParameters(Model):
      """Parameters that define the source and destination endpoint.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The resource identifier of the target
       resource against which the action is to be performed.
      :type target_resource_id: str
      :param source_ip_address: Required. The source IP address.
      :type source_ip_address: str
      :param destination_ip_address: Required. The destination IP address.
      :type destination_ip_address: str
      :param target_nic_resource_id: The NIC ID. (If VM has multiple NICs and IP
       forwarding is enabled on any of the nics, then this parameter must be
       specified. Otherwise optional).
      :type target_nic_resource_id: str
      """
  
      _validation = {
          'target_resource_id': {'required': True},
          'source_ip_address': {'required': True},
          'destination_ip_address': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
          'source_ip_address': {'key': 'sourceIPAddress', 'type': 'str'},
          'destination_ip_address': {'key': 'destinationIPAddress', 'type': 'str'},
          'target_nic_resource_id': {'key': 'targetNicResourceId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NextHopParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
          self.source_ip_address = kwargs.get('source_ip_address', None)
          self.destination_ip_address = kwargs.get('destination_ip_address', None)
          self.target_nic_resource_id = kwargs.get('target_nic_resource_id', None)
  
  
  class NextHopResult(Model):
      """The information about next hop from the specified VM.
  
      :param next_hop_type: Next hop type. Possible values include: 'Internet',
       'VirtualAppliance', 'VirtualNetworkGateway', 'VnetLocal',
       'HyperNetGateway', 'None'
      :type next_hop_type: str or
       ~azure.mgmt.network.v2019_02_01.models.NextHopType
      :param next_hop_ip_address: Next hop IP Address
      :type next_hop_ip_address: str
      :param route_table_id: The resource identifier for the route table
       associated with the route being returned. If the route being returned does
       not correspond to any user created routes then this field will be the
       string 'System Route'.
      :type route_table_id: str
      """
  
      _attribute_map = {
          'next_hop_type': {'key': 'nextHopType', 'type': 'str'},
          'next_hop_ip_address': {'key': 'nextHopIpAddress', 'type': 'str'},
          'route_table_id': {'key': 'routeTableId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(NextHopResult, self).__init__(**kwargs)
          self.next_hop_type = kwargs.get('next_hop_type', None)
          self.next_hop_ip_address = kwargs.get('next_hop_ip_address', None)
          self.route_table_id = kwargs.get('route_table_id', None)
  
  
  class Operation(Model):
      """Network REST API operation definition.
  
      :param name: Operation name: {provider}/{resource}/{operation}
      :type name: str
      :param display: Display metadata associated with the operation.
      :type display: ~azure.mgmt.network.v2019_02_01.models.OperationDisplay
      :param origin: Origin of the operation.
      :type origin: str
      :param service_specification: Specification of the service.
      :type service_specification:
       ~azure.mgmt.network.v2019_02_01.models.OperationPropertiesFormatServiceSpecification
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'display': {'key': 'display', 'type': 'OperationDisplay'},
          'origin': {'key': 'origin', 'type': 'str'},
          'service_specification': {'key': 'properties.serviceSpecification', 'type': 'OperationPropertiesFormatServiceSpecification'},
      }
  
      def __init__(self, **kwargs):
          super(Operation, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.display = kwargs.get('display', None)
          self.origin = kwargs.get('origin', None)
          self.service_specification = kwargs.get('service_specification', None)
  
  
  class OperationDisplay(Model):
      """Display metadata associated with the operation.
  
      :param provider: Service provider: Microsoft Network.
      :type provider: str
      :param resource: Resource on which the operation is performed.
      :type resource: str
      :param operation: Type of the operation: get, read, delete, etc.
      :type operation: str
      :param description: Description of the operation.
      :type description: str
      """
  
      _attribute_map = {
          'provider': {'key': 'provider', 'type': 'str'},
          'resource': {'key': 'resource', 'type': 'str'},
          'operation': {'key': 'operation', 'type': 'str'},
          'description': {'key': 'description', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(OperationDisplay, self).__init__(**kwargs)
          self.provider = kwargs.get('provider', None)
          self.resource = kwargs.get('resource', None)
          self.operation = kwargs.get('operation', None)
          self.description = kwargs.get('description', None)
  
  
  class OperationPropertiesFormatServiceSpecification(Model):
      """Specification of the service.
  
      :param metric_specifications: Operation service specification.
      :type metric_specifications:
       list[~azure.mgmt.network.v2019_02_01.models.MetricSpecification]
      :param log_specifications: Operation log specification.
      :type log_specifications:
       list[~azure.mgmt.network.v2019_02_01.models.LogSpecification]
      """
  
      _attribute_map = {
          'metric_specifications': {'key': 'metricSpecifications', 'type': '[MetricSpecification]'},
          'log_specifications': {'key': 'logSpecifications', 'type': '[LogSpecification]'},
      }
  
      def __init__(self, **kwargs):
          super(OperationPropertiesFormatServiceSpecification, self).__init__(**kwargs)
          self.metric_specifications = kwargs.get('metric_specifications', None)
          self.log_specifications = kwargs.get('log_specifications', None)
  
  
  class OutboundRule(SubResource):
      """Outbound pool of the load balancer.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param allocated_outbound_ports: The number of outbound ports to be used
       for NAT.
      :type allocated_outbound_ports: int
      :param frontend_ip_configurations: Required. The Frontend IP addresses of
       the load balancer.
      :type frontend_ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param backend_address_pool: Required. A reference to a pool of DIPs.
       Outbound traffic is randomly load balanced across IPs in the backend IPs.
      :type backend_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: Gets the provisioning state of the PublicIP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param protocol: Required. The protocol for the outbound rule in load
       balancer. Possible values are: 'Tcp', 'Udp', and 'All'. Possible values
       include: 'Tcp', 'Udp', 'All'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.LoadBalancerOutboundRuleProtocol
      :param enable_tcp_reset: Receive bidirectional TCP Reset on TCP flow idle
       timeout or unexpected connection termination. This element is only used
       when the protocol is set to TCP.
      :type enable_tcp_reset: bool
      :param idle_timeout_in_minutes: The timeout for the TCP idle connection
      :type idle_timeout_in_minutes: int
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'frontend_ip_configurations': {'required': True},
          'backend_address_pool': {'required': True},
          'protocol': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'allocated_outbound_ports': {'key': 'properties.allocatedOutboundPorts', 'type': 'int'},
          'frontend_ip_configurations': {'key': 'properties.frontendIPConfigurations', 'type': '[SubResource]'},
          'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'enable_tcp_reset': {'key': 'properties.enableTcpReset', 'type': 'bool'},
          'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(OutboundRule, self).__init__(**kwargs)
          self.allocated_outbound_ports = kwargs.get('allocated_outbound_ports', None)
          self.frontend_ip_configurations = kwargs.get('frontend_ip_configurations', None)
          self.backend_address_pool = kwargs.get('backend_address_pool', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.protocol = kwargs.get('protocol', None)
          self.enable_tcp_reset = kwargs.get('enable_tcp_reset', None)
          self.idle_timeout_in_minutes = kwargs.get('idle_timeout_in_minutes', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class P2SVpnGateway(Resource):
      """P2SVpnGateway Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param virtual_hub: The VirtualHub to which the gateway belongs
      :type virtual_hub: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param vpn_gateway_scale_unit: The scale unit for this p2s vpn gateway.
      :type vpn_gateway_scale_unit: int
      :param p2_svpn_server_configuration: The P2SVpnServerConfiguration to
       which the p2sVpnGateway is attached to.
      :type p2_svpn_server_configuration:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param vpn_client_address_pool: The reference of the address space
       resource which represents Address space for P2S VpnClient.
      :type vpn_client_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param custom_routes: The reference of the address space resource which
       represents the custom routes specified by the customer for P2SVpnGateway
       and P2S VpnClient.
      :type custom_routes: ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :ivar vpn_client_connection_health: All P2S VPN clients' connection health
       status.
      :vartype vpn_client_connection_health:
       ~azure.mgmt.network.v2019_02_01.models.VpnClientConnectionHealth
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'vpn_client_connection_health': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'virtual_hub': {'key': 'properties.virtualHub', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'vpn_gateway_scale_unit': {'key': 'properties.vpnGatewayScaleUnit', 'type': 'int'},
          'p2_svpn_server_configuration': {'key': 'properties.p2SVpnServerConfiguration', 'type': 'SubResource'},
          'vpn_client_address_pool': {'key': 'properties.vpnClientAddressPool', 'type': 'AddressSpace'},
          'custom_routes': {'key': 'properties.customRoutes', 'type': 'AddressSpace'},
          'vpn_client_connection_health': {'key': 'properties.vpnClientConnectionHealth', 'type': 'VpnClientConnectionHealth'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnGateway, self).__init__(**kwargs)
          self.virtual_hub = kwargs.get('virtual_hub', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.vpn_gateway_scale_unit = kwargs.get('vpn_gateway_scale_unit', None)
          self.p2_svpn_server_configuration = kwargs.get('p2_svpn_server_configuration', None)
          self.vpn_client_address_pool = kwargs.get('vpn_client_address_pool', None)
          self.custom_routes = kwargs.get('custom_routes', None)
          self.vpn_client_connection_health = None
          self.etag = None
  
  
  class P2SVpnProfileParameters(Model):
      """Vpn Client Parameters for package generation.
  
      :param authentication_method: VPN client authentication method. Possible
       values include: 'EAPTLS', 'EAPMSCHAPv2'
      :type authentication_method: str or
       ~azure.mgmt.network.v2019_02_01.models.AuthenticationMethod
      """
  
      _attribute_map = {
          'authentication_method': {'key': 'authenticationMethod', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnProfileParameters, self).__init__(**kwargs)
          self.authentication_method = kwargs.get('authentication_method', None)
  
  
  class P2SVpnServerConfigRadiusClientRootCertificate(SubResource):
      """Radius client root certificate of P2SVpnServerConfiguration.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param thumbprint: The Radius client root certificate thumbprint.
      :type thumbprint: str
      :ivar provisioning_state: The provisioning state of the Radius client root
       certificate resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'thumbprint': {'key': 'properties.thumbprint', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnServerConfigRadiusClientRootCertificate, self).__init__(**kwargs)
          self.thumbprint = kwargs.get('thumbprint', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class P2SVpnServerConfigRadiusServerRootCertificate(SubResource):
      """Radius Server root certificate of P2SVpnServerConfiguration.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param public_cert_data: Required. The certificate public data.
      :type public_cert_data: str
      :ivar provisioning_state: The provisioning state of the
       P2SVpnServerConfiguration Radius Server root certificate resource.
       Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'public_cert_data': {'required': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'public_cert_data': {'key': 'properties.publicCertData', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnServerConfigRadiusServerRootCertificate, self).__init__(**kwargs)
          self.public_cert_data = kwargs.get('public_cert_data', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class P2SVpnServerConfiguration(SubResource):
      """P2SVpnServerConfiguration Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param p2_svpn_server_configuration_properties_name: The name of the
       P2SVpnServerConfiguration that is unique within a VirtualWan in a resource
       group. This name can be used to access the resource along with Paren
       VirtualWan resource name.
      :type p2_svpn_server_configuration_properties_name: str
      :param vpn_protocols: VPN protocols for the P2SVpnServerConfiguration.
      :type vpn_protocols: list[str or
       ~azure.mgmt.network.v2019_02_01.models.VpnGatewayTunnelingProtocol]
      :param p2_svpn_server_config_vpn_client_root_certificates: VPN client root
       certificate of P2SVpnServerConfiguration.
      :type p2_svpn_server_config_vpn_client_root_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.P2SVpnServerConfigVpnClientRootCertificate]
      :param p2_svpn_server_config_vpn_client_revoked_certificates: VPN client
       revoked certificate of P2SVpnServerConfiguration.
      :type p2_svpn_server_config_vpn_client_revoked_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.P2SVpnServerConfigVpnClientRevokedCertificate]
      :param p2_svpn_server_config_radius_server_root_certificates: Radius
       Server root certificate of P2SVpnServerConfiguration.
      :type p2_svpn_server_config_radius_server_root_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.P2SVpnServerConfigRadiusServerRootCertificate]
      :param p2_svpn_server_config_radius_client_root_certificates: Radius
       client root certificate of P2SVpnServerConfiguration.
      :type p2_svpn_server_config_radius_client_root_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.P2SVpnServerConfigRadiusClientRootCertificate]
      :param vpn_client_ipsec_policies: VpnClientIpsecPolicies for
       P2SVpnServerConfiguration.
      :type vpn_client_ipsec_policies:
       list[~azure.mgmt.network.v2019_02_01.models.IpsecPolicy]
      :param radius_server_address: The radius server address property of the
       P2SVpnServerConfiguration resource for point to site client connection.
      :type radius_server_address: str
      :param radius_server_secret: The radius secret property of the
       P2SVpnServerConfiguration resource for point to site client connection.
      :type radius_server_secret: str
      :ivar provisioning_state: The provisioning state of the
       P2SVpnServerConfiguration resource. Possible values are: 'Updating',
       'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :ivar p2_svpn_gateways: List of references to P2SVpnGateways.
      :vartype p2_svpn_gateways:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param p2_svpn_server_configuration_properties_etag: A unique read-only
       string that changes whenever the resource is updated.
      :type p2_svpn_server_configuration_properties_etag: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'p2_svpn_gateways': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'p2_svpn_server_configuration_properties_name': {'key': 'properties.name', 'type': 'str'},
          'vpn_protocols': {'key': 'properties.vpnProtocols', 'type': '[str]'},
          'p2_svpn_server_config_vpn_client_root_certificates': {'key': 'properties.p2SVpnServerConfigVpnClientRootCertificates', 'type': '[P2SVpnServerConfigVpnClientRootCertificate]'},
          'p2_svpn_server_config_vpn_client_revoked_certificates': {'key': 'properties.p2SVpnServerConfigVpnClientRevokedCertificates', 'type': '[P2SVpnServerConfigVpnClientRevokedCertificate]'},
          'p2_svpn_server_config_radius_server_root_certificates': {'key': 'properties.p2SVpnServerConfigRadiusServerRootCertificates', 'type': '[P2SVpnServerConfigRadiusServerRootCertificate]'},
          'p2_svpn_server_config_radius_client_root_certificates': {'key': 'properties.p2SVpnServerConfigRadiusClientRootCertificates', 'type': '[P2SVpnServerConfigRadiusClientRootCertificate]'},
          'vpn_client_ipsec_policies': {'key': 'properties.vpnClientIpsecPolicies', 'type': '[IpsecPolicy]'},
          'radius_server_address': {'key': 'properties.radiusServerAddress', 'type': 'str'},
          'radius_server_secret': {'key': 'properties.radiusServerSecret', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'p2_svpn_gateways': {'key': 'properties.p2SVpnGateways', 'type': '[SubResource]'},
          'p2_svpn_server_configuration_properties_etag': {'key': 'properties.etag', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnServerConfiguration, self).__init__(**kwargs)
          self.p2_svpn_server_configuration_properties_name = kwargs.get('p2_svpn_server_configuration_properties_name', None)
          self.vpn_protocols = kwargs.get('vpn_protocols', None)
          self.p2_svpn_server_config_vpn_client_root_certificates = kwargs.get('p2_svpn_server_config_vpn_client_root_certificates', None)
          self.p2_svpn_server_config_vpn_client_revoked_certificates = kwargs.get('p2_svpn_server_config_vpn_client_revoked_certificates', None)
          self.p2_svpn_server_config_radius_server_root_certificates = kwargs.get('p2_svpn_server_config_radius_server_root_certificates', None)
          self.p2_svpn_server_config_radius_client_root_certificates = kwargs.get('p2_svpn_server_config_radius_client_root_certificates', None)
          self.vpn_client_ipsec_policies = kwargs.get('vpn_client_ipsec_policies', None)
          self.radius_server_address = kwargs.get('radius_server_address', None)
          self.radius_server_secret = kwargs.get('radius_server_secret', None)
          self.provisioning_state = None
          self.p2_svpn_gateways = None
          self.p2_svpn_server_configuration_properties_etag = kwargs.get('p2_svpn_server_configuration_properties_etag', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class P2SVpnServerConfigVpnClientRevokedCertificate(SubResource):
      """VPN client revoked certificate of P2SVpnServerConfiguration.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param thumbprint: The revoked VPN client certificate thumbprint.
      :type thumbprint: str
      :ivar provisioning_state: The provisioning state of the VPN client revoked
       certificate resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'thumbprint': {'key': 'properties.thumbprint', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnServerConfigVpnClientRevokedCertificate, self).__init__(**kwargs)
          self.thumbprint = kwargs.get('thumbprint', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class P2SVpnServerConfigVpnClientRootCertificate(SubResource):
      """VPN client root certificate of P2SVpnServerConfiguration.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param public_cert_data: Required. The certificate public data.
      :type public_cert_data: str
      :ivar provisioning_state: The provisioning state of the
       P2SVpnServerConfiguration VPN client root certificate resource. Possible
       values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'public_cert_data': {'required': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'public_cert_data': {'key': 'properties.publicCertData', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(P2SVpnServerConfigVpnClientRootCertificate, self).__init__(**kwargs)
          self.public_cert_data = kwargs.get('public_cert_data', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class PacketCapture(Model):
      """Parameters that define the create packet capture operation.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target: Required. The ID of the targeted resource, only VM is
       currently supported.
      :type target: str
      :param bytes_to_capture_per_packet: Number of bytes captured per packet,
       the remaining bytes are truncated. Default value: 0 .
      :type bytes_to_capture_per_packet: int
      :param total_bytes_per_session: Maximum size of the capture output.
       Default value: 1073741824 .
      :type total_bytes_per_session: int
      :param time_limit_in_seconds: Maximum duration of the capture session in
       seconds. Default value: 18000 .
      :type time_limit_in_seconds: int
      :param storage_location: Required. Describes the storage location for a
       packet capture session.
      :type storage_location:
       ~azure.mgmt.network.v2019_02_01.models.PacketCaptureStorageLocation
      :param filters: A list of packet capture filters.
      :type filters:
       list[~azure.mgmt.network.v2019_02_01.models.PacketCaptureFilter]
      """
  
      _validation = {
          'target': {'required': True},
          'storage_location': {'required': True},
      }
  
      _attribute_map = {
          'target': {'key': 'properties.target', 'type': 'str'},
          'bytes_to_capture_per_packet': {'key': 'properties.bytesToCapturePerPacket', 'type': 'int'},
          'total_bytes_per_session': {'key': 'properties.totalBytesPerSession', 'type': 'int'},
          'time_limit_in_seconds': {'key': 'properties.timeLimitInSeconds', 'type': 'int'},
          'storage_location': {'key': 'properties.storageLocation', 'type': 'PacketCaptureStorageLocation'},
          'filters': {'key': 'properties.filters', 'type': '[PacketCaptureFilter]'},
      }
  
      def __init__(self, **kwargs):
          super(PacketCapture, self).__init__(**kwargs)
          self.target = kwargs.get('target', None)
          self.bytes_to_capture_per_packet = kwargs.get('bytes_to_capture_per_packet', 0)
          self.total_bytes_per_session = kwargs.get('total_bytes_per_session', 1073741824)
          self.time_limit_in_seconds = kwargs.get('time_limit_in_seconds', 18000)
          self.storage_location = kwargs.get('storage_location', None)
          self.filters = kwargs.get('filters', None)
  
  
  class PacketCaptureFilter(Model):
      """Filter that is applied to packet capture request. Multiple filters can be
      applied.
  
      :param protocol: Protocol to be filtered on. Possible values include:
       'TCP', 'UDP', 'Any'. Default value: "Any" .
      :type protocol: str or ~azure.mgmt.network.v2019_02_01.models.PcProtocol
      :param local_ip_address: 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.
       Default = null.
      :type local_ip_address: str
      :param remote_ip_address: 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.
       Default = null.
      :type remote_ip_address: str
      :param local_port: 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. Default = null.
      :type local_port: str
      :param remote_port: 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. Default = null.
      :type remote_port: str
      """
  
      _attribute_map = {
          'protocol': {'key': 'protocol', 'type': 'str'},
          'local_ip_address': {'key': 'localIPAddress', 'type': 'str'},
          'remote_ip_address': {'key': 'remoteIPAddress', 'type': 'str'},
          'local_port': {'key': 'localPort', 'type': 'str'},
          'remote_port': {'key': 'remotePort', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PacketCaptureFilter, self).__init__(**kwargs)
          self.protocol = kwargs.get('protocol', "Any")
          self.local_ip_address = kwargs.get('local_ip_address', None)
          self.remote_ip_address = kwargs.get('remote_ip_address', None)
          self.local_port = kwargs.get('local_port', None)
          self.remote_port = kwargs.get('remote_port', None)
  
  
  class PacketCaptureParameters(Model):
      """Parameters that define the create packet capture operation.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target: Required. The ID of the targeted resource, only VM is
       currently supported.
      :type target: str
      :param bytes_to_capture_per_packet: Number of bytes captured per packet,
       the remaining bytes are truncated. Default value: 0 .
      :type bytes_to_capture_per_packet: int
      :param total_bytes_per_session: Maximum size of the capture output.
       Default value: 1073741824 .
      :type total_bytes_per_session: int
      :param time_limit_in_seconds: Maximum duration of the capture session in
       seconds. Default value: 18000 .
      :type time_limit_in_seconds: int
      :param storage_location: Required. Describes the storage location for a
       packet capture session.
      :type storage_location:
       ~azure.mgmt.network.v2019_02_01.models.PacketCaptureStorageLocation
      :param filters: A list of packet capture filters.
      :type filters:
       list[~azure.mgmt.network.v2019_02_01.models.PacketCaptureFilter]
      """
  
      _validation = {
          'target': {'required': True},
          'storage_location': {'required': True},
      }
  
      _attribute_map = {
          'target': {'key': 'target', 'type': 'str'},
          'bytes_to_capture_per_packet': {'key': 'bytesToCapturePerPacket', 'type': 'int'},
          'total_bytes_per_session': {'key': 'totalBytesPerSession', 'type': 'int'},
          'time_limit_in_seconds': {'key': 'timeLimitInSeconds', 'type': 'int'},
          'storage_location': {'key': 'storageLocation', 'type': 'PacketCaptureStorageLocation'},
          'filters': {'key': 'filters', 'type': '[PacketCaptureFilter]'},
      }
  
      def __init__(self, **kwargs):
          super(PacketCaptureParameters, self).__init__(**kwargs)
          self.target = kwargs.get('target', None)
          self.bytes_to_capture_per_packet = kwargs.get('bytes_to_capture_per_packet', 0)
          self.total_bytes_per_session = kwargs.get('total_bytes_per_session', 1073741824)
          self.time_limit_in_seconds = kwargs.get('time_limit_in_seconds', 18000)
          self.storage_location = kwargs.get('storage_location', None)
          self.filters = kwargs.get('filters', None)
  
  
  class PacketCaptureQueryStatusResult(Model):
      """Status of packet capture session.
  
      :param name: The name of the packet capture resource.
      :type name: str
      :param id: The ID of the packet capture resource.
      :type id: str
      :param capture_start_time: The start time of the packet capture session.
      :type capture_start_time: datetime
      :param packet_capture_status: The status of the packet capture session.
       Possible values include: 'NotStarted', 'Running', 'Stopped', 'Error',
       'Unknown'
      :type packet_capture_status: str or
       ~azure.mgmt.network.v2019_02_01.models.PcStatus
      :param stop_reason: The reason the current packet capture session was
       stopped.
      :type stop_reason: str
      :param packet_capture_error: List of errors of packet capture session.
      :type packet_capture_error: list[str or
       ~azure.mgmt.network.v2019_02_01.models.PcError]
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'capture_start_time': {'key': 'captureStartTime', 'type': 'iso-8601'},
          'packet_capture_status': {'key': 'packetCaptureStatus', 'type': 'str'},
          'stop_reason': {'key': 'stopReason', 'type': 'str'},
          'packet_capture_error': {'key': 'packetCaptureError', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(PacketCaptureQueryStatusResult, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.id = kwargs.get('id', None)
          self.capture_start_time = kwargs.get('capture_start_time', None)
          self.packet_capture_status = kwargs.get('packet_capture_status', None)
          self.stop_reason = kwargs.get('stop_reason', None)
          self.packet_capture_error = kwargs.get('packet_capture_error', None)
  
  
  class PacketCaptureResult(Model):
      """Information about packet capture session.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :ivar name: Name of the packet capture session.
      :vartype name: str
      :ivar id: ID of the packet capture operation.
      :vartype id: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated. Default value: "A unique read-only string that changes
       whenever the resource is updated." .
      :type etag: str
      :param target: Required. The ID of the targeted resource, only VM is
       currently supported.
      :type target: str
      :param bytes_to_capture_per_packet: Number of bytes captured per packet,
       the remaining bytes are truncated. Default value: 0 .
      :type bytes_to_capture_per_packet: int
      :param total_bytes_per_session: Maximum size of the capture output.
       Default value: 1073741824 .
      :type total_bytes_per_session: int
      :param time_limit_in_seconds: Maximum duration of the capture session in
       seconds. Default value: 18000 .
      :type time_limit_in_seconds: int
      :param storage_location: Required. Describes the storage location for a
       packet capture session.
      :type storage_location:
       ~azure.mgmt.network.v2019_02_01.models.PacketCaptureStorageLocation
      :param filters: A list of packet capture filters.
      :type filters:
       list[~azure.mgmt.network.v2019_02_01.models.PacketCaptureFilter]
      :param provisioning_state: The provisioning state of the packet capture
       session. Possible values include: 'Succeeded', 'Updating', 'Deleting',
       'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      """
  
      _validation = {
          'name': {'readonly': True},
          'id': {'readonly': True},
          'target': {'required': True},
          'storage_location': {'required': True},
      }
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'target': {'key': 'properties.target', 'type': 'str'},
          'bytes_to_capture_per_packet': {'key': 'properties.bytesToCapturePerPacket', 'type': 'int'},
          'total_bytes_per_session': {'key': 'properties.totalBytesPerSession', 'type': 'int'},
          'time_limit_in_seconds': {'key': 'properties.timeLimitInSeconds', 'type': 'int'},
          'storage_location': {'key': 'properties.storageLocation', 'type': 'PacketCaptureStorageLocation'},
          'filters': {'key': 'properties.filters', 'type': '[PacketCaptureFilter]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PacketCaptureResult, self).__init__(**kwargs)
          self.name = None
          self.id = None
          self.etag = kwargs.get('etag', "A unique read-only string that changes whenever the resource is updated.")
          self.target = kwargs.get('target', None)
          self.bytes_to_capture_per_packet = kwargs.get('bytes_to_capture_per_packet', 0)
          self.total_bytes_per_session = kwargs.get('total_bytes_per_session', 1073741824)
          self.time_limit_in_seconds = kwargs.get('time_limit_in_seconds', 18000)
          self.storage_location = kwargs.get('storage_location', None)
          self.filters = kwargs.get('filters', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
  
  
  class PacketCaptureStorageLocation(Model):
      """Describes the storage location for a packet capture session.
  
      :param storage_id: The ID of the storage account to save the packet
       capture session. Required if no local file path is provided.
      :type storage_id: str
      :param storage_path: The URI of the storage path to save the packet
       capture. Must be a well-formed URI describing the location to save the
       packet capture.
      :type storage_path: str
      :param 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. Required if no storage ID is provided, otherwise
       optional.
      :type file_path: str
      """
  
      _attribute_map = {
          'storage_id': {'key': 'storageId', 'type': 'str'},
          'storage_path': {'key': 'storagePath', 'type': 'str'},
          'file_path': {'key': 'filePath', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PacketCaptureStorageLocation, self).__init__(**kwargs)
          self.storage_id = kwargs.get('storage_id', None)
          self.storage_path = kwargs.get('storage_path', None)
          self.file_path = kwargs.get('file_path', None)
  
  
  class PatchRouteFilter(SubResource):
      """Route Filter Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param rules: Collection of RouteFilterRules contained within a route
       filter.
      :type rules: list[~azure.mgmt.network.v2019_02_01.models.RouteFilterRule]
      :param peerings: A collection of references to express route circuit
       peerings.
      :type peerings:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeering]
      :ivar provisioning_state: The provisioning state of the resource. Possible
       values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
      :vartype provisioning_state: str
      :ivar name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :vartype name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      :ivar type: Resource type.
      :vartype type: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'name': {'readonly': True},
          'etag': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'rules': {'key': 'properties.rules', 'type': '[RouteFilterRule]'},
          'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCircuitPeering]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
      }
  
      def __init__(self, **kwargs):
          super(PatchRouteFilter, self).__init__(**kwargs)
          self.rules = kwargs.get('rules', None)
          self.peerings = kwargs.get('peerings', None)
          self.provisioning_state = None
          self.name = None
          self.etag = None
          self.type = None
          self.tags = kwargs.get('tags', None)
  
  
  class PatchRouteFilterRule(SubResource):
      """Route Filter Rule Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param access: Required. The access type of the rule. Possible values
       include: 'Allow', 'Deny'
      :type access: str or ~azure.mgmt.network.v2019_02_01.models.Access
      :ivar route_filter_rule_type: Required. The rule type of the rule. Valid
       value is: 'Community'. Default value: "Community" .
      :vartype route_filter_rule_type: str
      :param communities: Required. The collection for bgp community values to
       filter on. e.g. ['12076:5010','12076:5020']
      :type communities: list[str]
      :ivar provisioning_state: The provisioning state of the resource. Possible
       values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
      :vartype provisioning_state: str
      :ivar name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :vartype name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'access': {'required': True},
          'route_filter_rule_type': {'required': True, 'constant': True},
          'communities': {'required': True},
          'provisioning_state': {'readonly': True},
          'name': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'access': {'key': 'properties.access', 'type': 'str'},
          'route_filter_rule_type': {'key': 'properties.routeFilterRuleType', 'type': 'str'},
          'communities': {'key': 'properties.communities', 'type': '[str]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      route_filter_rule_type = "Community"
  
      def __init__(self, **kwargs):
          super(PatchRouteFilterRule, self).__init__(**kwargs)
          self.access = kwargs.get('access', None)
          self.communities = kwargs.get('communities', None)
          self.provisioning_state = None
          self.name = None
          self.etag = None
  
  
  class PeerExpressRouteCircuitConnection(SubResource):
      """Peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
      resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param express_route_circuit_peering: Reference to Express Route Circuit
       Private Peering Resource of the circuit.
      :type express_route_circuit_peering:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param peer_express_route_circuit_peering: Reference to Express Route
       Circuit Private Peering Resource of the peered circuit.
      :type peer_express_route_circuit_peering:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param address_prefix: /29 IP address space to carve out Customer
       addresses for tunnels.
      :type address_prefix: str
      :param circuit_connection_status: Express Route Circuit connection state.
       Possible values include: 'Connected', 'Connecting', 'Disconnected'
      :type circuit_connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.CircuitConnectionStatus
      :param connection_name: The name of the express route circuit connection
       resource.
      :type connection_name: str
      :param auth_resource_guid: The resource guid of the authorization used for
       the express route circuit connection.
      :type auth_resource_guid: str
      :ivar provisioning_state: Provisioning state of the peer express route
       circuit connection resource. Possible values are: 'Succeeded', 'Updating',
       'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'express_route_circuit_peering': {'key': 'properties.expressRouteCircuitPeering', 'type': 'SubResource'},
          'peer_express_route_circuit_peering': {'key': 'properties.peerExpressRouteCircuitPeering', 'type': 'SubResource'},
          'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
          'circuit_connection_status': {'key': 'properties.circuitConnectionStatus', 'type': 'str'},
          'connection_name': {'key': 'properties.connectionName', 'type': 'str'},
          'auth_resource_guid': {'key': 'properties.authResourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PeerExpressRouteCircuitConnection, self).__init__(**kwargs)
          self.express_route_circuit_peering = kwargs.get('express_route_circuit_peering', None)
          self.peer_express_route_circuit_peering = kwargs.get('peer_express_route_circuit_peering', None)
          self.address_prefix = kwargs.get('address_prefix', None)
          self.circuit_connection_status = kwargs.get('circuit_connection_status', None)
          self.connection_name = kwargs.get('connection_name', None)
          self.auth_resource_guid = kwargs.get('auth_resource_guid', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class PolicySettings(Model):
      """Defines contents of a web application firewall global configuration.
  
      :param enabled_state: Describes if the policy is in enabled state or
       disabled state. Possible values include: 'Disabled', 'Enabled'
      :type enabled_state: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallEnabledState
      :param mode: Describes if it is in detection mode  or prevention mode at
       policy level. Possible values include: 'Prevention', 'Detection'
      :type mode: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallMode
      """
  
      _attribute_map = {
          'enabled_state': {'key': 'enabledState', 'type': 'str'},
          'mode': {'key': 'mode', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PolicySettings, self).__init__(**kwargs)
          self.enabled_state = kwargs.get('enabled_state', None)
          self.mode = kwargs.get('mode', None)
  
  
  class PrepareNetworkPoliciesRequest(Model):
      """Details of PrepareNetworkPolicies for Subnet.
  
      :param service_name: The name of the service for which subnet is being
       prepared for.
      :type service_name: str
      :param resource_group_name: The name of the resource group where the
       Network Intent Policy will be stored.
      :type resource_group_name: str
      :param network_intent_policy_configurations: A list of
       NetworkIntentPolicyConfiguration.
      :type network_intent_policy_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkIntentPolicyConfiguration]
      """
  
      _attribute_map = {
          'service_name': {'key': 'serviceName', 'type': 'str'},
          'resource_group_name': {'key': 'resourceGroupName', 'type': 'str'},
          'network_intent_policy_configurations': {'key': 'networkIntentPolicyConfigurations', 'type': '[NetworkIntentPolicyConfiguration]'},
      }
  
      def __init__(self, **kwargs):
          super(PrepareNetworkPoliciesRequest, self).__init__(**kwargs)
          self.service_name = kwargs.get('service_name', None)
          self.resource_group_name = kwargs.get('resource_group_name', None)
          self.network_intent_policy_configurations = kwargs.get('network_intent_policy_configurations', None)
  
  
  class Probe(SubResource):
      """A load balancer probe.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :ivar load_balancing_rules: The load balancer rules that use this probe.
      :vartype load_balancing_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param protocol: Required. The protocol of the end point. Possible values
       are: 'Http', 'Tcp', or 'Https'. If 'Tcp' is specified, a received ACK is
       required for the probe to be successful. If 'Http' or 'Https' is
       specified, a 200 OK response from the specifies URI is required for the
       probe to be successful. Possible values include: 'Http', 'Tcp', 'Https'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.ProbeProtocol
      :param port: Required. The port for communicating the probe. Possible
       values range from 1 to 65535, inclusive.
      :type port: int
      :param interval_in_seconds: The interval, in seconds, for how frequently
       to probe the endpoint for health status. Typically, the interval is
       slightly less than half the allocated timeout period (in seconds) which
       allows two full probes before taking the instance out of rotation. The
       default value is 15, the minimum value is 5.
      :type interval_in_seconds: int
      :param number_of_probes: The number of probes where if no response, will
       result in stopping further traffic from being delivered to the endpoint.
       This values allows endpoints to be taken out of rotation faster or slower
       than the typical times used in Azure.
      :type number_of_probes: int
      :param request_path: The URI used for requesting health status from the
       VM. Path is required if a protocol is set to http. Otherwise, it is not
       allowed. There is no default value.
      :type request_path: str
      :param provisioning_state: Gets the provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: Gets name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'load_balancing_rules': {'readonly': True},
          'protocol': {'required': True},
          'port': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[SubResource]'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'port': {'key': 'properties.port', 'type': 'int'},
          'interval_in_seconds': {'key': 'properties.intervalInSeconds', 'type': 'int'},
          'number_of_probes': {'key': 'properties.numberOfProbes', 'type': 'int'},
          'request_path': {'key': 'properties.requestPath', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Probe, self).__init__(**kwargs)
          self.load_balancing_rules = None
          self.protocol = kwargs.get('protocol', None)
          self.port = kwargs.get('port', None)
          self.interval_in_seconds = kwargs.get('interval_in_seconds', None)
          self.number_of_probes = kwargs.get('number_of_probes', None)
          self.request_path = kwargs.get('request_path', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class ProtocolConfiguration(Model):
      """Configuration of the protocol.
  
      :param http_configuration: HTTP configuration of the connectivity check.
      :type http_configuration:
       ~azure.mgmt.network.v2019_02_01.models.HTTPConfiguration
      """
  
      _attribute_map = {
          'http_configuration': {'key': 'HTTPConfiguration', 'type': 'HTTPConfiguration'},
      }
  
      def __init__(self, **kwargs):
          super(ProtocolConfiguration, self).__init__(**kwargs)
          self.http_configuration = kwargs.get('http_configuration', None)
  
  
  class ProtocolCustomSettingsFormat(Model):
      """DDoS custom policy properties.
  
      :param protocol: The protocol for which the DDoS protection policy is
       being customized. Possible values include: 'Tcp', 'Udp', 'Syn'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.DdosCustomPolicyProtocol
      :param trigger_rate_override: The customized DDoS protection trigger rate.
      :type trigger_rate_override: str
      :param source_rate_override: The customized DDoS protection source rate.
      :type source_rate_override: str
      :param trigger_sensitivity_override: The customized DDoS protection
       trigger rate sensitivity degrees. High: Trigger rate set with most
       sensitivity w.r.t. normal traffic. Default: Trigger rate set with moderate
       sensitivity w.r.t. normal traffic. Low: Trigger rate set with less
       sensitivity w.r.t. normal traffic. Relaxed: Trigger rate set with least
       sensitivity w.r.t. normal traffic. Possible values include: 'Relaxed',
       'Low', 'Default', 'High'
      :type trigger_sensitivity_override: str or
       ~azure.mgmt.network.v2019_02_01.models.DdosCustomPolicyTriggerSensitivityOverride
      """
  
      _attribute_map = {
          'protocol': {'key': 'protocol', 'type': 'str'},
          'trigger_rate_override': {'key': 'triggerRateOverride', 'type': 'str'},
          'source_rate_override': {'key': 'sourceRateOverride', 'type': 'str'},
          'trigger_sensitivity_override': {'key': 'triggerSensitivityOverride', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ProtocolCustomSettingsFormat, self).__init__(**kwargs)
          self.protocol = kwargs.get('protocol', None)
          self.trigger_rate_override = kwargs.get('trigger_rate_override', None)
          self.source_rate_override = kwargs.get('source_rate_override', None)
          self.trigger_sensitivity_override = kwargs.get('trigger_sensitivity_override', None)
  
  
  class PublicIPAddress(Resource):
      """Public IP address resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param sku: The public IP address SKU.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.PublicIPAddressSku
      :param public_ip_allocation_method: The public IP address allocation
       method. Possible values include: 'Static', 'Dynamic'
      :type public_ip_allocation_method: str or
       ~azure.mgmt.network.v2019_02_01.models.IPAllocationMethod
      :param public_ip_address_version: The public IP address version. Possible
       values include: 'IPv4', 'IPv6'
      :type public_ip_address_version: str or
       ~azure.mgmt.network.v2019_02_01.models.IPVersion
      :ivar ip_configuration: The IP configuration associated with the public IP
       address.
      :vartype ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.IPConfiguration
      :param dns_settings: The FQDN of the DNS record associated with the public
       IP address.
      :type dns_settings:
       ~azure.mgmt.network.v2019_02_01.models.PublicIPAddressDnsSettings
      :param ddos_settings: The DDoS protection custom policy associated with
       the public IP address.
      :type ddos_settings: ~azure.mgmt.network.v2019_02_01.models.DdosSettings
      :param ip_tags: The list of tags associated with the public IP address.
      :type ip_tags: list[~azure.mgmt.network.v2019_02_01.models.IpTag]
      :param ip_address: The IP address associated with the public IP address
       resource.
      :type ip_address: str
      :param public_ip_prefix: The Public IP Prefix this Public IP Address
       should be allocated from.
      :type public_ip_prefix: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param idle_timeout_in_minutes: The idle timeout of the public IP address.
      :type idle_timeout_in_minutes: int
      :param resource_guid: The resource GUID property of the public IP
       resource.
      :type resource_guid: str
      :param provisioning_state: The provisioning state of the PublicIP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param zones: A list of availability zones denoting the IP allocated for
       the resource needs to come from.
      :type zones: list[str]
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'ip_configuration': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'sku', 'type': 'PublicIPAddressSku'},
          'public_ip_allocation_method': {'key': 'properties.publicIPAllocationMethod', 'type': 'str'},
          'public_ip_address_version': {'key': 'properties.publicIPAddressVersion', 'type': 'str'},
          'ip_configuration': {'key': 'properties.ipConfiguration', 'type': 'IPConfiguration'},
          'dns_settings': {'key': 'properties.dnsSettings', 'type': 'PublicIPAddressDnsSettings'},
          'ddos_settings': {'key': 'properties.ddosSettings', 'type': 'DdosSettings'},
          'ip_tags': {'key': 'properties.ipTags', 'type': '[IpTag]'},
          'ip_address': {'key': 'properties.ipAddress', 'type': 'str'},
          'public_ip_prefix': {'key': 'properties.publicIPPrefix', 'type': 'SubResource'},
          'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'zones': {'key': 'zones', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(PublicIPAddress, self).__init__(**kwargs)
          self.sku = kwargs.get('sku', None)
          self.public_ip_allocation_method = kwargs.get('public_ip_allocation_method', None)
          self.public_ip_address_version = kwargs.get('public_ip_address_version', None)
          self.ip_configuration = None
          self.dns_settings = kwargs.get('dns_settings', None)
          self.ddos_settings = kwargs.get('ddos_settings', None)
          self.ip_tags = kwargs.get('ip_tags', None)
          self.ip_address = kwargs.get('ip_address', None)
          self.public_ip_prefix = kwargs.get('public_ip_prefix', None)
          self.idle_timeout_in_minutes = kwargs.get('idle_timeout_in_minutes', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
          self.zones = kwargs.get('zones', None)
  
  
  class PublicIPAddressDnsSettings(Model):
      """Contains FQDN of the DNS record associated with the public IP address.
  
      :param domain_name_label: Gets or sets the Domain name label.The
       concatenation of the domain name label and the regionalized DNS zone make
       up the fully qualified domain name associated with the public IP address.
       If a domain name label is specified, an A DNS record is created for the
       public IP in the Microsoft Azure DNS system.
      :type domain_name_label: str
      :param fqdn: Gets the FQDN, Fully qualified domain name of the A DNS
       record associated with the public IP. This is the concatenation of the
       domainNameLabel and the regionalized DNS zone.
      :type fqdn: str
      :param reverse_fqdn: Gets or Sets the Reverse FQDN. A user-visible, fully
       qualified domain name that resolves to this public IP address. If the
       reverseFqdn is specified, then a PTR DNS record is created pointing from
       the IP address in the in-addr.arpa domain to the reverse FQDN.
      :type reverse_fqdn: str
      """
  
      _attribute_map = {
          'domain_name_label': {'key': 'domainNameLabel', 'type': 'str'},
          'fqdn': {'key': 'fqdn', 'type': 'str'},
          'reverse_fqdn': {'key': 'reverseFqdn', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PublicIPAddressDnsSettings, self).__init__(**kwargs)
          self.domain_name_label = kwargs.get('domain_name_label', None)
          self.fqdn = kwargs.get('fqdn', None)
          self.reverse_fqdn = kwargs.get('reverse_fqdn', None)
  
  
  class PublicIPAddressSku(Model):
      """SKU of a public IP address.
  
      :param name: Name of a public IP address SKU. Possible values include:
       'Basic', 'Standard'
      :type name: str or
       ~azure.mgmt.network.v2019_02_01.models.PublicIPAddressSkuName
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PublicIPAddressSku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
  
  
  class PublicIPPrefix(Resource):
      """Public IP prefix resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param sku: The public IP prefix SKU.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.PublicIPPrefixSku
      :param public_ip_address_version: The public IP address version. Possible
       values include: 'IPv4', 'IPv6'
      :type public_ip_address_version: str or
       ~azure.mgmt.network.v2019_02_01.models.IPVersion
      :param ip_tags: The list of tags associated with the public IP prefix.
      :type ip_tags: list[~azure.mgmt.network.v2019_02_01.models.IpTag]
      :param prefix_length: The Length of the Public IP Prefix.
      :type prefix_length: int
      :param ip_prefix: The allocated Prefix
      :type ip_prefix: str
      :param public_ip_addresses: The list of all referenced PublicIPAddresses
      :type public_ip_addresses:
       list[~azure.mgmt.network.v2019_02_01.models.ReferencedPublicIpAddress]
      :param resource_guid: The resource GUID property of the public IP prefix
       resource.
      :type resource_guid: str
      :param provisioning_state: The provisioning state of the Public IP prefix
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      :param zones: A list of availability zones denoting the IP allocated for
       the resource needs to come from.
      :type zones: list[str]
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'sku', 'type': 'PublicIPPrefixSku'},
          'public_ip_address_version': {'key': 'properties.publicIPAddressVersion', 'type': 'str'},
          'ip_tags': {'key': 'properties.ipTags', 'type': '[IpTag]'},
          'prefix_length': {'key': 'properties.prefixLength', 'type': 'int'},
          'ip_prefix': {'key': 'properties.ipPrefix', 'type': 'str'},
          'public_ip_addresses': {'key': 'properties.publicIPAddresses', 'type': '[ReferencedPublicIpAddress]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'zones': {'key': 'zones', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(PublicIPPrefix, self).__init__(**kwargs)
          self.sku = kwargs.get('sku', None)
          self.public_ip_address_version = kwargs.get('public_ip_address_version', None)
          self.ip_tags = kwargs.get('ip_tags', None)
          self.prefix_length = kwargs.get('prefix_length', None)
          self.ip_prefix = kwargs.get('ip_prefix', None)
          self.public_ip_addresses = kwargs.get('public_ip_addresses', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
          self.zones = kwargs.get('zones', None)
  
  
  class PublicIPPrefixSku(Model):
      """SKU of a public IP prefix.
  
      :param name: Name of a public IP prefix SKU. Possible values include:
       'Standard'
      :type name: str or
       ~azure.mgmt.network.v2019_02_01.models.PublicIPPrefixSkuName
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(PublicIPPrefixSku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
  
  
  class QueryTroubleshootingParameters(Model):
      """Parameters that define the resource to query the troubleshooting result.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The target resource ID to query the
       troubleshooting result.
      :type target_resource_id: str
      """
  
      _validation = {
          'target_resource_id': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(QueryTroubleshootingParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
  
  
  class ReferencedPublicIpAddress(Model):
      """Reference to a public IP address.
  
      :param id: The PublicIPAddress Reference
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ReferencedPublicIpAddress, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class ResourceNavigationLink(SubResource):
      """ResourceNavigationLink resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param linked_resource_type: Resource type of the linked resource.
      :type linked_resource_type: str
      :param link: Link to the external resource
      :type link: str
      :ivar provisioning_state: Provisioning state of the ResourceNavigationLink
       resource.
      :vartype provisioning_state: str
      :param name: Name of the resource that is unique within a resource group.
       This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'linked_resource_type': {'key': 'properties.linkedResourceType', 'type': 'str'},
          'link': {'key': 'properties.link', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ResourceNavigationLink, self).__init__(**kwargs)
          self.linked_resource_type = kwargs.get('linked_resource_type', None)
          self.link = kwargs.get('link', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ResourceNavigationLinksListResult(Model):
      """Response for ResourceNavigationLinks_Get operation.
  
      :param value: The resource navigation links in a subnet.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ResourceNavigationLink]
      :param next_link: The URL to get the next set of results.
      :type next_link: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ResourceNavigationLink]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ResourceNavigationLinksListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = kwargs.get('next_link', None)
  
  
  class RetentionPolicyParameters(Model):
      """Parameters that define the retention policy for flow log.
  
      :param days: Number of days to retain flow log records. Default value: 0 .
      :type days: int
      :param enabled: Flag to enable/disable retention. Default value: False .
      :type enabled: bool
      """
  
      _attribute_map = {
          'days': {'key': 'days', 'type': 'int'},
          'enabled': {'key': 'enabled', 'type': 'bool'},
      }
  
      def __init__(self, **kwargs):
          super(RetentionPolicyParameters, self).__init__(**kwargs)
          self.days = kwargs.get('days', 0)
          self.enabled = kwargs.get('enabled', False)
  
  
  class Route(SubResource):
      """Route resource.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param address_prefix: The destination CIDR to which the route applies.
      :type address_prefix: str
      :param next_hop_type: Required. The type of Azure hop the packet should be
       sent to. Possible values include: 'VirtualNetworkGateway', 'VnetLocal',
       'Internet', 'VirtualAppliance', 'None'
      :type next_hop_type: str or
       ~azure.mgmt.network.v2019_02_01.models.RouteNextHopType
      :param next_hop_ip_address: The IP address packets should be forwarded to.
       Next hop values are only allowed in routes where the next hop type is
       VirtualAppliance.
      :type next_hop_ip_address: str
      :param provisioning_state: The provisioning state of the resource.
       Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'next_hop_type': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
          'next_hop_type': {'key': 'properties.nextHopType', 'type': 'str'},
          'next_hop_ip_address': {'key': 'properties.nextHopIpAddress', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Route, self).__init__(**kwargs)
          self.address_prefix = kwargs.get('address_prefix', None)
          self.next_hop_type = kwargs.get('next_hop_type', None)
          self.next_hop_ip_address = kwargs.get('next_hop_ip_address', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class RouteFilter(Resource):
      """Route Filter Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param rules: Collection of RouteFilterRules contained within a route
       filter.
      :type rules: list[~azure.mgmt.network.v2019_02_01.models.RouteFilterRule]
      :param peerings: A collection of references to express route circuit
       peerings.
      :type peerings:
       list[~azure.mgmt.network.v2019_02_01.models.ExpressRouteCircuitPeering]
      :ivar provisioning_state: The provisioning state of the resource. Possible
       values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
      :vartype provisioning_state: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'rules': {'key': 'properties.rules', 'type': '[RouteFilterRule]'},
          'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCircuitPeering]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(RouteFilter, self).__init__(**kwargs)
          self.rules = kwargs.get('rules', None)
          self.peerings = kwargs.get('peerings', None)
          self.provisioning_state = None
          self.etag = None
  
  
  class RouteFilterRule(SubResource):
      """Route Filter Rule Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param access: Required. The access type of the rule. Possible values
       include: 'Allow', 'Deny'
      :type access: str or ~azure.mgmt.network.v2019_02_01.models.Access
      :ivar route_filter_rule_type: Required. The rule type of the rule. Valid
       value is: 'Community'. Default value: "Community" .
      :vartype route_filter_rule_type: str
      :param communities: Required. The collection for bgp community values to
       filter on. e.g. ['12076:5010','12076:5020']
      :type communities: list[str]
      :ivar provisioning_state: The provisioning state of the resource. Possible
       values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param location: Resource location.
      :type location: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'access': {'required': True},
          'route_filter_rule_type': {'required': True, 'constant': True},
          'communities': {'required': True},
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'access': {'key': 'properties.access', 'type': 'str'},
          'route_filter_rule_type': {'key': 'properties.routeFilterRuleType', 'type': 'str'},
          'communities': {'key': 'properties.communities', 'type': '[str]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      route_filter_rule_type = "Community"
  
      def __init__(self, **kwargs):
          super(RouteFilterRule, self).__init__(**kwargs)
          self.access = kwargs.get('access', None)
          self.communities = kwargs.get('communities', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.location = kwargs.get('location', None)
          self.etag = None
  
  
  class RouteTable(Resource):
      """Route table resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param routes: Collection of routes contained within a route table.
      :type routes: list[~azure.mgmt.network.v2019_02_01.models.Route]
      :ivar subnets: A collection of references to subnets.
      :vartype subnets: list[~azure.mgmt.network.v2019_02_01.models.Subnet]
      :param disable_bgp_route_propagation: Gets or sets whether to disable the
       routes learned by BGP on that route table. True means disable.
      :type disable_bgp_route_propagation: bool
      :param provisioning_state: The provisioning state of the resource.
       Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'subnets': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'routes': {'key': 'properties.routes', 'type': '[Route]'},
          'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
          'disable_bgp_route_propagation': {'key': 'properties.disableBgpRoutePropagation', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(RouteTable, self).__init__(**kwargs)
          self.routes = kwargs.get('routes', None)
          self.subnets = None
          self.disable_bgp_route_propagation = kwargs.get('disable_bgp_route_propagation', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = kwargs.get('etag', None)
  
  
  class SecurityGroupNetworkInterface(Model):
      """Network interface and all its associated security rules.
  
      :param id: ID of the network interface.
      :type id: str
      :param security_rule_associations: All security rules associated with the
       network interface.
      :type security_rule_associations:
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleAssociations
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'security_rule_associations': {'key': 'securityRuleAssociations', 'type': 'SecurityRuleAssociations'},
      }
  
      def __init__(self, **kwargs):
          super(SecurityGroupNetworkInterface, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
          self.security_rule_associations = kwargs.get('security_rule_associations', None)
  
  
  class SecurityGroupViewParameters(Model):
      """Parameters that define the VM to check security groups for.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. ID of the target VM.
      :type target_resource_id: str
      """
  
      _validation = {
          'target_resource_id': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(SecurityGroupViewParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
  
  
  class SecurityGroupViewResult(Model):
      """The information about security rules applied to the specified VM.
  
      :param network_interfaces: List of network interfaces on the specified VM.
      :type network_interfaces:
       list[~azure.mgmt.network.v2019_02_01.models.SecurityGroupNetworkInterface]
      """
  
      _attribute_map = {
          'network_interfaces': {'key': 'networkInterfaces', 'type': '[SecurityGroupNetworkInterface]'},
      }
  
      def __init__(self, **kwargs):
          super(SecurityGroupViewResult, self).__init__(**kwargs)
          self.network_interfaces = kwargs.get('network_interfaces', None)
  
  
  class SecurityRule(SubResource):
      """Network security rule.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param description: A description for this rule. Restricted to 140 chars.
      :type description: str
      :param protocol: Required. Network protocol this rule applies to. Possible
       values are 'Tcp', 'Udp', 'Icmp', 'Esp', and '*'. Possible values include:
       'Tcp', 'Udp', 'Icmp', 'Esp', '*'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleProtocol
      :param source_port_range: The source port or range. Integer or range
       between 0 and 65535. Asterisk '*' can also be used to match all ports.
      :type source_port_range: str
      :param destination_port_range: The destination port or range. Integer or
       range between 0 and 65535. Asterisk '*' can also be used to match all
       ports.
      :type destination_port_range: str
      :param source_address_prefix: The CIDR or source IP range. Asterisk '*'
       can also be used to match all source IPs. Default tags such as
       'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If
       this is an ingress rule, specifies where network traffic originates from.
      :type source_address_prefix: str
      :param source_address_prefixes: The CIDR or source IP ranges.
      :type source_address_prefixes: list[str]
      :param source_application_security_groups: The application security group
       specified as source.
      :type source_application_security_groups:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationSecurityGroup]
      :param destination_address_prefix: The destination address prefix. CIDR or
       destination IP range. Asterisk '*' can also be used to match all source
       IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and
       'Internet' can also be used.
      :type destination_address_prefix: str
      :param destination_address_prefixes: The destination address prefixes.
       CIDR or destination IP ranges.
      :type destination_address_prefixes: list[str]
      :param destination_application_security_groups: The application security
       group specified as destination.
      :type destination_application_security_groups:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationSecurityGroup]
      :param source_port_ranges: The source port ranges.
      :type source_port_ranges: list[str]
      :param destination_port_ranges: The destination port ranges.
      :type destination_port_ranges: list[str]
      :param access: Required. The network traffic is allowed or denied.
       Possible values include: 'Allow', 'Deny'
      :type access: str or
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleAccess
      :param priority: 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.
      :type priority: int
      :param direction: Required. The direction of the rule. The direction
       specifies if rule will be evaluated on incoming or outgoing traffic.
       Possible values include: 'Inbound', 'Outbound'
      :type direction: str or
       ~azure.mgmt.network.v2019_02_01.models.SecurityRuleDirection
      :param provisioning_state: The provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'protocol': {'required': True},
          'access': {'required': True},
          'direction': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'description': {'key': 'properties.description', 'type': 'str'},
          'protocol': {'key': 'properties.protocol', 'type': 'str'},
          'source_port_range': {'key': 'properties.sourcePortRange', 'type': 'str'},
          'destination_port_range': {'key': 'properties.destinationPortRange', 'type': 'str'},
          'source_address_prefix': {'key': 'properties.sourceAddressPrefix', 'type': 'str'},
          'source_address_prefixes': {'key': 'properties.sourceAddressPrefixes', 'type': '[str]'},
          'source_application_security_groups': {'key': 'properties.sourceApplicationSecurityGroups', 'type': '[ApplicationSecurityGroup]'},
          'destination_address_prefix': {'key': 'properties.destinationAddressPrefix', 'type': 'str'},
          'destination_address_prefixes': {'key': 'properties.destinationAddressPrefixes', 'type': '[str]'},
          'destination_application_security_groups': {'key': 'properties.destinationApplicationSecurityGroups', 'type': '[ApplicationSecurityGroup]'},
          'source_port_ranges': {'key': 'properties.sourcePortRanges', 'type': '[str]'},
          'destination_port_ranges': {'key': 'properties.destinationPortRanges', 'type': '[str]'},
          'access': {'key': 'properties.access', 'type': 'str'},
          'priority': {'key': 'properties.priority', 'type': 'int'},
          'direction': {'key': 'properties.direction', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(SecurityRule, self).__init__(**kwargs)
          self.description = kwargs.get('description', None)
          self.protocol = kwargs.get('protocol', None)
          self.source_port_range = kwargs.get('source_port_range', None)
          self.destination_port_range = kwargs.get('destination_port_range', None)
          self.source_address_prefix = kwargs.get('source_address_prefix', None)
          self.source_address_prefixes = kwargs.get('source_address_prefixes', None)
          self.source_application_security_groups = kwargs.get('source_application_security_groups', None)
          self.destination_address_prefix = kwargs.get('destination_address_prefix', None)
          self.destination_address_prefixes = kwargs.get('destination_address_prefixes', None)
          self.destination_application_security_groups = kwargs.get('destination_application_security_groups', None)
          self.source_port_ranges = kwargs.get('source_port_ranges', None)
          self.destination_port_ranges = kwargs.get('destination_port_ranges', None)
          self.access = kwargs.get('access', None)
          self.priority = kwargs.get('priority', None)
          self.direction = kwargs.get('direction', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class SecurityRuleAssociations(Model):
      """All security rules associated with the network interface.
  
      :param network_interface_association: Network interface and it's custom
       security rules.
      :type network_interface_association:
       ~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceAssociation
      :param subnet_association: Subnet and it's custom security rules.
      :type subnet_association:
       ~azure.mgmt.network.v2019_02_01.models.SubnetAssociation
      :param default_security_rules: Collection of default security rules of the
       network security group.
      :type default_security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SecurityRule]
      :param effective_security_rules: Collection of effective security rules.
      :type effective_security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.EffectiveNetworkSecurityRule]
      """
  
      _attribute_map = {
          'network_interface_association': {'key': 'networkInterfaceAssociation', 'type': 'NetworkInterfaceAssociation'},
          'subnet_association': {'key': 'subnetAssociation', 'type': 'SubnetAssociation'},
          'default_security_rules': {'key': 'defaultSecurityRules', 'type': '[SecurityRule]'},
          'effective_security_rules': {'key': 'effectiveSecurityRules', 'type': '[EffectiveNetworkSecurityRule]'},
      }
  
      def __init__(self, **kwargs):
          super(SecurityRuleAssociations, self).__init__(**kwargs)
          self.network_interface_association = kwargs.get('network_interface_association', None)
          self.subnet_association = kwargs.get('subnet_association', None)
          self.default_security_rules = kwargs.get('default_security_rules', None)
          self.effective_security_rules = kwargs.get('effective_security_rules', None)
  
  
  class ServiceAssociationLink(SubResource):
      """ServiceAssociationLink resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param linked_resource_type: Resource type of the linked resource.
      :type linked_resource_type: str
      :param link: Link to the external resource.
      :type link: str
      :ivar provisioning_state: Provisioning state of the ServiceAssociationLink
       resource.
      :vartype provisioning_state: str
      :param name: Name of the resource that is unique within a resource group.
       This name can be used to access the resource.
      :type name: str
      :ivar etag: A unique read-only string that changes whenever the resource
       is updated.
      :vartype etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'linked_resource_type': {'key': 'properties.linkedResourceType', 'type': 'str'},
          'link': {'key': 'properties.link', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ServiceAssociationLink, self).__init__(**kwargs)
          self.linked_resource_type = kwargs.get('linked_resource_type', None)
          self.link = kwargs.get('link', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class ServiceAssociationLinksListResult(Model):
      """Response for ServiceAssociationLinks_Get operation.
  
      :param value: The service association links in a subnet.
      :type value:
       list[~azure.mgmt.network.v2019_02_01.models.ServiceAssociationLink]
      :param next_link: The URL to get the next set of results.
      :type next_link: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ServiceAssociationLink]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ServiceAssociationLinksListResult, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.next_link = kwargs.get('next_link', None)
  
  
  class ServiceEndpointPolicy(Resource):
      """Service End point policy resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param service_endpoint_policy_definitions: A collection of service
       endpoint policy definitions of the service endpoint policy.
      :type service_endpoint_policy_definitions:
       list[~azure.mgmt.network.v2019_02_01.models.ServiceEndpointPolicyDefinition]
      :ivar subnets: A collection of references to subnets.
      :vartype subnets: list[~azure.mgmt.network.v2019_02_01.models.Subnet]
      :ivar resource_guid: The resource GUID property of the service endpoint
       policy resource.
      :vartype resource_guid: str
      :ivar provisioning_state: The provisioning state of the service endpoint
       policy. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'subnets': {'readonly': True},
          'resource_guid': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'service_endpoint_policy_definitions': {'key': 'properties.serviceEndpointPolicyDefinitions', 'type': '[ServiceEndpointPolicyDefinition]'},
          'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ServiceEndpointPolicy, self).__init__(**kwargs)
          self.service_endpoint_policy_definitions = kwargs.get('service_endpoint_policy_definitions', None)
          self.subnets = None
          self.resource_guid = None
          self.provisioning_state = None
          self.etag = kwargs.get('etag', None)
  
  
  class ServiceEndpointPolicyDefinition(SubResource):
      """Service Endpoint policy definitions.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param description: A description for this rule. Restricted to 140 chars.
      :type description: str
      :param service: Service endpoint name.
      :type service: str
      :param service_resources: A list of service resources.
      :type service_resources: list[str]
      :ivar provisioning_state: The provisioning state of the service end point
       policy definition. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'description': {'key': 'properties.description', 'type': 'str'},
          'service': {'key': 'properties.service', 'type': 'str'},
          'service_resources': {'key': 'properties.serviceResources', 'type': '[str]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ServiceEndpointPolicyDefinition, self).__init__(**kwargs)
          self.description = kwargs.get('description', None)
          self.service = kwargs.get('service', None)
          self.service_resources = kwargs.get('service_resources', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class ServiceEndpointPropertiesFormat(Model):
      """The service endpoint properties.
  
      :param service: The type of the endpoint service.
      :type service: str
      :param locations: A list of locations.
      :type locations: list[str]
      :param provisioning_state: The provisioning state of the resource.
      :type provisioning_state: str
      """
  
      _attribute_map = {
          'service': {'key': 'service', 'type': 'str'},
          'locations': {'key': 'locations', 'type': '[str]'},
          'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(ServiceEndpointPropertiesFormat, self).__init__(**kwargs)
          self.service = kwargs.get('service', None)
          self.locations = kwargs.get('locations', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
  
  
  class Subnet(SubResource):
      """Subnet in a virtual network resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param address_prefix: The address prefix for the subnet.
      :type address_prefix: str
      :param address_prefixes: List of  address prefixes for the subnet.
      :type address_prefixes: list[str]
      :param network_security_group: The reference of the NetworkSecurityGroup
       resource.
      :type network_security_group:
       ~azure.mgmt.network.v2019_02_01.models.NetworkSecurityGroup
      :param route_table: The reference of the RouteTable resource.
      :type route_table: ~azure.mgmt.network.v2019_02_01.models.RouteTable
      :param nat_gateway: Nat gateway associated with this subnet.
      :type nat_gateway: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param service_endpoints: An array of service endpoints.
      :type service_endpoints:
       list[~azure.mgmt.network.v2019_02_01.models.ServiceEndpointPropertiesFormat]
      :param service_endpoint_policies: An array of service endpoint policies.
      :type service_endpoint_policies:
       list[~azure.mgmt.network.v2019_02_01.models.ServiceEndpointPolicy]
      :ivar interface_endpoints: An array of references to interface endpoints
      :vartype interface_endpoints:
       list[~azure.mgmt.network.v2019_02_01.models.InterfaceEndpoint]
      :ivar ip_configurations: Gets an array of references to the network
       interface IP configurations using subnet.
      :vartype ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.IPConfiguration]
      :ivar ip_configuration_profiles: Array of IP configuration profiles which
       reference this subnet.
      :vartype ip_configuration_profiles:
       list[~azure.mgmt.network.v2019_02_01.models.IPConfigurationProfile]
      :param resource_navigation_links: Gets an array of references to the
       external resources using subnet.
      :type resource_navigation_links:
       list[~azure.mgmt.network.v2019_02_01.models.ResourceNavigationLink]
      :param service_association_links: Gets an array of references to services
       injecting into this subnet.
      :type service_association_links:
       list[~azure.mgmt.network.v2019_02_01.models.ServiceAssociationLink]
      :param delegations: Gets an array of references to the delegations on the
       subnet.
      :type delegations: list[~azure.mgmt.network.v2019_02_01.models.Delegation]
      :ivar purpose: A read-only string identifying the intention of use for
       this subnet based on delegations and other user-defined properties.
      :vartype purpose: str
      :param provisioning_state: The provisioning state of the resource.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'interface_endpoints': {'readonly': True},
          'ip_configurations': {'readonly': True},
          'ip_configuration_profiles': {'readonly': True},
          'purpose': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
          'address_prefixes': {'key': 'properties.addressPrefixes', 'type': '[str]'},
          'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'NetworkSecurityGroup'},
          'route_table': {'key': 'properties.routeTable', 'type': 'RouteTable'},
          'nat_gateway': {'key': 'properties.natGateway', 'type': 'SubResource'},
          'service_endpoints': {'key': 'properties.serviceEndpoints', 'type': '[ServiceEndpointPropertiesFormat]'},
          'service_endpoint_policies': {'key': 'properties.serviceEndpointPolicies', 'type': '[ServiceEndpointPolicy]'},
          'interface_endpoints': {'key': 'properties.interfaceEndpoints', 'type': '[InterfaceEndpoint]'},
          'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[IPConfiguration]'},
          'ip_configuration_profiles': {'key': 'properties.ipConfigurationProfiles', 'type': '[IPConfigurationProfile]'},
          'resource_navigation_links': {'key': 'properties.resourceNavigationLinks', 'type': '[ResourceNavigationLink]'},
          'service_association_links': {'key': 'properties.serviceAssociationLinks', 'type': '[ServiceAssociationLink]'},
          'delegations': {'key': 'properties.delegations', 'type': '[Delegation]'},
          'purpose': {'key': 'properties.purpose', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(Subnet, self).__init__(**kwargs)
          self.address_prefix = kwargs.get('address_prefix', None)
          self.address_prefixes = kwargs.get('address_prefixes', None)
          self.network_security_group = kwargs.get('network_security_group', None)
          self.route_table = kwargs.get('route_table', None)
          self.nat_gateway = kwargs.get('nat_gateway', None)
          self.service_endpoints = kwargs.get('service_endpoints', None)
          self.service_endpoint_policies = kwargs.get('service_endpoint_policies', None)
          self.interface_endpoints = None
          self.ip_configurations = None
          self.ip_configuration_profiles = None
          self.resource_navigation_links = kwargs.get('resource_navigation_links', None)
          self.service_association_links = kwargs.get('service_association_links', None)
          self.delegations = kwargs.get('delegations', None)
          self.purpose = None
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class SubnetAssociation(Model):
      """Subnet and it's custom security rules.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar id: Subnet ID.
      :vartype id: str
      :param security_rules: Collection of custom security rules.
      :type security_rules:
       list[~azure.mgmt.network.v2019_02_01.models.SecurityRule]
      """
  
      _validation = {
          'id': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'security_rules': {'key': 'securityRules', 'type': '[SecurityRule]'},
      }
  
      def __init__(self, **kwargs):
          super(SubnetAssociation, self).__init__(**kwargs)
          self.id = None
          self.security_rules = kwargs.get('security_rules', None)
  
  
  class TagsObject(Model):
      """Tags object for patch operations.
  
      :param tags: Resource tags.
      :type tags: dict[str, str]
      """
  
      _attribute_map = {
          'tags': {'key': 'tags', 'type': '{str}'},
      }
  
      def __init__(self, **kwargs):
          super(TagsObject, self).__init__(**kwargs)
          self.tags = kwargs.get('tags', None)
  
  
  class Topology(Model):
      """Topology of the specified resource group.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar id: GUID representing the operation id.
      :vartype id: str
      :ivar created_date_time: The datetime when the topology was initially
       created for the resource group.
      :vartype created_date_time: datetime
      :ivar last_modified: The datetime when the topology was last modified.
      :vartype last_modified: datetime
      :param resources: A list of topology resources.
      :type resources:
       list[~azure.mgmt.network.v2019_02_01.models.TopologyResource]
      """
  
      _validation = {
          'id': {'readonly': True},
          'created_date_time': {'readonly': True},
          'last_modified': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'created_date_time': {'key': 'createdDateTime', 'type': 'iso-8601'},
          'last_modified': {'key': 'lastModified', 'type': 'iso-8601'},
          'resources': {'key': 'resources', 'type': '[TopologyResource]'},
      }
  
      def __init__(self, **kwargs):
          super(Topology, self).__init__(**kwargs)
          self.id = None
          self.created_date_time = None
          self.last_modified = None
          self.resources = kwargs.get('resources', None)
  
  
  class TopologyAssociation(Model):
      """Resources that have an association with the parent resource.
  
      :param name: The name of the resource that is associated with the parent
       resource.
      :type name: str
      :param resource_id: The ID of the resource that is associated with the
       parent resource.
      :type resource_id: str
      :param association_type: The association type of the child resource to the
       parent resource. Possible values include: 'Associated', 'Contains'
      :type association_type: str or
       ~azure.mgmt.network.v2019_02_01.models.AssociationType
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'association_type': {'key': 'associationType', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(TopologyAssociation, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.resource_id = kwargs.get('resource_id', None)
          self.association_type = kwargs.get('association_type', None)
  
  
  class TopologyParameters(Model):
      """Parameters that define the representation of topology.
  
      :param target_resource_group_name: The name of the target resource group
       to perform topology on.
      :type target_resource_group_name: str
      :param target_virtual_network: The reference of the Virtual Network
       resource.
      :type target_virtual_network:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param target_subnet: The reference of the Subnet resource.
      :type target_subnet: ~azure.mgmt.network.v2019_02_01.models.SubResource
      """
  
      _attribute_map = {
          'target_resource_group_name': {'key': 'targetResourceGroupName', 'type': 'str'},
          'target_virtual_network': {'key': 'targetVirtualNetwork', 'type': 'SubResource'},
          'target_subnet': {'key': 'targetSubnet', 'type': 'SubResource'},
      }
  
      def __init__(self, **kwargs):
          super(TopologyParameters, self).__init__(**kwargs)
          self.target_resource_group_name = kwargs.get('target_resource_group_name', None)
          self.target_virtual_network = kwargs.get('target_virtual_network', None)
          self.target_subnet = kwargs.get('target_subnet', None)
  
  
  class TopologyResource(Model):
      """The network resource topology information for the given resource group.
  
      :param name: Name of the resource.
      :type name: str
      :param id: ID of the resource.
      :type id: str
      :param location: Resource location.
      :type location: str
      :param associations: Holds the associations the resource has with other
       resources in the resource group.
      :type associations:
       list[~azure.mgmt.network.v2019_02_01.models.TopologyAssociation]
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'associations': {'key': 'associations', 'type': '[TopologyAssociation]'},
      }
  
      def __init__(self, **kwargs):
          super(TopologyResource, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.id = kwargs.get('id', None)
          self.location = kwargs.get('location', None)
          self.associations = kwargs.get('associations', None)
  
  
  class TrafficAnalyticsConfigurationProperties(Model):
      """Parameters that define the configuration of traffic analytics.
  
      All required parameters must be populated in order to send to Azure.
  
      :param enabled: Required. Flag to enable/disable traffic analytics.
      :type enabled: bool
      :param workspace_id: Required. The resource guid of the attached workspace
      :type workspace_id: str
      :param workspace_region: Required. The location of the attached workspace
      :type workspace_region: str
      :param workspace_resource_id: Required. Resource Id of the attached
       workspace
      :type workspace_resource_id: str
      :param traffic_analytics_interval: The interval in minutes which would
       decide how frequently TA service should do flow analytics
      :type traffic_analytics_interval: int
      """
  
      _validation = {
          'enabled': {'required': True},
          'workspace_id': {'required': True},
          'workspace_region': {'required': True},
          'workspace_resource_id': {'required': True},
      }
  
      _attribute_map = {
          'enabled': {'key': 'enabled', 'type': 'bool'},
          'workspace_id': {'key': 'workspaceId', 'type': 'str'},
          'workspace_region': {'key': 'workspaceRegion', 'type': 'str'},
          'workspace_resource_id': {'key': 'workspaceResourceId', 'type': 'str'},
          'traffic_analytics_interval': {'key': 'trafficAnalyticsInterval', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(TrafficAnalyticsConfigurationProperties, self).__init__(**kwargs)
          self.enabled = kwargs.get('enabled', None)
          self.workspace_id = kwargs.get('workspace_id', None)
          self.workspace_region = kwargs.get('workspace_region', None)
          self.workspace_resource_id = kwargs.get('workspace_resource_id', None)
          self.traffic_analytics_interval = kwargs.get('traffic_analytics_interval', None)
  
  
  class TrafficAnalyticsProperties(Model):
      """Parameters that define the configuration of traffic analytics.
  
      All required parameters must be populated in order to send to Azure.
  
      :param network_watcher_flow_analytics_configuration: Required. Parameters
       that define the configuration of traffic analytics.
      :type network_watcher_flow_analytics_configuration:
       ~azure.mgmt.network.v2019_02_01.models.TrafficAnalyticsConfigurationProperties
      """
  
      _validation = {
          'network_watcher_flow_analytics_configuration': {'required': True},
      }
  
      _attribute_map = {
          'network_watcher_flow_analytics_configuration': {'key': 'networkWatcherFlowAnalyticsConfiguration', 'type': 'TrafficAnalyticsConfigurationProperties'},
      }
  
      def __init__(self, **kwargs):
          super(TrafficAnalyticsProperties, self).__init__(**kwargs)
          self.network_watcher_flow_analytics_configuration = kwargs.get('network_watcher_flow_analytics_configuration', None)
  
  
  class TroubleshootingDetails(Model):
      """Information gained from troubleshooting of specified resource.
  
      :param id: The id of the get troubleshoot operation.
      :type id: str
      :param reason_type: Reason type of failure.
      :type reason_type: str
      :param summary: A summary of troubleshooting.
      :type summary: str
      :param detail: Details on troubleshooting results.
      :type detail: str
      :param recommended_actions: List of recommended actions.
      :type recommended_actions:
       list[~azure.mgmt.network.v2019_02_01.models.TroubleshootingRecommendedActions]
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'reason_type': {'key': 'reasonType', 'type': 'str'},
          'summary': {'key': 'summary', 'type': 'str'},
          'detail': {'key': 'detail', 'type': 'str'},
          'recommended_actions': {'key': 'recommendedActions', 'type': '[TroubleshootingRecommendedActions]'},
      }
  
      def __init__(self, **kwargs):
          super(TroubleshootingDetails, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
          self.reason_type = kwargs.get('reason_type', None)
          self.summary = kwargs.get('summary', None)
          self.detail = kwargs.get('detail', None)
          self.recommended_actions = kwargs.get('recommended_actions', None)
  
  
  class TroubleshootingParameters(Model):
      """Parameters that define the resource to troubleshoot.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The target resource to troubleshoot.
      :type target_resource_id: str
      :param storage_id: Required. The ID for the storage account to save the
       troubleshoot result.
      :type storage_id: str
      :param storage_path: Required. The path to the blob to save the
       troubleshoot result in.
      :type storage_path: str
      """
  
      _validation = {
          'target_resource_id': {'required': True},
          'storage_id': {'required': True},
          'storage_path': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
          'storage_id': {'key': 'properties.storageId', 'type': 'str'},
          'storage_path': {'key': 'properties.storagePath', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(TroubleshootingParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
          self.storage_id = kwargs.get('storage_id', None)
          self.storage_path = kwargs.get('storage_path', None)
  
  
  class TroubleshootingRecommendedActions(Model):
      """Recommended actions based on discovered issues.
  
      :param action_id: ID of the recommended action.
      :type action_id: str
      :param action_text: Description of recommended actions.
      :type action_text: str
      :param action_uri: The uri linking to a documentation for the recommended
       troubleshooting actions.
      :type action_uri: str
      :param action_uri_text: The information from the URI for the recommended
       troubleshooting actions.
      :type action_uri_text: str
      """
  
      _attribute_map = {
          'action_id': {'key': 'actionId', 'type': 'str'},
          'action_text': {'key': 'actionText', 'type': 'str'},
          'action_uri': {'key': 'actionUri', 'type': 'str'},
          'action_uri_text': {'key': 'actionUriText', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(TroubleshootingRecommendedActions, self).__init__(**kwargs)
          self.action_id = kwargs.get('action_id', None)
          self.action_text = kwargs.get('action_text', None)
          self.action_uri = kwargs.get('action_uri', None)
          self.action_uri_text = kwargs.get('action_uri_text', None)
  
  
  class TroubleshootingResult(Model):
      """Troubleshooting information gained from specified resource.
  
      :param start_time: The start time of the troubleshooting.
      :type start_time: datetime
      :param end_time: The end time of the troubleshooting.
      :type end_time: datetime
      :param code: The result code of the troubleshooting.
      :type code: str
      :param results: Information from troubleshooting.
      :type results:
       list[~azure.mgmt.network.v2019_02_01.models.TroubleshootingDetails]
      """
  
      _attribute_map = {
          'start_time': {'key': 'startTime', 'type': 'iso-8601'},
          'end_time': {'key': 'endTime', 'type': 'iso-8601'},
          'code': {'key': 'code', 'type': 'str'},
          'results': {'key': 'results', 'type': '[TroubleshootingDetails]'},
      }
  
      def __init__(self, **kwargs):
          super(TroubleshootingResult, self).__init__(**kwargs)
          self.start_time = kwargs.get('start_time', None)
          self.end_time = kwargs.get('end_time', None)
          self.code = kwargs.get('code', None)
          self.results = kwargs.get('results', None)
  
  
  class TunnelConnectionHealth(Model):
      """VirtualNetworkGatewayConnection properties.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar tunnel: Tunnel name.
      :vartype tunnel: str
      :ivar connection_status: Virtual Network Gateway connection status.
       Possible values include: 'Unknown', 'Connecting', 'Connected',
       'NotConnected'
      :vartype connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionStatus
      :ivar ingress_bytes_transferred: The Ingress Bytes Transferred in this
       connection
      :vartype ingress_bytes_transferred: long
      :ivar egress_bytes_transferred: The Egress Bytes Transferred in this
       connection
      :vartype egress_bytes_transferred: long
      :ivar last_connection_established_utc_time: The time at which connection
       was established in Utc format.
      :vartype last_connection_established_utc_time: str
      """
  
      _validation = {
          'tunnel': {'readonly': True},
          'connection_status': {'readonly': True},
          'ingress_bytes_transferred': {'readonly': True},
          'egress_bytes_transferred': {'readonly': True},
          'last_connection_established_utc_time': {'readonly': True},
      }
  
      _attribute_map = {
          'tunnel': {'key': 'tunnel', 'type': 'str'},
          'connection_status': {'key': 'connectionStatus', 'type': 'str'},
          'ingress_bytes_transferred': {'key': 'ingressBytesTransferred', 'type': 'long'},
          'egress_bytes_transferred': {'key': 'egressBytesTransferred', 'type': 'long'},
          'last_connection_established_utc_time': {'key': 'lastConnectionEstablishedUtcTime', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(TunnelConnectionHealth, self).__init__(**kwargs)
          self.tunnel = None
          self.connection_status = None
          self.ingress_bytes_transferred = None
          self.egress_bytes_transferred = None
          self.last_connection_established_utc_time = None
  
  
  class Usage(Model):
      """Describes network resource usage.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :ivar id: Resource identifier.
      :vartype id: str
      :ivar unit: Required. An enum describing the unit of measurement. Default
       value: "Count" .
      :vartype unit: str
      :param current_value: Required. The current value of the usage.
      :type current_value: long
      :param limit: Required. The limit of usage.
      :type limit: long
      :param name: Required. The name of the type of usage.
      :type name: ~azure.mgmt.network.v2019_02_01.models.UsageName
      """
  
      _validation = {
          'id': {'readonly': True},
          'unit': {'required': True, 'constant': True},
          'current_value': {'required': True},
          'limit': {'required': True},
          'name': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'unit': {'key': 'unit', 'type': 'str'},
          'current_value': {'key': 'currentValue', 'type': 'long'},
          'limit': {'key': 'limit', 'type': 'long'},
          'name': {'key': 'name', 'type': 'UsageName'},
      }
  
      unit = "Count"
  
      def __init__(self, **kwargs):
          super(Usage, self).__init__(**kwargs)
          self.id = None
          self.current_value = kwargs.get('current_value', None)
          self.limit = kwargs.get('limit', None)
          self.name = kwargs.get('name', None)
  
  
  class UsageName(Model):
      """The usage names.
  
      :param value: A string describing the resource name.
      :type value: str
      :param localized_value: A localized string describing the resource name.
      :type localized_value: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': 'str'},
          'localized_value': {'key': 'localizedValue', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(UsageName, self).__init__(**kwargs)
          self.value = kwargs.get('value', None)
          self.localized_value = kwargs.get('localized_value', None)
  
  
  class VerificationIPFlowParameters(Model):
      """Parameters that define the IP flow to be verified.
  
      All required parameters must be populated in order to send to Azure.
  
      :param target_resource_id: Required. The ID of the target resource to
       perform next-hop on.
      :type target_resource_id: str
      :param direction: Required. The direction of the packet represented as a
       5-tuple. Possible values include: 'Inbound', 'Outbound'
      :type direction: str or ~azure.mgmt.network.v2019_02_01.models.Direction
      :param protocol: Required. Protocol to be verified on. Possible values
       include: 'TCP', 'UDP'
      :type protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.IpFlowProtocol
      :param local_port: Required. The local port. Acceptable values are a
       single integer in the range (0-65535). Support for * for the source port,
       which depends on the direction.
      :type local_port: str
      :param remote_port: Required. The remote port. Acceptable values are a
       single integer in the range (0-65535). Support for * for the source port,
       which depends on the direction.
      :type remote_port: str
      :param local_ip_address: Required. The local IP address. Acceptable values
       are valid IPv4 addresses.
      :type local_ip_address: str
      :param remote_ip_address: Required. The remote IP address. Acceptable
       values are valid IPv4 addresses.
      :type remote_ip_address: str
      :param target_nic_resource_id: The NIC ID. (If VM has multiple NICs and IP
       forwarding is enabled on any of them, then this parameter must be
       specified. Otherwise optional).
      :type target_nic_resource_id: str
      """
  
      _validation = {
          'target_resource_id': {'required': True},
          'direction': {'required': True},
          'protocol': {'required': True},
          'local_port': {'required': True},
          'remote_port': {'required': True},
          'local_ip_address': {'required': True},
          'remote_ip_address': {'required': True},
      }
  
      _attribute_map = {
          'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
          'direction': {'key': 'direction', 'type': 'str'},
          'protocol': {'key': 'protocol', 'type': 'str'},
          'local_port': {'key': 'localPort', 'type': 'str'},
          'remote_port': {'key': 'remotePort', 'type': 'str'},
          'local_ip_address': {'key': 'localIPAddress', 'type': 'str'},
          'remote_ip_address': {'key': 'remoteIPAddress', 'type': 'str'},
          'target_nic_resource_id': {'key': 'targetNicResourceId', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VerificationIPFlowParameters, self).__init__(**kwargs)
          self.target_resource_id = kwargs.get('target_resource_id', None)
          self.direction = kwargs.get('direction', None)
          self.protocol = kwargs.get('protocol', None)
          self.local_port = kwargs.get('local_port', None)
          self.remote_port = kwargs.get('remote_port', None)
          self.local_ip_address = kwargs.get('local_ip_address', None)
          self.remote_ip_address = kwargs.get('remote_ip_address', None)
          self.target_nic_resource_id = kwargs.get('target_nic_resource_id', None)
  
  
  class VerificationIPFlowResult(Model):
      """Results of IP flow verification on the target resource.
  
      :param access: Indicates whether the traffic is allowed or denied.
       Possible values include: 'Allow', 'Deny'
      :type access: str or ~azure.mgmt.network.v2019_02_01.models.Access
      :param rule_name: Name of the rule. If input is not matched against any
       security rule, it is not displayed.
      :type rule_name: str
      """
  
      _attribute_map = {
          'access': {'key': 'access', 'type': 'str'},
          'rule_name': {'key': 'ruleName', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VerificationIPFlowResult, self).__init__(**kwargs)
          self.access = kwargs.get('access', None)
          self.rule_name = kwargs.get('rule_name', None)
  
  
  class VirtualHub(Resource):
      """VirtualHub Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param virtual_wan: The VirtualWAN to which the VirtualHub belongs
      :type virtual_wan: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param vpn_gateway: The VpnGateway associated with this VirtualHub
      :type vpn_gateway: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param p2_svpn_gateway: The P2SVpnGateway associated with this VirtualHub
      :type p2_svpn_gateway: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param express_route_gateway: The expressRouteGateway associated with this
       VirtualHub
      :type express_route_gateway:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param virtual_network_connections: List of all vnet connections with this
       VirtualHub.
      :type virtual_network_connections:
       list[~azure.mgmt.network.v2019_02_01.models.HubVirtualNetworkConnection]
      :param address_prefix: Address-prefix for this VirtualHub.
      :type address_prefix: str
      :param route_table: The routeTable associated with this virtual hub.
      :type route_table:
       ~azure.mgmt.network.v2019_02_01.models.VirtualHubRouteTable
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'virtual_wan': {'key': 'properties.virtualWan', 'type': 'SubResource'},
          'vpn_gateway': {'key': 'properties.vpnGateway', 'type': 'SubResource'},
          'p2_svpn_gateway': {'key': 'properties.p2SVpnGateway', 'type': 'SubResource'},
          'express_route_gateway': {'key': 'properties.expressRouteGateway', 'type': 'SubResource'},
          'virtual_network_connections': {'key': 'properties.virtualNetworkConnections', 'type': '[HubVirtualNetworkConnection]'},
          'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
          'route_table': {'key': 'properties.routeTable', 'type': 'VirtualHubRouteTable'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualHub, self).__init__(**kwargs)
          self.virtual_wan = kwargs.get('virtual_wan', None)
          self.vpn_gateway = kwargs.get('vpn_gateway', None)
          self.p2_svpn_gateway = kwargs.get('p2_svpn_gateway', None)
          self.express_route_gateway = kwargs.get('express_route_gateway', None)
          self.virtual_network_connections = kwargs.get('virtual_network_connections', None)
          self.address_prefix = kwargs.get('address_prefix', None)
          self.route_table = kwargs.get('route_table', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = None
  
  
  class VirtualHubId(Model):
      """Virtual Hub identifier.
  
      :param id: The resource URI for the Virtual Hub where the ExpressRoute
       gateway is or will be deployed. The Virtual Hub resource and the
       ExpressRoute gateway resource reside in the same subscription.
      :type id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualHubId, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class VirtualHubRoute(Model):
      """VirtualHub route.
  
      :param address_prefixes: List of all addressPrefixes.
      :type address_prefixes: list[str]
      :param next_hop_ip_address: NextHop ip address.
      :type next_hop_ip_address: str
      """
  
      _attribute_map = {
          'address_prefixes': {'key': 'addressPrefixes', 'type': '[str]'},
          'next_hop_ip_address': {'key': 'nextHopIpAddress', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualHubRoute, self).__init__(**kwargs)
          self.address_prefixes = kwargs.get('address_prefixes', None)
          self.next_hop_ip_address = kwargs.get('next_hop_ip_address', None)
  
  
  class VirtualHubRouteTable(Model):
      """VirtualHub route table.
  
      :param routes: List of all routes.
      :type routes: list[~azure.mgmt.network.v2019_02_01.models.VirtualHubRoute]
      """
  
      _attribute_map = {
          'routes': {'key': 'routes', 'type': '[VirtualHubRoute]'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualHubRouteTable, self).__init__(**kwargs)
          self.routes = kwargs.get('routes', None)
  
  
  class VirtualNetwork(Resource):
      """Virtual Network resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param address_space: The AddressSpace that contains an array of IP
       address ranges that can be used by subnets.
      :type address_space: ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param dhcp_options: The dhcpOptions that contains an array of DNS servers
       available to VMs deployed in the virtual network.
      :type dhcp_options: ~azure.mgmt.network.v2019_02_01.models.DhcpOptions
      :param subnets: A list of subnets in a Virtual Network.
      :type subnets: list[~azure.mgmt.network.v2019_02_01.models.Subnet]
      :param virtual_network_peerings: A list of peerings in a Virtual Network.
      :type virtual_network_peerings:
       list[~azure.mgmt.network.v2019_02_01.models.VirtualNetworkPeering]
      :param resource_guid: The resourceGuid property of the Virtual Network
       resource.
      :type resource_guid: str
      :param provisioning_state: The provisioning state of the PublicIP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :type provisioning_state: str
      :param enable_ddos_protection: Indicates if DDoS protection is enabled for
       all the protected resources in the virtual network. It requires a DDoS
       protection plan associated with the resource. Default value: False .
      :type enable_ddos_protection: bool
      :param enable_vm_protection: Indicates if VM protection is enabled for all
       the subnets in the virtual network. Default value: False .
      :type enable_vm_protection: bool
      :param ddos_protection_plan: The DDoS protection plan associated with the
       virtual network.
      :type ddos_protection_plan:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'address_space': {'key': 'properties.addressSpace', 'type': 'AddressSpace'},
          'dhcp_options': {'key': 'properties.dhcpOptions', 'type': 'DhcpOptions'},
          'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
          'virtual_network_peerings': {'key': 'properties.virtualNetworkPeerings', 'type': '[VirtualNetworkPeering]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'enable_ddos_protection': {'key': 'properties.enableDdosProtection', 'type': 'bool'},
          'enable_vm_protection': {'key': 'properties.enableVmProtection', 'type': 'bool'},
          'ddos_protection_plan': {'key': 'properties.ddosProtectionPlan', 'type': 'SubResource'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetwork, self).__init__(**kwargs)
          self.address_space = kwargs.get('address_space', None)
          self.dhcp_options = kwargs.get('dhcp_options', None)
          self.subnets = kwargs.get('subnets', None)
          self.virtual_network_peerings = kwargs.get('virtual_network_peerings', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.enable_ddos_protection = kwargs.get('enable_ddos_protection', False)
          self.enable_vm_protection = kwargs.get('enable_vm_protection', False)
          self.ddos_protection_plan = kwargs.get('ddos_protection_plan', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkConnectionGatewayReference(Model):
      """A reference to VirtualNetworkGateway or LocalNetworkGateway resource.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Required. The ID of VirtualNetworkGateway or
       LocalNetworkGateway resource.
      :type id: str
      """
  
      _validation = {
          'id': {'required': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkConnectionGatewayReference, self).__init__(**kwargs)
          self.id = kwargs.get('id', None)
  
  
  class VirtualNetworkGateway(Resource):
      """A common class for general resource information.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param ip_configurations: IP configurations for virtual network gateway.
      :type ip_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayIPConfiguration]
      :param gateway_type: The type of this virtual network gateway. Possible
       values are: 'Vpn' and 'ExpressRoute'. Possible values include: 'Vpn',
       'ExpressRoute'
      :type gateway_type: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayType
      :param vpn_type: The type of this virtual network gateway. Possible values
       are: 'PolicyBased' and 'RouteBased'. Possible values include:
       'PolicyBased', 'RouteBased'
      :type vpn_type: str or ~azure.mgmt.network.v2019_02_01.models.VpnType
      :param enable_bgp: Whether BGP is enabled for this virtual network gateway
       or not.
      :type enable_bgp: bool
      :param active_active: ActiveActive flag
      :type active_active: bool
      :param gateway_default_site: The reference of the LocalNetworkGateway
       resource which represents local network site having default routes. Assign
       Null value in case of removing existing default site setting.
      :type gateway_default_site:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param sku: The reference of the VirtualNetworkGatewaySku resource which
       represents the SKU selected for Virtual network gateway.
      :type sku: ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewaySku
      :param vpn_client_configuration: The reference of the
       VpnClientConfiguration resource which represents the P2S VpnClient
       configurations.
      :type vpn_client_configuration:
       ~azure.mgmt.network.v2019_02_01.models.VpnClientConfiguration
      :param bgp_settings: Virtual network gateway's BGP speaker settings.
      :type bgp_settings: ~azure.mgmt.network.v2019_02_01.models.BgpSettings
      :param custom_routes: The reference of the address space resource which
       represents the custom routes address space specified by the customer for
       virtual network gateway and VpnClient.
      :type custom_routes: ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param resource_guid: The resource GUID property of the
       VirtualNetworkGateway resource.
      :type resource_guid: str
      :ivar provisioning_state: The provisioning state of the
       VirtualNetworkGateway resource. Possible values are: 'Updating',
       'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualNetworkGatewayIPConfiguration]'},
          'gateway_type': {'key': 'properties.gatewayType', 'type': 'str'},
          'vpn_type': {'key': 'properties.vpnType', 'type': 'str'},
          'enable_bgp': {'key': 'properties.enableBgp', 'type': 'bool'},
          'active_active': {'key': 'properties.activeActive', 'type': 'bool'},
          'gateway_default_site': {'key': 'properties.gatewayDefaultSite', 'type': 'SubResource'},
          'sku': {'key': 'properties.sku', 'type': 'VirtualNetworkGatewaySku'},
          'vpn_client_configuration': {'key': 'properties.vpnClientConfiguration', 'type': 'VpnClientConfiguration'},
          'bgp_settings': {'key': 'properties.bgpSettings', 'type': 'BgpSettings'},
          'custom_routes': {'key': 'properties.customRoutes', 'type': 'AddressSpace'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkGateway, self).__init__(**kwargs)
          self.ip_configurations = kwargs.get('ip_configurations', None)
          self.gateway_type = kwargs.get('gateway_type', None)
          self.vpn_type = kwargs.get('vpn_type', None)
          self.enable_bgp = kwargs.get('enable_bgp', None)
          self.active_active = kwargs.get('active_active', None)
          self.gateway_default_site = kwargs.get('gateway_default_site', None)
          self.sku = kwargs.get('sku', None)
          self.vpn_client_configuration = kwargs.get('vpn_client_configuration', None)
          self.bgp_settings = kwargs.get('bgp_settings', None)
          self.custom_routes = kwargs.get('custom_routes', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = None
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkGatewayConnection(Resource):
      """A common class for general resource information.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param authorization_key: The authorizationKey.
      :type authorization_key: str
      :param virtual_network_gateway1: Required. The reference to virtual
       network gateway resource.
      :type virtual_network_gateway1:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGateway
      :param virtual_network_gateway2: The reference to virtual network gateway
       resource.
      :type virtual_network_gateway2:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGateway
      :param local_network_gateway2: The reference to local network gateway
       resource.
      :type local_network_gateway2:
       ~azure.mgmt.network.v2019_02_01.models.LocalNetworkGateway
      :param connection_type: Required. Gateway connection type. Possible values
       include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
      :type connection_type: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionType
      :param connection_protocol: Connection protocol used for this connection.
       Possible values include: 'IKEv2', 'IKEv1'
      :type connection_protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionProtocol
      :param routing_weight: The routing weight.
      :type routing_weight: int
      :param shared_key: The IPSec shared key.
      :type shared_key: str
      :ivar connection_status: Virtual Network Gateway connection status.
       Possible values include: 'Unknown', 'Connecting', 'Connected',
       'NotConnected'
      :vartype connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionStatus
      :ivar tunnel_connection_status: Collection of all tunnels' connection
       health status.
      :vartype tunnel_connection_status:
       list[~azure.mgmt.network.v2019_02_01.models.TunnelConnectionHealth]
      :ivar egress_bytes_transferred: The egress bytes transferred in this
       connection.
      :vartype egress_bytes_transferred: long
      :ivar ingress_bytes_transferred: The ingress bytes transferred in this
       connection.
      :vartype ingress_bytes_transferred: long
      :param peer: The reference to peerings resource.
      :type peer: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param enable_bgp: EnableBgp flag
      :type enable_bgp: bool
      :param use_policy_based_traffic_selectors: Enable policy-based traffic
       selectors.
      :type use_policy_based_traffic_selectors: bool
      :param ipsec_policies: The IPSec Policies to be considered by this
       connection.
      :type ipsec_policies:
       list[~azure.mgmt.network.v2019_02_01.models.IpsecPolicy]
      :param resource_guid: The resource GUID property of the
       VirtualNetworkGatewayConnection resource.
      :type resource_guid: str
      :ivar provisioning_state: The provisioning state of the
       VirtualNetworkGatewayConnection resource. Possible values are: 'Updating',
       'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param express_route_gateway_bypass: Bypass ExpressRoute Gateway for data
       forwarding
      :type express_route_gateway_bypass: bool
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'virtual_network_gateway1': {'required': True},
          'connection_type': {'required': True},
          'connection_status': {'readonly': True},
          'tunnel_connection_status': {'readonly': True},
          'egress_bytes_transferred': {'readonly': True},
          'ingress_bytes_transferred': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
          'virtual_network_gateway1': {'key': 'properties.virtualNetworkGateway1', 'type': 'VirtualNetworkGateway'},
          'virtual_network_gateway2': {'key': 'properties.virtualNetworkGateway2', 'type': 'VirtualNetworkGateway'},
          'local_network_gateway2': {'key': 'properties.localNetworkGateway2', 'type': 'LocalNetworkGateway'},
          'connection_type': {'key': 'properties.connectionType', 'type': 'str'},
          'connection_protocol': {'key': 'properties.connectionProtocol', 'type': 'str'},
          'routing_weight': {'key': 'properties.routingWeight', 'type': 'int'},
          'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
          'connection_status': {'key': 'properties.connectionStatus', 'type': 'str'},
          'tunnel_connection_status': {'key': 'properties.tunnelConnectionStatus', 'type': '[TunnelConnectionHealth]'},
          'egress_bytes_transferred': {'key': 'properties.egressBytesTransferred', 'type': 'long'},
          'ingress_bytes_transferred': {'key': 'properties.ingressBytesTransferred', 'type': 'long'},
          'peer': {'key': 'properties.peer', 'type': 'SubResource'},
          'enable_bgp': {'key': 'properties.enableBgp', 'type': 'bool'},
          'use_policy_based_traffic_selectors': {'key': 'properties.usePolicyBasedTrafficSelectors', 'type': 'bool'},
          'ipsec_policies': {'key': 'properties.ipsecPolicies', 'type': '[IpsecPolicy]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'express_route_gateway_bypass': {'key': 'properties.expressRouteGatewayBypass', 'type': 'bool'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkGatewayConnection, self).__init__(**kwargs)
          self.authorization_key = kwargs.get('authorization_key', None)
          self.virtual_network_gateway1 = kwargs.get('virtual_network_gateway1', None)
          self.virtual_network_gateway2 = kwargs.get('virtual_network_gateway2', None)
          self.local_network_gateway2 = kwargs.get('local_network_gateway2', None)
          self.connection_type = kwargs.get('connection_type', None)
          self.connection_protocol = kwargs.get('connection_protocol', None)
          self.routing_weight = kwargs.get('routing_weight', None)
          self.shared_key = kwargs.get('shared_key', None)
          self.connection_status = None
          self.tunnel_connection_status = None
          self.egress_bytes_transferred = None
          self.ingress_bytes_transferred = None
          self.peer = kwargs.get('peer', None)
          self.enable_bgp = kwargs.get('enable_bgp', None)
          self.use_policy_based_traffic_selectors = kwargs.get('use_policy_based_traffic_selectors', None)
          self.ipsec_policies = kwargs.get('ipsec_policies', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = None
          self.express_route_gateway_bypass = kwargs.get('express_route_gateway_bypass', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkGatewayConnectionListEntity(Resource):
      """A common class for general resource information.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param authorization_key: The authorizationKey.
      :type authorization_key: str
      :param virtual_network_gateway1: Required. The reference to virtual
       network gateway resource.
      :type virtual_network_gateway1:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkConnectionGatewayReference
      :param virtual_network_gateway2: The reference to virtual network gateway
       resource.
      :type virtual_network_gateway2:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkConnectionGatewayReference
      :param local_network_gateway2: The reference to local network gateway
       resource.
      :type local_network_gateway2:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkConnectionGatewayReference
      :param connection_type: Required. Gateway connection type. Possible values
       include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
      :type connection_type: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionType
      :param connection_protocol: Connection protocol used for this connection.
       Possible values include: 'IKEv2', 'IKEv1'
      :type connection_protocol: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionProtocol
      :param routing_weight: The routing weight.
      :type routing_weight: int
      :param shared_key: The IPSec shared key.
      :type shared_key: str
      :ivar connection_status: Virtual Network Gateway connection status.
       Possible values include: 'Unknown', 'Connecting', 'Connected',
       'NotConnected'
      :vartype connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionStatus
      :ivar tunnel_connection_status: Collection of all tunnels' connection
       health status.
      :vartype tunnel_connection_status:
       list[~azure.mgmt.network.v2019_02_01.models.TunnelConnectionHealth]
      :ivar egress_bytes_transferred: The egress bytes transferred in this
       connection.
      :vartype egress_bytes_transferred: long
      :ivar ingress_bytes_transferred: The ingress bytes transferred in this
       connection.
      :vartype ingress_bytes_transferred: long
      :param peer: The reference to peerings resource.
      :type peer: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param enable_bgp: EnableBgp flag
      :type enable_bgp: bool
      :param use_policy_based_traffic_selectors: Enable policy-based traffic
       selectors.
      :type use_policy_based_traffic_selectors: bool
      :param ipsec_policies: The IPSec Policies to be considered by this
       connection.
      :type ipsec_policies:
       list[~azure.mgmt.network.v2019_02_01.models.IpsecPolicy]
      :param resource_guid: The resource GUID property of the
       VirtualNetworkGatewayConnection resource.
      :type resource_guid: str
      :ivar provisioning_state: The provisioning state of the
       VirtualNetworkGatewayConnection resource. Possible values are: 'Updating',
       'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param express_route_gateway_bypass: Bypass ExpressRoute Gateway for data
       forwarding
      :type express_route_gateway_bypass: bool
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'virtual_network_gateway1': {'required': True},
          'connection_type': {'required': True},
          'connection_status': {'readonly': True},
          'tunnel_connection_status': {'readonly': True},
          'egress_bytes_transferred': {'readonly': True},
          'ingress_bytes_transferred': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
          'virtual_network_gateway1': {'key': 'properties.virtualNetworkGateway1', 'type': 'VirtualNetworkConnectionGatewayReference'},
          'virtual_network_gateway2': {'key': 'properties.virtualNetworkGateway2', 'type': 'VirtualNetworkConnectionGatewayReference'},
          'local_network_gateway2': {'key': 'properties.localNetworkGateway2', 'type': 'VirtualNetworkConnectionGatewayReference'},
          'connection_type': {'key': 'properties.connectionType', 'type': 'str'},
          'connection_protocol': {'key': 'properties.connectionProtocol', 'type': 'str'},
          'routing_weight': {'key': 'properties.routingWeight', 'type': 'int'},
          'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
          'connection_status': {'key': 'properties.connectionStatus', 'type': 'str'},
          'tunnel_connection_status': {'key': 'properties.tunnelConnectionStatus', 'type': '[TunnelConnectionHealth]'},
          'egress_bytes_transferred': {'key': 'properties.egressBytesTransferred', 'type': 'long'},
          'ingress_bytes_transferred': {'key': 'properties.ingressBytesTransferred', 'type': 'long'},
          'peer': {'key': 'properties.peer', 'type': 'SubResource'},
          'enable_bgp': {'key': 'properties.enableBgp', 'type': 'bool'},
          'use_policy_based_traffic_selectors': {'key': 'properties.usePolicyBasedTrafficSelectors', 'type': 'bool'},
          'ipsec_policies': {'key': 'properties.ipsecPolicies', 'type': '[IpsecPolicy]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'express_route_gateway_bypass': {'key': 'properties.expressRouteGatewayBypass', 'type': 'bool'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkGatewayConnectionListEntity, self).__init__(**kwargs)
          self.authorization_key = kwargs.get('authorization_key', None)
          self.virtual_network_gateway1 = kwargs.get('virtual_network_gateway1', None)
          self.virtual_network_gateway2 = kwargs.get('virtual_network_gateway2', None)
          self.local_network_gateway2 = kwargs.get('local_network_gateway2', None)
          self.connection_type = kwargs.get('connection_type', None)
          self.connection_protocol = kwargs.get('connection_protocol', None)
          self.routing_weight = kwargs.get('routing_weight', None)
          self.shared_key = kwargs.get('shared_key', None)
          self.connection_status = None
          self.tunnel_connection_status = None
          self.egress_bytes_transferred = None
          self.ingress_bytes_transferred = None
          self.peer = kwargs.get('peer', None)
          self.enable_bgp = kwargs.get('enable_bgp', None)
          self.use_policy_based_traffic_selectors = kwargs.get('use_policy_based_traffic_selectors', None)
          self.ipsec_policies = kwargs.get('ipsec_policies', None)
          self.resource_guid = kwargs.get('resource_guid', None)
          self.provisioning_state = None
          self.express_route_gateway_bypass = kwargs.get('express_route_gateway_bypass', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkGatewayIPConfiguration(SubResource):
      """IP configuration for virtual network gateway.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param private_ip_allocation_method: The private IP address allocation
       method. Possible values include: 'Static', 'Dynamic'
      :type private_ip_allocation_method: str or
       ~azure.mgmt.network.v2019_02_01.models.IPAllocationMethod
      :param subnet: The reference of the subnet resource.
      :type subnet: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param public_ip_address: The reference of the public IP resource.
      :type public_ip_address:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :ivar provisioning_state: The provisioning state of the public IP
       resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
          'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
          'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'SubResource'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkGatewayIPConfiguration, self).__init__(**kwargs)
          self.private_ip_allocation_method = kwargs.get('private_ip_allocation_method', None)
          self.subnet = kwargs.get('subnet', None)
          self.public_ip_address = kwargs.get('public_ip_address', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkGatewaySku(Model):
      """VirtualNetworkGatewaySku details.
  
      :param name: Gateway SKU name. Possible values include: 'Basic',
       'HighPerformance', 'Standard', 'UltraPerformance', 'VpnGw1', 'VpnGw2',
       'VpnGw3', 'VpnGw1AZ', 'VpnGw2AZ', 'VpnGw3AZ', 'ErGw1AZ', 'ErGw2AZ',
       'ErGw3AZ'
      :type name: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewaySkuName
      :param tier: Gateway SKU tier. Possible values include: 'Basic',
       'HighPerformance', 'Standard', 'UltraPerformance', 'VpnGw1', 'VpnGw2',
       'VpnGw3', 'VpnGw1AZ', 'VpnGw2AZ', 'VpnGw3AZ', 'ErGw1AZ', 'ErGw2AZ',
       'ErGw3AZ'
      :type tier: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewaySkuTier
      :param capacity: The capacity.
      :type capacity: int
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'tier': {'key': 'tier', 'type': 'str'},
          'capacity': {'key': 'capacity', 'type': 'int'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkGatewaySku, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.tier = kwargs.get('tier', None)
          self.capacity = kwargs.get('capacity', None)
  
  
  class VirtualNetworkPeering(SubResource):
      """Peerings in a virtual network resource.
  
      :param id: Resource ID.
      :type id: str
      :param allow_virtual_network_access: Whether the VMs in the local virtual
       network space would be able to access the VMs in remote virtual network
       space.
      :type allow_virtual_network_access: bool
      :param allow_forwarded_traffic: Whether the forwarded traffic from the VMs
       in the local virtual network will be allowed/disallowed in remote virtual
       network.
      :type allow_forwarded_traffic: bool
      :param allow_gateway_transit: If gateway links can be used in remote
       virtual networking to link to this virtual network.
      :type allow_gateway_transit: bool
      :param use_remote_gateways: If remote gateways can be used on this virtual
       network. If the flag is set to true, and allowGatewayTransit on remote
       peering is also true, virtual network will use gateways of remote virtual
       network for transit. Only one peering can have this flag set to true. This
       flag cannot be set if virtual network already has a gateway.
      :type use_remote_gateways: bool
      :param remote_virtual_network: The reference of the remote virtual
       network. The remote virtual network can be in the same or different region
       (preview). See here to register for the preview and learn more
       (https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering).
      :type remote_virtual_network:
       ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param remote_address_space: The reference of the remote virtual network
       address space.
      :type remote_address_space:
       ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param peering_state: The status of the virtual network peering. Possible
       values are 'Initiated', 'Connected', and 'Disconnected'. Possible values
       include: 'Initiated', 'Connected', 'Disconnected'
      :type peering_state: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkPeeringState
      :param provisioning_state: The provisioning state of the resource.
      :type provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'allow_virtual_network_access': {'key': 'properties.allowVirtualNetworkAccess', 'type': 'bool'},
          'allow_forwarded_traffic': {'key': 'properties.allowForwardedTraffic', 'type': 'bool'},
          'allow_gateway_transit': {'key': 'properties.allowGatewayTransit', 'type': 'bool'},
          'use_remote_gateways': {'key': 'properties.useRemoteGateways', 'type': 'bool'},
          'remote_virtual_network': {'key': 'properties.remoteVirtualNetwork', 'type': 'SubResource'},
          'remote_address_space': {'key': 'properties.remoteAddressSpace', 'type': 'AddressSpace'},
          'peering_state': {'key': 'properties.peeringState', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkPeering, self).__init__(**kwargs)
          self.allow_virtual_network_access = kwargs.get('allow_virtual_network_access', None)
          self.allow_forwarded_traffic = kwargs.get('allow_forwarded_traffic', None)
          self.allow_gateway_transit = kwargs.get('allow_gateway_transit', None)
          self.use_remote_gateways = kwargs.get('use_remote_gateways', None)
          self.remote_virtual_network = kwargs.get('remote_virtual_network', None)
          self.remote_address_space = kwargs.get('remote_address_space', None)
          self.peering_state = kwargs.get('peering_state', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkTap(Resource):
      """Virtual Network Tap resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :ivar network_interface_tap_configurations: Specifies the list of resource
       IDs for the network interface IP configuration that needs to be tapped.
      :vartype network_interface_tap_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceTapConfiguration]
      :ivar resource_guid: The resourceGuid property of the virtual network tap.
      :vartype resource_guid: str
      :ivar provisioning_state: The provisioning state of the virtual network
       tap. Possible values are: 'Updating', 'Deleting', and 'Failed'.
      :vartype provisioning_state: str
      :param destination_network_interface_ip_configuration: The reference to
       the private IP Address of the collector nic that will receive the tap
      :type destination_network_interface_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.NetworkInterfaceIPConfiguration
      :param destination_load_balancer_front_end_ip_configuration: The reference
       to the private IP address on the internal Load Balancer that will receive
       the tap
      :type destination_load_balancer_front_end_ip_configuration:
       ~azure.mgmt.network.v2019_02_01.models.FrontendIPConfiguration
      :param destination_port: The VXLAN destination port that will receive the
       tapped traffic.
      :type destination_port: int
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'network_interface_tap_configurations': {'readonly': True},
          'resource_guid': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'network_interface_tap_configurations': {'key': 'properties.networkInterfaceTapConfigurations', 'type': '[NetworkInterfaceTapConfiguration]'},
          'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'destination_network_interface_ip_configuration': {'key': 'properties.destinationNetworkInterfaceIPConfiguration', 'type': 'NetworkInterfaceIPConfiguration'},
          'destination_load_balancer_front_end_ip_configuration': {'key': 'properties.destinationLoadBalancerFrontEndIPConfiguration', 'type': 'FrontendIPConfiguration'},
          'destination_port': {'key': 'properties.destinationPort', 'type': 'int'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkTap, self).__init__(**kwargs)
          self.network_interface_tap_configurations = None
          self.resource_guid = None
          self.provisioning_state = None
          self.destination_network_interface_ip_configuration = kwargs.get('destination_network_interface_ip_configuration', None)
          self.destination_load_balancer_front_end_ip_configuration = kwargs.get('destination_load_balancer_front_end_ip_configuration', None)
          self.destination_port = kwargs.get('destination_port', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VirtualNetworkUsage(Model):
      """Usage details for subnet.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar current_value: Indicates number of IPs used from the Subnet.
      :vartype current_value: float
      :ivar id: Subnet identifier.
      :vartype id: str
      :ivar limit: Indicates the size of the subnet.
      :vartype limit: float
      :ivar name: The name containing common and localized value for usage.
      :vartype name:
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkUsageName
      :ivar unit: Usage units. Returns 'Count'
      :vartype unit: str
      """
  
      _validation = {
          'current_value': {'readonly': True},
          'id': {'readonly': True},
          'limit': {'readonly': True},
          'name': {'readonly': True},
          'unit': {'readonly': True},
      }
  
      _attribute_map = {
          'current_value': {'key': 'currentValue', 'type': 'float'},
          'id': {'key': 'id', 'type': 'str'},
          'limit': {'key': 'limit', 'type': 'float'},
          'name': {'key': 'name', 'type': 'VirtualNetworkUsageName'},
          'unit': {'key': 'unit', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkUsage, self).__init__(**kwargs)
          self.current_value = None
          self.id = None
          self.limit = None
          self.name = None
          self.unit = None
  
  
  class VirtualNetworkUsageName(Model):
      """Usage strings container.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar localized_value: Localized subnet size and usage string.
      :vartype localized_value: str
      :ivar value: Subnet size and usage string.
      :vartype value: str
      """
  
      _validation = {
          'localized_value': {'readonly': True},
          'value': {'readonly': True},
      }
  
      _attribute_map = {
          'localized_value': {'key': 'localizedValue', 'type': 'str'},
          'value': {'key': 'value', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualNetworkUsageName, self).__init__(**kwargs)
          self.localized_value = None
          self.value = None
  
  
  class VirtualWAN(Resource):
      """VirtualWAN Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param disable_vpn_encryption: Vpn encryption to be disabled or not.
      :type disable_vpn_encryption: bool
      :ivar virtual_hubs: List of VirtualHubs in the VirtualWAN.
      :vartype virtual_hubs:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :ivar vpn_sites: List of VpnSites in the VirtualWAN.
      :vartype vpn_sites:
       list[~azure.mgmt.network.v2019_02_01.models.SubResource]
      :param security_provider_name: The Security Provider name.
      :type security_provider_name: str
      :param allow_branch_to_branch_traffic: True if branch to branch traffic is
       allowed.
      :type allow_branch_to_branch_traffic: bool
      :param allow_vnet_to_vnet_traffic: True if Vnet to Vnet traffic is
       allowed.
      :type allow_vnet_to_vnet_traffic: bool
      :param office365_local_breakout_category: The office local breakout
       category. Possible values include: 'Optimize', 'OptimizeAndAllow', 'All',
       'None'
      :type office365_local_breakout_category: str or
       ~azure.mgmt.network.v2019_02_01.models.OfficeTrafficCategory
      :param p2_svpn_server_configurations: List of all
       P2SVpnServerConfigurations associated with the virtual wan.
      :type p2_svpn_server_configurations:
       list[~azure.mgmt.network.v2019_02_01.models.P2SVpnServerConfiguration]
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'virtual_hubs': {'readonly': True},
          'vpn_sites': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'disable_vpn_encryption': {'key': 'properties.disableVpnEncryption', 'type': 'bool'},
          'virtual_hubs': {'key': 'properties.virtualHubs', 'type': '[SubResource]'},
          'vpn_sites': {'key': 'properties.vpnSites', 'type': '[SubResource]'},
          'security_provider_name': {'key': 'properties.securityProviderName', 'type': 'str'},
          'allow_branch_to_branch_traffic': {'key': 'properties.allowBranchToBranchTraffic', 'type': 'bool'},
          'allow_vnet_to_vnet_traffic': {'key': 'properties.allowVnetToVnetTraffic', 'type': 'bool'},
          'office365_local_breakout_category': {'key': 'properties.office365LocalBreakoutCategory', 'type': 'str'},
          'p2_svpn_server_configurations': {'key': 'properties.p2SVpnServerConfigurations', 'type': '[P2SVpnServerConfiguration]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualWAN, self).__init__(**kwargs)
          self.disable_vpn_encryption = kwargs.get('disable_vpn_encryption', None)
          self.virtual_hubs = None
          self.vpn_sites = None
          self.security_provider_name = kwargs.get('security_provider_name', None)
          self.allow_branch_to_branch_traffic = kwargs.get('allow_branch_to_branch_traffic', None)
          self.allow_vnet_to_vnet_traffic = kwargs.get('allow_vnet_to_vnet_traffic', None)
          self.office365_local_breakout_category = kwargs.get('office365_local_breakout_category', None)
          self.p2_svpn_server_configurations = kwargs.get('p2_svpn_server_configurations', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.etag = None
  
  
  class VirtualWanSecurityProvider(Model):
      """Collection of SecurityProviders.
  
      :param name: Name of the security provider.
      :type name: str
      :param url: Url of the security provider.
      :type url: str
      :param type: Name of the security provider. Possible values include:
       'External', 'Native'
      :type type: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualWanSecurityProviderType
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'url': {'key': 'url', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualWanSecurityProvider, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.url = kwargs.get('url', None)
          self.type = kwargs.get('type', None)
  
  
  class VirtualWanSecurityProviders(Model):
      """Collection of SecurityProviders.
  
      :param supported_providers: List of VirtualWAN security providers.
      :type supported_providers:
       list[~azure.mgmt.network.v2019_02_01.models.VirtualWanSecurityProvider]
      """
  
      _attribute_map = {
          'supported_providers': {'key': 'supportedProviders', 'type': '[VirtualWanSecurityProvider]'},
      }
  
      def __init__(self, **kwargs):
          super(VirtualWanSecurityProviders, self).__init__(**kwargs)
          self.supported_providers = kwargs.get('supported_providers', None)
  
  
  class VpnClientConfiguration(Model):
      """VpnClientConfiguration for P2S client.
  
      :param vpn_client_address_pool: The reference of the address space
       resource which represents Address space for P2S VpnClient.
      :type vpn_client_address_pool:
       ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param vpn_client_root_certificates: VpnClientRootCertificate for virtual
       network gateway.
      :type vpn_client_root_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.VpnClientRootCertificate]
      :param vpn_client_revoked_certificates: VpnClientRevokedCertificate for
       Virtual network gateway.
      :type vpn_client_revoked_certificates:
       list[~azure.mgmt.network.v2019_02_01.models.VpnClientRevokedCertificate]
      :param vpn_client_protocols: VpnClientProtocols for Virtual network
       gateway.
      :type vpn_client_protocols: list[str or
       ~azure.mgmt.network.v2019_02_01.models.VpnClientProtocol]
      :param vpn_client_ipsec_policies: VpnClientIpsecPolicies for virtual
       network gateway P2S client.
      :type vpn_client_ipsec_policies:
       list[~azure.mgmt.network.v2019_02_01.models.IpsecPolicy]
      :param radius_server_address: The radius server address property of the
       VirtualNetworkGateway resource for vpn client connection.
      :type radius_server_address: str
      :param radius_server_secret: The radius secret property of the
       VirtualNetworkGateway resource for vpn client connection.
      :type radius_server_secret: str
      """
  
      _attribute_map = {
          'vpn_client_address_pool': {'key': 'vpnClientAddressPool', 'type': 'AddressSpace'},
          'vpn_client_root_certificates': {'key': 'vpnClientRootCertificates', 'type': '[VpnClientRootCertificate]'},
          'vpn_client_revoked_certificates': {'key': 'vpnClientRevokedCertificates', 'type': '[VpnClientRevokedCertificate]'},
          'vpn_client_protocols': {'key': 'vpnClientProtocols', 'type': '[str]'},
          'vpn_client_ipsec_policies': {'key': 'vpnClientIpsecPolicies', 'type': '[IpsecPolicy]'},
          'radius_server_address': {'key': 'radiusServerAddress', 'type': 'str'},
          'radius_server_secret': {'key': 'radiusServerSecret', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnClientConfiguration, self).__init__(**kwargs)
          self.vpn_client_address_pool = kwargs.get('vpn_client_address_pool', None)
          self.vpn_client_root_certificates = kwargs.get('vpn_client_root_certificates', None)
          self.vpn_client_revoked_certificates = kwargs.get('vpn_client_revoked_certificates', None)
          self.vpn_client_protocols = kwargs.get('vpn_client_protocols', None)
          self.vpn_client_ipsec_policies = kwargs.get('vpn_client_ipsec_policies', None)
          self.radius_server_address = kwargs.get('radius_server_address', None)
          self.radius_server_secret = kwargs.get('radius_server_secret', None)
  
  
  class VpnClientConnectionHealth(Model):
      """VpnClientConnectionHealth properties.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar total_ingress_bytes_transferred: Total of the Ingress Bytes
       Transferred in this P2S Vpn connection
      :vartype total_ingress_bytes_transferred: long
      :ivar total_egress_bytes_transferred: Total of the Egress Bytes
       Transferred in this connection
      :vartype total_egress_bytes_transferred: long
      :param vpn_client_connections_count: The total of p2s vpn clients
       connected at this time to this P2SVpnGateway.
      :type vpn_client_connections_count: int
      :param allocated_ip_addresses: List of allocated ip addresses to the
       connected p2s vpn clients.
      :type allocated_ip_addresses: list[str]
      """
  
      _validation = {
          'total_ingress_bytes_transferred': {'readonly': True},
          'total_egress_bytes_transferred': {'readonly': True},
      }
  
      _attribute_map = {
          'total_ingress_bytes_transferred': {'key': 'totalIngressBytesTransferred', 'type': 'long'},
          'total_egress_bytes_transferred': {'key': 'totalEgressBytesTransferred', 'type': 'long'},
          'vpn_client_connections_count': {'key': 'vpnClientConnectionsCount', 'type': 'int'},
          'allocated_ip_addresses': {'key': 'allocatedIpAddresses', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(VpnClientConnectionHealth, self).__init__(**kwargs)
          self.total_ingress_bytes_transferred = None
          self.total_egress_bytes_transferred = None
          self.vpn_client_connections_count = kwargs.get('vpn_client_connections_count', None)
          self.allocated_ip_addresses = kwargs.get('allocated_ip_addresses', None)
  
  
  class VpnClientIPsecParameters(Model):
      """An IPSec parameters for a virtual network gateway P2S connection.
  
      All required parameters must be populated in order to send to Azure.
  
      :param sa_life_time_seconds: Required. The IPSec Security Association
       (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
      :type sa_life_time_seconds: int
      :param sa_data_size_kilobytes: Required. The IPSec Security Association
       (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
      :type sa_data_size_kilobytes: int
      :param ipsec_encryption: Required. The IPSec encryption algorithm (IKE
       phase 1). Possible values include: 'None', 'DES', 'DES3', 'AES128',
       'AES192', 'AES256', 'GCMAES128', 'GCMAES192', 'GCMAES256'
      :type ipsec_encryption: str or
       ~azure.mgmt.network.v2019_02_01.models.IpsecEncryption
      :param ipsec_integrity: Required. The IPSec integrity algorithm (IKE phase
       1). Possible values include: 'MD5', 'SHA1', 'SHA256', 'GCMAES128',
       'GCMAES192', 'GCMAES256'
      :type ipsec_integrity: str or
       ~azure.mgmt.network.v2019_02_01.models.IpsecIntegrity
      :param ike_encryption: Required. The IKE encryption algorithm (IKE phase
       2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256',
       'GCMAES256', 'GCMAES128'
      :type ike_encryption: str or
       ~azure.mgmt.network.v2019_02_01.models.IkeEncryption
      :param ike_integrity: Required. The IKE integrity algorithm (IKE phase 2).
       Possible values include: 'MD5', 'SHA1', 'SHA256', 'SHA384', 'GCMAES256',
       'GCMAES128'
      :type ike_integrity: str or
       ~azure.mgmt.network.v2019_02_01.models.IkeIntegrity
      :param dh_group: Required. The DH Group used in IKE Phase 1 for initial
       SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14',
       'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
      :type dh_group: str or ~azure.mgmt.network.v2019_02_01.models.DhGroup
      :param pfs_group: Required. The Pfs Group used in IKE Phase 2 for new
       child SA. Possible values include: 'None', 'PFS1', 'PFS2', 'PFS2048',
       'ECP256', 'ECP384', 'PFS24', 'PFS14', 'PFSMM'
      :type pfs_group: str or ~azure.mgmt.network.v2019_02_01.models.PfsGroup
      """
  
      _validation = {
          'sa_life_time_seconds': {'required': True},
          'sa_data_size_kilobytes': {'required': True},
          'ipsec_encryption': {'required': True},
          'ipsec_integrity': {'required': True},
          'ike_encryption': {'required': True},
          'ike_integrity': {'required': True},
          'dh_group': {'required': True},
          'pfs_group': {'required': True},
      }
  
      _attribute_map = {
          'sa_life_time_seconds': {'key': 'saLifeTimeSeconds', 'type': 'int'},
          'sa_data_size_kilobytes': {'key': 'saDataSizeKilobytes', 'type': 'int'},
          'ipsec_encryption': {'key': 'ipsecEncryption', 'type': 'str'},
          'ipsec_integrity': {'key': 'ipsecIntegrity', 'type': 'str'},
          'ike_encryption': {'key': 'ikeEncryption', 'type': 'str'},
          'ike_integrity': {'key': 'ikeIntegrity', 'type': 'str'},
          'dh_group': {'key': 'dhGroup', 'type': 'str'},
          'pfs_group': {'key': 'pfsGroup', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnClientIPsecParameters, self).__init__(**kwargs)
          self.sa_life_time_seconds = kwargs.get('sa_life_time_seconds', None)
          self.sa_data_size_kilobytes = kwargs.get('sa_data_size_kilobytes', None)
          self.ipsec_encryption = kwargs.get('ipsec_encryption', None)
          self.ipsec_integrity = kwargs.get('ipsec_integrity', None)
          self.ike_encryption = kwargs.get('ike_encryption', None)
          self.ike_integrity = kwargs.get('ike_integrity', None)
          self.dh_group = kwargs.get('dh_group', None)
          self.pfs_group = kwargs.get('pfs_group', None)
  
  
  class VpnClientParameters(Model):
      """Vpn Client Parameters for package generation.
  
      :param processor_architecture: VPN client Processor Architecture. Possible
       values are: 'AMD64' and 'X86'. Possible values include: 'Amd64', 'X86'
      :type processor_architecture: str or
       ~azure.mgmt.network.v2019_02_01.models.ProcessorArchitecture
      :param authentication_method: VPN client authentication method. Possible
       values include: 'EAPTLS', 'EAPMSCHAPv2'
      :type authentication_method: str or
       ~azure.mgmt.network.v2019_02_01.models.AuthenticationMethod
      :param radius_server_auth_certificate: The public certificate data for the
       radius server authentication certificate as a Base-64 encoded string.
       Required only if external radius authentication has been configured with
       EAPTLS authentication.
      :type radius_server_auth_certificate: str
      :param client_root_certificates: A list of client root certificates public
       certificate data encoded as Base-64 strings. Optional parameter for
       external radius based authentication with EAPTLS.
      :type client_root_certificates: list[str]
      """
  
      _attribute_map = {
          'processor_architecture': {'key': 'processorArchitecture', 'type': 'str'},
          'authentication_method': {'key': 'authenticationMethod', 'type': 'str'},
          'radius_server_auth_certificate': {'key': 'radiusServerAuthCertificate', 'type': 'str'},
          'client_root_certificates': {'key': 'clientRootCertificates', 'type': '[str]'},
      }
  
      def __init__(self, **kwargs):
          super(VpnClientParameters, self).__init__(**kwargs)
          self.processor_architecture = kwargs.get('processor_architecture', None)
          self.authentication_method = kwargs.get('authentication_method', None)
          self.radius_server_auth_certificate = kwargs.get('radius_server_auth_certificate', None)
          self.client_root_certificates = kwargs.get('client_root_certificates', None)
  
  
  class VpnClientRevokedCertificate(SubResource):
      """VPN client revoked certificate of virtual network gateway.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param thumbprint: The revoked VPN client certificate thumbprint.
      :type thumbprint: str
      :ivar provisioning_state: The provisioning state of the VPN client revoked
       certificate resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'thumbprint': {'key': 'properties.thumbprint', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnClientRevokedCertificate, self).__init__(**kwargs)
          self.thumbprint = kwargs.get('thumbprint', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VpnClientRootCertificate(SubResource):
      """VPN client root certificate of virtual network gateway.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param id: Resource ID.
      :type id: str
      :param public_cert_data: Required. The certificate public data.
      :type public_cert_data: str
      :ivar provisioning_state: The provisioning state of the VPN client root
       certificate resource. Possible values are: 'Updating', 'Deleting', and
       'Failed'.
      :vartype provisioning_state: str
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :param etag: A unique read-only string that changes whenever the resource
       is updated.
      :type etag: str
      """
  
      _validation = {
          'public_cert_data': {'required': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'public_cert_data': {'key': 'properties.publicCertData', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnClientRootCertificate, self).__init__(**kwargs)
          self.public_cert_data = kwargs.get('public_cert_data', None)
          self.provisioning_state = None
          self.name = kwargs.get('name', None)
          self.etag = kwargs.get('etag', None)
  
  
  class VpnConnection(SubResource):
      """VpnConnection Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :param remote_vpn_site: Id of the connected vpn site.
      :type remote_vpn_site: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param routing_weight: Routing weight for vpn connection.
      :type routing_weight: int
      :param connection_status: The connection status. Possible values include:
       'Unknown', 'Connecting', 'Connected', 'NotConnected'
      :type connection_status: str or
       ~azure.mgmt.network.v2019_02_01.models.VpnConnectionStatus
      :param vpn_connection_protocol_type: Connection protocol used for this
       connection. Possible values include: 'IKEv2', 'IKEv1'
      :type vpn_connection_protocol_type: str or
       ~azure.mgmt.network.v2019_02_01.models.VirtualNetworkGatewayConnectionProtocol
      :ivar ingress_bytes_transferred: Ingress bytes transferred.
      :vartype ingress_bytes_transferred: long
      :ivar egress_bytes_transferred: Egress bytes transferred.
      :vartype egress_bytes_transferred: long
      :param connection_bandwidth: Expected bandwidth in MBPS.
      :type connection_bandwidth: int
      :param shared_key: SharedKey for the vpn connection.
      :type shared_key: str
      :param enable_bgp: EnableBgp flag
      :type enable_bgp: bool
      :param ipsec_policies: The IPSec Policies to be considered by this
       connection.
      :type ipsec_policies:
       list[~azure.mgmt.network.v2019_02_01.models.IpsecPolicy]
      :param enable_rate_limiting: EnableBgp flag
      :type enable_rate_limiting: bool
      :param enable_internet_security: Enable internet security
      :type enable_internet_security: bool
      :param use_local_azure_ip_address: Use local azure ip to initiate
       connection
      :type use_local_azure_ip_address: bool
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param name: The name of the resource that is unique within a resource
       group. This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'ingress_bytes_transferred': {'readonly': True},
          'egress_bytes_transferred': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'remote_vpn_site': {'key': 'properties.remoteVpnSite', 'type': 'SubResource'},
          'routing_weight': {'key': 'properties.routingWeight', 'type': 'int'},
          'connection_status': {'key': 'properties.connectionStatus', 'type': 'str'},
          'vpn_connection_protocol_type': {'key': 'properties.vpnConnectionProtocolType', 'type': 'str'},
          'ingress_bytes_transferred': {'key': 'properties.ingressBytesTransferred', 'type': 'long'},
          'egress_bytes_transferred': {'key': 'properties.egressBytesTransferred', 'type': 'long'},
          'connection_bandwidth': {'key': 'properties.connectionBandwidth', 'type': 'int'},
          'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
          'enable_bgp': {'key': 'properties.enableBgp', 'type': 'bool'},
          'ipsec_policies': {'key': 'properties.ipsecPolicies', 'type': '[IpsecPolicy]'},
          'enable_rate_limiting': {'key': 'properties.enableRateLimiting', 'type': 'bool'},
          'enable_internet_security': {'key': 'properties.enableInternetSecurity', 'type': 'bool'},
          'use_local_azure_ip_address': {'key': 'properties.useLocalAzureIpAddress', 'type': 'bool'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnConnection, self).__init__(**kwargs)
          self.remote_vpn_site = kwargs.get('remote_vpn_site', None)
          self.routing_weight = kwargs.get('routing_weight', None)
          self.connection_status = kwargs.get('connection_status', None)
          self.vpn_connection_protocol_type = kwargs.get('vpn_connection_protocol_type', None)
          self.ingress_bytes_transferred = None
          self.egress_bytes_transferred = None
          self.connection_bandwidth = kwargs.get('connection_bandwidth', None)
          self.shared_key = kwargs.get('shared_key', None)
          self.enable_bgp = kwargs.get('enable_bgp', None)
          self.ipsec_policies = kwargs.get('ipsec_policies', None)
          self.enable_rate_limiting = kwargs.get('enable_rate_limiting', None)
          self.enable_internet_security = kwargs.get('enable_internet_security', None)
          self.use_local_azure_ip_address = kwargs.get('use_local_azure_ip_address', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.name = kwargs.get('name', None)
          self.etag = None
  
  
  class VpnDeviceScriptParameters(Model):
      """Vpn device configuration script generation parameters.
  
      :param vendor: The vendor for the vpn device.
      :type vendor: str
      :param device_family: The device family for the vpn device.
      :type device_family: str
      :param firmware_version: The firmware version for the vpn device.
      :type firmware_version: str
      """
  
      _attribute_map = {
          'vendor': {'key': 'vendor', 'type': 'str'},
          'device_family': {'key': 'deviceFamily', 'type': 'str'},
          'firmware_version': {'key': 'firmwareVersion', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnDeviceScriptParameters, self).__init__(**kwargs)
          self.vendor = kwargs.get('vendor', None)
          self.device_family = kwargs.get('device_family', None)
          self.firmware_version = kwargs.get('firmware_version', None)
  
  
  class VpnGateway(Resource):
      """VpnGateway Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param virtual_hub: The VirtualHub to which the gateway belongs
      :type virtual_hub: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param connections: List of all vpn connections to the gateway.
      :type connections:
       list[~azure.mgmt.network.v2019_02_01.models.VpnConnection]
      :param bgp_settings: Local network gateway's BGP speaker settings.
      :type bgp_settings: ~azure.mgmt.network.v2019_02_01.models.BgpSettings
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param vpn_gateway_scale_unit: The scale unit for this vpn gateway.
      :type vpn_gateway_scale_unit: int
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'virtual_hub': {'key': 'properties.virtualHub', 'type': 'SubResource'},
          'connections': {'key': 'properties.connections', 'type': '[VpnConnection]'},
          'bgp_settings': {'key': 'properties.bgpSettings', 'type': 'BgpSettings'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'vpn_gateway_scale_unit': {'key': 'properties.vpnGatewayScaleUnit', 'type': 'int'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnGateway, self).__init__(**kwargs)
          self.virtual_hub = kwargs.get('virtual_hub', None)
          self.connections = kwargs.get('connections', None)
          self.bgp_settings = kwargs.get('bgp_settings', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.vpn_gateway_scale_unit = kwargs.get('vpn_gateway_scale_unit', None)
          self.etag = None
  
  
  class VpnProfileResponse(Model):
      """Vpn Profile Response for package generation.
  
      :param profile_url: URL to the VPN profile
      :type profile_url: str
      """
  
      _attribute_map = {
          'profile_url': {'key': 'profileUrl', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnProfileResponse, self).__init__(**kwargs)
          self.profile_url = kwargs.get('profile_url', None)
  
  
  class VpnSite(Resource):
      """VpnSite Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param virtual_wan: The VirtualWAN to which the vpnSite belongs
      :type virtual_wan: ~azure.mgmt.network.v2019_02_01.models.SubResource
      :param device_properties: The device properties
      :type device_properties:
       ~azure.mgmt.network.v2019_02_01.models.DeviceProperties
      :param ip_address: The ip-address for the vpn-site.
      :type ip_address: str
      :param site_key: The key for vpn-site that can be used for connections.
      :type site_key: str
      :param address_space: The AddressSpace that contains an array of IP
       address ranges.
      :type address_space: ~azure.mgmt.network.v2019_02_01.models.AddressSpace
      :param bgp_properties: The set of bgp properties.
      :type bgp_properties: ~azure.mgmt.network.v2019_02_01.models.BgpSettings
      :param provisioning_state: The provisioning state of the resource.
       Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
      :type provisioning_state: str or
       ~azure.mgmt.network.v2019_02_01.models.ProvisioningState
      :param is_security_site: IsSecuritySite flag
      :type is_security_site: bool
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'etag': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'virtual_wan': {'key': 'properties.virtualWan', 'type': 'SubResource'},
          'device_properties': {'key': 'properties.deviceProperties', 'type': 'DeviceProperties'},
          'ip_address': {'key': 'properties.ipAddress', 'type': 'str'},
          'site_key': {'key': 'properties.siteKey', 'type': 'str'},
          'address_space': {'key': 'properties.addressSpace', 'type': 'AddressSpace'},
          'bgp_properties': {'key': 'properties.bgpProperties', 'type': 'BgpSettings'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'is_security_site': {'key': 'properties.isSecuritySite', 'type': 'bool'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnSite, self).__init__(**kwargs)
          self.virtual_wan = kwargs.get('virtual_wan', None)
          self.device_properties = kwargs.get('device_properties', None)
          self.ip_address = kwargs.get('ip_address', None)
          self.site_key = kwargs.get('site_key', None)
          self.address_space = kwargs.get('address_space', None)
          self.bgp_properties = kwargs.get('bgp_properties', None)
          self.provisioning_state = kwargs.get('provisioning_state', None)
          self.is_security_site = kwargs.get('is_security_site', None)
          self.etag = None
  
  
  class VpnSiteId(Model):
      """VpnSite Resource.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :ivar vpn_site: The resource-uri of the vpn-site for which config is to be
       fetched.
      :vartype vpn_site: str
      """
  
      _validation = {
          'vpn_site': {'readonly': True},
      }
  
      _attribute_map = {
          'vpn_site': {'key': 'vpnSite', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(VpnSiteId, self).__init__(**kwargs)
          self.vpn_site = None
  
  
  class WebApplicationFirewallCustomRule(Model):
      """Defines contents of a web application rule.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      All required parameters must be populated in order to send to Azure.
  
      :param name: Gets name of the resource that is unique within a policy.
       This name can be used to access the resource.
      :type name: str
      :ivar etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :vartype etag: str
      :param priority: Required. Describes priority of the rule. Rules with a
       lower value will be evaluated before rules with a higher value
      :type priority: int
      :param rule_type: Required. Describes type of rule. Possible values
       include: 'MatchRule', 'Invalid'
      :type rule_type: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallRuleType
      :param match_conditions: Required. List of match conditions
      :type match_conditions:
       list[~azure.mgmt.network.v2019_02_01.models.MatchCondition]
      :param action: Required. Type of Actions. Possible values include:
       'Allow', 'Block', 'Log'
      :type action: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallAction
      """
  
      _validation = {
          'name': {'max_length': 128},
          'etag': {'readonly': True},
          'priority': {'required': True},
          'rule_type': {'required': True},
          'match_conditions': {'required': True},
          'action': {'required': True},
      }
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
          'priority': {'key': 'priority', 'type': 'int'},
          'rule_type': {'key': 'ruleType', 'type': 'str'},
          'match_conditions': {'key': 'matchConditions', 'type': '[MatchCondition]'},
          'action': {'key': 'action', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(WebApplicationFirewallCustomRule, self).__init__(**kwargs)
          self.name = kwargs.get('name', None)
          self.etag = None
          self.priority = kwargs.get('priority', None)
          self.rule_type = kwargs.get('rule_type', None)
          self.match_conditions = kwargs.get('match_conditions', None)
          self.action = kwargs.get('action', None)
  
  
  class WebApplicationFirewallPolicy(Resource):
      """Defines web application firewall policy.
  
      Variables are only populated by the server, and will be ignored when
      sending a request.
  
      :param id: Resource ID.
      :type id: str
      :ivar name: Resource name.
      :vartype name: str
      :ivar type: Resource type.
      :vartype type: str
      :param location: Resource location.
      :type location: str
      :param tags: Resource tags.
      :type tags: dict[str, str]
      :param policy_settings: Describes  policySettings for policy
      :type policy_settings:
       ~azure.mgmt.network.v2019_02_01.models.PolicySettings
      :param custom_rules: Describes custom rules inside the policy
      :type custom_rules:
       list[~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallCustomRule]
      :ivar application_gateways: A collection of references to application
       gateways.
      :vartype application_gateways:
       list[~azure.mgmt.network.v2019_02_01.models.ApplicationGateway]
      :ivar provisioning_state: Provisioning state of the
       WebApplicationFirewallPolicy.
      :vartype provisioning_state: str
      :ivar resource_state: Resource status of the policy. Resource status of
       the policy. Possible values include: 'Creating', 'Enabling', 'Enabled',
       'Disabling', 'Disabled', 'Deleting'
      :vartype resource_state: str or
       ~azure.mgmt.network.v2019_02_01.models.WebApplicationFirewallPolicyResourceState
      :param etag: Gets a unique read-only string that changes whenever the
       resource is updated.
      :type etag: str
      """
  
      _validation = {
          'name': {'readonly': True},
          'type': {'readonly': True},
          'application_gateways': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'resource_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'policy_settings': {'key': 'properties.policySettings', 'type': 'PolicySettings'},
          'custom_rules': {'key': 'properties.customRules', 'type': '[WebApplicationFirewallCustomRule]'},
          'application_gateways': {'key': 'properties.applicationGateways', 'type': '[ApplicationGateway]'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'resource_state': {'key': 'properties.resourceState', 'type': 'str'},
          'etag': {'key': 'etag', 'type': 'str'},
      }
  
      def __init__(self, **kwargs):
          super(WebApplicationFirewallPolicy, self).__init__(**kwargs)
          self.policy_settings = kwargs.get('policy_settings', None)
          self.custom_rules = kwargs.get('custom_rules', None)
          self.application_gateways = None
          self.provisioning_state = None
          self.resource_state = None
          self.etag = kwargs.get('etag', None)
  