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.
  # --------------------------------------------------------------------------
  
  import datetime
  from typing import Dict, List, Optional, Union
  
  import msrest.serialization
  
  from ._web_site_management_client_enums import *
  
  
  class AddressResponse(msrest.serialization.Model):
      """Describes main public IP address and any extra virtual IPs.
  
      :param service_ip_address: Main public virtual IP.
      :type service_ip_address: str
      :param internal_ip_address: Virtual Network internal IP address of the App Service Environment
       if it is in internal load-balancing mode.
      :type internal_ip_address: str
      :param outbound_ip_addresses: IP addresses appearing on outbound connections.
      :type outbound_ip_addresses: list[str]
      :param vip_mappings: Additional virtual IPs.
      :type vip_mappings: list[~azure.mgmt.web.v2016_09_01.models.VirtualIPMapping]
      """
  
      _attribute_map = {
          'service_ip_address': {'key': 'serviceIpAddress', 'type': 'str'},
          'internal_ip_address': {'key': 'internalIpAddress', 'type': 'str'},
          'outbound_ip_addresses': {'key': 'outboundIpAddresses', 'type': '[str]'},
          'vip_mappings': {'key': 'vipMappings', 'type': '[VirtualIPMapping]'},
      }
  
      def __init__(
          self,
          *,
          service_ip_address: Optional[str] = None,
          internal_ip_address: Optional[str] = None,
          outbound_ip_addresses: Optional[List[str]] = None,
          vip_mappings: Optional[List["VirtualIPMapping"]] = None,
          **kwargs
      ):
          super(AddressResponse, self).__init__(**kwargs)
          self.service_ip_address = service_ip_address
          self.internal_ip_address = internal_ip_address
          self.outbound_ip_addresses = outbound_ip_addresses
          self.vip_mappings = vip_mappings
  
  
  class ApiDefinitionInfo(msrest.serialization.Model):
      """Information about the formal API definition for the app.
  
      :param url: The URL of the API definition.
      :type url: str
      """
  
      _attribute_map = {
          'url': {'key': 'url', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          url: Optional[str] = None,
          **kwargs
      ):
          super(ApiDefinitionInfo, self).__init__(**kwargs)
          self.url = url
  
  
  class AppServiceEnvironmentCollection(msrest.serialization.Model):
      """Collection of App Service Environments.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.AppServiceEnvironmentResource]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[AppServiceEnvironmentResource]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["AppServiceEnvironmentResource"],
          **kwargs
      ):
          super(AppServiceEnvironmentCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class ProxyOnlyResource(msrest.serialization.Model):
      """Azure proxy only resource. This resource is not tracked by Azure Resource Manager.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          **kwargs
      ):
          super(ProxyOnlyResource, self).__init__(**kwargs)
          self.id = None
          self.name = None
          self.kind = kind
          self.type = None
  
  
  class AppServiceEnvironmentPatchResource(ProxyOnlyResource):
      """ARM resource for a app service environment.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param name_properties_name: Name of the App Service Environment.
      :type name_properties_name: str
      :param location: Location of the App Service Environment, e.g. "West US".
      :type location: str
      :ivar provisioning_state: Provisioning state of the App Service Environment. Possible values
       include: "Succeeded", "Failed", "Canceled", "InProgress", "Deleting".
      :vartype provisioning_state: str or ~azure.mgmt.web.v2016_09_01.models.ProvisioningState
      :ivar status: Current status of the App Service Environment. Possible values include:
       "Preparing", "Ready", "Scaling", "Deleting".
      :vartype status: str or ~azure.mgmt.web.v2016_09_01.models.HostingEnvironmentStatus
      :param vnet_name: Name of the Virtual Network for the App Service Environment.
      :type vnet_name: str
      :param vnet_resource_group_name: Resource group of the Virtual Network.
      :type vnet_resource_group_name: str
      :param vnet_subnet_name: Subnet of the Virtual Network.
      :type vnet_subnet_name: str
      :param virtual_network: Description of the Virtual Network.
      :type virtual_network: ~azure.mgmt.web.v2016_09_01.models.VirtualNetworkProfile
      :param internal_load_balancing_mode: Specifies which endpoints to serve internally in the
       Virtual Network for the App Service Environment. Possible values include: "None", "Web",
       "Publishing".
      :type internal_load_balancing_mode: str or
       ~azure.mgmt.web.v2016_09_01.models.InternalLoadBalancingMode
      :param multi_size: Front-end VM size, e.g. "Medium", "Large".
      :type multi_size: str
      :param multi_role_count: Number of front-end instances.
      :type multi_role_count: int
      :param worker_pools: Description of worker pools with worker size IDs, VM sizes, and number of
       workers in each pool.
      :type worker_pools: list[~azure.mgmt.web.v2016_09_01.models.WorkerPool]
      :param ipssl_address_count: Number of IP SSL addresses reserved for the App Service
       Environment.
      :type ipssl_address_count: int
      :ivar database_edition: Edition of the metadata database for the App Service Environment, e.g.
       "Standard".
      :vartype database_edition: str
      :ivar database_service_objective: Service objective of the metadata database for the App
       Service Environment, e.g. "S0".
      :vartype database_service_objective: str
      :ivar upgrade_domains: Number of upgrade domains of the App Service Environment.
      :vartype upgrade_domains: int
      :ivar subscription_id: Subscription of the App Service Environment.
      :vartype subscription_id: str
      :param dns_suffix: DNS suffix of the App Service Environment.
      :type dns_suffix: str
      :ivar last_action: Last deployment action on the App Service Environment.
      :vartype last_action: str
      :ivar last_action_result: Result of the last deployment action on the App Service Environment.
      :vartype last_action_result: str
      :ivar allowed_multi_sizes: List of comma separated strings describing which VM sizes are
       allowed for front-ends.
      :vartype allowed_multi_sizes: str
      :ivar allowed_worker_sizes: List of comma separated strings describing which VM sizes are
       allowed for workers.
      :vartype allowed_worker_sizes: str
      :ivar maximum_number_of_machines: Maximum number of VMs in the App Service Environment.
      :vartype maximum_number_of_machines: int
      :ivar vip_mappings: Description of IP SSL mapping for the App Service Environment.
      :vartype vip_mappings: list[~azure.mgmt.web.v2016_09_01.models.VirtualIPMapping]
      :ivar environment_capacities: Current total, used, and available worker capacities.
      :vartype environment_capacities: list[~azure.mgmt.web.v2016_09_01.models.StampCapacity]
      :param network_access_control_list: Access control list for controlling traffic to the App
       Service Environment.
      :type network_access_control_list:
       list[~azure.mgmt.web.v2016_09_01.models.NetworkAccessControlEntry]
      :ivar environment_is_healthy: True/false indicating whether the App Service Environment is
       healthy.
      :vartype environment_is_healthy: bool
      :ivar environment_status: Detailed message about with results of the last check of the App
       Service Environment.
      :vartype environment_status: str
      :ivar resource_group: Resource group of the App Service Environment.
      :vartype resource_group: str
      :param front_end_scale_factor: Scale factor for front-ends.
      :type front_end_scale_factor: int
      :ivar default_front_end_scale_factor: Default Scale Factor for FrontEnds.
      :vartype default_front_end_scale_factor: int
      :param api_management_account_id: API Management Account associated with the App Service
       Environment.
      :type api_management_account_id: str
      :param suspended: :code:`<code>true</code>` if the App Service Environment is suspended;
       otherwise, :code:`<code>false</code>`. The environment can be suspended, e.g. when the
       management endpoint is no longer available
        (most likely because NSG blocked the incoming traffic).
      :type suspended: bool
      :param dynamic_cache_enabled: True/false indicating whether the App Service Environment is
       suspended. The environment can be suspended e.g. when the management endpoint is no longer
       available
       (most likely because NSG blocked the incoming traffic).
      :type dynamic_cache_enabled: bool
      :param cluster_settings: Custom settings for changing the behavior of the App Service
       Environment.
      :type cluster_settings: list[~azure.mgmt.web.v2016_09_01.models.NameValuePair]
      :param user_whitelisted_ip_ranges: User added ip ranges to whitelist on ASE db.
      :type user_whitelisted_ip_ranges: list[str]
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'status': {'readonly': True},
          'database_edition': {'readonly': True},
          'database_service_objective': {'readonly': True},
          'upgrade_domains': {'readonly': True},
          'subscription_id': {'readonly': True},
          'last_action': {'readonly': True},
          'last_action_result': {'readonly': True},
          'allowed_multi_sizes': {'readonly': True},
          'allowed_worker_sizes': {'readonly': True},
          'maximum_number_of_machines': {'readonly': True},
          'vip_mappings': {'readonly': True},
          'environment_capacities': {'readonly': True},
          'environment_is_healthy': {'readonly': True},
          'environment_status': {'readonly': True},
          'resource_group': {'readonly': True},
          'default_front_end_scale_factor': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'name_properties_name': {'key': 'properties.name', 'type': 'str'},
          'location': {'key': 'properties.location', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'status': {'key': 'properties.status', 'type': 'str'},
          'vnet_name': {'key': 'properties.vnetName', 'type': 'str'},
          'vnet_resource_group_name': {'key': 'properties.vnetResourceGroupName', 'type': 'str'},
          'vnet_subnet_name': {'key': 'properties.vnetSubnetName', 'type': 'str'},
          'virtual_network': {'key': 'properties.virtualNetwork', 'type': 'VirtualNetworkProfile'},
          'internal_load_balancing_mode': {'key': 'properties.internalLoadBalancingMode', 'type': 'str'},
          'multi_size': {'key': 'properties.multiSize', 'type': 'str'},
          'multi_role_count': {'key': 'properties.multiRoleCount', 'type': 'int'},
          'worker_pools': {'key': 'properties.workerPools', 'type': '[WorkerPool]'},
          'ipssl_address_count': {'key': 'properties.ipsslAddressCount', 'type': 'int'},
          'database_edition': {'key': 'properties.databaseEdition', 'type': 'str'},
          'database_service_objective': {'key': 'properties.databaseServiceObjective', 'type': 'str'},
          'upgrade_domains': {'key': 'properties.upgradeDomains', 'type': 'int'},
          'subscription_id': {'key': 'properties.subscriptionId', 'type': 'str'},
          'dns_suffix': {'key': 'properties.dnsSuffix', 'type': 'str'},
          'last_action': {'key': 'properties.lastAction', 'type': 'str'},
          'last_action_result': {'key': 'properties.lastActionResult', 'type': 'str'},
          'allowed_multi_sizes': {'key': 'properties.allowedMultiSizes', 'type': 'str'},
          'allowed_worker_sizes': {'key': 'properties.allowedWorkerSizes', 'type': 'str'},
          'maximum_number_of_machines': {'key': 'properties.maximumNumberOfMachines', 'type': 'int'},
          'vip_mappings': {'key': 'properties.vipMappings', 'type': '[VirtualIPMapping]'},
          'environment_capacities': {'key': 'properties.environmentCapacities', 'type': '[StampCapacity]'},
          'network_access_control_list': {'key': 'properties.networkAccessControlList', 'type': '[NetworkAccessControlEntry]'},
          'environment_is_healthy': {'key': 'properties.environmentIsHealthy', 'type': 'bool'},
          'environment_status': {'key': 'properties.environmentStatus', 'type': 'str'},
          'resource_group': {'key': 'properties.resourceGroup', 'type': 'str'},
          'front_end_scale_factor': {'key': 'properties.frontEndScaleFactor', 'type': 'int'},
          'default_front_end_scale_factor': {'key': 'properties.defaultFrontEndScaleFactor', 'type': 'int'},
          'api_management_account_id': {'key': 'properties.apiManagementAccountId', 'type': 'str'},
          'suspended': {'key': 'properties.suspended', 'type': 'bool'},
          'dynamic_cache_enabled': {'key': 'properties.dynamicCacheEnabled', 'type': 'bool'},
          'cluster_settings': {'key': 'properties.clusterSettings', 'type': '[NameValuePair]'},
          'user_whitelisted_ip_ranges': {'key': 'properties.userWhitelistedIpRanges', 'type': '[str]'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          name_properties_name: Optional[str] = None,
          location: Optional[str] = None,
          vnet_name: Optional[str] = None,
          vnet_resource_group_name: Optional[str] = None,
          vnet_subnet_name: Optional[str] = None,
          virtual_network: Optional["VirtualNetworkProfile"] = None,
          internal_load_balancing_mode: Optional[Union[str, "InternalLoadBalancingMode"]] = None,
          multi_size: Optional[str] = None,
          multi_role_count: Optional[int] = None,
          worker_pools: Optional[List["WorkerPool"]] = None,
          ipssl_address_count: Optional[int] = None,
          dns_suffix: Optional[str] = None,
          network_access_control_list: Optional[List["NetworkAccessControlEntry"]] = None,
          front_end_scale_factor: Optional[int] = None,
          api_management_account_id: Optional[str] = None,
          suspended: Optional[bool] = None,
          dynamic_cache_enabled: Optional[bool] = None,
          cluster_settings: Optional[List["NameValuePair"]] = None,
          user_whitelisted_ip_ranges: Optional[List[str]] = None,
          **kwargs
      ):
          super(AppServiceEnvironmentPatchResource, self).__init__(kind=kind, **kwargs)
          self.name_properties_name = name_properties_name
          self.location = location
          self.provisioning_state = None
          self.status = None
          self.vnet_name = vnet_name
          self.vnet_resource_group_name = vnet_resource_group_name
          self.vnet_subnet_name = vnet_subnet_name
          self.virtual_network = virtual_network
          self.internal_load_balancing_mode = internal_load_balancing_mode
          self.multi_size = multi_size
          self.multi_role_count = multi_role_count
          self.worker_pools = worker_pools
          self.ipssl_address_count = ipssl_address_count
          self.database_edition = None
          self.database_service_objective = None
          self.upgrade_domains = None
          self.subscription_id = None
          self.dns_suffix = dns_suffix
          self.last_action = None
          self.last_action_result = None
          self.allowed_multi_sizes = None
          self.allowed_worker_sizes = None
          self.maximum_number_of_machines = None
          self.vip_mappings = None
          self.environment_capacities = None
          self.network_access_control_list = network_access_control_list
          self.environment_is_healthy = None
          self.environment_status = None
          self.resource_group = None
          self.front_end_scale_factor = front_end_scale_factor
          self.default_front_end_scale_factor = None
          self.api_management_account_id = api_management_account_id
          self.suspended = suspended
          self.dynamic_cache_enabled = dynamic_cache_enabled
          self.cluster_settings = cluster_settings
          self.user_whitelisted_ip_ranges = user_whitelisted_ip_ranges
  
  
  class Resource(msrest.serialization.Model):
      """Azure resource. This resource is tracked in Azure Resource Manager.
  
      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 Id.
      :vartype id: str
      :ivar name: Resource Name.
      :vartype name: str
      :param kind: Kind of resource.
      :type kind: str
      :param location: Required. Resource Location.
      :type location: str
      :ivar type: Resource type.
      :vartype type: str
      :param tags: A set of tags. Resource tags.
      :type tags: dict[str, str]
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'location': {'required': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
      }
  
      def __init__(
          self,
          *,
          location: str,
          kind: Optional[str] = None,
          tags: Optional[Dict[str, str]] = None,
          **kwargs
      ):
          super(Resource, self).__init__(**kwargs)
          self.id = None
          self.name = None
          self.kind = kind
          self.location = location
          self.type = None
          self.tags = tags
  
  
  class AppServiceEnvironmentResource(Resource):
      """App Service Environment ARM 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.
  
      :ivar id: Resource Id.
      :vartype id: str
      :ivar name: Resource Name.
      :vartype name: str
      :param kind: Kind of resource.
      :type kind: str
      :param location: Required. Resource Location.
      :type location: str
      :ivar type: Resource type.
      :vartype type: str
      :param tags: A set of tags. Resource tags.
      :type tags: dict[str, str]
      :param name_properties_name: Name of the App Service Environment.
      :type name_properties_name: str
      :param location_properties_location: Location of the App Service Environment, e.g. "West US".
      :type location_properties_location: str
      :ivar provisioning_state: Provisioning state of the App Service Environment. Possible values
       include: "Succeeded", "Failed", "Canceled", "InProgress", "Deleting".
      :vartype provisioning_state: str or ~azure.mgmt.web.v2016_09_01.models.ProvisioningState
      :ivar status: Current status of the App Service Environment. Possible values include:
       "Preparing", "Ready", "Scaling", "Deleting".
      :vartype status: str or ~azure.mgmt.web.v2016_09_01.models.HostingEnvironmentStatus
      :param vnet_name: Name of the Virtual Network for the App Service Environment.
      :type vnet_name: str
      :param vnet_resource_group_name: Resource group of the Virtual Network.
      :type vnet_resource_group_name: str
      :param vnet_subnet_name: Subnet of the Virtual Network.
      :type vnet_subnet_name: str
      :param virtual_network: Description of the Virtual Network.
      :type virtual_network: ~azure.mgmt.web.v2016_09_01.models.VirtualNetworkProfile
      :param internal_load_balancing_mode: Specifies which endpoints to serve internally in the
       Virtual Network for the App Service Environment. Possible values include: "None", "Web",
       "Publishing".
      :type internal_load_balancing_mode: str or
       ~azure.mgmt.web.v2016_09_01.models.InternalLoadBalancingMode
      :param multi_size: Front-end VM size, e.g. "Medium", "Large".
      :type multi_size: str
      :param multi_role_count: Number of front-end instances.
      :type multi_role_count: int
      :param worker_pools: Description of worker pools with worker size IDs, VM sizes, and number of
       workers in each pool.
      :type worker_pools: list[~azure.mgmt.web.v2016_09_01.models.WorkerPool]
      :param ipssl_address_count: Number of IP SSL addresses reserved for the App Service
       Environment.
      :type ipssl_address_count: int
      :ivar database_edition: Edition of the metadata database for the App Service Environment, e.g.
       "Standard".
      :vartype database_edition: str
      :ivar database_service_objective: Service objective of the metadata database for the App
       Service Environment, e.g. "S0".
      :vartype database_service_objective: str
      :ivar upgrade_domains: Number of upgrade domains of the App Service Environment.
      :vartype upgrade_domains: int
      :ivar subscription_id: Subscription of the App Service Environment.
      :vartype subscription_id: str
      :param dns_suffix: DNS suffix of the App Service Environment.
      :type dns_suffix: str
      :ivar last_action: Last deployment action on the App Service Environment.
      :vartype last_action: str
      :ivar last_action_result: Result of the last deployment action on the App Service Environment.
      :vartype last_action_result: str
      :ivar allowed_multi_sizes: List of comma separated strings describing which VM sizes are
       allowed for front-ends.
      :vartype allowed_multi_sizes: str
      :ivar allowed_worker_sizes: List of comma separated strings describing which VM sizes are
       allowed for workers.
      :vartype allowed_worker_sizes: str
      :ivar maximum_number_of_machines: Maximum number of VMs in the App Service Environment.
      :vartype maximum_number_of_machines: int
      :ivar vip_mappings: Description of IP SSL mapping for the App Service Environment.
      :vartype vip_mappings: list[~azure.mgmt.web.v2016_09_01.models.VirtualIPMapping]
      :ivar environment_capacities: Current total, used, and available worker capacities.
      :vartype environment_capacities: list[~azure.mgmt.web.v2016_09_01.models.StampCapacity]
      :param network_access_control_list: Access control list for controlling traffic to the App
       Service Environment.
      :type network_access_control_list:
       list[~azure.mgmt.web.v2016_09_01.models.NetworkAccessControlEntry]
      :ivar environment_is_healthy: True/false indicating whether the App Service Environment is
       healthy.
      :vartype environment_is_healthy: bool
      :ivar environment_status: Detailed message about with results of the last check of the App
       Service Environment.
      :vartype environment_status: str
      :ivar resource_group: Resource group of the App Service Environment.
      :vartype resource_group: str
      :param front_end_scale_factor: Scale factor for front-ends.
      :type front_end_scale_factor: int
      :ivar default_front_end_scale_factor: Default Scale Factor for FrontEnds.
      :vartype default_front_end_scale_factor: int
      :param api_management_account_id: API Management Account associated with the App Service
       Environment.
      :type api_management_account_id: str
      :param suspended: :code:`<code>true</code>` if the App Service Environment is suspended;
       otherwise, :code:`<code>false</code>`. The environment can be suspended, e.g. when the
       management endpoint is no longer available
        (most likely because NSG blocked the incoming traffic).
      :type suspended: bool
      :param dynamic_cache_enabled: True/false indicating whether the App Service Environment is
       suspended. The environment can be suspended e.g. when the management endpoint is no longer
       available
       (most likely because NSG blocked the incoming traffic).
      :type dynamic_cache_enabled: bool
      :param cluster_settings: Custom settings for changing the behavior of the App Service
       Environment.
      :type cluster_settings: list[~azure.mgmt.web.v2016_09_01.models.NameValuePair]
      :param user_whitelisted_ip_ranges: User added ip ranges to whitelist on ASE db.
      :type user_whitelisted_ip_ranges: list[str]
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'location': {'required': True},
          'type': {'readonly': True},
          'provisioning_state': {'readonly': True},
          'status': {'readonly': True},
          'database_edition': {'readonly': True},
          'database_service_objective': {'readonly': True},
          'upgrade_domains': {'readonly': True},
          'subscription_id': {'readonly': True},
          'last_action': {'readonly': True},
          'last_action_result': {'readonly': True},
          'allowed_multi_sizes': {'readonly': True},
          'allowed_worker_sizes': {'readonly': True},
          'maximum_number_of_machines': {'readonly': True},
          'vip_mappings': {'readonly': True},
          'environment_capacities': {'readonly': True},
          'environment_is_healthy': {'readonly': True},
          'environment_status': {'readonly': True},
          'resource_group': {'readonly': True},
          'default_front_end_scale_factor': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'name_properties_name': {'key': 'properties.name', 'type': 'str'},
          'location_properties_location': {'key': 'properties.location', 'type': 'str'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
          'status': {'key': 'properties.status', 'type': 'str'},
          'vnet_name': {'key': 'properties.vnetName', 'type': 'str'},
          'vnet_resource_group_name': {'key': 'properties.vnetResourceGroupName', 'type': 'str'},
          'vnet_subnet_name': {'key': 'properties.vnetSubnetName', 'type': 'str'},
          'virtual_network': {'key': 'properties.virtualNetwork', 'type': 'VirtualNetworkProfile'},
          'internal_load_balancing_mode': {'key': 'properties.internalLoadBalancingMode', 'type': 'str'},
          'multi_size': {'key': 'properties.multiSize', 'type': 'str'},
          'multi_role_count': {'key': 'properties.multiRoleCount', 'type': 'int'},
          'worker_pools': {'key': 'properties.workerPools', 'type': '[WorkerPool]'},
          'ipssl_address_count': {'key': 'properties.ipsslAddressCount', 'type': 'int'},
          'database_edition': {'key': 'properties.databaseEdition', 'type': 'str'},
          'database_service_objective': {'key': 'properties.databaseServiceObjective', 'type': 'str'},
          'upgrade_domains': {'key': 'properties.upgradeDomains', 'type': 'int'},
          'subscription_id': {'key': 'properties.subscriptionId', 'type': 'str'},
          'dns_suffix': {'key': 'properties.dnsSuffix', 'type': 'str'},
          'last_action': {'key': 'properties.lastAction', 'type': 'str'},
          'last_action_result': {'key': 'properties.lastActionResult', 'type': 'str'},
          'allowed_multi_sizes': {'key': 'properties.allowedMultiSizes', 'type': 'str'},
          'allowed_worker_sizes': {'key': 'properties.allowedWorkerSizes', 'type': 'str'},
          'maximum_number_of_machines': {'key': 'properties.maximumNumberOfMachines', 'type': 'int'},
          'vip_mappings': {'key': 'properties.vipMappings', 'type': '[VirtualIPMapping]'},
          'environment_capacities': {'key': 'properties.environmentCapacities', 'type': '[StampCapacity]'},
          'network_access_control_list': {'key': 'properties.networkAccessControlList', 'type': '[NetworkAccessControlEntry]'},
          'environment_is_healthy': {'key': 'properties.environmentIsHealthy', 'type': 'bool'},
          'environment_status': {'key': 'properties.environmentStatus', 'type': 'str'},
          'resource_group': {'key': 'properties.resourceGroup', 'type': 'str'},
          'front_end_scale_factor': {'key': 'properties.frontEndScaleFactor', 'type': 'int'},
          'default_front_end_scale_factor': {'key': 'properties.defaultFrontEndScaleFactor', 'type': 'int'},
          'api_management_account_id': {'key': 'properties.apiManagementAccountId', 'type': 'str'},
          'suspended': {'key': 'properties.suspended', 'type': 'bool'},
          'dynamic_cache_enabled': {'key': 'properties.dynamicCacheEnabled', 'type': 'bool'},
          'cluster_settings': {'key': 'properties.clusterSettings', 'type': '[NameValuePair]'},
          'user_whitelisted_ip_ranges': {'key': 'properties.userWhitelistedIpRanges', 'type': '[str]'},
      }
  
      def __init__(
          self,
          *,
          location: str,
          kind: Optional[str] = None,
          tags: Optional[Dict[str, str]] = None,
          name_properties_name: Optional[str] = None,
          location_properties_location: Optional[str] = None,
          vnet_name: Optional[str] = None,
          vnet_resource_group_name: Optional[str] = None,
          vnet_subnet_name: Optional[str] = None,
          virtual_network: Optional["VirtualNetworkProfile"] = None,
          internal_load_balancing_mode: Optional[Union[str, "InternalLoadBalancingMode"]] = None,
          multi_size: Optional[str] = None,
          multi_role_count: Optional[int] = None,
          worker_pools: Optional[List["WorkerPool"]] = None,
          ipssl_address_count: Optional[int] = None,
          dns_suffix: Optional[str] = None,
          network_access_control_list: Optional[List["NetworkAccessControlEntry"]] = None,
          front_end_scale_factor: Optional[int] = None,
          api_management_account_id: Optional[str] = None,
          suspended: Optional[bool] = None,
          dynamic_cache_enabled: Optional[bool] = None,
          cluster_settings: Optional[List["NameValuePair"]] = None,
          user_whitelisted_ip_ranges: Optional[List[str]] = None,
          **kwargs
      ):
          super(AppServiceEnvironmentResource, self).__init__(kind=kind, location=location, tags=tags, **kwargs)
          self.name_properties_name = name_properties_name
          self.location_properties_location = location_properties_location
          self.provisioning_state = None
          self.status = None
          self.vnet_name = vnet_name
          self.vnet_resource_group_name = vnet_resource_group_name
          self.vnet_subnet_name = vnet_subnet_name
          self.virtual_network = virtual_network
          self.internal_load_balancing_mode = internal_load_balancing_mode
          self.multi_size = multi_size
          self.multi_role_count = multi_role_count
          self.worker_pools = worker_pools
          self.ipssl_address_count = ipssl_address_count
          self.database_edition = None
          self.database_service_objective = None
          self.upgrade_domains = None
          self.subscription_id = None
          self.dns_suffix = dns_suffix
          self.last_action = None
          self.last_action_result = None
          self.allowed_multi_sizes = None
          self.allowed_worker_sizes = None
          self.maximum_number_of_machines = None
          self.vip_mappings = None
          self.environment_capacities = None
          self.network_access_control_list = network_access_control_list
          self.environment_is_healthy = None
          self.environment_status = None
          self.resource_group = None
          self.front_end_scale_factor = front_end_scale_factor
          self.default_front_end_scale_factor = None
          self.api_management_account_id = api_management_account_id
          self.suspended = suspended
          self.dynamic_cache_enabled = dynamic_cache_enabled
          self.cluster_settings = cluster_settings
          self.user_whitelisted_ip_ranges = user_whitelisted_ip_ranges
  
  
  class AppServicePlan(Resource):
      """App Service plan.
  
      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 Id.
      :vartype id: str
      :ivar name: Resource Name.
      :vartype name: str
      :param kind: Kind of resource.
      :type kind: str
      :param location: Required. Resource Location.
      :type location: str
      :ivar type: Resource type.
      :vartype type: str
      :param tags: A set of tags. Resource tags.
      :type tags: dict[str, str]
      :param sku: Description of a SKU for a scalable resource.
      :type sku: ~azure.mgmt.web.v2016_09_01.models.SkuDescription
      :param name_properties_name: Name for the App Service plan.
      :type name_properties_name: str
      :param worker_tier_name: Target worker tier assigned to the App Service plan.
      :type worker_tier_name: str
      :ivar status: App Service plan status. Possible values include: "Ready", "Pending", "Creating".
      :vartype status: str or ~azure.mgmt.web.v2016_09_01.models.StatusOptions
      :ivar subscription: App Service plan subscription.
      :vartype subscription: str
      :param admin_site_name: App Service plan administration site.
      :type admin_site_name: str
      :param hosting_environment_profile: Specification for the App Service Environment to use for
       the App Service plan.
      :type hosting_environment_profile: ~azure.mgmt.web.v2016_09_01.models.HostingEnvironmentProfile
      :ivar maximum_number_of_workers: Maximum number of instances that can be assigned to this App
       Service plan.
      :vartype maximum_number_of_workers: int
      :ivar geo_region: Geographical location for the App Service plan.
      :vartype geo_region: str
      :param per_site_scaling: If :code:`<code>true</code>`, apps assigned to this App Service plan
       can be scaled independently.
       If :code:`<code>false</code>`, apps assigned to this App Service plan will scale to all
       instances of the plan.
      :type per_site_scaling: bool
      :ivar number_of_sites: Number of apps assigned to this App Service plan.
      :vartype number_of_sites: int
      :param is_spot: If :code:`<code>true</code>`, this App Service Plan owns spot instances.
      :type is_spot: bool
      :param spot_expiration_time: The time when the server farm expires. Valid only if it is a spot
       server farm.
      :type spot_expiration_time: ~datetime.datetime
      :ivar resource_group: Resource group of the App Service plan.
      :vartype resource_group: str
      :param reserved: If Linux app service plan :code:`<code>true</code>`,
       :code:`<code>false</code>` otherwise.
      :type reserved: bool
      :param target_worker_count: Scaling worker count.
      :type target_worker_count: int
      :param target_worker_size_id: Scaling worker size ID.
      :type target_worker_size_id: int
      :ivar provisioning_state: Provisioning state of the App Service Environment. Possible values
       include: "Succeeded", "Failed", "Canceled", "InProgress", "Deleting".
      :vartype provisioning_state: str or ~azure.mgmt.web.v2016_09_01.models.ProvisioningState
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'location': {'required': True},
          'type': {'readonly': True},
          'status': {'readonly': True},
          'subscription': {'readonly': True},
          'maximum_number_of_workers': {'readonly': True},
          'geo_region': {'readonly': True},
          'number_of_sites': {'readonly': True},
          'resource_group': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'sku': {'key': 'sku', 'type': 'SkuDescription'},
          'name_properties_name': {'key': 'properties.name', 'type': 'str'},
          'worker_tier_name': {'key': 'properties.workerTierName', 'type': 'str'},
          'status': {'key': 'properties.status', 'type': 'str'},
          'subscription': {'key': 'properties.subscription', 'type': 'str'},
          'admin_site_name': {'key': 'properties.adminSiteName', 'type': 'str'},
          'hosting_environment_profile': {'key': 'properties.hostingEnvironmentProfile', 'type': 'HostingEnvironmentProfile'},
          'maximum_number_of_workers': {'key': 'properties.maximumNumberOfWorkers', 'type': 'int'},
          'geo_region': {'key': 'properties.geoRegion', 'type': 'str'},
          'per_site_scaling': {'key': 'properties.perSiteScaling', 'type': 'bool'},
          'number_of_sites': {'key': 'properties.numberOfSites', 'type': 'int'},
          'is_spot': {'key': 'properties.isSpot', 'type': 'bool'},
          'spot_expiration_time': {'key': 'properties.spotExpirationTime', 'type': 'iso-8601'},
          'resource_group': {'key': 'properties.resourceGroup', 'type': 'str'},
          'reserved': {'key': 'properties.reserved', 'type': 'bool'},
          'target_worker_count': {'key': 'properties.targetWorkerCount', 'type': 'int'},
          'target_worker_size_id': {'key': 'properties.targetWorkerSizeId', 'type': 'int'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          location: str,
          kind: Optional[str] = None,
          tags: Optional[Dict[str, str]] = None,
          sku: Optional["SkuDescription"] = None,
          name_properties_name: Optional[str] = None,
          worker_tier_name: Optional[str] = None,
          admin_site_name: Optional[str] = None,
          hosting_environment_profile: Optional["HostingEnvironmentProfile"] = None,
          per_site_scaling: Optional[bool] = False,
          is_spot: Optional[bool] = None,
          spot_expiration_time: Optional[datetime.datetime] = None,
          reserved: Optional[bool] = False,
          target_worker_count: Optional[int] = None,
          target_worker_size_id: Optional[int] = None,
          **kwargs
      ):
          super(AppServicePlan, self).__init__(kind=kind, location=location, tags=tags, **kwargs)
          self.sku = sku
          self.name_properties_name = name_properties_name
          self.worker_tier_name = worker_tier_name
          self.status = None
          self.subscription = None
          self.admin_site_name = admin_site_name
          self.hosting_environment_profile = hosting_environment_profile
          self.maximum_number_of_workers = None
          self.geo_region = None
          self.per_site_scaling = per_site_scaling
          self.number_of_sites = None
          self.is_spot = is_spot
          self.spot_expiration_time = spot_expiration_time
          self.resource_group = None
          self.reserved = reserved
          self.target_worker_count = target_worker_count
          self.target_worker_size_id = target_worker_size_id
          self.provisioning_state = None
  
  
  class AppServicePlanCollection(msrest.serialization.Model):
      """Collection of App Service plans.
  
      All required parameters must be populated in order to send to Azure.
  
      :param value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.AppServicePlan]
      :param next_link: Link to next page of resources.
      :type next_link: str
      """
  
      _validation = {
          'value': {'required': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[AppServicePlan]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["AppServicePlan"],
          next_link: Optional[str] = None,
          **kwargs
      ):
          super(AppServicePlanCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = next_link
  
  
  class AppServicePlanPatchResource(ProxyOnlyResource):
      """ARM resource for a app service plan.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param name_properties_name: Name for the App Service plan.
      :type name_properties_name: str
      :param worker_tier_name: Target worker tier assigned to the App Service plan.
      :type worker_tier_name: str
      :ivar status: App Service plan status. Possible values include: "Ready", "Pending", "Creating".
      :vartype status: str or ~azure.mgmt.web.v2016_09_01.models.StatusOptions
      :ivar subscription: App Service plan subscription.
      :vartype subscription: str
      :param admin_site_name: App Service plan administration site.
      :type admin_site_name: str
      :param hosting_environment_profile: Specification for the App Service Environment to use for
       the App Service plan.
      :type hosting_environment_profile: ~azure.mgmt.web.v2016_09_01.models.HostingEnvironmentProfile
      :ivar maximum_number_of_workers: Maximum number of instances that can be assigned to this App
       Service plan.
      :vartype maximum_number_of_workers: int
      :ivar geo_region: Geographical location for the App Service plan.
      :vartype geo_region: str
      :param per_site_scaling: If :code:`<code>true</code>`, apps assigned to this App Service plan
       can be scaled independently.
       If :code:`<code>false</code>`, apps assigned to this App Service plan will scale to all
       instances of the plan.
      :type per_site_scaling: bool
      :ivar number_of_sites: Number of apps assigned to this App Service plan.
      :vartype number_of_sites: int
      :param is_spot: If :code:`<code>true</code>`, this App Service Plan owns spot instances.
      :type is_spot: bool
      :param spot_expiration_time: The time when the server farm expires. Valid only if it is a spot
       server farm.
      :type spot_expiration_time: ~datetime.datetime
      :ivar resource_group: Resource group of the App Service plan.
      :vartype resource_group: str
      :param reserved: If Linux app service plan :code:`<code>true</code>`,
       :code:`<code>false</code>` otherwise.
      :type reserved: bool
      :param target_worker_count: Scaling worker count.
      :type target_worker_count: int
      :param target_worker_size_id: Scaling worker size ID.
      :type target_worker_size_id: int
      :ivar provisioning_state: Provisioning state of the App Service Environment. Possible values
       include: "Succeeded", "Failed", "Canceled", "InProgress", "Deleting".
      :vartype provisioning_state: str or ~azure.mgmt.web.v2016_09_01.models.ProvisioningState
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'status': {'readonly': True},
          'subscription': {'readonly': True},
          'maximum_number_of_workers': {'readonly': True},
          'geo_region': {'readonly': True},
          'number_of_sites': {'readonly': True},
          'resource_group': {'readonly': True},
          'provisioning_state': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'name_properties_name': {'key': 'properties.name', 'type': 'str'},
          'worker_tier_name': {'key': 'properties.workerTierName', 'type': 'str'},
          'status': {'key': 'properties.status', 'type': 'str'},
          'subscription': {'key': 'properties.subscription', 'type': 'str'},
          'admin_site_name': {'key': 'properties.adminSiteName', 'type': 'str'},
          'hosting_environment_profile': {'key': 'properties.hostingEnvironmentProfile', 'type': 'HostingEnvironmentProfile'},
          'maximum_number_of_workers': {'key': 'properties.maximumNumberOfWorkers', 'type': 'int'},
          'geo_region': {'key': 'properties.geoRegion', 'type': 'str'},
          'per_site_scaling': {'key': 'properties.perSiteScaling', 'type': 'bool'},
          'number_of_sites': {'key': 'properties.numberOfSites', 'type': 'int'},
          'is_spot': {'key': 'properties.isSpot', 'type': 'bool'},
          'spot_expiration_time': {'key': 'properties.spotExpirationTime', 'type': 'iso-8601'},
          'resource_group': {'key': 'properties.resourceGroup', 'type': 'str'},
          'reserved': {'key': 'properties.reserved', 'type': 'bool'},
          'target_worker_count': {'key': 'properties.targetWorkerCount', 'type': 'int'},
          'target_worker_size_id': {'key': 'properties.targetWorkerSizeId', 'type': 'int'},
          'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          name_properties_name: Optional[str] = None,
          worker_tier_name: Optional[str] = None,
          admin_site_name: Optional[str] = None,
          hosting_environment_profile: Optional["HostingEnvironmentProfile"] = None,
          per_site_scaling: Optional[bool] = False,
          is_spot: Optional[bool] = None,
          spot_expiration_time: Optional[datetime.datetime] = None,
          reserved: Optional[bool] = False,
          target_worker_count: Optional[int] = None,
          target_worker_size_id: Optional[int] = None,
          **kwargs
      ):
          super(AppServicePlanPatchResource, self).__init__(kind=kind, **kwargs)
          self.name_properties_name = name_properties_name
          self.worker_tier_name = worker_tier_name
          self.status = None
          self.subscription = None
          self.admin_site_name = admin_site_name
          self.hosting_environment_profile = hosting_environment_profile
          self.maximum_number_of_workers = None
          self.geo_region = None
          self.per_site_scaling = per_site_scaling
          self.number_of_sites = None
          self.is_spot = is_spot
          self.spot_expiration_time = spot_expiration_time
          self.resource_group = None
          self.reserved = reserved
          self.target_worker_count = target_worker_count
          self.target_worker_size_id = target_worker_size_id
          self.provisioning_state = None
  
  
  class AutoHealActions(msrest.serialization.Model):
      """Actions which to take by the auto-heal module when a rule is triggered.
  
      :param action_type: Predefined action to be taken. Possible values include: "Recycle",
       "LogEvent", "CustomAction".
      :type action_type: str or ~azure.mgmt.web.v2016_09_01.models.AutoHealActionType
      :param custom_action: Custom action to be taken.
      :type custom_action: ~azure.mgmt.web.v2016_09_01.models.AutoHealCustomAction
      :param min_process_execution_time: Minimum time the process must execute
       before taking the action.
      :type min_process_execution_time: str
      """
  
      _attribute_map = {
          'action_type': {'key': 'actionType', 'type': 'str'},
          'custom_action': {'key': 'customAction', 'type': 'AutoHealCustomAction'},
          'min_process_execution_time': {'key': 'minProcessExecutionTime', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          action_type: Optional[Union[str, "AutoHealActionType"]] = None,
          custom_action: Optional["AutoHealCustomAction"] = None,
          min_process_execution_time: Optional[str] = None,
          **kwargs
      ):
          super(AutoHealActions, self).__init__(**kwargs)
          self.action_type = action_type
          self.custom_action = custom_action
          self.min_process_execution_time = min_process_execution_time
  
  
  class AutoHealCustomAction(msrest.serialization.Model):
      """Custom action to be executed
  when an auto heal rule is triggered.
  
      :param exe: Executable to be run.
      :type exe: str
      :param parameters: Parameters for the executable.
      :type parameters: str
      """
  
      _attribute_map = {
          'exe': {'key': 'exe', 'type': 'str'},
          'parameters': {'key': 'parameters', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          exe: Optional[str] = None,
          parameters: Optional[str] = None,
          **kwargs
      ):
          super(AutoHealCustomAction, self).__init__(**kwargs)
          self.exe = exe
          self.parameters = parameters
  
  
  class AutoHealRules(msrest.serialization.Model):
      """Rules that can be defined for auto-heal.
  
      :param triggers: Conditions that describe when to execute the auto-heal actions.
      :type triggers: ~azure.mgmt.web.v2016_09_01.models.AutoHealTriggers
      :param actions: Actions to be executed when a rule is triggered.
      :type actions: ~azure.mgmt.web.v2016_09_01.models.AutoHealActions
      """
  
      _attribute_map = {
          'triggers': {'key': 'triggers', 'type': 'AutoHealTriggers'},
          'actions': {'key': 'actions', 'type': 'AutoHealActions'},
      }
  
      def __init__(
          self,
          *,
          triggers: Optional["AutoHealTriggers"] = None,
          actions: Optional["AutoHealActions"] = None,
          **kwargs
      ):
          super(AutoHealRules, self).__init__(**kwargs)
          self.triggers = triggers
          self.actions = actions
  
  
  class AutoHealTriggers(msrest.serialization.Model):
      """Triggers for auto-heal.
  
      :param requests: A rule based on total requests.
      :type requests: ~azure.mgmt.web.v2016_09_01.models.RequestsBasedTrigger
      :param private_bytes_in_kb: A rule based on private bytes.
      :type private_bytes_in_kb: int
      :param status_codes: A rule based on status codes.
      :type status_codes: list[~azure.mgmt.web.v2016_09_01.models.StatusCodesBasedTrigger]
      :param slow_requests: A rule based on request execution time.
      :type slow_requests: ~azure.mgmt.web.v2016_09_01.models.SlowRequestsBasedTrigger
      """
  
      _attribute_map = {
          'requests': {'key': 'requests', 'type': 'RequestsBasedTrigger'},
          'private_bytes_in_kb': {'key': 'privateBytesInKB', 'type': 'int'},
          'status_codes': {'key': 'statusCodes', 'type': '[StatusCodesBasedTrigger]'},
          'slow_requests': {'key': 'slowRequests', 'type': 'SlowRequestsBasedTrigger'},
      }
  
      def __init__(
          self,
          *,
          requests: Optional["RequestsBasedTrigger"] = None,
          private_bytes_in_kb: Optional[int] = None,
          status_codes: Optional[List["StatusCodesBasedTrigger"]] = None,
          slow_requests: Optional["SlowRequestsBasedTrigger"] = None,
          **kwargs
      ):
          super(AutoHealTriggers, self).__init__(**kwargs)
          self.requests = requests
          self.private_bytes_in_kb = private_bytes_in_kb
          self.status_codes = status_codes
          self.slow_requests = slow_requests
  
  
  class Capability(msrest.serialization.Model):
      """Describes the capabilities/features allowed for a specific SKU.
  
      :param name: Name of the SKU capability.
      :type name: str
      :param value: Value of the SKU capability.
      :type value: str
      :param reason: Reason of the SKU capability.
      :type reason: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'value': {'key': 'value', 'type': 'str'},
          'reason': {'key': 'reason', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          value: Optional[str] = None,
          reason: Optional[str] = None,
          **kwargs
      ):
          super(Capability, self).__init__(**kwargs)
          self.name = name
          self.value = value
          self.reason = reason
  
  
  class CloningInfo(msrest.serialization.Model):
      """Information needed for cloning operation.
  
      All required parameters must be populated in order to send to Azure.
  
      :param correlation_id: Correlation ID of cloning operation. This ID ties multiple cloning
       operations
       together to use the same snapshot.
      :type correlation_id: str
      :param overwrite: :code:`<code>true</code>` to overwrite destination app; otherwise,
       :code:`<code>false</code>`.
      :type overwrite: bool
      :param clone_custom_host_names: :code:`<code>true</code>` to clone custom hostnames from source
       app; otherwise, :code:`<code>false</code>`.
      :type clone_custom_host_names: bool
      :param clone_source_control: :code:`<code>true</code>` to clone source control from source app;
       otherwise, :code:`<code>false</code>`.
      :type clone_source_control: bool
      :param source_web_app_id: Required. ARM resource ID of the source app. App resource ID is of
       the form
      /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}
       for production slots and
      /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName}
       for other slots.
      :type source_web_app_id: str
      :param hosting_environment: App Service Environment.
      :type hosting_environment: str
      :param app_settings_overrides: Application setting overrides for cloned app. If specified,
       these settings override the settings cloned
       from source app. Otherwise, application settings from source app are retained.
      :type app_settings_overrides: dict[str, str]
      :param configure_load_balancing: :code:`<code>true</code>` to configure load balancing for
       source and destination app.
      :type configure_load_balancing: bool
      :param traffic_manager_profile_id: ARM resource ID of the Traffic Manager profile to use, if it
       exists. Traffic Manager resource ID is of the form
      /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{profileName}.
      :type traffic_manager_profile_id: str
      :param traffic_manager_profile_name: Name of Traffic Manager profile to create. This is only
       needed if Traffic Manager profile does not already exist.
      :type traffic_manager_profile_name: str
      :param ignore_quotas: :code:`<code>true</code>` if quotas should be ignored; otherwise,
       :code:`<code>false</code>`.
      :type ignore_quotas: bool
      """
  
      _validation = {
          'source_web_app_id': {'required': True},
      }
  
      _attribute_map = {
          'correlation_id': {'key': 'correlationId', 'type': 'str'},
          'overwrite': {'key': 'overwrite', 'type': 'bool'},
          'clone_custom_host_names': {'key': 'cloneCustomHostNames', 'type': 'bool'},
          'clone_source_control': {'key': 'cloneSourceControl', 'type': 'bool'},
          'source_web_app_id': {'key': 'sourceWebAppId', 'type': 'str'},
          'hosting_environment': {'key': 'hostingEnvironment', 'type': 'str'},
          'app_settings_overrides': {'key': 'appSettingsOverrides', 'type': '{str}'},
          'configure_load_balancing': {'key': 'configureLoadBalancing', 'type': 'bool'},
          'traffic_manager_profile_id': {'key': 'trafficManagerProfileId', 'type': 'str'},
          'traffic_manager_profile_name': {'key': 'trafficManagerProfileName', 'type': 'str'},
          'ignore_quotas': {'key': 'ignoreQuotas', 'type': 'bool'},
      }
  
      def __init__(
          self,
          *,
          source_web_app_id: str,
          correlation_id: Optional[str] = None,
          overwrite: Optional[bool] = None,
          clone_custom_host_names: Optional[bool] = None,
          clone_source_control: Optional[bool] = None,
          hosting_environment: Optional[str] = None,
          app_settings_overrides: Optional[Dict[str, str]] = None,
          configure_load_balancing: Optional[bool] = None,
          traffic_manager_profile_id: Optional[str] = None,
          traffic_manager_profile_name: Optional[str] = None,
          ignore_quotas: Optional[bool] = None,
          **kwargs
      ):
          super(CloningInfo, self).__init__(**kwargs)
          self.correlation_id = correlation_id
          self.overwrite = overwrite
          self.clone_custom_host_names = clone_custom_host_names
          self.clone_source_control = clone_source_control
          self.source_web_app_id = source_web_app_id
          self.hosting_environment = hosting_environment
          self.app_settings_overrides = app_settings_overrides
          self.configure_load_balancing = configure_load_balancing
          self.traffic_manager_profile_id = traffic_manager_profile_id
          self.traffic_manager_profile_name = traffic_manager_profile_name
          self.ignore_quotas = ignore_quotas
  
  
  class ConnStringInfo(msrest.serialization.Model):
      """Database connection string information.
  
      :param name: Name of connection string.
      :type name: str
      :param connection_string: Connection string value.
      :type connection_string: str
      :param type: Type of database. Possible values include: "MySql", "SQLServer", "SQLAzure",
       "Custom", "NotificationHub", "ServiceBus", "EventHub", "ApiHub", "DocDb", "RedisCache",
       "PostgreSQL".
      :type type: str or ~azure.mgmt.web.v2016_09_01.models.ConnectionStringType
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'connection_string': {'key': 'connectionString', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          connection_string: Optional[str] = None,
          type: Optional[Union[str, "ConnectionStringType"]] = None,
          **kwargs
      ):
          super(ConnStringInfo, self).__init__(**kwargs)
          self.name = name
          self.connection_string = connection_string
          self.type = type
  
  
  class CorsSettings(msrest.serialization.Model):
      """Cross-Origin Resource Sharing (CORS) settings for the app.
  
      :param allowed_origins: Gets or sets the list of origins that should be allowed to make
       cross-origin
       calls (for example: http://example.com:12345). Use "*" to allow all.
      :type allowed_origins: list[str]
      """
  
      _attribute_map = {
          'allowed_origins': {'key': 'allowedOrigins', 'type': '[str]'},
      }
  
      def __init__(
          self,
          *,
          allowed_origins: Optional[List[str]] = None,
          **kwargs
      ):
          super(CorsSettings, self).__init__(**kwargs)
          self.allowed_origins = allowed_origins
  
  
  class CsmUsageQuota(msrest.serialization.Model):
      """Usage of the quota resource.
  
      :param unit: Units of measurement for the quota resource.
      :type unit: str
      :param next_reset_time: Next reset time for the resource counter.
      :type next_reset_time: ~datetime.datetime
      :param current_value: The current value of the resource counter.
      :type current_value: long
      :param limit: The resource limit.
      :type limit: long
      :param name: Quota name.
      :type name: ~azure.mgmt.web.v2016_09_01.models.LocalizableString
      """
  
      _attribute_map = {
          'unit': {'key': 'unit', 'type': 'str'},
          'next_reset_time': {'key': 'nextResetTime', 'type': 'iso-8601'},
          'current_value': {'key': 'currentValue', 'type': 'long'},
          'limit': {'key': 'limit', 'type': 'long'},
          'name': {'key': 'name', 'type': 'LocalizableString'},
      }
  
      def __init__(
          self,
          *,
          unit: Optional[str] = None,
          next_reset_time: Optional[datetime.datetime] = None,
          current_value: Optional[int] = None,
          limit: Optional[int] = None,
          name: Optional["LocalizableString"] = None,
          **kwargs
      ):
          super(CsmUsageQuota, self).__init__(**kwargs)
          self.unit = unit
          self.next_reset_time = next_reset_time
          self.current_value = current_value
          self.limit = limit
          self.name = name
  
  
  class CsmUsageQuotaCollection(msrest.serialization.Model):
      """Collection of CSM usage quotas.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.CsmUsageQuota]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[CsmUsageQuota]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["CsmUsageQuota"],
          **kwargs
      ):
          super(CsmUsageQuotaCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class ErrorEntity(msrest.serialization.Model):
      """Body of the error response returned from the API.
  
      :param extended_code: Type of error.
      :type extended_code: str
      :param message_template: Message template.
      :type message_template: str
      :param parameters: Parameters for the template.
      :type parameters: list[str]
      :param inner_errors: Inner errors.
      :type inner_errors: list[~azure.mgmt.web.v2016_09_01.models.ErrorEntity]
      :param code: Basic error code.
      :type code: str
      :param message: Any details of the error.
      :type message: str
      """
  
      _attribute_map = {
          'extended_code': {'key': 'extendedCode', 'type': 'str'},
          'message_template': {'key': 'messageTemplate', 'type': 'str'},
          'parameters': {'key': 'parameters', 'type': '[str]'},
          'inner_errors': {'key': 'innerErrors', 'type': '[ErrorEntity]'},
          'code': {'key': 'code', 'type': 'str'},
          'message': {'key': 'message', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          extended_code: Optional[str] = None,
          message_template: Optional[str] = None,
          parameters: Optional[List[str]] = None,
          inner_errors: Optional[List["ErrorEntity"]] = None,
          code: Optional[str] = None,
          message: Optional[str] = None,
          **kwargs
      ):
          super(ErrorEntity, self).__init__(**kwargs)
          self.extended_code = extended_code
          self.message_template = message_template
          self.parameters = parameters
          self.inner_errors = inner_errors
          self.code = code
          self.message = message
  
  
  class Experiments(msrest.serialization.Model):
      """Routing rules in production experiments.
  
      :param ramp_up_rules: List of ramp-up rules.
      :type ramp_up_rules: list[~azure.mgmt.web.v2016_09_01.models.RampUpRule]
      """
  
      _attribute_map = {
          'ramp_up_rules': {'key': 'rampUpRules', 'type': '[RampUpRule]'},
      }
  
      def __init__(
          self,
          *,
          ramp_up_rules: Optional[List["RampUpRule"]] = None,
          **kwargs
      ):
          super(Experiments, self).__init__(**kwargs)
          self.ramp_up_rules = ramp_up_rules
  
  
  class HandlerMapping(msrest.serialization.Model):
      """The IIS handler mappings used to define which handler processes HTTP requests with certain extension. 
  For example, it is used to configure php-cgi.exe process to handle all HTTP requests with *.php extension.
  
      :param extension: Requests with this extension will be handled using the specified FastCGI
       application.
      :type extension: str
      :param script_processor: The absolute path to the FastCGI application.
      :type script_processor: str
      :param arguments: Command-line arguments to be passed to the script processor.
      :type arguments: str
      """
  
      _attribute_map = {
          'extension': {'key': 'extension', 'type': 'str'},
          'script_processor': {'key': 'scriptProcessor', 'type': 'str'},
          'arguments': {'key': 'arguments', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          extension: Optional[str] = None,
          script_processor: Optional[str] = None,
          arguments: Optional[str] = None,
          **kwargs
      ):
          super(HandlerMapping, self).__init__(**kwargs)
          self.extension = extension
          self.script_processor = script_processor
          self.arguments = arguments
  
  
  class HostingEnvironmentDiagnostics(msrest.serialization.Model):
      """Diagnostics for an App Service Environment.
  
      :param name: Name/identifier of the diagnostics.
      :type name: str
      :param diagnosics_output: Diagnostics output.
      :type diagnosics_output: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'diagnosics_output': {'key': 'diagnosicsOutput', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          diagnosics_output: Optional[str] = None,
          **kwargs
      ):
          super(HostingEnvironmentDiagnostics, self).__init__(**kwargs)
          self.name = name
          self.diagnosics_output = diagnosics_output
  
  
  class HostingEnvironmentProfile(msrest.serialization.Model):
      """Specification for an App Service Environment to use for this resource.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :param id: Resource ID of the App Service Environment.
      :type id: str
      :ivar name: Name of the App Service Environment.
      :vartype name: str
      :ivar type: Resource type of the App Service Environment.
      :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,
          *,
          id: Optional[str] = None,
          **kwargs
      ):
          super(HostingEnvironmentProfile, self).__init__(**kwargs)
          self.id = id
          self.name = None
          self.type = None
  
  
  class HostNameSslState(msrest.serialization.Model):
      """SSL-enabled hostname.
  
      :param name: Hostname.
      :type name: str
      :param ssl_state: SSL type. Possible values include: "Disabled", "SniEnabled",
       "IpBasedEnabled".
      :type ssl_state: str or ~azure.mgmt.web.v2016_09_01.models.SslState
      :param virtual_ip: Virtual IP address assigned to the hostname if IP based SSL is enabled.
      :type virtual_ip: str
      :param thumbprint: SSL certificate thumbprint.
      :type thumbprint: str
      :param to_update: Set to :code:`<code>true</code>` to update existing hostname.
      :type to_update: bool
      :param host_type: Indicates whether the hostname is a standard or repository hostname. Possible
       values include: "Standard", "Repository".
      :type host_type: str or ~azure.mgmt.web.v2016_09_01.models.HostType
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'ssl_state': {'key': 'sslState', 'type': 'str'},
          'virtual_ip': {'key': 'virtualIP', 'type': 'str'},
          'thumbprint': {'key': 'thumbprint', 'type': 'str'},
          'to_update': {'key': 'toUpdate', 'type': 'bool'},
          'host_type': {'key': 'hostType', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          ssl_state: Optional[Union[str, "SslState"]] = None,
          virtual_ip: Optional[str] = None,
          thumbprint: Optional[str] = None,
          to_update: Optional[bool] = None,
          host_type: Optional[Union[str, "HostType"]] = None,
          **kwargs
      ):
          super(HostNameSslState, self).__init__(**kwargs)
          self.name = name
          self.ssl_state = ssl_state
          self.virtual_ip = virtual_ip
          self.thumbprint = thumbprint
          self.to_update = to_update
          self.host_type = host_type
  
  
  class HybridConnection(ProxyOnlyResource):
      """Hybrid Connection contract. This is used to configure a Hybrid Connection.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param service_bus_namespace: The name of the Service Bus namespace.
      :type service_bus_namespace: str
      :param relay_name: The name of the Service Bus relay.
      :type relay_name: str
      :param relay_arm_uri: The ARM URI to the Service Bus relay.
      :type relay_arm_uri: str
      :param hostname: The hostname of the endpoint.
      :type hostname: str
      :param port: The port of the endpoint.
      :type port: int
      :param send_key_name: The name of the Service Bus key which has Send permissions. This is used
       to authenticate to Service Bus.
      :type send_key_name: str
      :param send_key_value: The value of the Service Bus key. This is used to authenticate to
       Service Bus. In ARM this key will not be returned
       normally, use the POST /listKeys API instead.
      :type send_key_value: str
      :param service_bus_suffix: The suffix for the service bus endpoint. By default this is
       .servicebus.windows.net.
      :type service_bus_suffix: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'service_bus_namespace': {'key': 'properties.serviceBusNamespace', 'type': 'str'},
          'relay_name': {'key': 'properties.relayName', 'type': 'str'},
          'relay_arm_uri': {'key': 'properties.relayArmUri', 'type': 'str'},
          'hostname': {'key': 'properties.hostname', 'type': 'str'},
          'port': {'key': 'properties.port', 'type': 'int'},
          'send_key_name': {'key': 'properties.sendKeyName', 'type': 'str'},
          'send_key_value': {'key': 'properties.sendKeyValue', 'type': 'str'},
          'service_bus_suffix': {'key': 'properties.serviceBusSuffix', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          service_bus_namespace: Optional[str] = None,
          relay_name: Optional[str] = None,
          relay_arm_uri: Optional[str] = None,
          hostname: Optional[str] = None,
          port: Optional[int] = None,
          send_key_name: Optional[str] = None,
          send_key_value: Optional[str] = None,
          service_bus_suffix: Optional[str] = None,
          **kwargs
      ):
          super(HybridConnection, self).__init__(kind=kind, **kwargs)
          self.service_bus_namespace = service_bus_namespace
          self.relay_name = relay_name
          self.relay_arm_uri = relay_arm_uri
          self.hostname = hostname
          self.port = port
          self.send_key_name = send_key_name
          self.send_key_value = send_key_value
          self.service_bus_suffix = service_bus_suffix
  
  
  class HybridConnectionCollection(msrest.serialization.Model):
      """Collection of hostname bindings.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.HybridConnection]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[HybridConnection]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["HybridConnection"],
          **kwargs
      ):
          super(HybridConnectionCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class HybridConnectionKey(ProxyOnlyResource):
      """Hybrid Connection key contract. This has the send key name and value for a Hybrid Connection.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :ivar send_key_name: The name of the send key.
      :vartype send_key_name: str
      :ivar send_key_value: The value of the send key.
      :vartype send_key_value: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'send_key_name': {'readonly': True},
          'send_key_value': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'send_key_name': {'key': 'properties.sendKeyName', 'type': 'str'},
          'send_key_value': {'key': 'properties.sendKeyValue', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          **kwargs
      ):
          super(HybridConnectionKey, self).__init__(kind=kind, **kwargs)
          self.send_key_name = None
          self.send_key_value = None
  
  
  class HybridConnectionLimits(ProxyOnlyResource):
      """Hybrid Connection limits contract. This is used to return the plan limits of Hybrid Connections.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :ivar current: The current number of Hybrid Connections.
      :vartype current: int
      :ivar maximum: The maximum number of Hybrid Connections allowed.
      :vartype maximum: int
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'current': {'readonly': True},
          'maximum': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'current': {'key': 'properties.current', 'type': 'int'},
          'maximum': {'key': 'properties.maximum', 'type': 'int'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          **kwargs
      ):
          super(HybridConnectionLimits, self).__init__(kind=kind, **kwargs)
          self.current = None
          self.maximum = None
  
  
  class IpSecurityRestriction(msrest.serialization.Model):
      """IP security restriction on an app.
  
      All required parameters must be populated in order to send to Azure.
  
      :param ip_address: Required. IP address the security restriction is valid for.
      :type ip_address: str
      :param subnet_mask: Subnet mask for the range of IP addresses the restriction is valid for.
      :type subnet_mask: str
      """
  
      _validation = {
          'ip_address': {'required': True},
      }
  
      _attribute_map = {
          'ip_address': {'key': 'ipAddress', 'type': 'str'},
          'subnet_mask': {'key': 'subnetMask', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          ip_address: str,
          subnet_mask: Optional[str] = None,
          **kwargs
      ):
          super(IpSecurityRestriction, self).__init__(**kwargs)
          self.ip_address = ip_address
          self.subnet_mask = subnet_mask
  
  
  class LocalizableString(msrest.serialization.Model):
      """Localizable string object containing the name and a localized value.
  
      :param value: Non-localized name.
      :type value: str
      :param localized_value: Localized name.
      :type localized_value: str
      """
  
      _attribute_map = {
          'value': {'key': 'value', 'type': 'str'},
          'localized_value': {'key': 'localizedValue', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: Optional[str] = None,
          localized_value: Optional[str] = None,
          **kwargs
      ):
          super(LocalizableString, self).__init__(**kwargs)
          self.value = value
          self.localized_value = localized_value
  
  
  class ManagedServiceIdentity(msrest.serialization.Model):
      """Managed service identity.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :param type: Type of managed service identity. Possible values include: "SystemAssigned".
      :type type: str or ~azure.mgmt.web.v2016_09_01.models.ManagedServiceIdentityType
      :ivar tenant_id: Tenant of managed service identity.
      :vartype tenant_id: str
      :ivar principal_id: Principal Id of managed service identity.
      :vartype principal_id: str
      """
  
      _validation = {
          'tenant_id': {'readonly': True},
          'principal_id': {'readonly': True},
      }
  
      _attribute_map = {
          'type': {'key': 'type', 'type': 'str'},
          'tenant_id': {'key': 'tenantId', 'type': 'str'},
          'principal_id': {'key': 'principalId', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          type: Optional[Union[str, "ManagedServiceIdentityType"]] = None,
          **kwargs
      ):
          super(ManagedServiceIdentity, self).__init__(**kwargs)
          self.type = type
          self.tenant_id = None
          self.principal_id = None
  
  
  class MetricAvailabilily(msrest.serialization.Model):
      """Metric availability and retention.
  
      :param time_grain: Time grain.
      :type time_grain: str
      :param retention: Retention period for the current time grain.
      :type retention: str
      """
  
      _attribute_map = {
          'time_grain': {'key': 'timeGrain', 'type': 'str'},
          'retention': {'key': 'retention', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          time_grain: Optional[str] = None,
          retention: Optional[str] = None,
          **kwargs
      ):
          super(MetricAvailabilily, self).__init__(**kwargs)
          self.time_grain = time_grain
          self.retention = retention
  
  
  class MetricDefinition(ProxyOnlyResource):
      """Metadata for a metric.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :ivar name_properties_name: Name of the metric.
      :vartype name_properties_name: str
      :ivar unit: Unit of the metric.
      :vartype unit: str
      :ivar primary_aggregation_type: Primary aggregation type.
      :vartype primary_aggregation_type: str
      :ivar metric_availabilities: List of time grains supported for the metric together with
       retention period.
      :vartype metric_availabilities: list[~azure.mgmt.web.v2016_09_01.models.MetricAvailabilily]
      :ivar display_name: Friendly name shown in the UI.
      :vartype display_name: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'name_properties_name': {'readonly': True},
          'unit': {'readonly': True},
          'primary_aggregation_type': {'readonly': True},
          'metric_availabilities': {'readonly': True},
          'display_name': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'name_properties_name': {'key': 'properties.name', 'type': 'str'},
          'unit': {'key': 'properties.unit', 'type': 'str'},
          'primary_aggregation_type': {'key': 'properties.primaryAggregationType', 'type': 'str'},
          'metric_availabilities': {'key': 'properties.metricAvailabilities', 'type': '[MetricAvailabilily]'},
          'display_name': {'key': 'properties.displayName', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          **kwargs
      ):
          super(MetricDefinition, self).__init__(kind=kind, **kwargs)
          self.name_properties_name = None
          self.unit = None
          self.primary_aggregation_type = None
          self.metric_availabilities = None
          self.display_name = None
  
  
  class NameValuePair(msrest.serialization.Model):
      """Name value pair.
  
      :param name: Pair name.
      :type name: str
      :param value: Pair value.
      :type value: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'value': {'key': 'value', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          value: Optional[str] = None,
          **kwargs
      ):
          super(NameValuePair, self).__init__(**kwargs)
          self.name = name
          self.value = value
  
  
  class NetworkAccessControlEntry(msrest.serialization.Model):
      """Network access control entry.
  
      :param action: Action object. Possible values include: "Permit", "Deny".
      :type action: str or ~azure.mgmt.web.v2016_09_01.models.AccessControlEntryAction
      :param description: Description of network access control entry.
      :type description: str
      :param order: Order of precedence.
      :type order: int
      :param remote_subnet: Remote subnet.
      :type remote_subnet: str
      """
  
      _attribute_map = {
          'action': {'key': 'action', 'type': 'str'},
          'description': {'key': 'description', 'type': 'str'},
          'order': {'key': 'order', 'type': 'int'},
          'remote_subnet': {'key': 'remoteSubnet', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          action: Optional[Union[str, "AccessControlEntryAction"]] = None,
          description: Optional[str] = None,
          order: Optional[int] = None,
          remote_subnet: Optional[str] = None,
          **kwargs
      ):
          super(NetworkAccessControlEntry, self).__init__(**kwargs)
          self.action = action
          self.description = description
          self.order = order
          self.remote_subnet = remote_subnet
  
  
  class Operation(msrest.serialization.Model):
      """An operation on a resource.
  
      :param id: Operation ID.
      :type id: str
      :param name: Operation name.
      :type name: str
      :param status: The current status of the operation. Possible values include: "InProgress",
       "Failed", "Succeeded", "TimedOut", "Created".
      :type status: str or ~azure.mgmt.web.v2016_09_01.models.OperationStatus
      :param errors: Any errors associate with the operation.
      :type errors: list[~azure.mgmt.web.v2016_09_01.models.ErrorEntity]
      :param created_time: Time when operation has started.
      :type created_time: ~datetime.datetime
      :param modified_time: Time when operation has been updated.
      :type modified_time: ~datetime.datetime
      :param expiration_time: Time when operation will expire.
      :type expiration_time: ~datetime.datetime
      :param geo_master_operation_id: Applicable only for stamp operation ids.
      :type geo_master_operation_id: str
      """
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'status': {'key': 'status', 'type': 'str'},
          'errors': {'key': 'errors', 'type': '[ErrorEntity]'},
          'created_time': {'key': 'createdTime', 'type': 'iso-8601'},
          'modified_time': {'key': 'modifiedTime', 'type': 'iso-8601'},
          'expiration_time': {'key': 'expirationTime', 'type': 'iso-8601'},
          'geo_master_operation_id': {'key': 'geoMasterOperationId', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          id: Optional[str] = None,
          name: Optional[str] = None,
          status: Optional[Union[str, "OperationStatus"]] = None,
          errors: Optional[List["ErrorEntity"]] = None,
          created_time: Optional[datetime.datetime] = None,
          modified_time: Optional[datetime.datetime] = None,
          expiration_time: Optional[datetime.datetime] = None,
          geo_master_operation_id: Optional[str] = None,
          **kwargs
      ):
          super(Operation, self).__init__(**kwargs)
          self.id = id
          self.name = name
          self.status = status
          self.errors = errors
          self.created_time = created_time
          self.modified_time = modified_time
          self.expiration_time = expiration_time
          self.geo_master_operation_id = geo_master_operation_id
  
  
  class PushSettings(ProxyOnlyResource):
      """Push settings for the App.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param is_push_enabled: Gets or sets a flag indicating whether the Push endpoint is enabled.
      :type is_push_enabled: bool
      :param tag_whitelist_json: Gets or sets a JSON string containing a list of tags that are
       whitelisted for use by the push registration endpoint.
      :type tag_whitelist_json: str
      :param tags_requiring_auth: Gets or sets a JSON string containing a list of tags that require
       user authentication to be used in the push registration endpoint.
       Tags can consist of alphanumeric characters and the following:
       '_', '@', '#', '.', ':', '-'.
       Validation should be performed at the PushRequestHandler.
      :type tags_requiring_auth: str
      :param dynamic_tags_json: Gets or sets a JSON string containing a list of dynamic tags that
       will be evaluated from user claims in the push registration endpoint.
      :type dynamic_tags_json: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'is_push_enabled': {'key': 'properties.isPushEnabled', 'type': 'bool'},
          'tag_whitelist_json': {'key': 'properties.tagWhitelistJson', 'type': 'str'},
          'tags_requiring_auth': {'key': 'properties.tagsRequiringAuth', 'type': 'str'},
          'dynamic_tags_json': {'key': 'properties.dynamicTagsJson', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          is_push_enabled: Optional[bool] = None,
          tag_whitelist_json: Optional[str] = None,
          tags_requiring_auth: Optional[str] = None,
          dynamic_tags_json: Optional[str] = None,
          **kwargs
      ):
          super(PushSettings, self).__init__(kind=kind, **kwargs)
          self.is_push_enabled = is_push_enabled
          self.tag_whitelist_json = tag_whitelist_json
          self.tags_requiring_auth = tags_requiring_auth
          self.dynamic_tags_json = dynamic_tags_json
  
  
  class RampUpRule(msrest.serialization.Model):
      """Routing rules for ramp up testing. This rule allows to redirect static traffic % to a slot or to gradually change routing % based on performance.
  
      :param action_host_name: Hostname of a slot to which the traffic will be redirected if decided
       to. E.g. myapp-stage.azurewebsites.net.
      :type action_host_name: str
      :param reroute_percentage: Percentage of the traffic which will be redirected to
       :code:`<code>ActionHostName</code>`.
      :type reroute_percentage: float
      :param change_step: In auto ramp up scenario this is the step to add/remove from
       :code:`<code>ReroutePercentage</code>` until it reaches
       :code:`<code>MinReroutePercentage</code>` or :code:`<code>MaxReroutePercentage</code>`. Site
       metrics are checked every N minutes specified in :code:`<code>ChangeIntervalInMinutes</code>`.
       Custom decision algorithm can be provided in TiPCallback site extension which URL can be
       specified in :code:`<code>ChangeDecisionCallbackUrl</code>`.
      :type change_step: float
      :param change_interval_in_minutes: Specifies interval in minutes to reevaluate
       ReroutePercentage.
      :type change_interval_in_minutes: int
      :param min_reroute_percentage: Specifies lower boundary above which ReroutePercentage will
       stay.
      :type min_reroute_percentage: float
      :param max_reroute_percentage: Specifies upper boundary below which ReroutePercentage will
       stay.
      :type max_reroute_percentage: float
      :param change_decision_callback_url: Custom decision algorithm can be provided in TiPCallback
       site extension which URL can be specified. See TiPCallback site extension for the scaffold and
       contracts.
       https://www.siteextensions.net/packages/TiPCallback/.
      :type change_decision_callback_url: str
      :param name: Name of the routing rule. The recommended name would be to point to the slot which
       will receive the traffic in the experiment.
      :type name: str
      """
  
      _attribute_map = {
          'action_host_name': {'key': 'actionHostName', 'type': 'str'},
          'reroute_percentage': {'key': 'reroutePercentage', 'type': 'float'},
          'change_step': {'key': 'changeStep', 'type': 'float'},
          'change_interval_in_minutes': {'key': 'changeIntervalInMinutes', 'type': 'int'},
          'min_reroute_percentage': {'key': 'minReroutePercentage', 'type': 'float'},
          'max_reroute_percentage': {'key': 'maxReroutePercentage', 'type': 'float'},
          'change_decision_callback_url': {'key': 'changeDecisionCallbackUrl', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          action_host_name: Optional[str] = None,
          reroute_percentage: Optional[float] = None,
          change_step: Optional[float] = None,
          change_interval_in_minutes: Optional[int] = None,
          min_reroute_percentage: Optional[float] = None,
          max_reroute_percentage: Optional[float] = None,
          change_decision_callback_url: Optional[str] = None,
          name: Optional[str] = None,
          **kwargs
      ):
          super(RampUpRule, self).__init__(**kwargs)
          self.action_host_name = action_host_name
          self.reroute_percentage = reroute_percentage
          self.change_step = change_step
          self.change_interval_in_minutes = change_interval_in_minutes
          self.min_reroute_percentage = min_reroute_percentage
          self.max_reroute_percentage = max_reroute_percentage
          self.change_decision_callback_url = change_decision_callback_url
          self.name = name
  
  
  class RequestsBasedTrigger(msrest.serialization.Model):
      """Trigger based on total requests.
  
      :param count: Request Count.
      :type count: int
      :param time_interval: Time interval.
      :type time_interval: str
      """
  
      _attribute_map = {
          'count': {'key': 'count', 'type': 'int'},
          'time_interval': {'key': 'timeInterval', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          count: Optional[int] = None,
          time_interval: Optional[str] = None,
          **kwargs
      ):
          super(RequestsBasedTrigger, self).__init__(**kwargs)
          self.count = count
          self.time_interval = time_interval
  
  
  class ResourceCollection(msrest.serialization.Model):
      """Collection of resources.
  
      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 value: Required. Collection of resources.
      :type value: list[str]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[str]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List[str],
          **kwargs
      ):
          super(ResourceCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class ResourceMetric(msrest.serialization.Model):
      """Object representing a metric for any resource .
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :ivar name: Name of metric.
      :vartype name: ~azure.mgmt.web.v2016_09_01.models.ResourceMetricName
      :ivar unit: Metric unit.
      :vartype unit: str
      :ivar time_grain: Metric granularity. E.g PT1H, PT5M, P1D.
      :vartype time_grain: str
      :ivar start_time: Metric start time.
      :vartype start_time: ~datetime.datetime
      :ivar end_time: Metric end time.
      :vartype end_time: ~datetime.datetime
      :ivar resource_id: Metric resource Id.
      :vartype resource_id: str
      :ivar id: Resource Id.
      :vartype id: str
      :ivar metric_values: Metric values.
      :vartype metric_values: list[~azure.mgmt.web.v2016_09_01.models.ResourceMetricValue]
      :ivar properties: Resource metric properties collection.
      :vartype properties: list[~azure.mgmt.web.v2016_09_01.models.ResourceMetricProperty]
      """
  
      _validation = {
          'name': {'readonly': True},
          'unit': {'readonly': True},
          'time_grain': {'readonly': True},
          'start_time': {'readonly': True},
          'end_time': {'readonly': True},
          'resource_id': {'readonly': True},
          'id': {'readonly': True},
          'metric_values': {'readonly': True},
          'properties': {'readonly': True},
      }
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'ResourceMetricName'},
          'unit': {'key': 'unit', 'type': 'str'},
          'time_grain': {'key': 'timeGrain', 'type': 'str'},
          'start_time': {'key': 'startTime', 'type': 'iso-8601'},
          'end_time': {'key': 'endTime', 'type': 'iso-8601'},
          'resource_id': {'key': 'resourceId', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
          'metric_values': {'key': 'metricValues', 'type': '[ResourceMetricValue]'},
          'properties': {'key': 'properties', 'type': '[ResourceMetricProperty]'},
      }
  
      def __init__(
          self,
          **kwargs
      ):
          super(ResourceMetric, self).__init__(**kwargs)
          self.name = None
          self.unit = None
          self.time_grain = None
          self.start_time = None
          self.end_time = None
          self.resource_id = None
          self.id = None
          self.metric_values = None
          self.properties = None
  
  
  class ResourceMetricAvailability(msrest.serialization.Model):
      """Metrics availability and retention.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :ivar time_grain: Time grain .
      :vartype time_grain: str
      :ivar retention: Retention period for the current time grain.
      :vartype retention: str
      """
  
      _validation = {
          'time_grain': {'readonly': True},
          'retention': {'readonly': True},
      }
  
      _attribute_map = {
          'time_grain': {'key': 'timeGrain', 'type': 'str'},
          'retention': {'key': 'retention', 'type': 'str'},
      }
  
      def __init__(
          self,
          **kwargs
      ):
          super(ResourceMetricAvailability, self).__init__(**kwargs)
          self.time_grain = None
          self.retention = None
  
  
  class ResourceMetricCollection(msrest.serialization.Model):
      """Collection of metric responses.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.ResourceMetric]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ResourceMetric]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["ResourceMetric"],
          **kwargs
      ):
          super(ResourceMetricCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class ResourceMetricDefinition(ProxyOnlyResource):
      """Metadata for the metrics.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :ivar name_properties_name: Name of the metric.
      :vartype name_properties_name: ~azure.mgmt.web.v2016_09_01.models.ResourceMetricName
      :ivar unit: Unit of the metric.
      :vartype unit: str
      :ivar primary_aggregation_type: Primary aggregation type.
      :vartype primary_aggregation_type: str
      :ivar metric_availabilities: List of time grains supported for the metric together with
       retention period.
      :vartype metric_availabilities:
       list[~azure.mgmt.web.v2016_09_01.models.ResourceMetricAvailability]
      :ivar resource_uri: Resource URI.
      :vartype resource_uri: str
      :ivar id_properties_id: Resource ID.
      :vartype id_properties_id: str
      :ivar properties: Resource metric definition properties.
      :vartype properties: dict[str, str]
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'name_properties_name': {'readonly': True},
          'unit': {'readonly': True},
          'primary_aggregation_type': {'readonly': True},
          'metric_availabilities': {'readonly': True},
          'resource_uri': {'readonly': True},
          'id_properties_id': {'readonly': True},
          'properties': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'name_properties_name': {'key': 'properties.name', 'type': 'ResourceMetricName'},
          'unit': {'key': 'properties.unit', 'type': 'str'},
          'primary_aggregation_type': {'key': 'properties.primaryAggregationType', 'type': 'str'},
          'metric_availabilities': {'key': 'properties.metricAvailabilities', 'type': '[ResourceMetricAvailability]'},
          'resource_uri': {'key': 'properties.resourceUri', 'type': 'str'},
          'id_properties_id': {'key': 'properties.id', 'type': 'str'},
          'properties': {'key': 'properties.properties', 'type': '{str}'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          **kwargs
      ):
          super(ResourceMetricDefinition, self).__init__(kind=kind, **kwargs)
          self.name_properties_name = None
          self.unit = None
          self.primary_aggregation_type = None
          self.metric_availabilities = None
          self.resource_uri = None
          self.id_properties_id = None
          self.properties = None
  
  
  class ResourceMetricDefinitionCollection(msrest.serialization.Model):
      """Collection of metric definitions.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.ResourceMetricDefinition]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[ResourceMetricDefinition]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["ResourceMetricDefinition"],
          **kwargs
      ):
          super(ResourceMetricDefinitionCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class ResourceMetricName(msrest.serialization.Model):
      """Name of a metric for any resource .
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :ivar value: metric name value.
      :vartype value: str
      :ivar localized_value: Localized metric name value.
      :vartype localized_value: str
      """
  
      _validation = {
          'value': {'readonly': True},
          'localized_value': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': 'str'},
          'localized_value': {'key': 'localizedValue', 'type': 'str'},
      }
  
      def __init__(
          self,
          **kwargs
      ):
          super(ResourceMetricName, self).__init__(**kwargs)
          self.value = None
          self.localized_value = None
  
  
  class ResourceMetricProperty(msrest.serialization.Model):
      """Resource metric property.
  
      :param key: Key for resource metric property.
      :type key: str
      :param value: Value of pair.
      :type value: str
      """
  
      _attribute_map = {
          'key': {'key': 'key', 'type': 'str'},
          'value': {'key': 'value', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          key: Optional[str] = None,
          value: Optional[str] = None,
          **kwargs
      ):
          super(ResourceMetricProperty, self).__init__(**kwargs)
          self.key = key
          self.value = value
  
  
  class ResourceMetricValue(msrest.serialization.Model):
      """Value of resource metric.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :ivar timestamp: Value timestamp.
      :vartype timestamp: str
      :ivar average: Value average.
      :vartype average: float
      :ivar minimum: Value minimum.
      :vartype minimum: float
      :ivar maximum: Value maximum.
      :vartype maximum: float
      :ivar total: Value total.
      :vartype total: float
      :ivar count: Value count.
      :vartype count: float
      :ivar properties: Resource metric properties collection.
      :vartype properties: list[~azure.mgmt.web.v2016_09_01.models.ResourceMetricProperty]
      """
  
      _validation = {
          'timestamp': {'readonly': True},
          'average': {'readonly': True},
          'minimum': {'readonly': True},
          'maximum': {'readonly': True},
          'total': {'readonly': True},
          'count': {'readonly': True},
          'properties': {'readonly': True},
      }
  
      _attribute_map = {
          'timestamp': {'key': 'timestamp', 'type': 'str'},
          'average': {'key': 'average', 'type': 'float'},
          'minimum': {'key': 'minimum', 'type': 'float'},
          'maximum': {'key': 'maximum', 'type': 'float'},
          'total': {'key': 'total', 'type': 'float'},
          'count': {'key': 'count', 'type': 'float'},
          'properties': {'key': 'properties', 'type': '[ResourceMetricProperty]'},
      }
  
      def __init__(
          self,
          **kwargs
      ):
          super(ResourceMetricValue, self).__init__(**kwargs)
          self.timestamp = None
          self.average = None
          self.minimum = None
          self.maximum = None
          self.total = None
          self.count = None
          self.properties = None
  
  
  class Site(Resource):
      """A web app, a mobile app backend, or an API app.
  
      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 Id.
      :vartype id: str
      :ivar name: Resource Name.
      :vartype name: str
      :param kind: Kind of resource.
      :type kind: str
      :param location: Required. Resource Location.
      :type location: str
      :ivar type: Resource type.
      :vartype type: str
      :param tags: A set of tags. Resource tags.
      :type tags: dict[str, str]
      :param identity: Managed service identity.
      :type identity: ~azure.mgmt.web.v2016_09_01.models.ManagedServiceIdentity
      :ivar state: Current state of the app.
      :vartype state: str
      :ivar host_names: Hostnames associated with the app.
      :vartype host_names: list[str]
      :ivar repository_site_name: Name of the repository site.
      :vartype repository_site_name: str
      :ivar usage_state: State indicating whether the app has exceeded its quota usage. Read-only.
       Possible values include: "Normal", "Exceeded".
      :vartype usage_state: str or ~azure.mgmt.web.v2016_09_01.models.UsageState
      :param enabled: :code:`<code>true</code>` if the app is enabled; otherwise,
       :code:`<code>false</code>`. Setting this value to false disables the app (takes the app
       offline).
      :type enabled: bool
      :ivar enabled_host_names: Enabled hostnames for the app.Hostnames need to be assigned (see
       HostNames) AND enabled. Otherwise,
       the app is not served on those hostnames.
      :vartype enabled_host_names: list[str]
      :ivar availability_state: Management information availability state for the app. Possible
       values include: "Normal", "Limited", "DisasterRecoveryMode".
      :vartype availability_state: str or ~azure.mgmt.web.v2016_09_01.models.SiteAvailabilityState
      :param host_name_ssl_states: Hostname SSL states are used to manage the SSL bindings for app's
       hostnames.
      :type host_name_ssl_states: list[~azure.mgmt.web.v2016_09_01.models.HostNameSslState]
      :param server_farm_id: Resource ID of the associated App Service plan, formatted as:
       "/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}".
      :type server_farm_id: str
      :param reserved: :code:`<code>true</code>` if reserved; otherwise, :code:`<code>false</code>`.
      :type reserved: bool
      :ivar last_modified_time_utc: Last time the app was modified, in UTC. Read-only.
      :vartype last_modified_time_utc: ~datetime.datetime
      :param site_config: Configuration of the app.
      :type site_config: ~azure.mgmt.web.v2016_09_01.models.SiteConfig
      :ivar traffic_manager_host_names: Azure Traffic Manager hostnames associated with the app.
       Read-only.
      :vartype traffic_manager_host_names: list[str]
      :param scm_site_also_stopped: :code:`<code>true</code>` to stop SCM (KUDU) site when the app is
       stopped; otherwise, :code:`<code>false</code>`. The default is :code:`<code>false</code>`.
      :type scm_site_also_stopped: bool
      :ivar target_swap_slot: Specifies which deployment slot this app will swap into. Read-only.
      :vartype target_swap_slot: str
      :param hosting_environment_profile: App Service Environment to use for the app.
      :type hosting_environment_profile: ~azure.mgmt.web.v2016_09_01.models.HostingEnvironmentProfile
      :param client_affinity_enabled: :code:`<code>true</code>` to enable client affinity;
       :code:`<code>false</code>` to stop sending session affinity cookies, which route client
       requests in the same session to the same instance. Default is :code:`<code>true</code>`.
      :type client_affinity_enabled: bool
      :param client_cert_enabled: :code:`<code>true</code>` to enable client certificate
       authentication (TLS mutual authentication); otherwise, :code:`<code>false</code>`. Default is
       :code:`<code>false</code>`.
      :type client_cert_enabled: bool
      :param host_names_disabled: :code:`<code>true</code>` to disable the public hostnames of the
       app; otherwise, :code:`<code>false</code>`.
        If :code:`<code>true</code>`, the app is only accessible via API management process.
      :type host_names_disabled: bool
      :ivar outbound_ip_addresses: List of IP addresses that the app uses for outbound connections
       (e.g. database access). Includes VIPs from tenants that site can be hosted with current
       settings. Read-only.
      :vartype outbound_ip_addresses: str
      :ivar possible_outbound_ip_addresses: List of IP addresses that the app uses for outbound
       connections (e.g. database access). Includes VIPs from all tenants. Read-only.
      :vartype possible_outbound_ip_addresses: str
      :param container_size: Size of the function container.
      :type container_size: int
      :param daily_memory_time_quota: Maximum allowed daily memory-time quota (applicable on dynamic
       apps only).
      :type daily_memory_time_quota: int
      :ivar suspended_till: App suspended till in case memory-time quota is exceeded.
      :vartype suspended_till: ~datetime.datetime
      :ivar max_number_of_workers: Maximum number of workers.
       This only applies to Functions container.
      :vartype max_number_of_workers: int
      :param cloning_info: If specified during app creation, the app is cloned from a source app.
      :type cloning_info: ~azure.mgmt.web.v2016_09_01.models.CloningInfo
      :param snapshot_info: If specified during app creation, the app is created from a previous
       snapshot.
      :type snapshot_info: ~azure.mgmt.web.v2016_09_01.models.SnapshotRecoveryRequest
      :ivar resource_group: Name of the resource group the app belongs to. Read-only.
      :vartype resource_group: str
      :ivar is_default_container: :code:`<code>true</code>` if the app is a default container;
       otherwise, :code:`<code>false</code>`.
      :vartype is_default_container: bool
      :ivar default_host_name: Default hostname of the app. Read-only.
      :vartype default_host_name: str
      :ivar slot_swap_status: Status of the last deployment slot swap operation.
      :vartype slot_swap_status: ~azure.mgmt.web.v2016_09_01.models.SlotSwapStatus
      :param https_only: HttpsOnly: configures a web site to accept only https requests. Issues
       redirect for
       http requests.
      :type https_only: bool
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'location': {'required': True},
          'type': {'readonly': True},
          'state': {'readonly': True},
          'host_names': {'readonly': True},
          'repository_site_name': {'readonly': True},
          'usage_state': {'readonly': True},
          'enabled_host_names': {'readonly': True},
          'availability_state': {'readonly': True},
          'last_modified_time_utc': {'readonly': True},
          'traffic_manager_host_names': {'readonly': True},
          'target_swap_slot': {'readonly': True},
          'outbound_ip_addresses': {'readonly': True},
          'possible_outbound_ip_addresses': {'readonly': True},
          'suspended_till': {'readonly': True},
          'max_number_of_workers': {'readonly': True},
          'resource_group': {'readonly': True},
          'is_default_container': {'readonly': True},
          'default_host_name': {'readonly': True},
          'slot_swap_status': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'location': {'key': 'location', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'tags': {'key': 'tags', 'type': '{str}'},
          'identity': {'key': 'identity', 'type': 'ManagedServiceIdentity'},
          'state': {'key': 'properties.state', 'type': 'str'},
          'host_names': {'key': 'properties.hostNames', 'type': '[str]'},
          'repository_site_name': {'key': 'properties.repositorySiteName', 'type': 'str'},
          'usage_state': {'key': 'properties.usageState', 'type': 'str'},
          'enabled': {'key': 'properties.enabled', 'type': 'bool'},
          'enabled_host_names': {'key': 'properties.enabledHostNames', 'type': '[str]'},
          'availability_state': {'key': 'properties.availabilityState', 'type': 'str'},
          'host_name_ssl_states': {'key': 'properties.hostNameSslStates', 'type': '[HostNameSslState]'},
          'server_farm_id': {'key': 'properties.serverFarmId', 'type': 'str'},
          'reserved': {'key': 'properties.reserved', 'type': 'bool'},
          'last_modified_time_utc': {'key': 'properties.lastModifiedTimeUtc', 'type': 'iso-8601'},
          'site_config': {'key': 'properties.siteConfig', 'type': 'SiteConfig'},
          'traffic_manager_host_names': {'key': 'properties.trafficManagerHostNames', 'type': '[str]'},
          'scm_site_also_stopped': {'key': 'properties.scmSiteAlsoStopped', 'type': 'bool'},
          'target_swap_slot': {'key': 'properties.targetSwapSlot', 'type': 'str'},
          'hosting_environment_profile': {'key': 'properties.hostingEnvironmentProfile', 'type': 'HostingEnvironmentProfile'},
          'client_affinity_enabled': {'key': 'properties.clientAffinityEnabled', 'type': 'bool'},
          'client_cert_enabled': {'key': 'properties.clientCertEnabled', 'type': 'bool'},
          'host_names_disabled': {'key': 'properties.hostNamesDisabled', 'type': 'bool'},
          'outbound_ip_addresses': {'key': 'properties.outboundIpAddresses', 'type': 'str'},
          'possible_outbound_ip_addresses': {'key': 'properties.possibleOutboundIpAddresses', 'type': 'str'},
          'container_size': {'key': 'properties.containerSize', 'type': 'int'},
          'daily_memory_time_quota': {'key': 'properties.dailyMemoryTimeQuota', 'type': 'int'},
          'suspended_till': {'key': 'properties.suspendedTill', 'type': 'iso-8601'},
          'max_number_of_workers': {'key': 'properties.maxNumberOfWorkers', 'type': 'int'},
          'cloning_info': {'key': 'properties.cloningInfo', 'type': 'CloningInfo'},
          'snapshot_info': {'key': 'properties.snapshotInfo', 'type': 'SnapshotRecoveryRequest'},
          'resource_group': {'key': 'properties.resourceGroup', 'type': 'str'},
          'is_default_container': {'key': 'properties.isDefaultContainer', 'type': 'bool'},
          'default_host_name': {'key': 'properties.defaultHostName', 'type': 'str'},
          'slot_swap_status': {'key': 'properties.slotSwapStatus', 'type': 'SlotSwapStatus'},
          'https_only': {'key': 'properties.httpsOnly', 'type': 'bool'},
      }
  
      def __init__(
          self,
          *,
          location: str,
          kind: Optional[str] = None,
          tags: Optional[Dict[str, str]] = None,
          identity: Optional["ManagedServiceIdentity"] = None,
          enabled: Optional[bool] = None,
          host_name_ssl_states: Optional[List["HostNameSslState"]] = None,
          server_farm_id: Optional[str] = None,
          reserved: Optional[bool] = False,
          site_config: Optional["SiteConfig"] = None,
          scm_site_also_stopped: Optional[bool] = False,
          hosting_environment_profile: Optional["HostingEnvironmentProfile"] = None,
          client_affinity_enabled: Optional[bool] = None,
          client_cert_enabled: Optional[bool] = None,
          host_names_disabled: Optional[bool] = None,
          container_size: Optional[int] = None,
          daily_memory_time_quota: Optional[int] = None,
          cloning_info: Optional["CloningInfo"] = None,
          snapshot_info: Optional["SnapshotRecoveryRequest"] = None,
          https_only: Optional[bool] = None,
          **kwargs
      ):
          super(Site, self).__init__(kind=kind, location=location, tags=tags, **kwargs)
          self.identity = identity
          self.state = None
          self.host_names = None
          self.repository_site_name = None
          self.usage_state = None
          self.enabled = enabled
          self.enabled_host_names = None
          self.availability_state = None
          self.host_name_ssl_states = host_name_ssl_states
          self.server_farm_id = server_farm_id
          self.reserved = reserved
          self.last_modified_time_utc = None
          self.site_config = site_config
          self.traffic_manager_host_names = None
          self.scm_site_also_stopped = scm_site_also_stopped
          self.target_swap_slot = None
          self.hosting_environment_profile = hosting_environment_profile
          self.client_affinity_enabled = client_affinity_enabled
          self.client_cert_enabled = client_cert_enabled
          self.host_names_disabled = host_names_disabled
          self.outbound_ip_addresses = None
          self.possible_outbound_ip_addresses = None
          self.container_size = container_size
          self.daily_memory_time_quota = daily_memory_time_quota
          self.suspended_till = None
          self.max_number_of_workers = None
          self.cloning_info = cloning_info
          self.snapshot_info = snapshot_info
          self.resource_group = None
          self.is_default_container = None
          self.default_host_name = None
          self.slot_swap_status = None
          self.https_only = https_only
  
  
  class SiteConfig(msrest.serialization.Model):
      """Configuration of an App Service app.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :param number_of_workers: Number of workers.
      :type number_of_workers: int
      :param default_documents: Default documents.
      :type default_documents: list[str]
      :param net_framework_version: .NET Framework version.
      :type net_framework_version: str
      :param php_version: Version of PHP.
      :type php_version: str
      :param python_version: Version of Python.
      :type python_version: str
      :param node_version: Version of Node.js.
      :type node_version: str
      :param linux_fx_version: Linux App Framework and version.
      :type linux_fx_version: str
      :param request_tracing_enabled: :code:`<code>true</code>` if request tracing is enabled;
       otherwise, :code:`<code>false</code>`.
      :type request_tracing_enabled: bool
      :param request_tracing_expiration_time: Request tracing expiration time.
      :type request_tracing_expiration_time: ~datetime.datetime
      :param remote_debugging_enabled: :code:`<code>true</code>` if remote debugging is enabled;
       otherwise, :code:`<code>false</code>`.
      :type remote_debugging_enabled: bool
      :param remote_debugging_version: Remote debugging version.
      :type remote_debugging_version: str
      :param http_logging_enabled: :code:`<code>true</code>` if HTTP logging is enabled; otherwise,
       :code:`<code>false</code>`.
      :type http_logging_enabled: bool
      :param logs_directory_size_limit: HTTP logs directory size limit.
      :type logs_directory_size_limit: int
      :param detailed_error_logging_enabled: :code:`<code>true</code>` if detailed error logging is
       enabled; otherwise, :code:`<code>false</code>`.
      :type detailed_error_logging_enabled: bool
      :param publishing_username: Publishing user name.
      :type publishing_username: str
      :param app_settings: Application settings.
      :type app_settings: list[~azure.mgmt.web.v2016_09_01.models.NameValuePair]
      :param connection_strings: Connection strings.
      :type connection_strings: list[~azure.mgmt.web.v2016_09_01.models.ConnStringInfo]
      :ivar machine_key: Site MachineKey.
      :vartype machine_key: ~azure.mgmt.web.v2016_09_01.models.SiteMachineKey
      :param handler_mappings: Handler mappings.
      :type handler_mappings: list[~azure.mgmt.web.v2016_09_01.models.HandlerMapping]
      :param document_root: Document root.
      :type document_root: str
      :param scm_type: SCM type. Possible values include: "None", "Dropbox", "Tfs", "LocalGit",
       "GitHub", "CodePlexGit", "CodePlexHg", "BitbucketGit", "BitbucketHg", "ExternalGit",
       "ExternalHg", "OneDrive", "VSO".
      :type scm_type: str or ~azure.mgmt.web.v2016_09_01.models.ScmType
      :param use32_bit_worker_process: :code:`<code>true</code>` to use 32-bit worker process;
       otherwise, :code:`<code>false</code>`.
      :type use32_bit_worker_process: bool
      :param web_sockets_enabled: :code:`<code>true</code>` if WebSocket is enabled; otherwise,
       :code:`<code>false</code>`.
      :type web_sockets_enabled: bool
      :param always_on: :code:`<code>true</code>` if Always On is enabled; otherwise,
       :code:`<code>false</code>`.
      :type always_on: bool
      :param java_version: Java version.
      :type java_version: str
      :param java_container: Java container.
      :type java_container: str
      :param java_container_version: Java container version.
      :type java_container_version: str
      :param app_command_line: App command line to launch.
      :type app_command_line: str
      :param managed_pipeline_mode: Managed pipeline mode. Possible values include: "Integrated",
       "Classic".
      :type managed_pipeline_mode: str or ~azure.mgmt.web.v2016_09_01.models.ManagedPipelineMode
      :param virtual_applications: Virtual applications.
      :type virtual_applications: list[~azure.mgmt.web.v2016_09_01.models.VirtualApplication]
      :param load_balancing: Site load balancing. Possible values include: "WeightedRoundRobin",
       "LeastRequests", "LeastResponseTime", "WeightedTotalTraffic", "RequestHash".
      :type load_balancing: str or ~azure.mgmt.web.v2016_09_01.models.SiteLoadBalancing
      :param experiments: This is work around for polymorphic types.
      :type experiments: ~azure.mgmt.web.v2016_09_01.models.Experiments
      :param limits: Site limits.
      :type limits: ~azure.mgmt.web.v2016_09_01.models.SiteLimits
      :param auto_heal_enabled: :code:`<code>true</code>` if Auto Heal is enabled; otherwise,
       :code:`<code>false</code>`.
      :type auto_heal_enabled: bool
      :param auto_heal_rules: Auto Heal rules.
      :type auto_heal_rules: ~azure.mgmt.web.v2016_09_01.models.AutoHealRules
      :param tracing_options: Tracing options.
      :type tracing_options: str
      :param vnet_name: Virtual Network name.
      :type vnet_name: str
      :param cors: Cross-Origin Resource Sharing (CORS) settings.
      :type cors: ~azure.mgmt.web.v2016_09_01.models.CorsSettings
      :param push: Push endpoint settings.
      :type push: ~azure.mgmt.web.v2016_09_01.models.PushSettings
      :param api_definition: Information about the formal API definition for the app.
      :type api_definition: ~azure.mgmt.web.v2016_09_01.models.ApiDefinitionInfo
      :param auto_swap_slot_name: Auto-swap slot name.
      :type auto_swap_slot_name: str
      :param local_my_sql_enabled: :code:`<code>true</code>` to enable local MySQL; otherwise,
       :code:`<code>false</code>`.
      :type local_my_sql_enabled: bool
      :param ip_security_restrictions: IP security restrictions.
      :type ip_security_restrictions: list[~azure.mgmt.web.v2016_09_01.models.IpSecurityRestriction]
      :param http20_enabled: Http20Enabled: configures a web site to allow clients to connect over
       http2.0.
      :type http20_enabled: bool
      :param min_tls_version: MinTlsVersion: configures the minimum version of TLS required for SSL
       requests. Possible values include: "1.0", "1.1", "1.2".
      :type min_tls_version: str or ~azure.mgmt.web.v2016_09_01.models.SupportedTlsVersions
      """
  
      _validation = {
          'machine_key': {'readonly': True},
      }
  
      _attribute_map = {
          'number_of_workers': {'key': 'numberOfWorkers', 'type': 'int'},
          'default_documents': {'key': 'defaultDocuments', 'type': '[str]'},
          'net_framework_version': {'key': 'netFrameworkVersion', 'type': 'str'},
          'php_version': {'key': 'phpVersion', 'type': 'str'},
          'python_version': {'key': 'pythonVersion', 'type': 'str'},
          'node_version': {'key': 'nodeVersion', 'type': 'str'},
          'linux_fx_version': {'key': 'linuxFxVersion', 'type': 'str'},
          'request_tracing_enabled': {'key': 'requestTracingEnabled', 'type': 'bool'},
          'request_tracing_expiration_time': {'key': 'requestTracingExpirationTime', 'type': 'iso-8601'},
          'remote_debugging_enabled': {'key': 'remoteDebuggingEnabled', 'type': 'bool'},
          'remote_debugging_version': {'key': 'remoteDebuggingVersion', 'type': 'str'},
          'http_logging_enabled': {'key': 'httpLoggingEnabled', 'type': 'bool'},
          'logs_directory_size_limit': {'key': 'logsDirectorySizeLimit', 'type': 'int'},
          'detailed_error_logging_enabled': {'key': 'detailedErrorLoggingEnabled', 'type': 'bool'},
          'publishing_username': {'key': 'publishingUsername', 'type': 'str'},
          'app_settings': {'key': 'appSettings', 'type': '[NameValuePair]'},
          'connection_strings': {'key': 'connectionStrings', 'type': '[ConnStringInfo]'},
          'machine_key': {'key': 'machineKey', 'type': 'SiteMachineKey'},
          'handler_mappings': {'key': 'handlerMappings', 'type': '[HandlerMapping]'},
          'document_root': {'key': 'documentRoot', 'type': 'str'},
          'scm_type': {'key': 'scmType', 'type': 'str'},
          'use32_bit_worker_process': {'key': 'use32BitWorkerProcess', 'type': 'bool'},
          'web_sockets_enabled': {'key': 'webSocketsEnabled', 'type': 'bool'},
          'always_on': {'key': 'alwaysOn', 'type': 'bool'},
          'java_version': {'key': 'javaVersion', 'type': 'str'},
          'java_container': {'key': 'javaContainer', 'type': 'str'},
          'java_container_version': {'key': 'javaContainerVersion', 'type': 'str'},
          'app_command_line': {'key': 'appCommandLine', 'type': 'str'},
          'managed_pipeline_mode': {'key': 'managedPipelineMode', 'type': 'str'},
          'virtual_applications': {'key': 'virtualApplications', 'type': '[VirtualApplication]'},
          'load_balancing': {'key': 'loadBalancing', 'type': 'str'},
          'experiments': {'key': 'experiments', 'type': 'Experiments'},
          'limits': {'key': 'limits', 'type': 'SiteLimits'},
          'auto_heal_enabled': {'key': 'autoHealEnabled', 'type': 'bool'},
          'auto_heal_rules': {'key': 'autoHealRules', 'type': 'AutoHealRules'},
          'tracing_options': {'key': 'tracingOptions', 'type': 'str'},
          'vnet_name': {'key': 'vnetName', 'type': 'str'},
          'cors': {'key': 'cors', 'type': 'CorsSettings'},
          'push': {'key': 'push', 'type': 'PushSettings'},
          'api_definition': {'key': 'apiDefinition', 'type': 'ApiDefinitionInfo'},
          'auto_swap_slot_name': {'key': 'autoSwapSlotName', 'type': 'str'},
          'local_my_sql_enabled': {'key': 'localMySqlEnabled', 'type': 'bool'},
          'ip_security_restrictions': {'key': 'ipSecurityRestrictions', 'type': '[IpSecurityRestriction]'},
          'http20_enabled': {'key': 'http20Enabled', 'type': 'bool'},
          'min_tls_version': {'key': 'minTlsVersion', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          number_of_workers: Optional[int] = None,
          default_documents: Optional[List[str]] = None,
          net_framework_version: Optional[str] = "v4.6",
          php_version: Optional[str] = None,
          python_version: Optional[str] = None,
          node_version: Optional[str] = None,
          linux_fx_version: Optional[str] = None,
          request_tracing_enabled: Optional[bool] = None,
          request_tracing_expiration_time: Optional[datetime.datetime] = None,
          remote_debugging_enabled: Optional[bool] = None,
          remote_debugging_version: Optional[str] = None,
          http_logging_enabled: Optional[bool] = None,
          logs_directory_size_limit: Optional[int] = None,
          detailed_error_logging_enabled: Optional[bool] = None,
          publishing_username: Optional[str] = None,
          app_settings: Optional[List["NameValuePair"]] = None,
          connection_strings: Optional[List["ConnStringInfo"]] = None,
          handler_mappings: Optional[List["HandlerMapping"]] = None,
          document_root: Optional[str] = None,
          scm_type: Optional[Union[str, "ScmType"]] = None,
          use32_bit_worker_process: Optional[bool] = None,
          web_sockets_enabled: Optional[bool] = None,
          always_on: Optional[bool] = None,
          java_version: Optional[str] = None,
          java_container: Optional[str] = None,
          java_container_version: Optional[str] = None,
          app_command_line: Optional[str] = None,
          managed_pipeline_mode: Optional[Union[str, "ManagedPipelineMode"]] = None,
          virtual_applications: Optional[List["VirtualApplication"]] = None,
          load_balancing: Optional[Union[str, "SiteLoadBalancing"]] = None,
          experiments: Optional["Experiments"] = None,
          limits: Optional["SiteLimits"] = None,
          auto_heal_enabled: Optional[bool] = None,
          auto_heal_rules: Optional["AutoHealRules"] = None,
          tracing_options: Optional[str] = None,
          vnet_name: Optional[str] = None,
          cors: Optional["CorsSettings"] = None,
          push: Optional["PushSettings"] = None,
          api_definition: Optional["ApiDefinitionInfo"] = None,
          auto_swap_slot_name: Optional[str] = None,
          local_my_sql_enabled: Optional[bool] = False,
          ip_security_restrictions: Optional[List["IpSecurityRestriction"]] = None,
          http20_enabled: Optional[bool] = True,
          min_tls_version: Optional[Union[str, "SupportedTlsVersions"]] = None,
          **kwargs
      ):
          super(SiteConfig, self).__init__(**kwargs)
          self.number_of_workers = number_of_workers
          self.default_documents = default_documents
          self.net_framework_version = net_framework_version
          self.php_version = php_version
          self.python_version = python_version
          self.node_version = node_version
          self.linux_fx_version = linux_fx_version
          self.request_tracing_enabled = request_tracing_enabled
          self.request_tracing_expiration_time = request_tracing_expiration_time
          self.remote_debugging_enabled = remote_debugging_enabled
          self.remote_debugging_version = remote_debugging_version
          self.http_logging_enabled = http_logging_enabled
          self.logs_directory_size_limit = logs_directory_size_limit
          self.detailed_error_logging_enabled = detailed_error_logging_enabled
          self.publishing_username = publishing_username
          self.app_settings = app_settings
          self.connection_strings = connection_strings
          self.machine_key = None
          self.handler_mappings = handler_mappings
          self.document_root = document_root
          self.scm_type = scm_type
          self.use32_bit_worker_process = use32_bit_worker_process
          self.web_sockets_enabled = web_sockets_enabled
          self.always_on = always_on
          self.java_version = java_version
          self.java_container = java_container
          self.java_container_version = java_container_version
          self.app_command_line = app_command_line
          self.managed_pipeline_mode = managed_pipeline_mode
          self.virtual_applications = virtual_applications
          self.load_balancing = load_balancing
          self.experiments = experiments
          self.limits = limits
          self.auto_heal_enabled = auto_heal_enabled
          self.auto_heal_rules = auto_heal_rules
          self.tracing_options = tracing_options
          self.vnet_name = vnet_name
          self.cors = cors
          self.push = push
          self.api_definition = api_definition
          self.auto_swap_slot_name = auto_swap_slot_name
          self.local_my_sql_enabled = local_my_sql_enabled
          self.ip_security_restrictions = ip_security_restrictions
          self.http20_enabled = http20_enabled
          self.min_tls_version = min_tls_version
  
  
  class SiteLimits(msrest.serialization.Model):
      """Metric limits set on an app.
  
      :param max_percentage_cpu: Maximum allowed CPU usage percentage.
      :type max_percentage_cpu: float
      :param max_memory_in_mb: Maximum allowed memory usage in MB.
      :type max_memory_in_mb: long
      :param max_disk_size_in_mb: Maximum allowed disk size usage in MB.
      :type max_disk_size_in_mb: long
      """
  
      _attribute_map = {
          'max_percentage_cpu': {'key': 'maxPercentageCpu', 'type': 'float'},
          'max_memory_in_mb': {'key': 'maxMemoryInMb', 'type': 'long'},
          'max_disk_size_in_mb': {'key': 'maxDiskSizeInMb', 'type': 'long'},
      }
  
      def __init__(
          self,
          *,
          max_percentage_cpu: Optional[float] = None,
          max_memory_in_mb: Optional[int] = None,
          max_disk_size_in_mb: Optional[int] = None,
          **kwargs
      ):
          super(SiteLimits, self).__init__(**kwargs)
          self.max_percentage_cpu = max_percentage_cpu
          self.max_memory_in_mb = max_memory_in_mb
          self.max_disk_size_in_mb = max_disk_size_in_mb
  
  
  class SiteMachineKey(msrest.serialization.Model):
      """MachineKey of an app.
  
      :param validation: MachineKey validation.
      :type validation: str
      :param validation_key: Validation key.
      :type validation_key: str
      :param decryption: Algorithm used for decryption.
      :type decryption: str
      :param decryption_key: Decryption key.
      :type decryption_key: str
      """
  
      _attribute_map = {
          'validation': {'key': 'validation', 'type': 'str'},
          'validation_key': {'key': 'validationKey', 'type': 'str'},
          'decryption': {'key': 'decryption', 'type': 'str'},
          'decryption_key': {'key': 'decryptionKey', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          validation: Optional[str] = None,
          validation_key: Optional[str] = None,
          decryption: Optional[str] = None,
          decryption_key: Optional[str] = None,
          **kwargs
      ):
          super(SiteMachineKey, self).__init__(**kwargs)
          self.validation = validation
          self.validation_key = validation_key
          self.decryption = decryption
          self.decryption_key = decryption_key
  
  
  class SkuCapacity(msrest.serialization.Model):
      """Description of the App Service plan scale options.
  
      :param minimum: Minimum number of workers for this App Service plan SKU.
      :type minimum: int
      :param maximum: Maximum number of workers for this App Service plan SKU.
      :type maximum: int
      :param default: Default number of workers for this App Service plan SKU.
      :type default: int
      :param scale_type: Available scale configurations for an App Service plan.
      :type scale_type: str
      """
  
      _attribute_map = {
          'minimum': {'key': 'minimum', 'type': 'int'},
          'maximum': {'key': 'maximum', 'type': 'int'},
          'default': {'key': 'default', 'type': 'int'},
          'scale_type': {'key': 'scaleType', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          minimum: Optional[int] = None,
          maximum: Optional[int] = None,
          default: Optional[int] = None,
          scale_type: Optional[str] = None,
          **kwargs
      ):
          super(SkuCapacity, self).__init__(**kwargs)
          self.minimum = minimum
          self.maximum = maximum
          self.default = default
          self.scale_type = scale_type
  
  
  class SkuDescription(msrest.serialization.Model):
      """Description of a SKU for a scalable resource.
  
      :param name: Name of the resource SKU.
      :type name: str
      :param tier: Service tier of the resource SKU.
      :type tier: str
      :param size: Size specifier of the resource SKU.
      :type size: str
      :param family: Family code of the resource SKU.
      :type family: str
      :param capacity: Current number of instances assigned to the resource.
      :type capacity: int
      :param sku_capacity: Min, max, and default scale values of the SKU.
      :type sku_capacity: ~azure.mgmt.web.v2016_09_01.models.SkuCapacity
      :param locations: Locations of the SKU.
      :type locations: list[str]
      :param capabilities: Capabilities of the SKU, e.g., is traffic manager enabled?.
      :type capabilities: list[~azure.mgmt.web.v2016_09_01.models.Capability]
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'tier': {'key': 'tier', 'type': 'str'},
          'size': {'key': 'size', 'type': 'str'},
          'family': {'key': 'family', 'type': 'str'},
          'capacity': {'key': 'capacity', 'type': 'int'},
          'sku_capacity': {'key': 'skuCapacity', 'type': 'SkuCapacity'},
          'locations': {'key': 'locations', 'type': '[str]'},
          'capabilities': {'key': 'capabilities', 'type': '[Capability]'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          tier: Optional[str] = None,
          size: Optional[str] = None,
          family: Optional[str] = None,
          capacity: Optional[int] = None,
          sku_capacity: Optional["SkuCapacity"] = None,
          locations: Optional[List[str]] = None,
          capabilities: Optional[List["Capability"]] = None,
          **kwargs
      ):
          super(SkuDescription, self).__init__(**kwargs)
          self.name = name
          self.tier = tier
          self.size = size
          self.family = family
          self.capacity = capacity
          self.sku_capacity = sku_capacity
          self.locations = locations
          self.capabilities = capabilities
  
  
  class SkuInfo(msrest.serialization.Model):
      """SKU discovery information.
  
      :param resource_type: Resource type that this SKU applies to.
      :type resource_type: str
      :param sku: Name and tier of the SKU.
      :type sku: ~azure.mgmt.web.v2016_09_01.models.SkuDescription
      :param capacity: Min, max, and default scale values of the SKU.
      :type capacity: ~azure.mgmt.web.v2016_09_01.models.SkuCapacity
      """
  
      _attribute_map = {
          'resource_type': {'key': 'resourceType', 'type': 'str'},
          'sku': {'key': 'sku', 'type': 'SkuDescription'},
          'capacity': {'key': 'capacity', 'type': 'SkuCapacity'},
      }
  
      def __init__(
          self,
          *,
          resource_type: Optional[str] = None,
          sku: Optional["SkuDescription"] = None,
          capacity: Optional["SkuCapacity"] = None,
          **kwargs
      ):
          super(SkuInfo, self).__init__(**kwargs)
          self.resource_type = resource_type
          self.sku = sku
          self.capacity = capacity
  
  
  class SkuInfoCollection(msrest.serialization.Model):
      """Collection of SKU 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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.SkuInfo]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[SkuInfo]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["SkuInfo"],
          **kwargs
      ):
          super(SkuInfoCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class SlotSwapStatus(msrest.serialization.Model):
      """The status of the last successful slot swap operation.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :ivar timestamp_utc: The time the last successful slot swap completed.
      :vartype timestamp_utc: ~datetime.datetime
      :ivar source_slot_name: The source slot of the last swap operation.
      :vartype source_slot_name: str
      :ivar destination_slot_name: The destination slot of the last swap operation.
      :vartype destination_slot_name: str
      """
  
      _validation = {
          'timestamp_utc': {'readonly': True},
          'source_slot_name': {'readonly': True},
          'destination_slot_name': {'readonly': True},
      }
  
      _attribute_map = {
          'timestamp_utc': {'key': 'timestampUtc', 'type': 'iso-8601'},
          'source_slot_name': {'key': 'sourceSlotName', 'type': 'str'},
          'destination_slot_name': {'key': 'destinationSlotName', 'type': 'str'},
      }
  
      def __init__(
          self,
          **kwargs
      ):
          super(SlotSwapStatus, self).__init__(**kwargs)
          self.timestamp_utc = None
          self.source_slot_name = None
          self.destination_slot_name = None
  
  
  class SlowRequestsBasedTrigger(msrest.serialization.Model):
      """Trigger based on request execution time.
  
      :param time_taken: Time taken.
      :type time_taken: str
      :param count: Request Count.
      :type count: int
      :param time_interval: Time interval.
      :type time_interval: str
      """
  
      _attribute_map = {
          'time_taken': {'key': 'timeTaken', 'type': 'str'},
          'count': {'key': 'count', 'type': 'int'},
          'time_interval': {'key': 'timeInterval', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          time_taken: Optional[str] = None,
          count: Optional[int] = None,
          time_interval: Optional[str] = None,
          **kwargs
      ):
          super(SlowRequestsBasedTrigger, self).__init__(**kwargs)
          self.time_taken = time_taken
          self.count = count
          self.time_interval = time_interval
  
  
  class SnapshotRecoveryRequest(ProxyOnlyResource):
      """Details about app recovery operation.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param snapshot_time: Point in time in which the app recovery should be attempted, formatted as
       a DateTime string.
      :type snapshot_time: str
      :param recovery_target: Specifies the web app that snapshot contents will be written to.
      :type recovery_target: ~azure.mgmt.web.v2016_09_01.models.SnapshotRecoveryTarget
      :param overwrite: If :code:`<code>true</code>` the recovery operation can overwrite source app;
       otherwise, :code:`<code>false</code>`.
      :type overwrite: bool
      :param recover_configuration: If true, site configuration, in addition to content, will be
       reverted.
      :type recover_configuration: bool
      :param ignore_conflicting_host_names: If true, custom hostname conflicts will be ignored when
       recovering to a target web app.
       This setting is only necessary when RecoverConfiguration is enabled.
      :type ignore_conflicting_host_names: bool
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'snapshot_time': {'key': 'properties.snapshotTime', 'type': 'str'},
          'recovery_target': {'key': 'properties.recoveryTarget', 'type': 'SnapshotRecoveryTarget'},
          'overwrite': {'key': 'properties.overwrite', 'type': 'bool'},
          'recover_configuration': {'key': 'properties.recoverConfiguration', 'type': 'bool'},
          'ignore_conflicting_host_names': {'key': 'properties.ignoreConflictingHostNames', 'type': 'bool'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          snapshot_time: Optional[str] = None,
          recovery_target: Optional["SnapshotRecoveryTarget"] = None,
          overwrite: Optional[bool] = None,
          recover_configuration: Optional[bool] = None,
          ignore_conflicting_host_names: Optional[bool] = None,
          **kwargs
      ):
          super(SnapshotRecoveryRequest, self).__init__(kind=kind, **kwargs)
          self.snapshot_time = snapshot_time
          self.recovery_target = recovery_target
          self.overwrite = overwrite
          self.recover_configuration = recover_configuration
          self.ignore_conflicting_host_names = ignore_conflicting_host_names
  
  
  class SnapshotRecoveryTarget(msrest.serialization.Model):
      """Specifies the web app that snapshot contents will be written to.
  
      :param location: Geographical location of the target web app, e.g. SouthEastAsia,
       SouthCentralUS.
      :type location: str
      :param id: ARM resource ID of the target app.
      /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}
       for production slots and
      /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName}
       for other slots.
      :type id: str
      """
  
      _attribute_map = {
          'location': {'key': 'location', 'type': 'str'},
          'id': {'key': 'id', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          location: Optional[str] = None,
          id: Optional[str] = None,
          **kwargs
      ):
          super(SnapshotRecoveryTarget, self).__init__(**kwargs)
          self.location = location
          self.id = id
  
  
  class StampCapacity(msrest.serialization.Model):
      """Stamp capacity information.
  
      :param name: Name of the stamp.
      :type name: str
      :param available_capacity: Available capacity (# of machines, bytes of storage etc...).
      :type available_capacity: long
      :param total_capacity: Total capacity (# of machines, bytes of storage etc...).
      :type total_capacity: long
      :param unit: Name of the unit.
      :type unit: str
      :param compute_mode: Shared/dedicated workers. Possible values include: "Shared", "Dedicated",
       "Dynamic".
      :type compute_mode: str or ~azure.mgmt.web.v2016_09_01.models.ComputeModeOptions
      :param worker_size: Size of the machines. Possible values include: "Default", "Small",
       "Medium", "Large", "D1", "D2", "D3".
      :type worker_size: str or ~azure.mgmt.web.v2016_09_01.models.WorkerSizeOptions
      :param worker_size_id: Size ID of machines:
       0 - Small
       1 - Medium
       2 - Large.
      :type worker_size_id: int
      :param exclude_from_capacity_allocation: If :code:`<code>true</code>`, it includes basic apps.
       Basic apps are not used for capacity allocation.
      :type exclude_from_capacity_allocation: bool
      :param is_applicable_for_all_compute_modes: :code:`<code>true</code>` if capacity is applicable
       for all apps; otherwise, :code:`<code>false</code>`.
      :type is_applicable_for_all_compute_modes: bool
      :param site_mode: Shared or Dedicated.
      :type site_mode: str
      """
  
      _attribute_map = {
          'name': {'key': 'name', 'type': 'str'},
          'available_capacity': {'key': 'availableCapacity', 'type': 'long'},
          'total_capacity': {'key': 'totalCapacity', 'type': 'long'},
          'unit': {'key': 'unit', 'type': 'str'},
          'compute_mode': {'key': 'computeMode', 'type': 'str'},
          'worker_size': {'key': 'workerSize', 'type': 'str'},
          'worker_size_id': {'key': 'workerSizeId', 'type': 'int'},
          'exclude_from_capacity_allocation': {'key': 'excludeFromCapacityAllocation', 'type': 'bool'},
          'is_applicable_for_all_compute_modes': {'key': 'isApplicableForAllComputeModes', 'type': 'bool'},
          'site_mode': {'key': 'siteMode', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          name: Optional[str] = None,
          available_capacity: Optional[int] = None,
          total_capacity: Optional[int] = None,
          unit: Optional[str] = None,
          compute_mode: Optional[Union[str, "ComputeModeOptions"]] = None,
          worker_size: Optional[Union[str, "WorkerSizeOptions"]] = None,
          worker_size_id: Optional[int] = None,
          exclude_from_capacity_allocation: Optional[bool] = None,
          is_applicable_for_all_compute_modes: Optional[bool] = None,
          site_mode: Optional[str] = None,
          **kwargs
      ):
          super(StampCapacity, self).__init__(**kwargs)
          self.name = name
          self.available_capacity = available_capacity
          self.total_capacity = total_capacity
          self.unit = unit
          self.compute_mode = compute_mode
          self.worker_size = worker_size
          self.worker_size_id = worker_size_id
          self.exclude_from_capacity_allocation = exclude_from_capacity_allocation
          self.is_applicable_for_all_compute_modes = is_applicable_for_all_compute_modes
          self.site_mode = site_mode
  
  
  class StampCapacityCollection(msrest.serialization.Model):
      """Collection of stamp capacities.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.StampCapacity]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[StampCapacity]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["StampCapacity"],
          **kwargs
      ):
          super(StampCapacityCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class StatusCodesBasedTrigger(msrest.serialization.Model):
      """Trigger based on status code.
  
      :param status: HTTP status code.
      :type status: int
      :param sub_status: Request Sub Status.
      :type sub_status: int
      :param win32_status: Win32 error code.
      :type win32_status: int
      :param count: Request Count.
      :type count: int
      :param time_interval: Time interval.
      :type time_interval: str
      """
  
      _attribute_map = {
          'status': {'key': 'status', 'type': 'int'},
          'sub_status': {'key': 'subStatus', 'type': 'int'},
          'win32_status': {'key': 'win32Status', 'type': 'int'},
          'count': {'key': 'count', 'type': 'int'},
          'time_interval': {'key': 'timeInterval', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          status: Optional[int] = None,
          sub_status: Optional[int] = None,
          win32_status: Optional[int] = None,
          count: Optional[int] = None,
          time_interval: Optional[str] = None,
          **kwargs
      ):
          super(StatusCodesBasedTrigger, self).__init__(**kwargs)
          self.status = status
          self.sub_status = sub_status
          self.win32_status = win32_status
          self.count = count
          self.time_interval = time_interval
  
  
  class Usage(ProxyOnlyResource):
      """Usage of the quota resource.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :ivar display_name: Friendly name shown in the UI.
      :vartype display_name: str
      :ivar name_properties_name: Name of the quota.
      :vartype name_properties_name: str
      :ivar resource_name: Name of the quota resource.
      :vartype resource_name: str
      :ivar unit: Units of measurement for the quota resource.
      :vartype unit: str
      :ivar current_value: The current value of the resource counter.
      :vartype current_value: long
      :ivar limit: The resource limit.
      :vartype limit: long
      :ivar next_reset_time: Next reset time for the resource counter.
      :vartype next_reset_time: ~datetime.datetime
      :ivar compute_mode: Compute mode used for this usage. Possible values include: "Shared",
       "Dedicated", "Dynamic".
      :vartype compute_mode: str or ~azure.mgmt.web.v2016_09_01.models.ComputeModeOptions
      :ivar site_mode: Site mode used for this usage.
      :vartype site_mode: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'display_name': {'readonly': True},
          'name_properties_name': {'readonly': True},
          'resource_name': {'readonly': True},
          'unit': {'readonly': True},
          'current_value': {'readonly': True},
          'limit': {'readonly': True},
          'next_reset_time': {'readonly': True},
          'compute_mode': {'readonly': True},
          'site_mode': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'display_name': {'key': 'properties.displayName', 'type': 'str'},
          'name_properties_name': {'key': 'properties.name', 'type': 'str'},
          'resource_name': {'key': 'properties.resourceName', 'type': 'str'},
          'unit': {'key': 'properties.unit', 'type': 'str'},
          'current_value': {'key': 'properties.currentValue', 'type': 'long'},
          'limit': {'key': 'properties.limit', 'type': 'long'},
          'next_reset_time': {'key': 'properties.nextResetTime', 'type': 'iso-8601'},
          'compute_mode': {'key': 'properties.computeMode', 'type': 'str'},
          'site_mode': {'key': 'properties.siteMode', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          **kwargs
      ):
          super(Usage, self).__init__(kind=kind, **kwargs)
          self.display_name = None
          self.name_properties_name = None
          self.resource_name = None
          self.unit = None
          self.current_value = None
          self.limit = None
          self.next_reset_time = None
          self.compute_mode = None
          self.site_mode = None
  
  
  class UsageCollection(msrest.serialization.Model):
      """Collection of usages.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.Usage]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[Usage]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["Usage"],
          **kwargs
      ):
          super(UsageCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class VirtualApplication(msrest.serialization.Model):
      """Virtual application in an app.
  
      :param virtual_path: Virtual path.
      :type virtual_path: str
      :param physical_path: Physical path.
      :type physical_path: str
      :param preload_enabled: :code:`<code>true</code>` if preloading is enabled; otherwise,
       :code:`<code>false</code>`.
      :type preload_enabled: bool
      :param virtual_directories: Virtual directories for virtual application.
      :type virtual_directories: list[~azure.mgmt.web.v2016_09_01.models.VirtualDirectory]
      """
  
      _attribute_map = {
          'virtual_path': {'key': 'virtualPath', 'type': 'str'},
          'physical_path': {'key': 'physicalPath', 'type': 'str'},
          'preload_enabled': {'key': 'preloadEnabled', 'type': 'bool'},
          'virtual_directories': {'key': 'virtualDirectories', 'type': '[VirtualDirectory]'},
      }
  
      def __init__(
          self,
          *,
          virtual_path: Optional[str] = None,
          physical_path: Optional[str] = None,
          preload_enabled: Optional[bool] = None,
          virtual_directories: Optional[List["VirtualDirectory"]] = None,
          **kwargs
      ):
          super(VirtualApplication, self).__init__(**kwargs)
          self.virtual_path = virtual_path
          self.physical_path = physical_path
          self.preload_enabled = preload_enabled
          self.virtual_directories = virtual_directories
  
  
  class VirtualDirectory(msrest.serialization.Model):
      """Directory for virtual application.
  
      :param virtual_path: Path to virtual application.
      :type virtual_path: str
      :param physical_path: Physical path.
      :type physical_path: str
      """
  
      _attribute_map = {
          'virtual_path': {'key': 'virtualPath', 'type': 'str'},
          'physical_path': {'key': 'physicalPath', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          virtual_path: Optional[str] = None,
          physical_path: Optional[str] = None,
          **kwargs
      ):
          super(VirtualDirectory, self).__init__(**kwargs)
          self.virtual_path = virtual_path
          self.physical_path = physical_path
  
  
  class VirtualIPMapping(msrest.serialization.Model):
      """Virtual IP mapping.
  
      :param virtual_ip: Virtual IP address.
      :type virtual_ip: str
      :param internal_http_port: Internal HTTP port.
      :type internal_http_port: int
      :param internal_https_port: Internal HTTPS port.
      :type internal_https_port: int
      :param in_use: Is virtual IP mapping in use.
      :type in_use: bool
      """
  
      _attribute_map = {
          'virtual_ip': {'key': 'virtualIP', 'type': 'str'},
          'internal_http_port': {'key': 'internalHttpPort', 'type': 'int'},
          'internal_https_port': {'key': 'internalHttpsPort', 'type': 'int'},
          'in_use': {'key': 'inUse', 'type': 'bool'},
      }
  
      def __init__(
          self,
          *,
          virtual_ip: Optional[str] = None,
          internal_http_port: Optional[int] = None,
          internal_https_port: Optional[int] = None,
          in_use: Optional[bool] = None,
          **kwargs
      ):
          super(VirtualIPMapping, self).__init__(**kwargs)
          self.virtual_ip = virtual_ip
          self.internal_http_port = internal_http_port
          self.internal_https_port = internal_https_port
          self.in_use = in_use
  
  
  class VirtualNetworkProfile(msrest.serialization.Model):
      """Specification for using a Virtual Network.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :param id: Resource id of the Virtual Network.
      :type id: str
      :ivar name: Name of the Virtual Network (read-only).
      :vartype name: str
      :ivar type: Resource type of the Virtual Network (read-only).
      :vartype type: str
      :param subnet: Subnet within the Virtual Network.
      :type subnet: 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'},
          'subnet': {'key': 'subnet', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          id: Optional[str] = None,
          subnet: Optional[str] = None,
          **kwargs
      ):
          super(VirtualNetworkProfile, self).__init__(**kwargs)
          self.id = id
          self.name = None
          self.type = None
          self.subnet = subnet
  
  
  class VnetGateway(ProxyOnlyResource):
      """The Virtual Network gateway contract. This is used to give the Virtual Network gateway access to the VPN package.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param vnet_name: The Virtual Network name.
      :type vnet_name: str
      :param vpn_package_uri: The URI where the VPN package can be downloaded.
      :type vpn_package_uri: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'vnet_name': {'key': 'properties.vnetName', 'type': 'str'},
          'vpn_package_uri': {'key': 'properties.vpnPackageUri', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          vnet_name: Optional[str] = None,
          vpn_package_uri: Optional[str] = None,
          **kwargs
      ):
          super(VnetGateway, self).__init__(kind=kind, **kwargs)
          self.vnet_name = vnet_name
          self.vpn_package_uri = vpn_package_uri
  
  
  class VnetInfo(ProxyOnlyResource):
      """Virtual Network information contract.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param vnet_resource_id: The Virtual Network's resource ID.
      :type vnet_resource_id: str
      :ivar cert_thumbprint: The client certificate thumbprint.
      :vartype cert_thumbprint: str
      :param cert_blob: A certificate file (.cer) blob containing the public key of the private key
       used to authenticate a
       Point-To-Site VPN connection.
      :type cert_blob: bytearray
      :ivar routes: The routes that this Virtual Network connection uses.
      :vartype routes: list[~azure.mgmt.web.v2016_09_01.models.VnetRoute]
      :ivar resync_required: :code:`<code>true</code>` if a resync is required; otherwise,
       :code:`<code>false</code>`.
      :vartype resync_required: bool
      :param dns_servers: DNS servers to be used by this Virtual Network. This should be a
       comma-separated list of IP addresses.
      :type dns_servers: str
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'cert_thumbprint': {'readonly': True},
          'routes': {'readonly': True},
          'resync_required': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'vnet_resource_id': {'key': 'properties.vnetResourceId', 'type': 'str'},
          'cert_thumbprint': {'key': 'properties.certThumbprint', 'type': 'str'},
          'cert_blob': {'key': 'properties.certBlob', 'type': 'bytearray'},
          'routes': {'key': 'properties.routes', 'type': '[VnetRoute]'},
          'resync_required': {'key': 'properties.resyncRequired', 'type': 'bool'},
          'dns_servers': {'key': 'properties.dnsServers', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          vnet_resource_id: Optional[str] = None,
          cert_blob: Optional[bytearray] = None,
          dns_servers: Optional[str] = None,
          **kwargs
      ):
          super(VnetInfo, self).__init__(kind=kind, **kwargs)
          self.vnet_resource_id = vnet_resource_id
          self.cert_thumbprint = None
          self.cert_blob = cert_blob
          self.routes = None
          self.resync_required = None
          self.dns_servers = dns_servers
  
  
  class VnetRoute(ProxyOnlyResource):
      """Virtual Network route contract used to pass routing information for a Virtual Network.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param vnet_route_name: The name of this route. This is only returned by the server and does
       not need to be set by the client.
      :type vnet_route_name: str
      :param start_address: The starting address for this route. This may also include a CIDR
       notation, in which case the end address must not be specified.
      :type start_address: str
      :param end_address: The ending address for this route. If the start address is specified in
       CIDR notation, this must be omitted.
      :type end_address: str
      :param route_type: The type of route this is:
       DEFAULT - By default, every app has routes to the local address ranges specified by RFC1918
       INHERITED - Routes inherited from the real Virtual Network routes
       STATIC - Static route set on the app only
      
       These values will be used for syncing an app's routes with those from a Virtual Network.
       Possible values include: "DEFAULT", "INHERITED", "STATIC".
      :type route_type: str or ~azure.mgmt.web.v2016_09_01.models.RouteType
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'vnet_route_name': {'key': 'properties.name', 'type': 'str'},
          'start_address': {'key': 'properties.startAddress', 'type': 'str'},
          'end_address': {'key': 'properties.endAddress', 'type': 'str'},
          'route_type': {'key': 'properties.routeType', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          vnet_route_name: Optional[str] = None,
          start_address: Optional[str] = None,
          end_address: Optional[str] = None,
          route_type: Optional[Union[str, "RouteType"]] = None,
          **kwargs
      ):
          super(VnetRoute, self).__init__(kind=kind, **kwargs)
          self.vnet_route_name = vnet_route_name
          self.start_address = start_address
          self.end_address = end_address
          self.route_type = route_type
  
  
  class WebAppCollection(msrest.serialization.Model):
      """Collection of App Service apps.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.Site]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[Site]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["Site"],
          **kwargs
      ):
          super(WebAppCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class WorkerPool(msrest.serialization.Model):
      """Worker pool of an App Service Environment.
  
      Variables are only populated by the server, and will be ignored when sending a request.
  
      :param worker_size_id: Worker size ID for referencing this worker pool.
      :type worker_size_id: int
      :param compute_mode: Shared or dedicated app hosting. Possible values include: "Shared",
       "Dedicated", "Dynamic".
      :type compute_mode: str or ~azure.mgmt.web.v2016_09_01.models.ComputeModeOptions
      :param worker_size: VM size of the worker pool instances.
      :type worker_size: str
      :param worker_count: Number of instances in the worker pool.
      :type worker_count: int
      :ivar instance_names: Names of all instances in the worker pool (read only).
      :vartype instance_names: list[str]
      """
  
      _validation = {
          'instance_names': {'readonly': True},
      }
  
      _attribute_map = {
          'worker_size_id': {'key': 'workerSizeId', 'type': 'int'},
          'compute_mode': {'key': 'computeMode', 'type': 'str'},
          'worker_size': {'key': 'workerSize', 'type': 'str'},
          'worker_count': {'key': 'workerCount', 'type': 'int'},
          'instance_names': {'key': 'instanceNames', 'type': '[str]'},
      }
  
      def __init__(
          self,
          *,
          worker_size_id: Optional[int] = None,
          compute_mode: Optional[Union[str, "ComputeModeOptions"]] = None,
          worker_size: Optional[str] = None,
          worker_count: Optional[int] = None,
          **kwargs
      ):
          super(WorkerPool, self).__init__(**kwargs)
          self.worker_size_id = worker_size_id
          self.compute_mode = compute_mode
          self.worker_size = worker_size
          self.worker_count = worker_count
          self.instance_names = None
  
  
  class WorkerPoolCollection(msrest.serialization.Model):
      """Collection of worker pools.
  
      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 value: Required. Collection of resources.
      :type value: list[~azure.mgmt.web.v2016_09_01.models.WorkerPoolResource]
      :ivar next_link: Link to next page of resources.
      :vartype next_link: str
      """
  
      _validation = {
          'value': {'required': True},
          'next_link': {'readonly': True},
      }
  
      _attribute_map = {
          'value': {'key': 'value', 'type': '[WorkerPoolResource]'},
          'next_link': {'key': 'nextLink', 'type': 'str'},
      }
  
      def __init__(
          self,
          *,
          value: List["WorkerPoolResource"],
          **kwargs
      ):
          super(WorkerPoolCollection, self).__init__(**kwargs)
          self.value = value
          self.next_link = None
  
  
  class WorkerPoolResource(ProxyOnlyResource):
      """Worker pool of an App Service Environment ARM resource.
  
      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
      :param kind: Kind of resource.
      :type kind: str
      :ivar type: Resource type.
      :vartype type: str
      :param sku: Description of a SKU for a scalable resource.
      :type sku: ~azure.mgmt.web.v2016_09_01.models.SkuDescription
      :param worker_size_id: Worker size ID for referencing this worker pool.
      :type worker_size_id: int
      :param compute_mode: Shared or dedicated app hosting. Possible values include: "Shared",
       "Dedicated", "Dynamic".
      :type compute_mode: str or ~azure.mgmt.web.v2016_09_01.models.ComputeModeOptions
      :param worker_size: VM size of the worker pool instances.
      :type worker_size: str
      :param worker_count: Number of instances in the worker pool.
      :type worker_count: int
      :ivar instance_names: Names of all instances in the worker pool (read only).
      :vartype instance_names: list[str]
      """
  
      _validation = {
          'id': {'readonly': True},
          'name': {'readonly': True},
          'type': {'readonly': True},
          'instance_names': {'readonly': True},
      }
  
      _attribute_map = {
          'id': {'key': 'id', 'type': 'str'},
          'name': {'key': 'name', 'type': 'str'},
          'kind': {'key': 'kind', 'type': 'str'},
          'type': {'key': 'type', 'type': 'str'},
          'sku': {'key': 'sku', 'type': 'SkuDescription'},
          'worker_size_id': {'key': 'properties.workerSizeId', 'type': 'int'},
          'compute_mode': {'key': 'properties.computeMode', 'type': 'str'},
          'worker_size': {'key': 'properties.workerSize', 'type': 'str'},
          'worker_count': {'key': 'properties.workerCount', 'type': 'int'},
          'instance_names': {'key': 'properties.instanceNames', 'type': '[str]'},
      }
  
      def __init__(
          self,
          *,
          kind: Optional[str] = None,
          sku: Optional["SkuDescription"] = None,
          worker_size_id: Optional[int] = None,
          compute_mode: Optional[Union[str, "ComputeModeOptions"]] = None,
          worker_size: Optional[str] = None,
          worker_count: Optional[int] = None,
          **kwargs
      ):
          super(WorkerPoolResource, self).__init__(kind=kind, **kwargs)
          self.sku = sku
          self.worker_size_id = worker_size_id
          self.compute_mode = compute_mode
          self.worker_size = worker_size
          self.worker_count = worker_count
          self.instance_names = None
  