1# coding=utf-8
2# --------------------------------------------------------------------------
3# Copyright (c) Microsoft Corporation. All rights reserved.
4# Licensed under the MIT License. See License.txt in the project root for license information.
5# Code generated by Microsoft (R) AutoRest Code Generator.
6# Changes may cause incorrect behavior and will be lost if the code is regenerated.
7# --------------------------------------------------------------------------
8
9import datetime
10from typing import Dict, List, Optional, Union
11
12import msrest.serialization
13
14from ._network_management_client_enums import *
15
16
17class AddressSpace(msrest.serialization.Model):
18    """AddressSpace contains an array of IP address ranges that can be used by subnets of the virtual network.
19
20    :param address_prefixes: A list of address blocks reserved for this virtual network in CIDR
21     notation.
22    :type address_prefixes: list[str]
23    """
24
25    _attribute_map = {
26        'address_prefixes': {'key': 'addressPrefixes', 'type': '[str]'},
27    }
28
29    def __init__(
30        self,
31        *,
32        address_prefixes: Optional[List[str]] = None,
33        **kwargs
34    ):
35        super(AddressSpace, self).__init__(**kwargs)
36        self.address_prefixes = address_prefixes
37
38
39class Resource(msrest.serialization.Model):
40    """Resource.
41
42    Variables are only populated by the server, and will be ignored when sending a request.
43
44    :param id: Resource ID.
45    :type id: str
46    :ivar name: Resource name.
47    :vartype name: str
48    :ivar type: Resource type.
49    :vartype type: str
50    :param location: Resource location.
51    :type location: str
52    :param tags: A set of tags. Resource tags.
53    :type tags: dict[str, str]
54    """
55
56    _validation = {
57        'name': {'readonly': True},
58        'type': {'readonly': True},
59    }
60
61    _attribute_map = {
62        'id': {'key': 'id', 'type': 'str'},
63        'name': {'key': 'name', 'type': 'str'},
64        'type': {'key': 'type', 'type': 'str'},
65        'location': {'key': 'location', 'type': 'str'},
66        'tags': {'key': 'tags', 'type': '{str}'},
67    }
68
69    def __init__(
70        self,
71        *,
72        id: Optional[str] = None,
73        location: Optional[str] = None,
74        tags: Optional[Dict[str, str]] = None,
75        **kwargs
76    ):
77        super(Resource, self).__init__(**kwargs)
78        self.id = id
79        self.name = None
80        self.type = None
81        self.location = location
82        self.tags = tags
83
84
85class ApplicationGateway(Resource):
86    """Application gateway resource.
87
88    Variables are only populated by the server, and will be ignored when sending a request.
89
90    :param id: Resource ID.
91    :type id: str
92    :ivar name: Resource name.
93    :vartype name: str
94    :ivar type: Resource type.
95    :vartype type: str
96    :param location: Resource location.
97    :type location: str
98    :param tags: A set of tags. Resource tags.
99    :type tags: dict[str, str]
100    :param etag: A unique read-only string that changes whenever the resource is updated.
101    :type etag: str
102    :param sku: SKU of the application gateway resource.
103    :type sku: ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewaySku
104    :param ssl_policy: SSL policy of the application gateway resource.
105    :type ssl_policy: ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewaySslPolicy
106    :ivar operational_state: Operational state of the application gateway resource. Possible values
107     are: 'Stopped', 'Started', 'Running', and 'Stopping'. Possible values include: "Stopped",
108     "Starting", "Running", "Stopping".
109    :vartype operational_state: str or
110     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayOperationalState
111    :param gateway_ip_configurations: Subnets of application the gateway resource.
112    :type gateway_ip_configurations:
113     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayIPConfiguration]
114    :param authentication_certificates: Authentication certificates of the application gateway
115     resource.
116    :type authentication_certificates:
117     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayAuthenticationCertificate]
118    :param ssl_certificates: SSL certificates of the application gateway resource.
119    :type ssl_certificates:
120     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewaySslCertificate]
121    :param frontend_ip_configurations: Frontend IP addresses of the application gateway resource.
122    :type frontend_ip_configurations:
123     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayFrontendIPConfiguration]
124    :param frontend_ports: Frontend ports of the application gateway resource.
125    :type frontend_ports:
126     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayFrontendPort]
127    :param probes: Probes of the application gateway resource.
128    :type probes: list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayProbe]
129    :param backend_address_pools: Backend address pool of the application gateway resource.
130    :type backend_address_pools:
131     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendAddressPool]
132    :param backend_http_settings_collection: Backend http settings of the application gateway
133     resource.
134    :type backend_http_settings_collection:
135     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendHttpSettings]
136    :param http_listeners: Http listeners of the application gateway resource.
137    :type http_listeners:
138     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayHttpListener]
139    :param url_path_maps: URL path map of the application gateway resource.
140    :type url_path_maps: list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayUrlPathMap]
141    :param request_routing_rules: Request routing rules of the application gateway resource.
142    :type request_routing_rules:
143     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayRequestRoutingRule]
144    :param web_application_firewall_configuration: Web application firewall configuration.
145    :type web_application_firewall_configuration:
146     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayWebApplicationFirewallConfiguration
147    :param resource_guid: Resource GUID property of the application gateway resource.
148    :type resource_guid: str
149    :param provisioning_state: Provisioning state of the application gateway resource. Possible
150     values are: 'Updating', 'Deleting', and 'Failed'.
151    :type provisioning_state: str
152    """
153
154    _validation = {
155        'name': {'readonly': True},
156        'type': {'readonly': True},
157        'operational_state': {'readonly': True},
158    }
159
160    _attribute_map = {
161        'id': {'key': 'id', 'type': 'str'},
162        'name': {'key': 'name', 'type': 'str'},
163        'type': {'key': 'type', 'type': 'str'},
164        'location': {'key': 'location', 'type': 'str'},
165        'tags': {'key': 'tags', 'type': '{str}'},
166        'etag': {'key': 'etag', 'type': 'str'},
167        'sku': {'key': 'properties.sku', 'type': 'ApplicationGatewaySku'},
168        'ssl_policy': {'key': 'properties.sslPolicy', 'type': 'ApplicationGatewaySslPolicy'},
169        'operational_state': {'key': 'properties.operationalState', 'type': 'str'},
170        'gateway_ip_configurations': {'key': 'properties.gatewayIPConfigurations', 'type': '[ApplicationGatewayIPConfiguration]'},
171        'authentication_certificates': {'key': 'properties.authenticationCertificates', 'type': '[ApplicationGatewayAuthenticationCertificate]'},
172        'ssl_certificates': {'key': 'properties.sslCertificates', 'type': '[ApplicationGatewaySslCertificate]'},
173        'frontend_ip_configurations': {'key': 'properties.frontendIPConfigurations', 'type': '[ApplicationGatewayFrontendIPConfiguration]'},
174        'frontend_ports': {'key': 'properties.frontendPorts', 'type': '[ApplicationGatewayFrontendPort]'},
175        'probes': {'key': 'properties.probes', 'type': '[ApplicationGatewayProbe]'},
176        'backend_address_pools': {'key': 'properties.backendAddressPools', 'type': '[ApplicationGatewayBackendAddressPool]'},
177        'backend_http_settings_collection': {'key': 'properties.backendHttpSettingsCollection', 'type': '[ApplicationGatewayBackendHttpSettings]'},
178        'http_listeners': {'key': 'properties.httpListeners', 'type': '[ApplicationGatewayHttpListener]'},
179        'url_path_maps': {'key': 'properties.urlPathMaps', 'type': '[ApplicationGatewayUrlPathMap]'},
180        'request_routing_rules': {'key': 'properties.requestRoutingRules', 'type': '[ApplicationGatewayRequestRoutingRule]'},
181        'web_application_firewall_configuration': {'key': 'properties.webApplicationFirewallConfiguration', 'type': 'ApplicationGatewayWebApplicationFirewallConfiguration'},
182        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
183        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
184    }
185
186    def __init__(
187        self,
188        *,
189        id: Optional[str] = None,
190        location: Optional[str] = None,
191        tags: Optional[Dict[str, str]] = None,
192        etag: Optional[str] = None,
193        sku: Optional["ApplicationGatewaySku"] = None,
194        ssl_policy: Optional["ApplicationGatewaySslPolicy"] = None,
195        gateway_ip_configurations: Optional[List["ApplicationGatewayIPConfiguration"]] = None,
196        authentication_certificates: Optional[List["ApplicationGatewayAuthenticationCertificate"]] = None,
197        ssl_certificates: Optional[List["ApplicationGatewaySslCertificate"]] = None,
198        frontend_ip_configurations: Optional[List["ApplicationGatewayFrontendIPConfiguration"]] = None,
199        frontend_ports: Optional[List["ApplicationGatewayFrontendPort"]] = None,
200        probes: Optional[List["ApplicationGatewayProbe"]] = None,
201        backend_address_pools: Optional[List["ApplicationGatewayBackendAddressPool"]] = None,
202        backend_http_settings_collection: Optional[List["ApplicationGatewayBackendHttpSettings"]] = None,
203        http_listeners: Optional[List["ApplicationGatewayHttpListener"]] = None,
204        url_path_maps: Optional[List["ApplicationGatewayUrlPathMap"]] = None,
205        request_routing_rules: Optional[List["ApplicationGatewayRequestRoutingRule"]] = None,
206        web_application_firewall_configuration: Optional["ApplicationGatewayWebApplicationFirewallConfiguration"] = None,
207        resource_guid: Optional[str] = None,
208        provisioning_state: Optional[str] = None,
209        **kwargs
210    ):
211        super(ApplicationGateway, self).__init__(id=id, location=location, tags=tags, **kwargs)
212        self.etag = etag
213        self.sku = sku
214        self.ssl_policy = ssl_policy
215        self.operational_state = None
216        self.gateway_ip_configurations = gateway_ip_configurations
217        self.authentication_certificates = authentication_certificates
218        self.ssl_certificates = ssl_certificates
219        self.frontend_ip_configurations = frontend_ip_configurations
220        self.frontend_ports = frontend_ports
221        self.probes = probes
222        self.backend_address_pools = backend_address_pools
223        self.backend_http_settings_collection = backend_http_settings_collection
224        self.http_listeners = http_listeners
225        self.url_path_maps = url_path_maps
226        self.request_routing_rules = request_routing_rules
227        self.web_application_firewall_configuration = web_application_firewall_configuration
228        self.resource_guid = resource_guid
229        self.provisioning_state = provisioning_state
230
231
232class SubResource(msrest.serialization.Model):
233    """SubResource.
234
235    :param id: Resource ID.
236    :type id: str
237    """
238
239    _attribute_map = {
240        'id': {'key': 'id', 'type': 'str'},
241    }
242
243    def __init__(
244        self,
245        *,
246        id: Optional[str] = None,
247        **kwargs
248    ):
249        super(SubResource, self).__init__(**kwargs)
250        self.id = id
251
252
253class ApplicationGatewayAuthenticationCertificate(SubResource):
254    """Authentication certificates of an application gateway.
255
256    :param id: Resource ID.
257    :type id: str
258    :param name: Name of the resource that is unique within a resource group. This name can be used
259     to access the resource.
260    :type name: str
261    :param etag: A unique read-only string that changes whenever the resource is updated.
262    :type etag: str
263    :param data: Certificate public data.
264    :type data: str
265    :param provisioning_state: Provisioning state of the authentication certificate resource.
266     Possible values are: 'Updating', 'Deleting', and 'Failed'.
267    :type provisioning_state: str
268    """
269
270    _attribute_map = {
271        'id': {'key': 'id', 'type': 'str'},
272        'name': {'key': 'name', 'type': 'str'},
273        'etag': {'key': 'etag', 'type': 'str'},
274        'data': {'key': 'properties.data', 'type': 'str'},
275        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
276    }
277
278    def __init__(
279        self,
280        *,
281        id: Optional[str] = None,
282        name: Optional[str] = None,
283        etag: Optional[str] = None,
284        data: Optional[str] = None,
285        provisioning_state: Optional[str] = None,
286        **kwargs
287    ):
288        super(ApplicationGatewayAuthenticationCertificate, self).__init__(id=id, **kwargs)
289        self.name = name
290        self.etag = etag
291        self.data = data
292        self.provisioning_state = provisioning_state
293
294
295class ApplicationGatewayBackendAddress(msrest.serialization.Model):
296    """Backend address of an application gateway.
297
298    :param fqdn: Fully qualified domain name (FQDN).
299    :type fqdn: str
300    :param ip_address: IP address.
301    :type ip_address: str
302    """
303
304    _attribute_map = {
305        'fqdn': {'key': 'fqdn', 'type': 'str'},
306        'ip_address': {'key': 'ipAddress', 'type': 'str'},
307    }
308
309    def __init__(
310        self,
311        *,
312        fqdn: Optional[str] = None,
313        ip_address: Optional[str] = None,
314        **kwargs
315    ):
316        super(ApplicationGatewayBackendAddress, self).__init__(**kwargs)
317        self.fqdn = fqdn
318        self.ip_address = ip_address
319
320
321class ApplicationGatewayBackendAddressPool(SubResource):
322    """Backend Address Pool of an application gateway.
323
324    :param id: Resource ID.
325    :type id: str
326    :param name: Resource that is unique within a resource group. This name can be used to access
327     the resource.
328    :type name: str
329    :param etag: A unique read-only string that changes whenever the resource is updated.
330    :type etag: str
331    :param backend_ip_configurations: Collection of references to IPs defined in network
332     interfaces.
333    :type backend_ip_configurations:
334     list[~azure.mgmt.network.v2016_12_01.models.NetworkInterfaceIPConfiguration]
335    :param backend_addresses: Backend addresses.
336    :type backend_addresses:
337     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendAddress]
338    :param provisioning_state: Provisioning state of the backend address pool resource. Possible
339     values are: 'Updating', 'Deleting', and 'Failed'.
340    :type provisioning_state: str
341    """
342
343    _attribute_map = {
344        'id': {'key': 'id', 'type': 'str'},
345        'name': {'key': 'name', 'type': 'str'},
346        'etag': {'key': 'etag', 'type': 'str'},
347        'backend_ip_configurations': {'key': 'properties.backendIPConfigurations', 'type': '[NetworkInterfaceIPConfiguration]'},
348        'backend_addresses': {'key': 'properties.backendAddresses', 'type': '[ApplicationGatewayBackendAddress]'},
349        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
350    }
351
352    def __init__(
353        self,
354        *,
355        id: Optional[str] = None,
356        name: Optional[str] = None,
357        etag: Optional[str] = None,
358        backend_ip_configurations: Optional[List["NetworkInterfaceIPConfiguration"]] = None,
359        backend_addresses: Optional[List["ApplicationGatewayBackendAddress"]] = None,
360        provisioning_state: Optional[str] = None,
361        **kwargs
362    ):
363        super(ApplicationGatewayBackendAddressPool, self).__init__(id=id, **kwargs)
364        self.name = name
365        self.etag = etag
366        self.backend_ip_configurations = backend_ip_configurations
367        self.backend_addresses = backend_addresses
368        self.provisioning_state = provisioning_state
369
370
371class ApplicationGatewayBackendHealth(msrest.serialization.Model):
372    """List of ApplicationGatewayBackendHealthPool resources.
373
374    :param backend_address_pools:
375    :type backend_address_pools:
376     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendHealthPool]
377    """
378
379    _attribute_map = {
380        'backend_address_pools': {'key': 'backendAddressPools', 'type': '[ApplicationGatewayBackendHealthPool]'},
381    }
382
383    def __init__(
384        self,
385        *,
386        backend_address_pools: Optional[List["ApplicationGatewayBackendHealthPool"]] = None,
387        **kwargs
388    ):
389        super(ApplicationGatewayBackendHealth, self).__init__(**kwargs)
390        self.backend_address_pools = backend_address_pools
391
392
393class ApplicationGatewayBackendHealthHttpSettings(msrest.serialization.Model):
394    """Application gateway BackendHealthHttp settings.
395
396    :param backend_http_settings: Reference of an ApplicationGatewayBackendHttpSettings resource.
397    :type backend_http_settings:
398     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendHttpSettings
399    :param servers: List of ApplicationGatewayBackendHealthServer resources.
400    :type servers:
401     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendHealthServer]
402    """
403
404    _attribute_map = {
405        'backend_http_settings': {'key': 'backendHttpSettings', 'type': 'ApplicationGatewayBackendHttpSettings'},
406        'servers': {'key': 'servers', 'type': '[ApplicationGatewayBackendHealthServer]'},
407    }
408
409    def __init__(
410        self,
411        *,
412        backend_http_settings: Optional["ApplicationGatewayBackendHttpSettings"] = None,
413        servers: Optional[List["ApplicationGatewayBackendHealthServer"]] = None,
414        **kwargs
415    ):
416        super(ApplicationGatewayBackendHealthHttpSettings, self).__init__(**kwargs)
417        self.backend_http_settings = backend_http_settings
418        self.servers = servers
419
420
421class ApplicationGatewayBackendHealthPool(msrest.serialization.Model):
422    """Application gateway BackendHealth pool.
423
424    :param backend_address_pool: Reference of an ApplicationGatewayBackendAddressPool resource.
425    :type backend_address_pool:
426     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendAddressPool
427    :param backend_http_settings_collection: List of ApplicationGatewayBackendHealthHttpSettings
428     resources.
429    :type backend_http_settings_collection:
430     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendHealthHttpSettings]
431    """
432
433    _attribute_map = {
434        'backend_address_pool': {'key': 'backendAddressPool', 'type': 'ApplicationGatewayBackendAddressPool'},
435        'backend_http_settings_collection': {'key': 'backendHttpSettingsCollection', 'type': '[ApplicationGatewayBackendHealthHttpSettings]'},
436    }
437
438    def __init__(
439        self,
440        *,
441        backend_address_pool: Optional["ApplicationGatewayBackendAddressPool"] = None,
442        backend_http_settings_collection: Optional[List["ApplicationGatewayBackendHealthHttpSettings"]] = None,
443        **kwargs
444    ):
445        super(ApplicationGatewayBackendHealthPool, self).__init__(**kwargs)
446        self.backend_address_pool = backend_address_pool
447        self.backend_http_settings_collection = backend_http_settings_collection
448
449
450class ApplicationGatewayBackendHealthServer(msrest.serialization.Model):
451    """Application gateway backendhealth http settings.
452
453    :param address: IP address or FQDN of backend server.
454    :type address: str
455    :param ip_configuration: Reference of IP configuration of backend server.
456    :type ip_configuration: ~azure.mgmt.network.v2016_12_01.models.SubResource
457    :param health: Health of backend server. Possible values are: 'Unknown', 'Up', 'Down', and
458     'Partial'. Possible values include: "Unknown", "Up", "Down", "Partial".
459    :type health: str or
460     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendHealthServerHealth
461    """
462
463    _attribute_map = {
464        'address': {'key': 'address', 'type': 'str'},
465        'ip_configuration': {'key': 'ipConfiguration', 'type': 'SubResource'},
466        'health': {'key': 'health', 'type': 'str'},
467    }
468
469    def __init__(
470        self,
471        *,
472        address: Optional[str] = None,
473        ip_configuration: Optional["SubResource"] = None,
474        health: Optional[Union[str, "ApplicationGatewayBackendHealthServerHealth"]] = None,
475        **kwargs
476    ):
477        super(ApplicationGatewayBackendHealthServer, self).__init__(**kwargs)
478        self.address = address
479        self.ip_configuration = ip_configuration
480        self.health = health
481
482
483class ApplicationGatewayBackendHttpSettings(SubResource):
484    """Backend address pool settings of an application gateway.
485
486    :param id: Resource ID.
487    :type id: str
488    :param name: Name of the resource that is unique within a resource group. This name can be used
489     to access the resource.
490    :type name: str
491    :param etag: A unique read-only string that changes whenever the resource is updated.
492    :type etag: str
493    :param port: Port.
494    :type port: int
495    :param protocol: Protocol. Possible values are: 'Http' and 'Https'. Possible values include:
496     "Http", "Https".
497    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayProtocol
498    :param cookie_based_affinity: Cookie based affinity. Possible values are: 'Enabled' and
499     'Disabled'. Possible values include: "Enabled", "Disabled".
500    :type cookie_based_affinity: str or
501     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayCookieBasedAffinity
502    :param request_timeout: Request timeout in seconds. Application Gateway will fail the request
503     if response is not received within RequestTimeout. Acceptable values are from 1 second to 86400
504     seconds.
505    :type request_timeout: int
506    :param probe: Probe resource of an application gateway.
507    :type probe: ~azure.mgmt.network.v2016_12_01.models.SubResource
508    :param authentication_certificates: Array of references to application gateway authentication
509     certificates.
510    :type authentication_certificates: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
511    :param provisioning_state: Provisioning state of the backend http settings resource. Possible
512     values are: 'Updating', 'Deleting', and 'Failed'.
513    :type provisioning_state: str
514    :param connection_draining: Connection draining of the backend http settings resource.
515    :type connection_draining:
516     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayConnectionDraining
517    """
518
519    _attribute_map = {
520        'id': {'key': 'id', 'type': 'str'},
521        'name': {'key': 'name', 'type': 'str'},
522        'etag': {'key': 'etag', 'type': 'str'},
523        'port': {'key': 'properties.port', 'type': 'int'},
524        'protocol': {'key': 'properties.protocol', 'type': 'str'},
525        'cookie_based_affinity': {'key': 'properties.cookieBasedAffinity', 'type': 'str'},
526        'request_timeout': {'key': 'properties.requestTimeout', 'type': 'int'},
527        'probe': {'key': 'properties.probe', 'type': 'SubResource'},
528        'authentication_certificates': {'key': 'properties.authenticationCertificates', 'type': '[SubResource]'},
529        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
530        'connection_draining': {'key': 'properties.connectionDraining', 'type': 'ApplicationGatewayConnectionDraining'},
531    }
532
533    def __init__(
534        self,
535        *,
536        id: Optional[str] = None,
537        name: Optional[str] = None,
538        etag: Optional[str] = None,
539        port: Optional[int] = None,
540        protocol: Optional[Union[str, "ApplicationGatewayProtocol"]] = None,
541        cookie_based_affinity: Optional[Union[str, "ApplicationGatewayCookieBasedAffinity"]] = None,
542        request_timeout: Optional[int] = None,
543        probe: Optional["SubResource"] = None,
544        authentication_certificates: Optional[List["SubResource"]] = None,
545        provisioning_state: Optional[str] = None,
546        connection_draining: Optional["ApplicationGatewayConnectionDraining"] = None,
547        **kwargs
548    ):
549        super(ApplicationGatewayBackendHttpSettings, self).__init__(id=id, **kwargs)
550        self.name = name
551        self.etag = etag
552        self.port = port
553        self.protocol = protocol
554        self.cookie_based_affinity = cookie_based_affinity
555        self.request_timeout = request_timeout
556        self.probe = probe
557        self.authentication_certificates = authentication_certificates
558        self.provisioning_state = provisioning_state
559        self.connection_draining = connection_draining
560
561
562class ApplicationGatewayConnectionDraining(msrest.serialization.Model):
563    """Connection draining allows open connections to a backend server to be active for a specified time after the backend server got removed from the configuration.
564
565    All required parameters must be populated in order to send to Azure.
566
567    :param enabled: Required. Whether connection draining is enabled or not.
568    :type enabled: bool
569    :param drain_timeout_in_sec: Required. The number of seconds connection draining is active.
570     Acceptable values are from 1 second to 3600 seconds.
571    :type drain_timeout_in_sec: int
572    """
573
574    _validation = {
575        'enabled': {'required': True},
576        'drain_timeout_in_sec': {'required': True, 'maximum': 3600, 'minimum': 1},
577    }
578
579    _attribute_map = {
580        'enabled': {'key': 'enabled', 'type': 'bool'},
581        'drain_timeout_in_sec': {'key': 'drainTimeoutInSec', 'type': 'int'},
582    }
583
584    def __init__(
585        self,
586        *,
587        enabled: bool,
588        drain_timeout_in_sec: int,
589        **kwargs
590    ):
591        super(ApplicationGatewayConnectionDraining, self).__init__(**kwargs)
592        self.enabled = enabled
593        self.drain_timeout_in_sec = drain_timeout_in_sec
594
595
596class ApplicationGatewayFrontendIPConfiguration(SubResource):
597    """Frontend IP configuration of an application gateway.
598
599    :param id: Resource ID.
600    :type id: str
601    :param name: Name of the resource that is unique within a resource group. This name can be used
602     to access the resource.
603    :type name: str
604    :param etag: A unique read-only string that changes whenever the resource is updated.
605    :type etag: str
606    :param private_ip_address: PrivateIPAddress of the network interface IP Configuration.
607    :type private_ip_address: str
608    :param private_ip_allocation_method: PrivateIP allocation method. Possible values are: 'Static'
609     and 'Dynamic'. Possible values include: "Static", "Dynamic".
610    :type private_ip_allocation_method: str or
611     ~azure.mgmt.network.v2016_12_01.models.IPAllocationMethod
612    :param subnet: Reference of the subnet resource.
613    :type subnet: ~azure.mgmt.network.v2016_12_01.models.SubResource
614    :param public_ip_address: Reference of the PublicIP resource.
615    :type public_ip_address: ~azure.mgmt.network.v2016_12_01.models.SubResource
616    :param provisioning_state: Provisioning state of the public IP resource. Possible values are:
617     'Updating', 'Deleting', and 'Failed'.
618    :type provisioning_state: str
619    """
620
621    _attribute_map = {
622        'id': {'key': 'id', 'type': 'str'},
623        'name': {'key': 'name', 'type': 'str'},
624        'etag': {'key': 'etag', 'type': 'str'},
625        'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
626        'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
627        'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
628        'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'SubResource'},
629        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
630    }
631
632    def __init__(
633        self,
634        *,
635        id: Optional[str] = None,
636        name: Optional[str] = None,
637        etag: Optional[str] = None,
638        private_ip_address: Optional[str] = None,
639        private_ip_allocation_method: Optional[Union[str, "IPAllocationMethod"]] = None,
640        subnet: Optional["SubResource"] = None,
641        public_ip_address: Optional["SubResource"] = None,
642        provisioning_state: Optional[str] = None,
643        **kwargs
644    ):
645        super(ApplicationGatewayFrontendIPConfiguration, self).__init__(id=id, **kwargs)
646        self.name = name
647        self.etag = etag
648        self.private_ip_address = private_ip_address
649        self.private_ip_allocation_method = private_ip_allocation_method
650        self.subnet = subnet
651        self.public_ip_address = public_ip_address
652        self.provisioning_state = provisioning_state
653
654
655class ApplicationGatewayFrontendPort(SubResource):
656    """Frontend port of an application gateway.
657
658    :param id: Resource ID.
659    :type id: str
660    :param name: Name of the resource that is unique within a resource group. This name can be used
661     to access the resource.
662    :type name: str
663    :param etag: A unique read-only string that changes whenever the resource is updated.
664    :type etag: str
665    :param port: Frontend port.
666    :type port: int
667    :param provisioning_state: Provisioning state of the frontend port resource. Possible values
668     are: 'Updating', 'Deleting', and 'Failed'.
669    :type provisioning_state: str
670    """
671
672    _attribute_map = {
673        'id': {'key': 'id', 'type': 'str'},
674        'name': {'key': 'name', 'type': 'str'},
675        'etag': {'key': 'etag', 'type': 'str'},
676        'port': {'key': 'properties.port', 'type': 'int'},
677        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
678    }
679
680    def __init__(
681        self,
682        *,
683        id: Optional[str] = None,
684        name: Optional[str] = None,
685        etag: Optional[str] = None,
686        port: Optional[int] = None,
687        provisioning_state: Optional[str] = None,
688        **kwargs
689    ):
690        super(ApplicationGatewayFrontendPort, self).__init__(id=id, **kwargs)
691        self.name = name
692        self.etag = etag
693        self.port = port
694        self.provisioning_state = provisioning_state
695
696
697class ApplicationGatewayHttpListener(SubResource):
698    """Http listener of an application gateway.
699
700    :param id: Resource ID.
701    :type id: str
702    :param name: Name of the resource that is unique within a resource group. This name can be used
703     to access the resource.
704    :type name: str
705    :param etag: A unique read-only string that changes whenever the resource is updated.
706    :type etag: str
707    :param frontend_ip_configuration: Frontend IP configuration resource of an application gateway.
708    :type frontend_ip_configuration: ~azure.mgmt.network.v2016_12_01.models.SubResource
709    :param frontend_port: Frontend port resource of an application gateway.
710    :type frontend_port: ~azure.mgmt.network.v2016_12_01.models.SubResource
711    :param protocol: Protocol. Possible values are: 'Http' and 'Https'. Possible values include:
712     "Http", "Https".
713    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayProtocol
714    :param host_name: Host name of HTTP listener.
715    :type host_name: str
716    :param ssl_certificate: SSL certificate resource of an application gateway.
717    :type ssl_certificate: ~azure.mgmt.network.v2016_12_01.models.SubResource
718    :param require_server_name_indication: Applicable only if protocol is https. Enables SNI for
719     multi-hosting.
720    :type require_server_name_indication: bool
721    :param provisioning_state: Provisioning state of the HTTP listener resource. Possible values
722     are: 'Updating', 'Deleting', and 'Failed'.
723    :type provisioning_state: str
724    """
725
726    _attribute_map = {
727        'id': {'key': 'id', 'type': 'str'},
728        'name': {'key': 'name', 'type': 'str'},
729        'etag': {'key': 'etag', 'type': 'str'},
730        'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
731        'frontend_port': {'key': 'properties.frontendPort', 'type': 'SubResource'},
732        'protocol': {'key': 'properties.protocol', 'type': 'str'},
733        'host_name': {'key': 'properties.hostName', 'type': 'str'},
734        'ssl_certificate': {'key': 'properties.sslCertificate', 'type': 'SubResource'},
735        'require_server_name_indication': {'key': 'properties.requireServerNameIndication', 'type': 'bool'},
736        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
737    }
738
739    def __init__(
740        self,
741        *,
742        id: Optional[str] = None,
743        name: Optional[str] = None,
744        etag: Optional[str] = None,
745        frontend_ip_configuration: Optional["SubResource"] = None,
746        frontend_port: Optional["SubResource"] = None,
747        protocol: Optional[Union[str, "ApplicationGatewayProtocol"]] = None,
748        host_name: Optional[str] = None,
749        ssl_certificate: Optional["SubResource"] = None,
750        require_server_name_indication: Optional[bool] = None,
751        provisioning_state: Optional[str] = None,
752        **kwargs
753    ):
754        super(ApplicationGatewayHttpListener, self).__init__(id=id, **kwargs)
755        self.name = name
756        self.etag = etag
757        self.frontend_ip_configuration = frontend_ip_configuration
758        self.frontend_port = frontend_port
759        self.protocol = protocol
760        self.host_name = host_name
761        self.ssl_certificate = ssl_certificate
762        self.require_server_name_indication = require_server_name_indication
763        self.provisioning_state = provisioning_state
764
765
766class ApplicationGatewayIPConfiguration(SubResource):
767    """IP configuration of an application gateway. Currently 1 public and 1 private IP configuration is allowed.
768
769    :param id: Resource ID.
770    :type id: str
771    :param name: Name of the resource that is unique within a resource group. This name can be used
772     to access the resource.
773    :type name: str
774    :param etag: A unique read-only string that changes whenever the resource is updated.
775    :type etag: str
776    :param subnet: Reference of the subnet resource. A subnet from where application gateway gets
777     its private address.
778    :type subnet: ~azure.mgmt.network.v2016_12_01.models.SubResource
779    :param provisioning_state: Provisioning state of the application gateway subnet resource.
780     Possible values are: 'Updating', 'Deleting', and 'Failed'.
781    :type provisioning_state: str
782    """
783
784    _attribute_map = {
785        'id': {'key': 'id', 'type': 'str'},
786        'name': {'key': 'name', 'type': 'str'},
787        'etag': {'key': 'etag', 'type': 'str'},
788        'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
789        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
790    }
791
792    def __init__(
793        self,
794        *,
795        id: Optional[str] = None,
796        name: Optional[str] = None,
797        etag: Optional[str] = None,
798        subnet: Optional["SubResource"] = None,
799        provisioning_state: Optional[str] = None,
800        **kwargs
801    ):
802        super(ApplicationGatewayIPConfiguration, self).__init__(id=id, **kwargs)
803        self.name = name
804        self.etag = etag
805        self.subnet = subnet
806        self.provisioning_state = provisioning_state
807
808
809class ApplicationGatewayListResult(msrest.serialization.Model):
810    """Response for ListApplicationGateways API service call.
811
812    :param value: List of an application gateways in a resource group.
813    :type value: list[~azure.mgmt.network.v2016_12_01.models.ApplicationGateway]
814    :param next_link: URL to get the next set of results.
815    :type next_link: str
816    """
817
818    _attribute_map = {
819        'value': {'key': 'value', 'type': '[ApplicationGateway]'},
820        'next_link': {'key': 'nextLink', 'type': 'str'},
821    }
822
823    def __init__(
824        self,
825        *,
826        value: Optional[List["ApplicationGateway"]] = None,
827        next_link: Optional[str] = None,
828        **kwargs
829    ):
830        super(ApplicationGatewayListResult, self).__init__(**kwargs)
831        self.value = value
832        self.next_link = next_link
833
834
835class ApplicationGatewayPathRule(SubResource):
836    """Path rule of URL path map of an application gateway.
837
838    :param id: Resource ID.
839    :type id: str
840    :param name: Name of the resource that is unique within a resource group. This name can be used
841     to access the resource.
842    :type name: str
843    :param etag: A unique read-only string that changes whenever the resource is updated.
844    :type etag: str
845    :param paths: Path rules of URL path map.
846    :type paths: list[str]
847    :param backend_address_pool: Backend address pool resource of URL path map.
848    :type backend_address_pool: ~azure.mgmt.network.v2016_12_01.models.SubResource
849    :param backend_http_settings: Backend http settings resource of URL path map.
850    :type backend_http_settings: ~azure.mgmt.network.v2016_12_01.models.SubResource
851    :param provisioning_state: Path rule of URL path map resource. Possible values are: 'Updating',
852     'Deleting', and 'Failed'.
853    :type provisioning_state: str
854    """
855
856    _attribute_map = {
857        'id': {'key': 'id', 'type': 'str'},
858        'name': {'key': 'name', 'type': 'str'},
859        'etag': {'key': 'etag', 'type': 'str'},
860        'paths': {'key': 'properties.paths', 'type': '[str]'},
861        'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
862        'backend_http_settings': {'key': 'properties.backendHttpSettings', 'type': 'SubResource'},
863        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
864    }
865
866    def __init__(
867        self,
868        *,
869        id: Optional[str] = None,
870        name: Optional[str] = None,
871        etag: Optional[str] = None,
872        paths: Optional[List[str]] = None,
873        backend_address_pool: Optional["SubResource"] = None,
874        backend_http_settings: Optional["SubResource"] = None,
875        provisioning_state: Optional[str] = None,
876        **kwargs
877    ):
878        super(ApplicationGatewayPathRule, self).__init__(id=id, **kwargs)
879        self.name = name
880        self.etag = etag
881        self.paths = paths
882        self.backend_address_pool = backend_address_pool
883        self.backend_http_settings = backend_http_settings
884        self.provisioning_state = provisioning_state
885
886
887class ApplicationGatewayProbe(SubResource):
888    """Probe of the application gateway.
889
890    :param id: Resource ID.
891    :type id: str
892    :param name: Name of the resource that is unique within a resource group. This name can be used
893     to access the resource.
894    :type name: str
895    :param etag: A unique read-only string that changes whenever the resource is updated.
896    :type etag: str
897    :param protocol: Protocol. Possible values are: 'Http' and 'Https'. Possible values include:
898     "Http", "Https".
899    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayProtocol
900    :param host: Host name to send the probe to.
901    :type host: str
902    :param path: Relative path of probe. Valid path starts from '/'. Probe is sent to
903     :code:`<Protocol>`://:code:`<host>`::code:`<port>`:code:`<path>`.
904    :type path: str
905    :param interval: The probing interval in seconds. This is the time interval between two
906     consecutive probes. Acceptable values are from 1 second to 86400 seconds.
907    :type interval: int
908    :param timeout: the probe timeout in seconds. Probe marked as failed if valid response is not
909     received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
910    :type timeout: int
911    :param unhealthy_threshold: The probe retry count. Backend server is marked down after
912     consecutive probe failure count reaches UnhealthyThreshold. Acceptable values are from 1 second
913     to 20.
914    :type unhealthy_threshold: int
915    :param provisioning_state: Provisioning state of the backend http settings resource. Possible
916     values are: 'Updating', 'Deleting', and 'Failed'.
917    :type provisioning_state: str
918    """
919
920    _attribute_map = {
921        'id': {'key': 'id', 'type': 'str'},
922        'name': {'key': 'name', 'type': 'str'},
923        'etag': {'key': 'etag', 'type': 'str'},
924        'protocol': {'key': 'properties.protocol', 'type': 'str'},
925        'host': {'key': 'properties.host', 'type': 'str'},
926        'path': {'key': 'properties.path', 'type': 'str'},
927        'interval': {'key': 'properties.interval', 'type': 'int'},
928        'timeout': {'key': 'properties.timeout', 'type': 'int'},
929        'unhealthy_threshold': {'key': 'properties.unhealthyThreshold', 'type': 'int'},
930        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
931    }
932
933    def __init__(
934        self,
935        *,
936        id: Optional[str] = None,
937        name: Optional[str] = None,
938        etag: Optional[str] = None,
939        protocol: Optional[Union[str, "ApplicationGatewayProtocol"]] = None,
940        host: Optional[str] = None,
941        path: Optional[str] = None,
942        interval: Optional[int] = None,
943        timeout: Optional[int] = None,
944        unhealthy_threshold: Optional[int] = None,
945        provisioning_state: Optional[str] = None,
946        **kwargs
947    ):
948        super(ApplicationGatewayProbe, self).__init__(id=id, **kwargs)
949        self.name = name
950        self.etag = etag
951        self.protocol = protocol
952        self.host = host
953        self.path = path
954        self.interval = interval
955        self.timeout = timeout
956        self.unhealthy_threshold = unhealthy_threshold
957        self.provisioning_state = provisioning_state
958
959
960class ApplicationGatewayRequestRoutingRule(SubResource):
961    """Request routing rule of an application gateway.
962
963    :param id: Resource ID.
964    :type id: str
965    :param name: Name of the resource that is unique within a resource group. This name can be used
966     to access the resource.
967    :type name: str
968    :param etag: A unique read-only string that changes whenever the resource is updated.
969    :type etag: str
970    :param rule_type: Rule type. Possible values are: 'Basic' and 'PathBasedRouting'. Possible
971     values include: "Basic", "PathBasedRouting".
972    :type rule_type: str or
973     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayRequestRoutingRuleType
974    :param backend_address_pool: Backend address pool resource of the application gateway.
975    :type backend_address_pool: ~azure.mgmt.network.v2016_12_01.models.SubResource
976    :param backend_http_settings: Frontend port resource of the application gateway.
977    :type backend_http_settings: ~azure.mgmt.network.v2016_12_01.models.SubResource
978    :param http_listener: Http listener resource of the application gateway.
979    :type http_listener: ~azure.mgmt.network.v2016_12_01.models.SubResource
980    :param url_path_map: URL path map resource of the application gateway.
981    :type url_path_map: ~azure.mgmt.network.v2016_12_01.models.SubResource
982    :param provisioning_state: Provisioning state of the request routing rule resource. Possible
983     values are: 'Updating', 'Deleting', and 'Failed'.
984    :type provisioning_state: str
985    """
986
987    _attribute_map = {
988        'id': {'key': 'id', 'type': 'str'},
989        'name': {'key': 'name', 'type': 'str'},
990        'etag': {'key': 'etag', 'type': 'str'},
991        'rule_type': {'key': 'properties.ruleType', 'type': 'str'},
992        'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
993        'backend_http_settings': {'key': 'properties.backendHttpSettings', 'type': 'SubResource'},
994        'http_listener': {'key': 'properties.httpListener', 'type': 'SubResource'},
995        'url_path_map': {'key': 'properties.urlPathMap', 'type': 'SubResource'},
996        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
997    }
998
999    def __init__(
1000        self,
1001        *,
1002        id: Optional[str] = None,
1003        name: Optional[str] = None,
1004        etag: Optional[str] = None,
1005        rule_type: Optional[Union[str, "ApplicationGatewayRequestRoutingRuleType"]] = None,
1006        backend_address_pool: Optional["SubResource"] = None,
1007        backend_http_settings: Optional["SubResource"] = None,
1008        http_listener: Optional["SubResource"] = None,
1009        url_path_map: Optional["SubResource"] = None,
1010        provisioning_state: Optional[str] = None,
1011        **kwargs
1012    ):
1013        super(ApplicationGatewayRequestRoutingRule, self).__init__(id=id, **kwargs)
1014        self.name = name
1015        self.etag = etag
1016        self.rule_type = rule_type
1017        self.backend_address_pool = backend_address_pool
1018        self.backend_http_settings = backend_http_settings
1019        self.http_listener = http_listener
1020        self.url_path_map = url_path_map
1021        self.provisioning_state = provisioning_state
1022
1023
1024class ApplicationGatewaySku(msrest.serialization.Model):
1025    """SKU of an application gateway.
1026
1027    :param name: Name of an application gateway SKU. Possible values are: 'Standard_Small',
1028     'Standard_Medium', 'Standard_Large', 'WAF_Medium', and 'WAF_Large'. Possible values include:
1029     "Standard_Small", "Standard_Medium", "Standard_Large", "WAF_Medium", "WAF_Large".
1030    :type name: str or ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewaySkuName
1031    :param tier: Tier of an application gateway. Possible values are: 'Standard' and 'WAF'.
1032     Possible values include: "Standard", "WAF".
1033    :type tier: str or ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayTier
1034    :param capacity: Capacity (instance count) of an application gateway.
1035    :type capacity: int
1036    """
1037
1038    _attribute_map = {
1039        'name': {'key': 'name', 'type': 'str'},
1040        'tier': {'key': 'tier', 'type': 'str'},
1041        'capacity': {'key': 'capacity', 'type': 'int'},
1042    }
1043
1044    def __init__(
1045        self,
1046        *,
1047        name: Optional[Union[str, "ApplicationGatewaySkuName"]] = None,
1048        tier: Optional[Union[str, "ApplicationGatewayTier"]] = None,
1049        capacity: Optional[int] = None,
1050        **kwargs
1051    ):
1052        super(ApplicationGatewaySku, self).__init__(**kwargs)
1053        self.name = name
1054        self.tier = tier
1055        self.capacity = capacity
1056
1057
1058class ApplicationGatewaySslCertificate(SubResource):
1059    """SSL certificates of an application gateway.
1060
1061    :param id: Resource ID.
1062    :type id: str
1063    :param name: Name of the resource that is unique within a resource group. This name can be used
1064     to access the resource.
1065    :type name: str
1066    :param etag: A unique read-only string that changes whenever the resource is updated.
1067    :type etag: str
1068    :param data: Base-64 encoded pfx certificate. Only applicable in PUT Request.
1069    :type data: str
1070    :param password: Password for the pfx file specified in data. Only applicable in PUT request.
1071    :type password: str
1072    :param public_cert_data: Base-64 encoded Public cert data corresponding to pfx specified in
1073     data. Only applicable in GET request.
1074    :type public_cert_data: str
1075    :param provisioning_state: Provisioning state of the SSL certificate resource Possible values
1076     are: 'Updating', 'Deleting', and 'Failed'.
1077    :type provisioning_state: str
1078    """
1079
1080    _attribute_map = {
1081        'id': {'key': 'id', 'type': 'str'},
1082        'name': {'key': 'name', 'type': 'str'},
1083        'etag': {'key': 'etag', 'type': 'str'},
1084        'data': {'key': 'properties.data', 'type': 'str'},
1085        'password': {'key': 'properties.password', 'type': 'str'},
1086        'public_cert_data': {'key': 'properties.publicCertData', 'type': 'str'},
1087        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1088    }
1089
1090    def __init__(
1091        self,
1092        *,
1093        id: Optional[str] = None,
1094        name: Optional[str] = None,
1095        etag: Optional[str] = None,
1096        data: Optional[str] = None,
1097        password: Optional[str] = None,
1098        public_cert_data: Optional[str] = None,
1099        provisioning_state: Optional[str] = None,
1100        **kwargs
1101    ):
1102        super(ApplicationGatewaySslCertificate, self).__init__(id=id, **kwargs)
1103        self.name = name
1104        self.etag = etag
1105        self.data = data
1106        self.password = password
1107        self.public_cert_data = public_cert_data
1108        self.provisioning_state = provisioning_state
1109
1110
1111class ApplicationGatewaySslPolicy(msrest.serialization.Model):
1112    """Application gateway SSL policy.
1113
1114    :param disabled_ssl_protocols: SSL protocols to be disabled on application gateway. Possible
1115     values are: 'TLSv1_0', 'TLSv1_1', and 'TLSv1_2'.
1116    :type disabled_ssl_protocols: list[str or
1117     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewaySslProtocol]
1118    """
1119
1120    _attribute_map = {
1121        'disabled_ssl_protocols': {'key': 'disabledSslProtocols', 'type': '[str]'},
1122    }
1123
1124    def __init__(
1125        self,
1126        *,
1127        disabled_ssl_protocols: Optional[List[Union[str, "ApplicationGatewaySslProtocol"]]] = None,
1128        **kwargs
1129    ):
1130        super(ApplicationGatewaySslPolicy, self).__init__(**kwargs)
1131        self.disabled_ssl_protocols = disabled_ssl_protocols
1132
1133
1134class ApplicationGatewayUrlPathMap(SubResource):
1135    """UrlPathMaps give a url path to the backend mapping information for PathBasedRouting.
1136
1137    :param id: Resource ID.
1138    :type id: str
1139    :param name: Name of the resource that is unique within a resource group. This name can be used
1140     to access the resource.
1141    :type name: str
1142    :param etag: A unique read-only string that changes whenever the resource is updated.
1143    :type etag: str
1144    :param default_backend_address_pool: Default backend address pool resource of URL path map.
1145    :type default_backend_address_pool: ~azure.mgmt.network.v2016_12_01.models.SubResource
1146    :param default_backend_http_settings: Default backend http settings resource of URL path map.
1147    :type default_backend_http_settings: ~azure.mgmt.network.v2016_12_01.models.SubResource
1148    :param path_rules: Path rule of URL path map resource.
1149    :type path_rules: list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayPathRule]
1150    :param provisioning_state: Provisioning state of the backend http settings resource. Possible
1151     values are: 'Updating', 'Deleting', and 'Failed'.
1152    :type provisioning_state: str
1153    """
1154
1155    _attribute_map = {
1156        'id': {'key': 'id', 'type': 'str'},
1157        'name': {'key': 'name', 'type': 'str'},
1158        'etag': {'key': 'etag', 'type': 'str'},
1159        'default_backend_address_pool': {'key': 'properties.defaultBackendAddressPool', 'type': 'SubResource'},
1160        'default_backend_http_settings': {'key': 'properties.defaultBackendHttpSettings', 'type': 'SubResource'},
1161        'path_rules': {'key': 'properties.pathRules', 'type': '[ApplicationGatewayPathRule]'},
1162        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1163    }
1164
1165    def __init__(
1166        self,
1167        *,
1168        id: Optional[str] = None,
1169        name: Optional[str] = None,
1170        etag: Optional[str] = None,
1171        default_backend_address_pool: Optional["SubResource"] = None,
1172        default_backend_http_settings: Optional["SubResource"] = None,
1173        path_rules: Optional[List["ApplicationGatewayPathRule"]] = None,
1174        provisioning_state: Optional[str] = None,
1175        **kwargs
1176    ):
1177        super(ApplicationGatewayUrlPathMap, self).__init__(id=id, **kwargs)
1178        self.name = name
1179        self.etag = etag
1180        self.default_backend_address_pool = default_backend_address_pool
1181        self.default_backend_http_settings = default_backend_http_settings
1182        self.path_rules = path_rules
1183        self.provisioning_state = provisioning_state
1184
1185
1186class ApplicationGatewayWebApplicationFirewallConfiguration(msrest.serialization.Model):
1187    """Application gateway web application firewall configuration.
1188
1189    All required parameters must be populated in order to send to Azure.
1190
1191    :param enabled: Required. Whether the web application firewall is enabled or not.
1192    :type enabled: bool
1193    :param firewall_mode: Web application firewall mode. Possible values are: 'Detection' and
1194     'Prevention'. Possible values include: "Detection", "Prevention".
1195    :type firewall_mode: str or
1196     ~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayFirewallMode
1197    """
1198
1199    _validation = {
1200        'enabled': {'required': True},
1201    }
1202
1203    _attribute_map = {
1204        'enabled': {'key': 'enabled', 'type': 'bool'},
1205        'firewall_mode': {'key': 'firewallMode', 'type': 'str'},
1206    }
1207
1208    def __init__(
1209        self,
1210        *,
1211        enabled: bool,
1212        firewall_mode: Optional[Union[str, "ApplicationGatewayFirewallMode"]] = None,
1213        **kwargs
1214    ):
1215        super(ApplicationGatewayWebApplicationFirewallConfiguration, self).__init__(**kwargs)
1216        self.enabled = enabled
1217        self.firewall_mode = firewall_mode
1218
1219
1220class AuthorizationListResult(msrest.serialization.Model):
1221    """Response for ListAuthorizations API service call retrieves all authorizations that belongs to an ExpressRouteCircuit.
1222
1223    :param value: The authorizations in an ExpressRoute Circuit.
1224    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitAuthorization]
1225    :param next_link: The URL to get the next set of results.
1226    :type next_link: str
1227    """
1228
1229    _attribute_map = {
1230        'value': {'key': 'value', 'type': '[ExpressRouteCircuitAuthorization]'},
1231        'next_link': {'key': 'nextLink', 'type': 'str'},
1232    }
1233
1234    def __init__(
1235        self,
1236        *,
1237        value: Optional[List["ExpressRouteCircuitAuthorization"]] = None,
1238        next_link: Optional[str] = None,
1239        **kwargs
1240    ):
1241        super(AuthorizationListResult, self).__init__(**kwargs)
1242        self.value = value
1243        self.next_link = next_link
1244
1245
1246class AzureAsyncOperationResult(msrest.serialization.Model):
1247    """The response body contains the status of the specified asynchronous operation, indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous operation succeeded, the response body includes the HTTP status code for the successful request. If the asynchronous operation failed, the response body includes the HTTP status code for the failed request and error information regarding the failure.
1248
1249    :param status: Status of the Azure async operation. Possible values are: 'InProgress',
1250     'Succeeded', and 'Failed'. Possible values include: "InProgress", "Succeeded", "Failed".
1251    :type status: str or ~azure.mgmt.network.v2016_12_01.models.NetworkOperationStatus
1252    :param error:
1253    :type error: ~azure.mgmt.network.v2016_12_01.models.Error
1254    """
1255
1256    _attribute_map = {
1257        'status': {'key': 'status', 'type': 'str'},
1258        'error': {'key': 'error', 'type': 'Error'},
1259    }
1260
1261    def __init__(
1262        self,
1263        *,
1264        status: Optional[Union[str, "NetworkOperationStatus"]] = None,
1265        error: Optional["Error"] = None,
1266        **kwargs
1267    ):
1268        super(AzureAsyncOperationResult, self).__init__(**kwargs)
1269        self.status = status
1270        self.error = error
1271
1272
1273class BackendAddressPool(SubResource):
1274    """Pool of backend IP addresses.
1275
1276    Variables are only populated by the server, and will be ignored when sending a request.
1277
1278    :param id: Resource ID.
1279    :type id: str
1280    :param name: Gets name of the resource that is unique within a resource group. This name can be
1281     used to access the resource.
1282    :type name: str
1283    :param etag: A unique read-only string that changes whenever the resource is updated.
1284    :type etag: str
1285    :ivar backend_ip_configurations: Gets collection of references to IP addresses defined in
1286     network interfaces.
1287    :vartype backend_ip_configurations:
1288     list[~azure.mgmt.network.v2016_12_01.models.NetworkInterfaceIPConfiguration]
1289    :ivar load_balancing_rules: Gets load balancing rules that use this backend address pool.
1290    :vartype load_balancing_rules: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
1291    :ivar outbound_nat_rule: Gets outbound rules that use this backend address pool.
1292    :vartype outbound_nat_rule: ~azure.mgmt.network.v2016_12_01.models.SubResource
1293    :param provisioning_state: Get provisioning state of the public IP resource. Possible values
1294     are: 'Updating', 'Deleting', and 'Failed'.
1295    :type provisioning_state: str
1296    """
1297
1298    _validation = {
1299        'backend_ip_configurations': {'readonly': True},
1300        'load_balancing_rules': {'readonly': True},
1301        'outbound_nat_rule': {'readonly': True},
1302    }
1303
1304    _attribute_map = {
1305        'id': {'key': 'id', 'type': 'str'},
1306        'name': {'key': 'name', 'type': 'str'},
1307        'etag': {'key': 'etag', 'type': 'str'},
1308        'backend_ip_configurations': {'key': 'properties.backendIPConfigurations', 'type': '[NetworkInterfaceIPConfiguration]'},
1309        'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[SubResource]'},
1310        'outbound_nat_rule': {'key': 'properties.outboundNatRule', 'type': 'SubResource'},
1311        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1312    }
1313
1314    def __init__(
1315        self,
1316        *,
1317        id: Optional[str] = None,
1318        name: Optional[str] = None,
1319        etag: Optional[str] = None,
1320        provisioning_state: Optional[str] = None,
1321        **kwargs
1322    ):
1323        super(BackendAddressPool, self).__init__(id=id, **kwargs)
1324        self.name = name
1325        self.etag = etag
1326        self.backend_ip_configurations = None
1327        self.load_balancing_rules = None
1328        self.outbound_nat_rule = None
1329        self.provisioning_state = provisioning_state
1330
1331
1332class BGPCommunity(msrest.serialization.Model):
1333    """Contains bgp community information offered in Service Community resources.
1334
1335    :param service_supported_region: The region which the service support. e.g. For O365, region is
1336     Global.
1337    :type service_supported_region: str
1338    :param community_name: The name of the bgp community. e.g. Skype.
1339    :type community_name: str
1340    :param community_value: The value of the bgp community. For more information:
1341     https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
1342    :type community_value: str
1343    :param community_prefixes: The prefixes that the bgp community contains.
1344    :type community_prefixes: list[str]
1345    """
1346
1347    _attribute_map = {
1348        'service_supported_region': {'key': 'serviceSupportedRegion', 'type': 'str'},
1349        'community_name': {'key': 'communityName', 'type': 'str'},
1350        'community_value': {'key': 'communityValue', 'type': 'str'},
1351        'community_prefixes': {'key': 'communityPrefixes', 'type': '[str]'},
1352    }
1353
1354    def __init__(
1355        self,
1356        *,
1357        service_supported_region: Optional[str] = None,
1358        community_name: Optional[str] = None,
1359        community_value: Optional[str] = None,
1360        community_prefixes: Optional[List[str]] = None,
1361        **kwargs
1362    ):
1363        super(BGPCommunity, self).__init__(**kwargs)
1364        self.service_supported_region = service_supported_region
1365        self.community_name = community_name
1366        self.community_value = community_value
1367        self.community_prefixes = community_prefixes
1368
1369
1370class BgpPeerStatus(msrest.serialization.Model):
1371    """BgpPeerStatus.
1372
1373    Variables are only populated by the server, and will be ignored when sending a request.
1374
1375    :ivar local_address: The virtual network gateway's local address.
1376    :vartype local_address: str
1377    :ivar neighbor: The remote BGP peer.
1378    :vartype neighbor: str
1379    :ivar asn: The autonomous system number of the remote BGP peer.
1380    :vartype asn: int
1381    :ivar state: The BGP peer state. Possible values include: "Unknown", "Stopped", "Idle",
1382     "Connecting", "Connected".
1383    :vartype state: str or ~azure.mgmt.network.v2016_12_01.models.BgpPeerState
1384    :ivar connected_duration: For how long the peering has been up.
1385    :vartype connected_duration: str
1386    :ivar routes_received: The number of routes learned from this peer.
1387    :vartype routes_received: long
1388    :ivar messages_sent: The number of BGP messages sent.
1389    :vartype messages_sent: long
1390    :ivar messages_received: The number of BGP messages received.
1391    :vartype messages_received: long
1392    """
1393
1394    _validation = {
1395        'local_address': {'readonly': True},
1396        'neighbor': {'readonly': True},
1397        'asn': {'readonly': True},
1398        'state': {'readonly': True},
1399        'connected_duration': {'readonly': True},
1400        'routes_received': {'readonly': True},
1401        'messages_sent': {'readonly': True},
1402        'messages_received': {'readonly': True},
1403    }
1404
1405    _attribute_map = {
1406        'local_address': {'key': 'localAddress', 'type': 'str'},
1407        'neighbor': {'key': 'neighbor', 'type': 'str'},
1408        'asn': {'key': 'asn', 'type': 'int'},
1409        'state': {'key': 'state', 'type': 'str'},
1410        'connected_duration': {'key': 'connectedDuration', 'type': 'str'},
1411        'routes_received': {'key': 'routesReceived', 'type': 'long'},
1412        'messages_sent': {'key': 'messagesSent', 'type': 'long'},
1413        'messages_received': {'key': 'messagesReceived', 'type': 'long'},
1414    }
1415
1416    def __init__(
1417        self,
1418        **kwargs
1419    ):
1420        super(BgpPeerStatus, self).__init__(**kwargs)
1421        self.local_address = None
1422        self.neighbor = None
1423        self.asn = None
1424        self.state = None
1425        self.connected_duration = None
1426        self.routes_received = None
1427        self.messages_sent = None
1428        self.messages_received = None
1429
1430
1431class BgpPeerStatusListResult(msrest.serialization.Model):
1432    """Response for list BGP peer status API service call.
1433
1434    :param value: List of BGP peers.
1435    :type value: list[~azure.mgmt.network.v2016_12_01.models.BgpPeerStatus]
1436    """
1437
1438    _attribute_map = {
1439        'value': {'key': 'value', 'type': '[BgpPeerStatus]'},
1440    }
1441
1442    def __init__(
1443        self,
1444        *,
1445        value: Optional[List["BgpPeerStatus"]] = None,
1446        **kwargs
1447    ):
1448        super(BgpPeerStatusListResult, self).__init__(**kwargs)
1449        self.value = value
1450
1451
1452class BgpServiceCommunity(Resource):
1453    """Service Community Properties.
1454
1455    Variables are only populated by the server, and will be ignored when sending a request.
1456
1457    :param id: Resource ID.
1458    :type id: str
1459    :ivar name: Resource name.
1460    :vartype name: str
1461    :ivar type: Resource type.
1462    :vartype type: str
1463    :param location: Resource location.
1464    :type location: str
1465    :param tags: A set of tags. Resource tags.
1466    :type tags: dict[str, str]
1467    :param service_name: The name of the bgp community. e.g. Skype.
1468    :type service_name: str
1469    :param bgp_communities: Get a list of bgp communities.
1470    :type bgp_communities: list[~azure.mgmt.network.v2016_12_01.models.BGPCommunity]
1471    """
1472
1473    _validation = {
1474        'name': {'readonly': True},
1475        'type': {'readonly': True},
1476    }
1477
1478    _attribute_map = {
1479        'id': {'key': 'id', 'type': 'str'},
1480        'name': {'key': 'name', 'type': 'str'},
1481        'type': {'key': 'type', 'type': 'str'},
1482        'location': {'key': 'location', 'type': 'str'},
1483        'tags': {'key': 'tags', 'type': '{str}'},
1484        'service_name': {'key': 'properties.serviceName', 'type': 'str'},
1485        'bgp_communities': {'key': 'properties.bgpCommunities', 'type': '[BGPCommunity]'},
1486    }
1487
1488    def __init__(
1489        self,
1490        *,
1491        id: Optional[str] = None,
1492        location: Optional[str] = None,
1493        tags: Optional[Dict[str, str]] = None,
1494        service_name: Optional[str] = None,
1495        bgp_communities: Optional[List["BGPCommunity"]] = None,
1496        **kwargs
1497    ):
1498        super(BgpServiceCommunity, self).__init__(id=id, location=location, tags=tags, **kwargs)
1499        self.service_name = service_name
1500        self.bgp_communities = bgp_communities
1501
1502
1503class BgpServiceCommunityListResult(msrest.serialization.Model):
1504    """Response for the ListServiceCommunity API service call.
1505
1506    :param value: A list of service community resources.
1507    :type value: list[~azure.mgmt.network.v2016_12_01.models.BgpServiceCommunity]
1508    :param next_link: The URL to get the next set of results.
1509    :type next_link: str
1510    """
1511
1512    _attribute_map = {
1513        'value': {'key': 'value', 'type': '[BgpServiceCommunity]'},
1514        'next_link': {'key': 'nextLink', 'type': 'str'},
1515    }
1516
1517    def __init__(
1518        self,
1519        *,
1520        value: Optional[List["BgpServiceCommunity"]] = None,
1521        next_link: Optional[str] = None,
1522        **kwargs
1523    ):
1524        super(BgpServiceCommunityListResult, self).__init__(**kwargs)
1525        self.value = value
1526        self.next_link = next_link
1527
1528
1529class BgpSettings(msrest.serialization.Model):
1530    """BgpSettings.
1531
1532    :param asn: The BGP speaker's ASN.
1533    :type asn: long
1534    :param bgp_peering_address: The BGP peering address and BGP identifier of this BGP speaker.
1535    :type bgp_peering_address: str
1536    :param peer_weight: The weight added to routes learned from this BGP speaker.
1537    :type peer_weight: int
1538    """
1539
1540    _attribute_map = {
1541        'asn': {'key': 'asn', 'type': 'long'},
1542        'bgp_peering_address': {'key': 'bgpPeeringAddress', 'type': 'str'},
1543        'peer_weight': {'key': 'peerWeight', 'type': 'int'},
1544    }
1545
1546    def __init__(
1547        self,
1548        *,
1549        asn: Optional[int] = None,
1550        bgp_peering_address: Optional[str] = None,
1551        peer_weight: Optional[int] = None,
1552        **kwargs
1553    ):
1554        super(BgpSettings, self).__init__(**kwargs)
1555        self.asn = asn
1556        self.bgp_peering_address = bgp_peering_address
1557        self.peer_weight = peer_weight
1558
1559
1560class ConnectionResetSharedKey(msrest.serialization.Model):
1561    """ConnectionResetSharedKey.
1562
1563    All required parameters must be populated in order to send to Azure.
1564
1565    :param key_length: Required. The virtual network connection reset shared key length, should
1566     between 1 and 128.
1567    :type key_length: int
1568    """
1569
1570    _validation = {
1571        'key_length': {'required': True, 'maximum': 128, 'minimum': 1},
1572    }
1573
1574    _attribute_map = {
1575        'key_length': {'key': 'keyLength', 'type': 'int'},
1576    }
1577
1578    def __init__(
1579        self,
1580        *,
1581        key_length: int,
1582        **kwargs
1583    ):
1584        super(ConnectionResetSharedKey, self).__init__(**kwargs)
1585        self.key_length = key_length
1586
1587
1588class ConnectionSharedKey(msrest.serialization.Model):
1589    """Response for GetConnectionSharedKey API service call.
1590
1591    All required parameters must be populated in order to send to Azure.
1592
1593    :param value: Required. The virtual network connection shared key value.
1594    :type value: str
1595    """
1596
1597    _validation = {
1598        'value': {'required': True},
1599    }
1600
1601    _attribute_map = {
1602        'value': {'key': 'value', 'type': 'str'},
1603    }
1604
1605    def __init__(
1606        self,
1607        *,
1608        value: str,
1609        **kwargs
1610    ):
1611        super(ConnectionSharedKey, self).__init__(**kwargs)
1612        self.value = value
1613
1614
1615class DhcpOptions(msrest.serialization.Model):
1616    """DhcpOptions contains an array of DNS servers available to VMs deployed in the virtual network. Standard DHCP option for a subnet overrides VNET DHCP options.
1617
1618    :param dns_servers: The list of DNS servers IP addresses.
1619    :type dns_servers: list[str]
1620    """
1621
1622    _attribute_map = {
1623        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
1624    }
1625
1626    def __init__(
1627        self,
1628        *,
1629        dns_servers: Optional[List[str]] = None,
1630        **kwargs
1631    ):
1632        super(DhcpOptions, self).__init__(**kwargs)
1633        self.dns_servers = dns_servers
1634
1635
1636class DnsNameAvailabilityResult(msrest.serialization.Model):
1637    """Response for the CheckDnsNameAvailability API service call.
1638
1639    :param available: Domain availability (True/False).
1640    :type available: bool
1641    """
1642
1643    _attribute_map = {
1644        'available': {'key': 'available', 'type': 'bool'},
1645    }
1646
1647    def __init__(
1648        self,
1649        *,
1650        available: Optional[bool] = None,
1651        **kwargs
1652    ):
1653        super(DnsNameAvailabilityResult, self).__init__(**kwargs)
1654        self.available = available
1655
1656
1657class EffectiveNetworkSecurityGroup(msrest.serialization.Model):
1658    """Effective network security group.
1659
1660    :param network_security_group: The ID of network security group that is applied.
1661    :type network_security_group: ~azure.mgmt.network.v2016_12_01.models.SubResource
1662    :param association: The effective network security group association.
1663    :type association:
1664     ~azure.mgmt.network.v2016_12_01.models.EffectiveNetworkSecurityGroupAssociation
1665    :param effective_security_rules: A collection of effective security rules.
1666    :type effective_security_rules:
1667     list[~azure.mgmt.network.v2016_12_01.models.EffectiveNetworkSecurityRule]
1668    """
1669
1670    _attribute_map = {
1671        'network_security_group': {'key': 'networkSecurityGroup', 'type': 'SubResource'},
1672        'association': {'key': 'association', 'type': 'EffectiveNetworkSecurityGroupAssociation'},
1673        'effective_security_rules': {'key': 'effectiveSecurityRules', 'type': '[EffectiveNetworkSecurityRule]'},
1674    }
1675
1676    def __init__(
1677        self,
1678        *,
1679        network_security_group: Optional["SubResource"] = None,
1680        association: Optional["EffectiveNetworkSecurityGroupAssociation"] = None,
1681        effective_security_rules: Optional[List["EffectiveNetworkSecurityRule"]] = None,
1682        **kwargs
1683    ):
1684        super(EffectiveNetworkSecurityGroup, self).__init__(**kwargs)
1685        self.network_security_group = network_security_group
1686        self.association = association
1687        self.effective_security_rules = effective_security_rules
1688
1689
1690class EffectiveNetworkSecurityGroupAssociation(msrest.serialization.Model):
1691    """The effective network security group association.
1692
1693    :param subnet: The ID of the subnet if assigned.
1694    :type subnet: ~azure.mgmt.network.v2016_12_01.models.SubResource
1695    :param network_interface: The ID of the network interface if assigned.
1696    :type network_interface: ~azure.mgmt.network.v2016_12_01.models.SubResource
1697    """
1698
1699    _attribute_map = {
1700        'subnet': {'key': 'subnet', 'type': 'SubResource'},
1701        'network_interface': {'key': 'networkInterface', 'type': 'SubResource'},
1702    }
1703
1704    def __init__(
1705        self,
1706        *,
1707        subnet: Optional["SubResource"] = None,
1708        network_interface: Optional["SubResource"] = None,
1709        **kwargs
1710    ):
1711        super(EffectiveNetworkSecurityGroupAssociation, self).__init__(**kwargs)
1712        self.subnet = subnet
1713        self.network_interface = network_interface
1714
1715
1716class EffectiveNetworkSecurityGroupListResult(msrest.serialization.Model):
1717    """Response for list effective network security groups API service call.
1718
1719    :param value: A list of effective network security groups.
1720    :type value: list[~azure.mgmt.network.v2016_12_01.models.EffectiveNetworkSecurityGroup]
1721    :param next_link: The URL to get the next set of results.
1722    :type next_link: str
1723    """
1724
1725    _attribute_map = {
1726        'value': {'key': 'value', 'type': '[EffectiveNetworkSecurityGroup]'},
1727        'next_link': {'key': 'nextLink', 'type': 'str'},
1728    }
1729
1730    def __init__(
1731        self,
1732        *,
1733        value: Optional[List["EffectiveNetworkSecurityGroup"]] = None,
1734        next_link: Optional[str] = None,
1735        **kwargs
1736    ):
1737        super(EffectiveNetworkSecurityGroupListResult, self).__init__(**kwargs)
1738        self.value = value
1739        self.next_link = next_link
1740
1741
1742class EffectiveNetworkSecurityRule(msrest.serialization.Model):
1743    """Effective network security rules.
1744
1745    :param name: The name of the security rule specified by the user (if created by the user).
1746    :type name: str
1747    :param protocol: The network protocol this rule applies to. Possible values are: 'Tcp', 'Udp',
1748     and '*'. Possible values include: "Tcp", "Udp", "*".
1749    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.SecurityRuleProtocol
1750    :param source_port_range: The source port or range.
1751    :type source_port_range: str
1752    :param destination_port_range: The destination port or range.
1753    :type destination_port_range: str
1754    :param source_address_prefix: The source address prefix.
1755    :type source_address_prefix: str
1756    :param destination_address_prefix: The destination address prefix.
1757    :type destination_address_prefix: str
1758    :param expanded_source_address_prefix: The expanded source address prefix.
1759    :type expanded_source_address_prefix: list[str]
1760    :param expanded_destination_address_prefix: Expanded destination address prefix.
1761    :type expanded_destination_address_prefix: list[str]
1762    :param access: Whether network traffic is allowed or denied. Possible values are: 'Allow' and
1763     'Deny'. Possible values include: "Allow", "Deny".
1764    :type access: str or ~azure.mgmt.network.v2016_12_01.models.SecurityRuleAccess
1765    :param priority: The priority of the rule.
1766    :type priority: int
1767    :param direction: The direction of the rule. Possible values are: 'Inbound and Outbound'.
1768     Possible values include: "Inbound", "Outbound".
1769    :type direction: str or ~azure.mgmt.network.v2016_12_01.models.SecurityRuleDirection
1770    """
1771
1772    _attribute_map = {
1773        'name': {'key': 'name', 'type': 'str'},
1774        'protocol': {'key': 'protocol', 'type': 'str'},
1775        'source_port_range': {'key': 'sourcePortRange', 'type': 'str'},
1776        'destination_port_range': {'key': 'destinationPortRange', 'type': 'str'},
1777        'source_address_prefix': {'key': 'sourceAddressPrefix', 'type': 'str'},
1778        'destination_address_prefix': {'key': 'destinationAddressPrefix', 'type': 'str'},
1779        'expanded_source_address_prefix': {'key': 'expandedSourceAddressPrefix', 'type': '[str]'},
1780        'expanded_destination_address_prefix': {'key': 'expandedDestinationAddressPrefix', 'type': '[str]'},
1781        'access': {'key': 'access', 'type': 'str'},
1782        'priority': {'key': 'priority', 'type': 'int'},
1783        'direction': {'key': 'direction', 'type': 'str'},
1784    }
1785
1786    def __init__(
1787        self,
1788        *,
1789        name: Optional[str] = None,
1790        protocol: Optional[Union[str, "SecurityRuleProtocol"]] = None,
1791        source_port_range: Optional[str] = None,
1792        destination_port_range: Optional[str] = None,
1793        source_address_prefix: Optional[str] = None,
1794        destination_address_prefix: Optional[str] = None,
1795        expanded_source_address_prefix: Optional[List[str]] = None,
1796        expanded_destination_address_prefix: Optional[List[str]] = None,
1797        access: Optional[Union[str, "SecurityRuleAccess"]] = None,
1798        priority: Optional[int] = None,
1799        direction: Optional[Union[str, "SecurityRuleDirection"]] = None,
1800        **kwargs
1801    ):
1802        super(EffectiveNetworkSecurityRule, self).__init__(**kwargs)
1803        self.name = name
1804        self.protocol = protocol
1805        self.source_port_range = source_port_range
1806        self.destination_port_range = destination_port_range
1807        self.source_address_prefix = source_address_prefix
1808        self.destination_address_prefix = destination_address_prefix
1809        self.expanded_source_address_prefix = expanded_source_address_prefix
1810        self.expanded_destination_address_prefix = expanded_destination_address_prefix
1811        self.access = access
1812        self.priority = priority
1813        self.direction = direction
1814
1815
1816class EffectiveRoute(msrest.serialization.Model):
1817    """Effective Route.
1818
1819    :param name: The name of the user defined route. This is optional.
1820    :type name: str
1821    :param source: Who created the route. Possible values are: 'Unknown', 'User',
1822     'VirtualNetworkGateway', and 'Default'. Possible values include: "Unknown", "User",
1823     "VirtualNetworkGateway", "Default".
1824    :type source: str or ~azure.mgmt.network.v2016_12_01.models.EffectiveRouteSource
1825    :param state: The value of effective route. Possible values are: 'Active' and 'Invalid'.
1826     Possible values include: "Active", "Invalid".
1827    :type state: str or ~azure.mgmt.network.v2016_12_01.models.EffectiveRouteState
1828    :param address_prefix: The address prefixes of the effective routes in CIDR notation.
1829    :type address_prefix: list[str]
1830    :param next_hop_ip_address: The IP address of the next hop of the effective route.
1831    :type next_hop_ip_address: list[str]
1832    :param next_hop_type: The type of Azure hop the packet should be sent to. Possible values are:
1833     'VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', and 'None'. Possible
1834     values include: "VirtualNetworkGateway", "VnetLocal", "Internet", "VirtualAppliance", "None".
1835    :type next_hop_type: str or ~azure.mgmt.network.v2016_12_01.models.RouteNextHopType
1836    """
1837
1838    _attribute_map = {
1839        'name': {'key': 'name', 'type': 'str'},
1840        'source': {'key': 'source', 'type': 'str'},
1841        'state': {'key': 'state', 'type': 'str'},
1842        'address_prefix': {'key': 'addressPrefix', 'type': '[str]'},
1843        'next_hop_ip_address': {'key': 'nextHopIpAddress', 'type': '[str]'},
1844        'next_hop_type': {'key': 'nextHopType', 'type': 'str'},
1845    }
1846
1847    def __init__(
1848        self,
1849        *,
1850        name: Optional[str] = None,
1851        source: Optional[Union[str, "EffectiveRouteSource"]] = None,
1852        state: Optional[Union[str, "EffectiveRouteState"]] = None,
1853        address_prefix: Optional[List[str]] = None,
1854        next_hop_ip_address: Optional[List[str]] = None,
1855        next_hop_type: Optional[Union[str, "RouteNextHopType"]] = None,
1856        **kwargs
1857    ):
1858        super(EffectiveRoute, self).__init__(**kwargs)
1859        self.name = name
1860        self.source = source
1861        self.state = state
1862        self.address_prefix = address_prefix
1863        self.next_hop_ip_address = next_hop_ip_address
1864        self.next_hop_type = next_hop_type
1865
1866
1867class EffectiveRouteListResult(msrest.serialization.Model):
1868    """Response for list effective route API service call.
1869
1870    :param value: A list of effective routes.
1871    :type value: list[~azure.mgmt.network.v2016_12_01.models.EffectiveRoute]
1872    :param next_link: The URL to get the next set of results.
1873    :type next_link: str
1874    """
1875
1876    _attribute_map = {
1877        'value': {'key': 'value', 'type': '[EffectiveRoute]'},
1878        'next_link': {'key': 'nextLink', 'type': 'str'},
1879    }
1880
1881    def __init__(
1882        self,
1883        *,
1884        value: Optional[List["EffectiveRoute"]] = None,
1885        next_link: Optional[str] = None,
1886        **kwargs
1887    ):
1888        super(EffectiveRouteListResult, self).__init__(**kwargs)
1889        self.value = value
1890        self.next_link = next_link
1891
1892
1893class Error(msrest.serialization.Model):
1894    """Error.
1895
1896    :param code:
1897    :type code: str
1898    :param message:
1899    :type message: str
1900    :param target:
1901    :type target: str
1902    :param details:
1903    :type details: list[~azure.mgmt.network.v2016_12_01.models.ErrorDetails]
1904    :param inner_error:
1905    :type inner_error: str
1906    """
1907
1908    _attribute_map = {
1909        'code': {'key': 'code', 'type': 'str'},
1910        'message': {'key': 'message', 'type': 'str'},
1911        'target': {'key': 'target', 'type': 'str'},
1912        'details': {'key': 'details', 'type': '[ErrorDetails]'},
1913        'inner_error': {'key': 'innerError', 'type': 'str'},
1914    }
1915
1916    def __init__(
1917        self,
1918        *,
1919        code: Optional[str] = None,
1920        message: Optional[str] = None,
1921        target: Optional[str] = None,
1922        details: Optional[List["ErrorDetails"]] = None,
1923        inner_error: Optional[str] = None,
1924        **kwargs
1925    ):
1926        super(Error, self).__init__(**kwargs)
1927        self.code = code
1928        self.message = message
1929        self.target = target
1930        self.details = details
1931        self.inner_error = inner_error
1932
1933
1934class ErrorDetails(msrest.serialization.Model):
1935    """ErrorDetails.
1936
1937    :param code:
1938    :type code: str
1939    :param target:
1940    :type target: str
1941    :param message:
1942    :type message: str
1943    """
1944
1945    _attribute_map = {
1946        'code': {'key': 'code', 'type': 'str'},
1947        'target': {'key': 'target', 'type': 'str'},
1948        'message': {'key': 'message', 'type': 'str'},
1949    }
1950
1951    def __init__(
1952        self,
1953        *,
1954        code: Optional[str] = None,
1955        target: Optional[str] = None,
1956        message: Optional[str] = None,
1957        **kwargs
1958    ):
1959        super(ErrorDetails, self).__init__(**kwargs)
1960        self.code = code
1961        self.target = target
1962        self.message = message
1963
1964
1965class ExpressRouteCircuit(Resource):
1966    """ExpressRouteCircuit resource.
1967
1968    Variables are only populated by the server, and will be ignored when sending a request.
1969
1970    :param id: Resource ID.
1971    :type id: str
1972    :ivar name: Resource name.
1973    :vartype name: str
1974    :ivar type: Resource type.
1975    :vartype type: str
1976    :param location: Resource location.
1977    :type location: str
1978    :param tags: A set of tags. Resource tags.
1979    :type tags: dict[str, str]
1980    :param sku: The SKU.
1981    :type sku: ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitSku
1982    :ivar etag: Gets a unique read-only string that changes whenever the resource is updated.
1983    :vartype etag: str
1984    :param allow_classic_operations: Allow classic operations.
1985    :type allow_classic_operations: bool
1986    :param circuit_provisioning_state: The CircuitProvisioningState state of the resource.
1987    :type circuit_provisioning_state: str
1988    :param service_provider_provisioning_state: The ServiceProviderProvisioningState state of the
1989     resource. Possible values are 'NotProvisioned', 'Provisioning', 'Provisioned', and
1990     'Deprovisioning'. Possible values include: "NotProvisioned", "Provisioning", "Provisioned",
1991     "Deprovisioning".
1992    :type service_provider_provisioning_state: str or
1993     ~azure.mgmt.network.v2016_12_01.models.ServiceProviderProvisioningState
1994    :param authorizations: The list of authorizations.
1995    :type authorizations:
1996     list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitAuthorization]
1997    :param peerings: The list of peerings.
1998    :type peerings: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeering]
1999    :param service_key: The ServiceKey.
2000    :type service_key: str
2001    :param service_provider_notes: The ServiceProviderNotes.
2002    :type service_provider_notes: str
2003    :param service_provider_properties: The ServiceProviderProperties.
2004    :type service_provider_properties:
2005     ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitServiceProviderProperties
2006    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
2007     values are: 'Updating', 'Deleting', and 'Failed'.
2008    :type provisioning_state: str
2009    :param gateway_manager_etag: The GatewayManager Etag.
2010    :type gateway_manager_etag: str
2011    """
2012
2013    _validation = {
2014        'name': {'readonly': True},
2015        'type': {'readonly': True},
2016        'etag': {'readonly': True},
2017    }
2018
2019    _attribute_map = {
2020        'id': {'key': 'id', 'type': 'str'},
2021        'name': {'key': 'name', 'type': 'str'},
2022        'type': {'key': 'type', 'type': 'str'},
2023        'location': {'key': 'location', 'type': 'str'},
2024        'tags': {'key': 'tags', 'type': '{str}'},
2025        'sku': {'key': 'sku', 'type': 'ExpressRouteCircuitSku'},
2026        'etag': {'key': 'etag', 'type': 'str'},
2027        'allow_classic_operations': {'key': 'properties.allowClassicOperations', 'type': 'bool'},
2028        'circuit_provisioning_state': {'key': 'properties.circuitProvisioningState', 'type': 'str'},
2029        'service_provider_provisioning_state': {'key': 'properties.serviceProviderProvisioningState', 'type': 'str'},
2030        'authorizations': {'key': 'properties.authorizations', 'type': '[ExpressRouteCircuitAuthorization]'},
2031        'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCircuitPeering]'},
2032        'service_key': {'key': 'properties.serviceKey', 'type': 'str'},
2033        'service_provider_notes': {'key': 'properties.serviceProviderNotes', 'type': 'str'},
2034        'service_provider_properties': {'key': 'properties.serviceProviderProperties', 'type': 'ExpressRouteCircuitServiceProviderProperties'},
2035        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2036        'gateway_manager_etag': {'key': 'properties.gatewayManagerEtag', 'type': 'str'},
2037    }
2038
2039    def __init__(
2040        self,
2041        *,
2042        id: Optional[str] = None,
2043        location: Optional[str] = None,
2044        tags: Optional[Dict[str, str]] = None,
2045        sku: Optional["ExpressRouteCircuitSku"] = None,
2046        allow_classic_operations: Optional[bool] = None,
2047        circuit_provisioning_state: Optional[str] = None,
2048        service_provider_provisioning_state: Optional[Union[str, "ServiceProviderProvisioningState"]] = None,
2049        authorizations: Optional[List["ExpressRouteCircuitAuthorization"]] = None,
2050        peerings: Optional[List["ExpressRouteCircuitPeering"]] = None,
2051        service_key: Optional[str] = None,
2052        service_provider_notes: Optional[str] = None,
2053        service_provider_properties: Optional["ExpressRouteCircuitServiceProviderProperties"] = None,
2054        provisioning_state: Optional[str] = None,
2055        gateway_manager_etag: Optional[str] = None,
2056        **kwargs
2057    ):
2058        super(ExpressRouteCircuit, self).__init__(id=id, location=location, tags=tags, **kwargs)
2059        self.sku = sku
2060        self.etag = None
2061        self.allow_classic_operations = allow_classic_operations
2062        self.circuit_provisioning_state = circuit_provisioning_state
2063        self.service_provider_provisioning_state = service_provider_provisioning_state
2064        self.authorizations = authorizations
2065        self.peerings = peerings
2066        self.service_key = service_key
2067        self.service_provider_notes = service_provider_notes
2068        self.service_provider_properties = service_provider_properties
2069        self.provisioning_state = provisioning_state
2070        self.gateway_manager_etag = gateway_manager_etag
2071
2072
2073class ExpressRouteCircuitArpTable(msrest.serialization.Model):
2074    """The ARP table associated with the ExpressRouteCircuit.
2075
2076    :param age: Age.
2077    :type age: int
2078    :param interface: Interface.
2079    :type interface: str
2080    :param ip_address: The IP address.
2081    :type ip_address: str
2082    :param mac_address: The MAC address.
2083    :type mac_address: str
2084    """
2085
2086    _attribute_map = {
2087        'age': {'key': 'age', 'type': 'int'},
2088        'interface': {'key': 'interface', 'type': 'str'},
2089        'ip_address': {'key': 'ipAddress', 'type': 'str'},
2090        'mac_address': {'key': 'macAddress', 'type': 'str'},
2091    }
2092
2093    def __init__(
2094        self,
2095        *,
2096        age: Optional[int] = None,
2097        interface: Optional[str] = None,
2098        ip_address: Optional[str] = None,
2099        mac_address: Optional[str] = None,
2100        **kwargs
2101    ):
2102        super(ExpressRouteCircuitArpTable, self).__init__(**kwargs)
2103        self.age = age
2104        self.interface = interface
2105        self.ip_address = ip_address
2106        self.mac_address = mac_address
2107
2108
2109class ExpressRouteCircuitAuthorization(SubResource):
2110    """Authorization in an ExpressRouteCircuit resource.
2111
2112    Variables are only populated by the server, and will be ignored when sending a request.
2113
2114    :param id: Resource ID.
2115    :type id: str
2116    :param name: Gets name of the resource that is unique within a resource group. This name can be
2117     used to access the resource.
2118    :type name: str
2119    :ivar etag: A unique read-only string that changes whenever the resource is updated.
2120    :vartype etag: str
2121    :param authorization_key: The authorization key.
2122    :type authorization_key: str
2123    :param authorization_use_status: AuthorizationUseStatus. Possible values are: 'Available' and
2124     'InUse'. Possible values include: "Available", "InUse".
2125    :type authorization_use_status: str or
2126     ~azure.mgmt.network.v2016_12_01.models.AuthorizationUseStatus
2127    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
2128     values are: 'Updating', 'Deleting', and 'Failed'.
2129    :type provisioning_state: str
2130    """
2131
2132    _validation = {
2133        'etag': {'readonly': True},
2134    }
2135
2136    _attribute_map = {
2137        'id': {'key': 'id', 'type': 'str'},
2138        'name': {'key': 'name', 'type': 'str'},
2139        'etag': {'key': 'etag', 'type': 'str'},
2140        'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
2141        'authorization_use_status': {'key': 'properties.authorizationUseStatus', 'type': 'str'},
2142        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2143    }
2144
2145    def __init__(
2146        self,
2147        *,
2148        id: Optional[str] = None,
2149        name: Optional[str] = None,
2150        authorization_key: Optional[str] = None,
2151        authorization_use_status: Optional[Union[str, "AuthorizationUseStatus"]] = None,
2152        provisioning_state: Optional[str] = None,
2153        **kwargs
2154    ):
2155        super(ExpressRouteCircuitAuthorization, self).__init__(id=id, **kwargs)
2156        self.name = name
2157        self.etag = None
2158        self.authorization_key = authorization_key
2159        self.authorization_use_status = authorization_use_status
2160        self.provisioning_state = provisioning_state
2161
2162
2163class ExpressRouteCircuitListResult(msrest.serialization.Model):
2164    """Response for ListExpressRouteCircuit API service call.
2165
2166    :param value: A list of ExpressRouteCircuits in a resource group.
2167    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuit]
2168    :param next_link: The URL to get the next set of results.
2169    :type next_link: str
2170    """
2171
2172    _attribute_map = {
2173        'value': {'key': 'value', 'type': '[ExpressRouteCircuit]'},
2174        'next_link': {'key': 'nextLink', 'type': 'str'},
2175    }
2176
2177    def __init__(
2178        self,
2179        *,
2180        value: Optional[List["ExpressRouteCircuit"]] = None,
2181        next_link: Optional[str] = None,
2182        **kwargs
2183    ):
2184        super(ExpressRouteCircuitListResult, self).__init__(**kwargs)
2185        self.value = value
2186        self.next_link = next_link
2187
2188
2189class ExpressRouteCircuitPeering(SubResource):
2190    """Peering in an ExpressRouteCircuit resource.
2191
2192    Variables are only populated by the server, and will be ignored when sending a request.
2193
2194    :param id: Resource ID.
2195    :type id: str
2196    :param name: Gets name of the resource that is unique within a resource group. This name can be
2197     used to access the resource.
2198    :type name: str
2199    :ivar etag: A unique read-only string that changes whenever the resource is updated.
2200    :vartype etag: str
2201    :param peering_type: The PeeringType. Possible values are: 'AzurePublicPeering',
2202     'AzurePrivatePeering', and 'MicrosoftPeering'. Possible values include: "AzurePublicPeering",
2203     "AzurePrivatePeering", "MicrosoftPeering".
2204    :type peering_type: str or
2205     ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeeringType
2206    :param state: The state of peering. Possible values are: 'Disabled' and 'Enabled'. Possible
2207     values include: "Disabled", "Enabled".
2208    :type state: str or ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeeringState
2209    :param azure_asn: The Azure ASN.
2210    :type azure_asn: int
2211    :param peer_asn: The peer ASN.
2212    :type peer_asn: int
2213    :param primary_peer_address_prefix: The primary address prefix.
2214    :type primary_peer_address_prefix: str
2215    :param secondary_peer_address_prefix: The secondary address prefix.
2216    :type secondary_peer_address_prefix: str
2217    :param primary_azure_port: The primary port.
2218    :type primary_azure_port: str
2219    :param secondary_azure_port: The secondary port.
2220    :type secondary_azure_port: str
2221    :param shared_key: The shared key.
2222    :type shared_key: str
2223    :param vlan_id: The VLAN ID.
2224    :type vlan_id: int
2225    :param microsoft_peering_config: The Microsoft peering configuration.
2226    :type microsoft_peering_config:
2227     ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeeringConfig
2228    :param stats: Gets peering stats.
2229    :type stats: ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitStats
2230    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
2231     values are: 'Updating', 'Deleting', and 'Failed'.
2232    :type provisioning_state: str
2233    :param gateway_manager_etag: The GatewayManager Etag.
2234    :type gateway_manager_etag: str
2235    :param last_modified_by: Gets whether the provider or the customer last modified the peering.
2236    :type last_modified_by: str
2237    :param route_filter: The reference of the RouteFilter resource.
2238    :type route_filter: ~azure.mgmt.network.v2016_12_01.models.RouteFilter
2239    """
2240
2241    _validation = {
2242        'etag': {'readonly': True},
2243    }
2244
2245    _attribute_map = {
2246        'id': {'key': 'id', 'type': 'str'},
2247        'name': {'key': 'name', 'type': 'str'},
2248        'etag': {'key': 'etag', 'type': 'str'},
2249        'peering_type': {'key': 'properties.peeringType', 'type': 'str'},
2250        'state': {'key': 'properties.state', 'type': 'str'},
2251        'azure_asn': {'key': 'properties.azureASN', 'type': 'int'},
2252        'peer_asn': {'key': 'properties.peerASN', 'type': 'int'},
2253        'primary_peer_address_prefix': {'key': 'properties.primaryPeerAddressPrefix', 'type': 'str'},
2254        'secondary_peer_address_prefix': {'key': 'properties.secondaryPeerAddressPrefix', 'type': 'str'},
2255        'primary_azure_port': {'key': 'properties.primaryAzurePort', 'type': 'str'},
2256        'secondary_azure_port': {'key': 'properties.secondaryAzurePort', 'type': 'str'},
2257        'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
2258        'vlan_id': {'key': 'properties.vlanId', 'type': 'int'},
2259        'microsoft_peering_config': {'key': 'properties.microsoftPeeringConfig', 'type': 'ExpressRouteCircuitPeeringConfig'},
2260        'stats': {'key': 'properties.stats', 'type': 'ExpressRouteCircuitStats'},
2261        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2262        'gateway_manager_etag': {'key': 'properties.gatewayManagerEtag', 'type': 'str'},
2263        'last_modified_by': {'key': 'properties.lastModifiedBy', 'type': 'str'},
2264        'route_filter': {'key': 'properties.routeFilter', 'type': 'RouteFilter'},
2265    }
2266
2267    def __init__(
2268        self,
2269        *,
2270        id: Optional[str] = None,
2271        name: Optional[str] = None,
2272        peering_type: Optional[Union[str, "ExpressRouteCircuitPeeringType"]] = None,
2273        state: Optional[Union[str, "ExpressRouteCircuitPeeringState"]] = None,
2274        azure_asn: Optional[int] = None,
2275        peer_asn: Optional[int] = None,
2276        primary_peer_address_prefix: Optional[str] = None,
2277        secondary_peer_address_prefix: Optional[str] = None,
2278        primary_azure_port: Optional[str] = None,
2279        secondary_azure_port: Optional[str] = None,
2280        shared_key: Optional[str] = None,
2281        vlan_id: Optional[int] = None,
2282        microsoft_peering_config: Optional["ExpressRouteCircuitPeeringConfig"] = None,
2283        stats: Optional["ExpressRouteCircuitStats"] = None,
2284        provisioning_state: Optional[str] = None,
2285        gateway_manager_etag: Optional[str] = None,
2286        last_modified_by: Optional[str] = None,
2287        route_filter: Optional["RouteFilter"] = None,
2288        **kwargs
2289    ):
2290        super(ExpressRouteCircuitPeering, self).__init__(id=id, **kwargs)
2291        self.name = name
2292        self.etag = None
2293        self.peering_type = peering_type
2294        self.state = state
2295        self.azure_asn = azure_asn
2296        self.peer_asn = peer_asn
2297        self.primary_peer_address_prefix = primary_peer_address_prefix
2298        self.secondary_peer_address_prefix = secondary_peer_address_prefix
2299        self.primary_azure_port = primary_azure_port
2300        self.secondary_azure_port = secondary_azure_port
2301        self.shared_key = shared_key
2302        self.vlan_id = vlan_id
2303        self.microsoft_peering_config = microsoft_peering_config
2304        self.stats = stats
2305        self.provisioning_state = provisioning_state
2306        self.gateway_manager_etag = gateway_manager_etag
2307        self.last_modified_by = last_modified_by
2308        self.route_filter = route_filter
2309
2310
2311class ExpressRouteCircuitPeeringConfig(msrest.serialization.Model):
2312    """Specifies the peering configuration.
2313
2314    :param advertised_public_prefixes: The reference of AdvertisedPublicPrefixes.
2315    :type advertised_public_prefixes: list[str]
2316    :param advertised_public_prefixes_state: AdvertisedPublicPrefixState of the Peering resource.
2317     Possible values are 'NotConfigured', 'Configuring', 'Configured', and 'ValidationNeeded'.
2318     Possible values include: "NotConfigured", "Configuring", "Configured", "ValidationNeeded".
2319    :type advertised_public_prefixes_state: str or
2320     ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeeringAdvertisedPublicPrefixState
2321    :param customer_asn: The CustomerASN of the peering.
2322    :type customer_asn: int
2323    :param routing_registry_name: The RoutingRegistryName of the configuration.
2324    :type routing_registry_name: str
2325    """
2326
2327    _attribute_map = {
2328        'advertised_public_prefixes': {'key': 'advertisedPublicPrefixes', 'type': '[str]'},
2329        'advertised_public_prefixes_state': {'key': 'advertisedPublicPrefixesState', 'type': 'str'},
2330        'customer_asn': {'key': 'customerASN', 'type': 'int'},
2331        'routing_registry_name': {'key': 'routingRegistryName', 'type': 'str'},
2332    }
2333
2334    def __init__(
2335        self,
2336        *,
2337        advertised_public_prefixes: Optional[List[str]] = None,
2338        advertised_public_prefixes_state: Optional[Union[str, "ExpressRouteCircuitPeeringAdvertisedPublicPrefixState"]] = None,
2339        customer_asn: Optional[int] = None,
2340        routing_registry_name: Optional[str] = None,
2341        **kwargs
2342    ):
2343        super(ExpressRouteCircuitPeeringConfig, self).__init__(**kwargs)
2344        self.advertised_public_prefixes = advertised_public_prefixes
2345        self.advertised_public_prefixes_state = advertised_public_prefixes_state
2346        self.customer_asn = customer_asn
2347        self.routing_registry_name = routing_registry_name
2348
2349
2350class ExpressRouteCircuitPeeringListResult(msrest.serialization.Model):
2351    """Response for ListPeering API service call retrieves all peerings that belong to an ExpressRouteCircuit.
2352
2353    :param value: The peerings in an express route circuit.
2354    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeering]
2355    :param next_link: The URL to get the next set of results.
2356    :type next_link: str
2357    """
2358
2359    _attribute_map = {
2360        'value': {'key': 'value', 'type': '[ExpressRouteCircuitPeering]'},
2361        'next_link': {'key': 'nextLink', 'type': 'str'},
2362    }
2363
2364    def __init__(
2365        self,
2366        *,
2367        value: Optional[List["ExpressRouteCircuitPeering"]] = None,
2368        next_link: Optional[str] = None,
2369        **kwargs
2370    ):
2371        super(ExpressRouteCircuitPeeringListResult, self).__init__(**kwargs)
2372        self.value = value
2373        self.next_link = next_link
2374
2375
2376class ExpressRouteCircuitRoutesTable(msrest.serialization.Model):
2377    """The routes table associated with the ExpressRouteCircuit.
2378
2379    :param network: network.
2380    :type network: str
2381    :param next_hop: nextHop.
2382    :type next_hop: str
2383    :param loc_prf: locPrf.
2384    :type loc_prf: str
2385    :param weight: weight.
2386    :type weight: int
2387    :param path: path.
2388    :type path: str
2389    """
2390
2391    _attribute_map = {
2392        'network': {'key': 'network', 'type': 'str'},
2393        'next_hop': {'key': 'nextHop', 'type': 'str'},
2394        'loc_prf': {'key': 'locPrf', 'type': 'str'},
2395        'weight': {'key': 'weight', 'type': 'int'},
2396        'path': {'key': 'path', 'type': 'str'},
2397    }
2398
2399    def __init__(
2400        self,
2401        *,
2402        network: Optional[str] = None,
2403        next_hop: Optional[str] = None,
2404        loc_prf: Optional[str] = None,
2405        weight: Optional[int] = None,
2406        path: Optional[str] = None,
2407        **kwargs
2408    ):
2409        super(ExpressRouteCircuitRoutesTable, self).__init__(**kwargs)
2410        self.network = network
2411        self.next_hop = next_hop
2412        self.loc_prf = loc_prf
2413        self.weight = weight
2414        self.path = path
2415
2416
2417class ExpressRouteCircuitRoutesTableSummary(msrest.serialization.Model):
2418    """The routes table associated with the ExpressRouteCircuit.
2419
2420    :param neighbor: Neighbor.
2421    :type neighbor: str
2422    :param v: BGP version number spoken to the neighbor.
2423    :type v: int
2424    :param as_property: Autonomous system number.
2425    :type as_property: int
2426    :param up_down: The length of time that the BGP session has been in the Established state, or
2427     the current status if not in the Established state.
2428    :type up_down: str
2429    :param state_pfx_rcd: Current state of the BGP session, and the number of prefixes that have
2430     been received from a neighbor or peer group.
2431    :type state_pfx_rcd: str
2432    """
2433
2434    _attribute_map = {
2435        'neighbor': {'key': 'neighbor', 'type': 'str'},
2436        'v': {'key': 'v', 'type': 'int'},
2437        'as_property': {'key': 'as', 'type': 'int'},
2438        'up_down': {'key': 'upDown', 'type': 'str'},
2439        'state_pfx_rcd': {'key': 'statePfxRcd', 'type': 'str'},
2440    }
2441
2442    def __init__(
2443        self,
2444        *,
2445        neighbor: Optional[str] = None,
2446        v: Optional[int] = None,
2447        as_property: Optional[int] = None,
2448        up_down: Optional[str] = None,
2449        state_pfx_rcd: Optional[str] = None,
2450        **kwargs
2451    ):
2452        super(ExpressRouteCircuitRoutesTableSummary, self).__init__(**kwargs)
2453        self.neighbor = neighbor
2454        self.v = v
2455        self.as_property = as_property
2456        self.up_down = up_down
2457        self.state_pfx_rcd = state_pfx_rcd
2458
2459
2460class ExpressRouteCircuitsArpTableListResult(msrest.serialization.Model):
2461    """Response for ListArpTable associated with the Express Route Circuits API.
2462
2463    :param value: Gets list of the ARP table.
2464    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitArpTable]
2465    :param next_link: The URL to get the next set of results.
2466    :type next_link: str
2467    """
2468
2469    _attribute_map = {
2470        'value': {'key': 'value', 'type': '[ExpressRouteCircuitArpTable]'},
2471        'next_link': {'key': 'nextLink', 'type': 'str'},
2472    }
2473
2474    def __init__(
2475        self,
2476        *,
2477        value: Optional[List["ExpressRouteCircuitArpTable"]] = None,
2478        next_link: Optional[str] = None,
2479        **kwargs
2480    ):
2481        super(ExpressRouteCircuitsArpTableListResult, self).__init__(**kwargs)
2482        self.value = value
2483        self.next_link = next_link
2484
2485
2486class ExpressRouteCircuitServiceProviderProperties(msrest.serialization.Model):
2487    """Contains ServiceProviderProperties in an ExpressRouteCircuit.
2488
2489    :param service_provider_name: The serviceProviderName.
2490    :type service_provider_name: str
2491    :param peering_location: The peering location.
2492    :type peering_location: str
2493    :param bandwidth_in_mbps: The BandwidthInMbps.
2494    :type bandwidth_in_mbps: int
2495    """
2496
2497    _attribute_map = {
2498        'service_provider_name': {'key': 'serviceProviderName', 'type': 'str'},
2499        'peering_location': {'key': 'peeringLocation', 'type': 'str'},
2500        'bandwidth_in_mbps': {'key': 'bandwidthInMbps', 'type': 'int'},
2501    }
2502
2503    def __init__(
2504        self,
2505        *,
2506        service_provider_name: Optional[str] = None,
2507        peering_location: Optional[str] = None,
2508        bandwidth_in_mbps: Optional[int] = None,
2509        **kwargs
2510    ):
2511        super(ExpressRouteCircuitServiceProviderProperties, self).__init__(**kwargs)
2512        self.service_provider_name = service_provider_name
2513        self.peering_location = peering_location
2514        self.bandwidth_in_mbps = bandwidth_in_mbps
2515
2516
2517class ExpressRouteCircuitSku(msrest.serialization.Model):
2518    """Contains SKU in an ExpressRouteCircuit.
2519
2520    :param name: The name of the SKU.
2521    :type name: str
2522    :param tier: The tier of the SKU. Possible values are 'Standard' and 'Premium'. Possible values
2523     include: "Standard", "Premium".
2524    :type tier: str or ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitSkuTier
2525    :param family: The family of the SKU. Possible values are: 'UnlimitedData' and 'MeteredData'.
2526     Possible values include: "UnlimitedData", "MeteredData".
2527    :type family: str or ~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitSkuFamily
2528    """
2529
2530    _attribute_map = {
2531        'name': {'key': 'name', 'type': 'str'},
2532        'tier': {'key': 'tier', 'type': 'str'},
2533        'family': {'key': 'family', 'type': 'str'},
2534    }
2535
2536    def __init__(
2537        self,
2538        *,
2539        name: Optional[str] = None,
2540        tier: Optional[Union[str, "ExpressRouteCircuitSkuTier"]] = None,
2541        family: Optional[Union[str, "ExpressRouteCircuitSkuFamily"]] = None,
2542        **kwargs
2543    ):
2544        super(ExpressRouteCircuitSku, self).__init__(**kwargs)
2545        self.name = name
2546        self.tier = tier
2547        self.family = family
2548
2549
2550class ExpressRouteCircuitsRoutesTableListResult(msrest.serialization.Model):
2551    """Response for ListRoutesTable associated with the Express Route Circuits API.
2552
2553    :param value: The list of routes table.
2554    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitRoutesTable]
2555    :param next_link: The URL to get the next set of results.
2556    :type next_link: str
2557    """
2558
2559    _attribute_map = {
2560        'value': {'key': 'value', 'type': '[ExpressRouteCircuitRoutesTable]'},
2561        'next_link': {'key': 'nextLink', 'type': 'str'},
2562    }
2563
2564    def __init__(
2565        self,
2566        *,
2567        value: Optional[List["ExpressRouteCircuitRoutesTable"]] = None,
2568        next_link: Optional[str] = None,
2569        **kwargs
2570    ):
2571        super(ExpressRouteCircuitsRoutesTableListResult, self).__init__(**kwargs)
2572        self.value = value
2573        self.next_link = next_link
2574
2575
2576class ExpressRouteCircuitsRoutesTableSummaryListResult(msrest.serialization.Model):
2577    """Response for ListRoutesTable associated with the Express Route Circuits API.
2578
2579    :param value: A list of the routes table.
2580    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitRoutesTableSummary]
2581    :param next_link: The URL to get the next set of results.
2582    :type next_link: str
2583    """
2584
2585    _attribute_map = {
2586        'value': {'key': 'value', 'type': '[ExpressRouteCircuitRoutesTableSummary]'},
2587        'next_link': {'key': 'nextLink', 'type': 'str'},
2588    }
2589
2590    def __init__(
2591        self,
2592        *,
2593        value: Optional[List["ExpressRouteCircuitRoutesTableSummary"]] = None,
2594        next_link: Optional[str] = None,
2595        **kwargs
2596    ):
2597        super(ExpressRouteCircuitsRoutesTableSummaryListResult, self).__init__(**kwargs)
2598        self.value = value
2599        self.next_link = next_link
2600
2601
2602class ExpressRouteCircuitStats(msrest.serialization.Model):
2603    """Contains stats associated with the peering.
2604
2605    :param primarybytes_in: Gets BytesIn of the peering.
2606    :type primarybytes_in: long
2607    :param primarybytes_out: Gets BytesOut of the peering.
2608    :type primarybytes_out: long
2609    :param secondarybytes_in: Gets BytesIn of the peering.
2610    :type secondarybytes_in: long
2611    :param secondarybytes_out: Gets BytesOut of the peering.
2612    :type secondarybytes_out: long
2613    """
2614
2615    _attribute_map = {
2616        'primarybytes_in': {'key': 'primarybytesIn', 'type': 'long'},
2617        'primarybytes_out': {'key': 'primarybytesOut', 'type': 'long'},
2618        'secondarybytes_in': {'key': 'secondarybytesIn', 'type': 'long'},
2619        'secondarybytes_out': {'key': 'secondarybytesOut', 'type': 'long'},
2620    }
2621
2622    def __init__(
2623        self,
2624        *,
2625        primarybytes_in: Optional[int] = None,
2626        primarybytes_out: Optional[int] = None,
2627        secondarybytes_in: Optional[int] = None,
2628        secondarybytes_out: Optional[int] = None,
2629        **kwargs
2630    ):
2631        super(ExpressRouteCircuitStats, self).__init__(**kwargs)
2632        self.primarybytes_in = primarybytes_in
2633        self.primarybytes_out = primarybytes_out
2634        self.secondarybytes_in = secondarybytes_in
2635        self.secondarybytes_out = secondarybytes_out
2636
2637
2638class ExpressRouteServiceProvider(Resource):
2639    """A ExpressRouteResourceProvider object.
2640
2641    Variables are only populated by the server, and will be ignored when sending a request.
2642
2643    :param id: Resource ID.
2644    :type id: str
2645    :ivar name: Resource name.
2646    :vartype name: str
2647    :ivar type: Resource type.
2648    :vartype type: str
2649    :param location: Resource location.
2650    :type location: str
2651    :param tags: A set of tags. Resource tags.
2652    :type tags: dict[str, str]
2653    :param peering_locations: Get a list of peering locations.
2654    :type peering_locations: list[str]
2655    :param bandwidths_offered: Gets bandwidths offered.
2656    :type bandwidths_offered:
2657     list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteServiceProviderBandwidthsOffered]
2658    :param provisioning_state: Gets the provisioning state of the resource.
2659    :type provisioning_state: str
2660    """
2661
2662    _validation = {
2663        'name': {'readonly': True},
2664        'type': {'readonly': True},
2665    }
2666
2667    _attribute_map = {
2668        'id': {'key': 'id', 'type': 'str'},
2669        'name': {'key': 'name', 'type': 'str'},
2670        'type': {'key': 'type', 'type': 'str'},
2671        'location': {'key': 'location', 'type': 'str'},
2672        'tags': {'key': 'tags', 'type': '{str}'},
2673        'peering_locations': {'key': 'properties.peeringLocations', 'type': '[str]'},
2674        'bandwidths_offered': {'key': 'properties.bandwidthsOffered', 'type': '[ExpressRouteServiceProviderBandwidthsOffered]'},
2675        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2676    }
2677
2678    def __init__(
2679        self,
2680        *,
2681        id: Optional[str] = None,
2682        location: Optional[str] = None,
2683        tags: Optional[Dict[str, str]] = None,
2684        peering_locations: Optional[List[str]] = None,
2685        bandwidths_offered: Optional[List["ExpressRouteServiceProviderBandwidthsOffered"]] = None,
2686        provisioning_state: Optional[str] = None,
2687        **kwargs
2688    ):
2689        super(ExpressRouteServiceProvider, self).__init__(id=id, location=location, tags=tags, **kwargs)
2690        self.peering_locations = peering_locations
2691        self.bandwidths_offered = bandwidths_offered
2692        self.provisioning_state = provisioning_state
2693
2694
2695class ExpressRouteServiceProviderBandwidthsOffered(msrest.serialization.Model):
2696    """Contains bandwidths offered in ExpressRouteServiceProvider resources.
2697
2698    :param offer_name: The OfferName.
2699    :type offer_name: str
2700    :param value_in_mbps: The ValueInMbps.
2701    :type value_in_mbps: int
2702    """
2703
2704    _attribute_map = {
2705        'offer_name': {'key': 'offerName', 'type': 'str'},
2706        'value_in_mbps': {'key': 'valueInMbps', 'type': 'int'},
2707    }
2708
2709    def __init__(
2710        self,
2711        *,
2712        offer_name: Optional[str] = None,
2713        value_in_mbps: Optional[int] = None,
2714        **kwargs
2715    ):
2716        super(ExpressRouteServiceProviderBandwidthsOffered, self).__init__(**kwargs)
2717        self.offer_name = offer_name
2718        self.value_in_mbps = value_in_mbps
2719
2720
2721class ExpressRouteServiceProviderListResult(msrest.serialization.Model):
2722    """Response for the ListExpressRouteServiceProvider API service call.
2723
2724    :param value: A list of ExpressRouteResourceProvider resources.
2725    :type value: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteServiceProvider]
2726    :param next_link: The URL to get the next set of results.
2727    :type next_link: str
2728    """
2729
2730    _attribute_map = {
2731        'value': {'key': 'value', 'type': '[ExpressRouteServiceProvider]'},
2732        'next_link': {'key': 'nextLink', 'type': 'str'},
2733    }
2734
2735    def __init__(
2736        self,
2737        *,
2738        value: Optional[List["ExpressRouteServiceProvider"]] = None,
2739        next_link: Optional[str] = None,
2740        **kwargs
2741    ):
2742        super(ExpressRouteServiceProviderListResult, self).__init__(**kwargs)
2743        self.value = value
2744        self.next_link = next_link
2745
2746
2747class FlowLogInformation(msrest.serialization.Model):
2748    """Information on the configuration of flow log.
2749
2750    All required parameters must be populated in order to send to Azure.
2751
2752    :param target_resource_id: Required. The ID of the resource to configure for flow logging.
2753    :type target_resource_id: str
2754    :param storage_id: Required. ID of the storage account which is used to store the flow log.
2755    :type storage_id: str
2756    :param enabled: Required. Flag to enable/disable flow logging.
2757    :type enabled: bool
2758    :param retention_policy: Parameters that define the retention policy for flow log.
2759    :type retention_policy: ~azure.mgmt.network.v2016_12_01.models.RetentionPolicyParameters
2760    """
2761
2762    _validation = {
2763        'target_resource_id': {'required': True},
2764        'storage_id': {'required': True},
2765        'enabled': {'required': True},
2766    }
2767
2768    _attribute_map = {
2769        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
2770        'storage_id': {'key': 'properties.storageId', 'type': 'str'},
2771        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
2772        'retention_policy': {'key': 'properties.retentionPolicy', 'type': 'RetentionPolicyParameters'},
2773    }
2774
2775    def __init__(
2776        self,
2777        *,
2778        target_resource_id: str,
2779        storage_id: str,
2780        enabled: bool,
2781        retention_policy: Optional["RetentionPolicyParameters"] = None,
2782        **kwargs
2783    ):
2784        super(FlowLogInformation, self).__init__(**kwargs)
2785        self.target_resource_id = target_resource_id
2786        self.storage_id = storage_id
2787        self.enabled = enabled
2788        self.retention_policy = retention_policy
2789
2790
2791class FlowLogStatusParameters(msrest.serialization.Model):
2792    """Parameters that define a resource to query flow log status.
2793
2794    All required parameters must be populated in order to send to Azure.
2795
2796    :param target_resource_id: Required. The target resource where getting the flow logging status.
2797    :type target_resource_id: str
2798    """
2799
2800    _validation = {
2801        'target_resource_id': {'required': True},
2802    }
2803
2804    _attribute_map = {
2805        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
2806    }
2807
2808    def __init__(
2809        self,
2810        *,
2811        target_resource_id: str,
2812        **kwargs
2813    ):
2814        super(FlowLogStatusParameters, self).__init__(**kwargs)
2815        self.target_resource_id = target_resource_id
2816
2817
2818class FrontendIPConfiguration(SubResource):
2819    """Frontend IP address of the load balancer.
2820
2821    Variables are only populated by the server, and will be ignored when sending a request.
2822
2823    :param id: Resource ID.
2824    :type id: str
2825    :param name: The name of the resource that is unique within a resource group. This name can be
2826     used to access the resource.
2827    :type name: str
2828    :param etag: A unique read-only string that changes whenever the resource is updated.
2829    :type etag: str
2830    :ivar inbound_nat_rules: Read only. Inbound rules URIs that use this frontend IP.
2831    :vartype inbound_nat_rules: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
2832    :ivar inbound_nat_pools: Read only. Inbound pools URIs that use this frontend IP.
2833    :vartype inbound_nat_pools: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
2834    :ivar outbound_nat_rules: Read only. Outbound rules URIs that use this frontend IP.
2835    :vartype outbound_nat_rules: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
2836    :ivar load_balancing_rules: Gets load balancing rules URIs that use this frontend IP.
2837    :vartype load_balancing_rules: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
2838    :param private_ip_address: The private IP address of the IP configuration.
2839    :type private_ip_address: str
2840    :param private_ip_allocation_method: The Private IP allocation method. Possible values are:
2841     'Static' and 'Dynamic'. Possible values include: "Static", "Dynamic".
2842    :type private_ip_allocation_method: str or
2843     ~azure.mgmt.network.v2016_12_01.models.IPAllocationMethod
2844    :param subnet: The reference of the subnet resource.
2845    :type subnet: ~azure.mgmt.network.v2016_12_01.models.Subnet
2846    :param public_ip_address: The reference of the Public IP resource.
2847    :type public_ip_address: ~azure.mgmt.network.v2016_12_01.models.PublicIPAddress
2848    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
2849     values are: 'Updating', 'Deleting', and 'Failed'.
2850    :type provisioning_state: str
2851    """
2852
2853    _validation = {
2854        'inbound_nat_rules': {'readonly': True},
2855        'inbound_nat_pools': {'readonly': True},
2856        'outbound_nat_rules': {'readonly': True},
2857        'load_balancing_rules': {'readonly': True},
2858    }
2859
2860    _attribute_map = {
2861        'id': {'key': 'id', 'type': 'str'},
2862        'name': {'key': 'name', 'type': 'str'},
2863        'etag': {'key': 'etag', 'type': 'str'},
2864        'inbound_nat_rules': {'key': 'properties.inboundNatRules', 'type': '[SubResource]'},
2865        'inbound_nat_pools': {'key': 'properties.inboundNatPools', 'type': '[SubResource]'},
2866        'outbound_nat_rules': {'key': 'properties.outboundNatRules', 'type': '[SubResource]'},
2867        'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[SubResource]'},
2868        'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
2869        'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
2870        'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
2871        'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'PublicIPAddress'},
2872        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2873    }
2874
2875    def __init__(
2876        self,
2877        *,
2878        id: Optional[str] = None,
2879        name: Optional[str] = None,
2880        etag: Optional[str] = None,
2881        private_ip_address: Optional[str] = None,
2882        private_ip_allocation_method: Optional[Union[str, "IPAllocationMethod"]] = None,
2883        subnet: Optional["Subnet"] = None,
2884        public_ip_address: Optional["PublicIPAddress"] = None,
2885        provisioning_state: Optional[str] = None,
2886        **kwargs
2887    ):
2888        super(FrontendIPConfiguration, self).__init__(id=id, **kwargs)
2889        self.name = name
2890        self.etag = etag
2891        self.inbound_nat_rules = None
2892        self.inbound_nat_pools = None
2893        self.outbound_nat_rules = None
2894        self.load_balancing_rules = None
2895        self.private_ip_address = private_ip_address
2896        self.private_ip_allocation_method = private_ip_allocation_method
2897        self.subnet = subnet
2898        self.public_ip_address = public_ip_address
2899        self.provisioning_state = provisioning_state
2900
2901
2902class GatewayRoute(msrest.serialization.Model):
2903    """GatewayRoute.
2904
2905    Variables are only populated by the server, and will be ignored when sending a request.
2906
2907    :ivar local_address: The gateway's local address.
2908    :vartype local_address: str
2909    :ivar network: The route's network prefix.
2910    :vartype network: str
2911    :ivar next_hop: The route's next hop.
2912    :vartype next_hop: str
2913    :ivar source_peer: The peer this route was learned from.
2914    :vartype source_peer: str
2915    :ivar origin: The source this route was learned from.
2916    :vartype origin: str
2917    :ivar as_path: The route's AS path sequence.
2918    :vartype as_path: str
2919    :ivar weight: The route's weight.
2920    :vartype weight: int
2921    """
2922
2923    _validation = {
2924        'local_address': {'readonly': True},
2925        'network': {'readonly': True},
2926        'next_hop': {'readonly': True},
2927        'source_peer': {'readonly': True},
2928        'origin': {'readonly': True},
2929        'as_path': {'readonly': True},
2930        'weight': {'readonly': True},
2931    }
2932
2933    _attribute_map = {
2934        'local_address': {'key': 'localAddress', 'type': 'str'},
2935        'network': {'key': 'network', 'type': 'str'},
2936        'next_hop': {'key': 'nextHop', 'type': 'str'},
2937        'source_peer': {'key': 'sourcePeer', 'type': 'str'},
2938        'origin': {'key': 'origin', 'type': 'str'},
2939        'as_path': {'key': 'asPath', 'type': 'str'},
2940        'weight': {'key': 'weight', 'type': 'int'},
2941    }
2942
2943    def __init__(
2944        self,
2945        **kwargs
2946    ):
2947        super(GatewayRoute, self).__init__(**kwargs)
2948        self.local_address = None
2949        self.network = None
2950        self.next_hop = None
2951        self.source_peer = None
2952        self.origin = None
2953        self.as_path = None
2954        self.weight = None
2955
2956
2957class GatewayRouteListResult(msrest.serialization.Model):
2958    """List of virtual network gateway routes.
2959
2960    :param value: List of gateway routes.
2961    :type value: list[~azure.mgmt.network.v2016_12_01.models.GatewayRoute]
2962    """
2963
2964    _attribute_map = {
2965        'value': {'key': 'value', 'type': '[GatewayRoute]'},
2966    }
2967
2968    def __init__(
2969        self,
2970        *,
2971        value: Optional[List["GatewayRoute"]] = None,
2972        **kwargs
2973    ):
2974        super(GatewayRouteListResult, self).__init__(**kwargs)
2975        self.value = value
2976
2977
2978class InboundNatPool(SubResource):
2979    """Inbound NAT pool of the load balancer.
2980
2981    :param id: Resource ID.
2982    :type id: str
2983    :param name: The name of the resource that is unique within a resource group. This name can be
2984     used to access the resource.
2985    :type name: str
2986    :param etag: A unique read-only string that changes whenever the resource is updated.
2987    :type etag: str
2988    :param frontend_ip_configuration: A reference to frontend IP addresses.
2989    :type frontend_ip_configuration: ~azure.mgmt.network.v2016_12_01.models.SubResource
2990    :param protocol: The transport protocol for the endpoint. Possible values are: 'Udp' or 'Tcp'.
2991     Possible values include: "Udp", "Tcp".
2992    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.TransportProtocol
2993    :param frontend_port_range_start: The first port number in the range of external ports that
2994     will be used to provide Inbound Nat to NICs associated with a load balancer. Acceptable values
2995     range between 1 and 65534.
2996    :type frontend_port_range_start: int
2997    :param frontend_port_range_end: The last port number in the range of external ports that will
2998     be used to provide Inbound Nat to NICs associated with a load balancer. Acceptable values range
2999     between 1 and 65535.
3000    :type frontend_port_range_end: int
3001    :param backend_port: The port used for internal connections on the endpoint. Acceptable values
3002     are between 1 and 65535.
3003    :type backend_port: int
3004    :param provisioning_state: Gets the provisioning state of the PublicIP resource. Possible
3005     values are: 'Updating', 'Deleting', and 'Failed'.
3006    :type provisioning_state: str
3007    """
3008
3009    _attribute_map = {
3010        'id': {'key': 'id', 'type': 'str'},
3011        'name': {'key': 'name', 'type': 'str'},
3012        'etag': {'key': 'etag', 'type': 'str'},
3013        'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
3014        'protocol': {'key': 'properties.protocol', 'type': 'str'},
3015        'frontend_port_range_start': {'key': 'properties.frontendPortRangeStart', 'type': 'int'},
3016        'frontend_port_range_end': {'key': 'properties.frontendPortRangeEnd', 'type': 'int'},
3017        'backend_port': {'key': 'properties.backendPort', 'type': 'int'},
3018        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3019    }
3020
3021    def __init__(
3022        self,
3023        *,
3024        id: Optional[str] = None,
3025        name: Optional[str] = None,
3026        etag: Optional[str] = None,
3027        frontend_ip_configuration: Optional["SubResource"] = None,
3028        protocol: Optional[Union[str, "TransportProtocol"]] = None,
3029        frontend_port_range_start: Optional[int] = None,
3030        frontend_port_range_end: Optional[int] = None,
3031        backend_port: Optional[int] = None,
3032        provisioning_state: Optional[str] = None,
3033        **kwargs
3034    ):
3035        super(InboundNatPool, self).__init__(id=id, **kwargs)
3036        self.name = name
3037        self.etag = etag
3038        self.frontend_ip_configuration = frontend_ip_configuration
3039        self.protocol = protocol
3040        self.frontend_port_range_start = frontend_port_range_start
3041        self.frontend_port_range_end = frontend_port_range_end
3042        self.backend_port = backend_port
3043        self.provisioning_state = provisioning_state
3044
3045
3046class InboundNatRule(SubResource):
3047    """Inbound NAT rule of the load balancer.
3048
3049    Variables are only populated by the server, and will be ignored when sending a request.
3050
3051    :param id: Resource ID.
3052    :type id: str
3053    :param name: Gets name of the resource that is unique within a resource group. This name can be
3054     used to access the resource.
3055    :type name: str
3056    :param etag: A unique read-only string that changes whenever the resource is updated.
3057    :type etag: str
3058    :param frontend_ip_configuration: A reference to frontend IP addresses.
3059    :type frontend_ip_configuration: ~azure.mgmt.network.v2016_12_01.models.SubResource
3060    :ivar backend_ip_configuration: A reference to a private IP address defined on a network
3061     interface of a VM. Traffic sent to the frontend port of each of the frontend IP configurations
3062     is forwarded to the backed IP.
3063    :vartype backend_ip_configuration:
3064     ~azure.mgmt.network.v2016_12_01.models.NetworkInterfaceIPConfiguration
3065    :param protocol: The transport protocol for the endpoint. Possible values are: 'Udp' or 'Tcp'.
3066     Possible values include: "Udp", "Tcp".
3067    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.TransportProtocol
3068    :param frontend_port: The port for the external endpoint. Port numbers for each rule must be
3069     unique within the Load Balancer. Acceptable values range from 1 to 65534.
3070    :type frontend_port: int
3071    :param backend_port: The port used for the internal endpoint. Acceptable values range from 1 to
3072     65535.
3073    :type backend_port: int
3074    :param idle_timeout_in_minutes: The timeout for the TCP idle connection. The value can be set
3075     between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the
3076     protocol is set to TCP.
3077    :type idle_timeout_in_minutes: int
3078    :param enable_floating_ip: Configures a virtual machine's endpoint for the floating IP
3079     capability required to configure a SQL AlwaysOn Availability Group. This setting is required
3080     when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed
3081     after you create the endpoint.
3082    :type enable_floating_ip: bool
3083    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
3084     values are: 'Updating', 'Deleting', and 'Failed'.
3085    :type provisioning_state: str
3086    """
3087
3088    _validation = {
3089        'backend_ip_configuration': {'readonly': True},
3090    }
3091
3092    _attribute_map = {
3093        'id': {'key': 'id', 'type': 'str'},
3094        'name': {'key': 'name', 'type': 'str'},
3095        'etag': {'key': 'etag', 'type': 'str'},
3096        'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
3097        'backend_ip_configuration': {'key': 'properties.backendIPConfiguration', 'type': 'NetworkInterfaceIPConfiguration'},
3098        'protocol': {'key': 'properties.protocol', 'type': 'str'},
3099        'frontend_port': {'key': 'properties.frontendPort', 'type': 'int'},
3100        'backend_port': {'key': 'properties.backendPort', 'type': 'int'},
3101        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
3102        'enable_floating_ip': {'key': 'properties.enableFloatingIP', 'type': 'bool'},
3103        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3104    }
3105
3106    def __init__(
3107        self,
3108        *,
3109        id: Optional[str] = None,
3110        name: Optional[str] = None,
3111        etag: Optional[str] = None,
3112        frontend_ip_configuration: Optional["SubResource"] = None,
3113        protocol: Optional[Union[str, "TransportProtocol"]] = None,
3114        frontend_port: Optional[int] = None,
3115        backend_port: Optional[int] = None,
3116        idle_timeout_in_minutes: Optional[int] = None,
3117        enable_floating_ip: Optional[bool] = None,
3118        provisioning_state: Optional[str] = None,
3119        **kwargs
3120    ):
3121        super(InboundNatRule, self).__init__(id=id, **kwargs)
3122        self.name = name
3123        self.etag = etag
3124        self.frontend_ip_configuration = frontend_ip_configuration
3125        self.backend_ip_configuration = None
3126        self.protocol = protocol
3127        self.frontend_port = frontend_port
3128        self.backend_port = backend_port
3129        self.idle_timeout_in_minutes = idle_timeout_in_minutes
3130        self.enable_floating_ip = enable_floating_ip
3131        self.provisioning_state = provisioning_state
3132
3133
3134class IPAddressAvailabilityResult(msrest.serialization.Model):
3135    """Response for CheckIPAddressAvailability API service call.
3136
3137    :param available: Private IP address availability.
3138    :type available: bool
3139    :param available_ip_addresses: Contains other available private IP addresses if the asked for
3140     address is taken.
3141    :type available_ip_addresses: list[str]
3142    """
3143
3144    _attribute_map = {
3145        'available': {'key': 'available', 'type': 'bool'},
3146        'available_ip_addresses': {'key': 'availableIPAddresses', 'type': '[str]'},
3147    }
3148
3149    def __init__(
3150        self,
3151        *,
3152        available: Optional[bool] = None,
3153        available_ip_addresses: Optional[List[str]] = None,
3154        **kwargs
3155    ):
3156        super(IPAddressAvailabilityResult, self).__init__(**kwargs)
3157        self.available = available
3158        self.available_ip_addresses = available_ip_addresses
3159
3160
3161class IPConfiguration(SubResource):
3162    """IPConfiguration.
3163
3164    :param id: Resource ID.
3165    :type id: str
3166    :param name: The name of the resource that is unique within a resource group. This name can be
3167     used to access the resource.
3168    :type name: str
3169    :param etag: A unique read-only string that changes whenever the resource is updated.
3170    :type etag: str
3171    :param private_ip_address: The private IP address of the IP configuration.
3172    :type private_ip_address: str
3173    :param private_ip_allocation_method: The private IP allocation method. Possible values are
3174     'Static' and 'Dynamic'. Possible values include: "Static", "Dynamic".
3175    :type private_ip_allocation_method: str or
3176     ~azure.mgmt.network.v2016_12_01.models.IPAllocationMethod
3177    :param subnet: The reference of the subnet resource.
3178    :type subnet: ~azure.mgmt.network.v2016_12_01.models.Subnet
3179    :param public_ip_address: The reference of the public IP resource.
3180    :type public_ip_address: ~azure.mgmt.network.v2016_12_01.models.PublicIPAddress
3181    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
3182     values are: 'Updating', 'Deleting', and 'Failed'.
3183    :type provisioning_state: str
3184    """
3185
3186    _attribute_map = {
3187        'id': {'key': 'id', 'type': 'str'},
3188        'name': {'key': 'name', 'type': 'str'},
3189        'etag': {'key': 'etag', 'type': 'str'},
3190        'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
3191        'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
3192        'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
3193        'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'PublicIPAddress'},
3194        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3195    }
3196
3197    def __init__(
3198        self,
3199        *,
3200        id: Optional[str] = None,
3201        name: Optional[str] = None,
3202        etag: Optional[str] = None,
3203        private_ip_address: Optional[str] = None,
3204        private_ip_allocation_method: Optional[Union[str, "IPAllocationMethod"]] = None,
3205        subnet: Optional["Subnet"] = None,
3206        public_ip_address: Optional["PublicIPAddress"] = None,
3207        provisioning_state: Optional[str] = None,
3208        **kwargs
3209    ):
3210        super(IPConfiguration, self).__init__(id=id, **kwargs)
3211        self.name = name
3212        self.etag = etag
3213        self.private_ip_address = private_ip_address
3214        self.private_ip_allocation_method = private_ip_allocation_method
3215        self.subnet = subnet
3216        self.public_ip_address = public_ip_address
3217        self.provisioning_state = provisioning_state
3218
3219
3220class LoadBalancer(Resource):
3221    """LoadBalancer resource.
3222
3223    Variables are only populated by the server, and will be ignored when sending a request.
3224
3225    :param id: Resource ID.
3226    :type id: str
3227    :ivar name: Resource name.
3228    :vartype name: str
3229    :ivar type: Resource type.
3230    :vartype type: str
3231    :param location: Resource location.
3232    :type location: str
3233    :param tags: A set of tags. Resource tags.
3234    :type tags: dict[str, str]
3235    :param etag: A unique read-only string that changes whenever the resource is updated.
3236    :type etag: str
3237    :param frontend_ip_configurations: Object representing the frontend IPs to be used for the load
3238     balancer.
3239    :type frontend_ip_configurations:
3240     list[~azure.mgmt.network.v2016_12_01.models.FrontendIPConfiguration]
3241    :param backend_address_pools: Collection of backend address pools used by a load balancer.
3242    :type backend_address_pools: list[~azure.mgmt.network.v2016_12_01.models.BackendAddressPool]
3243    :param load_balancing_rules: Object collection representing the load balancing rules Gets the
3244     provisioning.
3245    :type load_balancing_rules: list[~azure.mgmt.network.v2016_12_01.models.LoadBalancingRule]
3246    :param probes: Collection of probe objects used in the load balancer.
3247    :type probes: list[~azure.mgmt.network.v2016_12_01.models.Probe]
3248    :param inbound_nat_rules: Collection of inbound NAT Rules used by a load balancer. Defining
3249     inbound NAT rules on your load balancer is mutually exclusive with defining an inbound NAT
3250     pool. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are
3251     associated with individual virtual machines cannot reference an Inbound NAT pool. They have to
3252     reference individual inbound NAT rules.
3253    :type inbound_nat_rules: list[~azure.mgmt.network.v2016_12_01.models.InboundNatRule]
3254    :param inbound_nat_pools: Defines an external port range for inbound NAT to a single backend
3255     port on NICs associated with a load balancer. Inbound NAT rules are created automatically for
3256     each NIC associated with the Load Balancer using an external port from this range. Defining an
3257     Inbound NAT pool on your Load Balancer is mutually exclusive with defining inbound Nat rules.
3258     Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with
3259     individual virtual machines cannot reference an inbound NAT pool. They have to reference
3260     individual inbound NAT rules.
3261    :type inbound_nat_pools: list[~azure.mgmt.network.v2016_12_01.models.InboundNatPool]
3262    :param outbound_nat_rules: The outbound NAT rules.
3263    :type outbound_nat_rules: list[~azure.mgmt.network.v2016_12_01.models.OutboundNatRule]
3264    :param resource_guid: The resource GUID property of the load balancer resource.
3265    :type resource_guid: str
3266    :param provisioning_state: Gets the provisioning state of the PublicIP resource. Possible
3267     values are: 'Updating', 'Deleting', and 'Failed'.
3268    :type provisioning_state: str
3269    """
3270
3271    _validation = {
3272        'name': {'readonly': True},
3273        'type': {'readonly': True},
3274    }
3275
3276    _attribute_map = {
3277        'id': {'key': 'id', 'type': 'str'},
3278        'name': {'key': 'name', 'type': 'str'},
3279        'type': {'key': 'type', 'type': 'str'},
3280        'location': {'key': 'location', 'type': 'str'},
3281        'tags': {'key': 'tags', 'type': '{str}'},
3282        'etag': {'key': 'etag', 'type': 'str'},
3283        'frontend_ip_configurations': {'key': 'properties.frontendIPConfigurations', 'type': '[FrontendIPConfiguration]'},
3284        'backend_address_pools': {'key': 'properties.backendAddressPools', 'type': '[BackendAddressPool]'},
3285        'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[LoadBalancingRule]'},
3286        'probes': {'key': 'properties.probes', 'type': '[Probe]'},
3287        'inbound_nat_rules': {'key': 'properties.inboundNatRules', 'type': '[InboundNatRule]'},
3288        'inbound_nat_pools': {'key': 'properties.inboundNatPools', 'type': '[InboundNatPool]'},
3289        'outbound_nat_rules': {'key': 'properties.outboundNatRules', 'type': '[OutboundNatRule]'},
3290        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
3291        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3292    }
3293
3294    def __init__(
3295        self,
3296        *,
3297        id: Optional[str] = None,
3298        location: Optional[str] = None,
3299        tags: Optional[Dict[str, str]] = None,
3300        etag: Optional[str] = None,
3301        frontend_ip_configurations: Optional[List["FrontendIPConfiguration"]] = None,
3302        backend_address_pools: Optional[List["BackendAddressPool"]] = None,
3303        load_balancing_rules: Optional[List["LoadBalancingRule"]] = None,
3304        probes: Optional[List["Probe"]] = None,
3305        inbound_nat_rules: Optional[List["InboundNatRule"]] = None,
3306        inbound_nat_pools: Optional[List["InboundNatPool"]] = None,
3307        outbound_nat_rules: Optional[List["OutboundNatRule"]] = None,
3308        resource_guid: Optional[str] = None,
3309        provisioning_state: Optional[str] = None,
3310        **kwargs
3311    ):
3312        super(LoadBalancer, self).__init__(id=id, location=location, tags=tags, **kwargs)
3313        self.etag = etag
3314        self.frontend_ip_configurations = frontend_ip_configurations
3315        self.backend_address_pools = backend_address_pools
3316        self.load_balancing_rules = load_balancing_rules
3317        self.probes = probes
3318        self.inbound_nat_rules = inbound_nat_rules
3319        self.inbound_nat_pools = inbound_nat_pools
3320        self.outbound_nat_rules = outbound_nat_rules
3321        self.resource_guid = resource_guid
3322        self.provisioning_state = provisioning_state
3323
3324
3325class LoadBalancerListResult(msrest.serialization.Model):
3326    """Response for ListLoadBalancers API service call.
3327
3328    :param value: A list of load balancers in a resource group.
3329    :type value: list[~azure.mgmt.network.v2016_12_01.models.LoadBalancer]
3330    :param next_link: The URL to get the next set of results.
3331    :type next_link: str
3332    """
3333
3334    _attribute_map = {
3335        'value': {'key': 'value', 'type': '[LoadBalancer]'},
3336        'next_link': {'key': 'nextLink', 'type': 'str'},
3337    }
3338
3339    def __init__(
3340        self,
3341        *,
3342        value: Optional[List["LoadBalancer"]] = None,
3343        next_link: Optional[str] = None,
3344        **kwargs
3345    ):
3346        super(LoadBalancerListResult, self).__init__(**kwargs)
3347        self.value = value
3348        self.next_link = next_link
3349
3350
3351class LoadBalancingRule(SubResource):
3352    """A load balancing rule for a load balancer.
3353
3354    :param id: Resource ID.
3355    :type id: str
3356    :param name: The name of the resource that is unique within a resource group. This name can be
3357     used to access the resource.
3358    :type name: str
3359    :param etag: A unique read-only string that changes whenever the resource is updated.
3360    :type etag: str
3361    :param frontend_ip_configuration: A reference to frontend IP addresses.
3362    :type frontend_ip_configuration: ~azure.mgmt.network.v2016_12_01.models.SubResource
3363    :param backend_address_pool: A reference to a pool of DIPs. Inbound traffic is randomly load
3364     balanced across IPs in the backend IPs.
3365    :type backend_address_pool: ~azure.mgmt.network.v2016_12_01.models.SubResource
3366    :param probe: The reference of the load balancer probe used by the load balancing rule.
3367    :type probe: ~azure.mgmt.network.v2016_12_01.models.SubResource
3368    :param protocol: The transport protocol for the external endpoint. Possible values are 'Udp' or
3369     'Tcp'. Possible values include: "Udp", "Tcp".
3370    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.TransportProtocol
3371    :param load_distribution: The load distribution policy for this rule. Possible values are
3372     'Default', 'SourceIP', and 'SourceIPProtocol'. Possible values include: "Default", "SourceIP",
3373     "SourceIPProtocol".
3374    :type load_distribution: str or ~azure.mgmt.network.v2016_12_01.models.LoadDistribution
3375    :param frontend_port: The port for the external endpoint. Port numbers for each rule must be
3376     unique within the Load Balancer. Acceptable values are between 1 and 65534.
3377    :type frontend_port: int
3378    :param backend_port: The port used for internal connections on the endpoint. Acceptable values
3379     are between 1 and 65535.
3380    :type backend_port: int
3381    :param idle_timeout_in_minutes: The timeout for the TCP idle connection. The value can be set
3382     between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the
3383     protocol is set to TCP.
3384    :type idle_timeout_in_minutes: int
3385    :param enable_floating_ip: Configures a virtual machine's endpoint for the floating IP
3386     capability required to configure a SQL AlwaysOn Availability Group. This setting is required
3387     when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed
3388     after you create the endpoint.
3389    :type enable_floating_ip: bool
3390    :param provisioning_state: Gets the provisioning state of the PublicIP resource. Possible
3391     values are: 'Updating', 'Deleting', and 'Failed'.
3392    :type provisioning_state: str
3393    """
3394
3395    _attribute_map = {
3396        'id': {'key': 'id', 'type': 'str'},
3397        'name': {'key': 'name', 'type': 'str'},
3398        'etag': {'key': 'etag', 'type': 'str'},
3399        'frontend_ip_configuration': {'key': 'properties.frontendIPConfiguration', 'type': 'SubResource'},
3400        'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
3401        'probe': {'key': 'properties.probe', 'type': 'SubResource'},
3402        'protocol': {'key': 'properties.protocol', 'type': 'str'},
3403        'load_distribution': {'key': 'properties.loadDistribution', 'type': 'str'},
3404        'frontend_port': {'key': 'properties.frontendPort', 'type': 'int'},
3405        'backend_port': {'key': 'properties.backendPort', 'type': 'int'},
3406        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
3407        'enable_floating_ip': {'key': 'properties.enableFloatingIP', 'type': 'bool'},
3408        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3409    }
3410
3411    def __init__(
3412        self,
3413        *,
3414        id: Optional[str] = None,
3415        name: Optional[str] = None,
3416        etag: Optional[str] = None,
3417        frontend_ip_configuration: Optional["SubResource"] = None,
3418        backend_address_pool: Optional["SubResource"] = None,
3419        probe: Optional["SubResource"] = None,
3420        protocol: Optional[Union[str, "TransportProtocol"]] = None,
3421        load_distribution: Optional[Union[str, "LoadDistribution"]] = None,
3422        frontend_port: Optional[int] = None,
3423        backend_port: Optional[int] = None,
3424        idle_timeout_in_minutes: Optional[int] = None,
3425        enable_floating_ip: Optional[bool] = None,
3426        provisioning_state: Optional[str] = None,
3427        **kwargs
3428    ):
3429        super(LoadBalancingRule, self).__init__(id=id, **kwargs)
3430        self.name = name
3431        self.etag = etag
3432        self.frontend_ip_configuration = frontend_ip_configuration
3433        self.backend_address_pool = backend_address_pool
3434        self.probe = probe
3435        self.protocol = protocol
3436        self.load_distribution = load_distribution
3437        self.frontend_port = frontend_port
3438        self.backend_port = backend_port
3439        self.idle_timeout_in_minutes = idle_timeout_in_minutes
3440        self.enable_floating_ip = enable_floating_ip
3441        self.provisioning_state = provisioning_state
3442
3443
3444class LocalNetworkGateway(Resource):
3445    """A common class for general resource information.
3446
3447    Variables are only populated by the server, and will be ignored when sending a request.
3448
3449    :param id: Resource ID.
3450    :type id: str
3451    :ivar name: Resource name.
3452    :vartype name: str
3453    :ivar type: Resource type.
3454    :vartype type: str
3455    :param location: Resource location.
3456    :type location: str
3457    :param tags: A set of tags. Resource tags.
3458    :type tags: dict[str, str]
3459    :param etag: A unique read-only string that changes whenever the resource is updated.
3460    :type etag: str
3461    :param local_network_address_space: Local network site address space.
3462    :type local_network_address_space: ~azure.mgmt.network.v2016_12_01.models.AddressSpace
3463    :param gateway_ip_address: IP address of local network gateway.
3464    :type gateway_ip_address: str
3465    :param bgp_settings: Local network gateway's BGP speaker settings.
3466    :type bgp_settings: ~azure.mgmt.network.v2016_12_01.models.BgpSettings
3467    :param resource_guid: The resource GUID property of the LocalNetworkGateway resource.
3468    :type resource_guid: str
3469    :ivar provisioning_state: The provisioning state of the LocalNetworkGateway resource. Possible
3470     values are: 'Updating', 'Deleting', and 'Failed'.
3471    :vartype provisioning_state: str
3472    """
3473
3474    _validation = {
3475        'name': {'readonly': True},
3476        'type': {'readonly': True},
3477        'provisioning_state': {'readonly': True},
3478    }
3479
3480    _attribute_map = {
3481        'id': {'key': 'id', 'type': 'str'},
3482        'name': {'key': 'name', 'type': 'str'},
3483        'type': {'key': 'type', 'type': 'str'},
3484        'location': {'key': 'location', 'type': 'str'},
3485        'tags': {'key': 'tags', 'type': '{str}'},
3486        'etag': {'key': 'etag', 'type': 'str'},
3487        'local_network_address_space': {'key': 'properties.localNetworkAddressSpace', 'type': 'AddressSpace'},
3488        'gateway_ip_address': {'key': 'properties.gatewayIpAddress', 'type': 'str'},
3489        'bgp_settings': {'key': 'properties.bgpSettings', 'type': 'BgpSettings'},
3490        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
3491        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3492    }
3493
3494    def __init__(
3495        self,
3496        *,
3497        id: Optional[str] = None,
3498        location: Optional[str] = None,
3499        tags: Optional[Dict[str, str]] = None,
3500        etag: Optional[str] = None,
3501        local_network_address_space: Optional["AddressSpace"] = None,
3502        gateway_ip_address: Optional[str] = None,
3503        bgp_settings: Optional["BgpSettings"] = None,
3504        resource_guid: Optional[str] = None,
3505        **kwargs
3506    ):
3507        super(LocalNetworkGateway, self).__init__(id=id, location=location, tags=tags, **kwargs)
3508        self.etag = etag
3509        self.local_network_address_space = local_network_address_space
3510        self.gateway_ip_address = gateway_ip_address
3511        self.bgp_settings = bgp_settings
3512        self.resource_guid = resource_guid
3513        self.provisioning_state = None
3514
3515
3516class LocalNetworkGatewayListResult(msrest.serialization.Model):
3517    """Response for ListLocalNetworkGateways API service call.
3518
3519    :param value: A list of local network gateways that exists in a resource group.
3520    :type value: list[~azure.mgmt.network.v2016_12_01.models.LocalNetworkGateway]
3521    :param next_link: The URL to get the next set of results.
3522    :type next_link: str
3523    """
3524
3525    _attribute_map = {
3526        'value': {'key': 'value', 'type': '[LocalNetworkGateway]'},
3527        'next_link': {'key': 'nextLink', 'type': 'str'},
3528    }
3529
3530    def __init__(
3531        self,
3532        *,
3533        value: Optional[List["LocalNetworkGateway"]] = None,
3534        next_link: Optional[str] = None,
3535        **kwargs
3536    ):
3537        super(LocalNetworkGatewayListResult, self).__init__(**kwargs)
3538        self.value = value
3539        self.next_link = next_link
3540
3541
3542class NetworkInterface(Resource):
3543    """A network interface in a resource group.
3544
3545    Variables are only populated by the server, and will be ignored when sending a request.
3546
3547    :param id: Resource ID.
3548    :type id: str
3549    :ivar name: Resource name.
3550    :vartype name: str
3551    :ivar type: Resource type.
3552    :vartype type: str
3553    :param location: Resource location.
3554    :type location: str
3555    :param tags: A set of tags. Resource tags.
3556    :type tags: dict[str, str]
3557    :param etag: A unique read-only string that changes whenever the resource is updated.
3558    :type etag: str
3559    :param virtual_machine: The reference of a virtual machine.
3560    :type virtual_machine: ~azure.mgmt.network.v2016_12_01.models.SubResource
3561    :param network_security_group: The reference of the NetworkSecurityGroup resource.
3562    :type network_security_group: ~azure.mgmt.network.v2016_12_01.models.NetworkSecurityGroup
3563    :param ip_configurations: A list of IPConfigurations of the network interface.
3564    :type ip_configurations:
3565     list[~azure.mgmt.network.v2016_12_01.models.NetworkInterfaceIPConfiguration]
3566    :param dns_settings: The DNS settings in network interface.
3567    :type dns_settings: ~azure.mgmt.network.v2016_12_01.models.NetworkInterfaceDnsSettings
3568    :param mac_address: The MAC address of the network interface.
3569    :type mac_address: str
3570    :param primary: Gets whether this is a primary network interface on a virtual machine.
3571    :type primary: bool
3572    :param enable_accelerated_networking: If the network interface is accelerated networking
3573     enabled.
3574    :type enable_accelerated_networking: bool
3575    :param enable_ip_forwarding: Indicates whether IP forwarding is enabled on this network
3576     interface.
3577    :type enable_ip_forwarding: bool
3578    :param resource_guid: The resource GUID property of the network interface resource.
3579    :type resource_guid: str
3580    :param provisioning_state: The provisioning state of the public IP resource. Possible values
3581     are: 'Updating', 'Deleting', and 'Failed'.
3582    :type provisioning_state: str
3583    """
3584
3585    _validation = {
3586        'name': {'readonly': True},
3587        'type': {'readonly': True},
3588    }
3589
3590    _attribute_map = {
3591        'id': {'key': 'id', 'type': 'str'},
3592        'name': {'key': 'name', 'type': 'str'},
3593        'type': {'key': 'type', 'type': 'str'},
3594        'location': {'key': 'location', 'type': 'str'},
3595        'tags': {'key': 'tags', 'type': '{str}'},
3596        'etag': {'key': 'etag', 'type': 'str'},
3597        'virtual_machine': {'key': 'properties.virtualMachine', 'type': 'SubResource'},
3598        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'NetworkSecurityGroup'},
3599        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[NetworkInterfaceIPConfiguration]'},
3600        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'NetworkInterfaceDnsSettings'},
3601        'mac_address': {'key': 'properties.macAddress', 'type': 'str'},
3602        'primary': {'key': 'properties.primary', 'type': 'bool'},
3603        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
3604        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
3605        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
3606        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3607    }
3608
3609    def __init__(
3610        self,
3611        *,
3612        id: Optional[str] = None,
3613        location: Optional[str] = None,
3614        tags: Optional[Dict[str, str]] = None,
3615        etag: Optional[str] = None,
3616        virtual_machine: Optional["SubResource"] = None,
3617        network_security_group: Optional["NetworkSecurityGroup"] = None,
3618        ip_configurations: Optional[List["NetworkInterfaceIPConfiguration"]] = None,
3619        dns_settings: Optional["NetworkInterfaceDnsSettings"] = None,
3620        mac_address: Optional[str] = None,
3621        primary: Optional[bool] = None,
3622        enable_accelerated_networking: Optional[bool] = None,
3623        enable_ip_forwarding: Optional[bool] = None,
3624        resource_guid: Optional[str] = None,
3625        provisioning_state: Optional[str] = None,
3626        **kwargs
3627    ):
3628        super(NetworkInterface, self).__init__(id=id, location=location, tags=tags, **kwargs)
3629        self.etag = etag
3630        self.virtual_machine = virtual_machine
3631        self.network_security_group = network_security_group
3632        self.ip_configurations = ip_configurations
3633        self.dns_settings = dns_settings
3634        self.mac_address = mac_address
3635        self.primary = primary
3636        self.enable_accelerated_networking = enable_accelerated_networking
3637        self.enable_ip_forwarding = enable_ip_forwarding
3638        self.resource_guid = resource_guid
3639        self.provisioning_state = provisioning_state
3640
3641
3642class NetworkInterfaceAssociation(msrest.serialization.Model):
3643    """Network interface and its custom security rules.
3644
3645    Variables are only populated by the server, and will be ignored when sending a request.
3646
3647    :ivar id: Network interface ID.
3648    :vartype id: str
3649    :param security_rules: Collection of custom security rules.
3650    :type security_rules: list[~azure.mgmt.network.v2016_12_01.models.SecurityRule]
3651    """
3652
3653    _validation = {
3654        'id': {'readonly': True},
3655    }
3656
3657    _attribute_map = {
3658        'id': {'key': 'id', 'type': 'str'},
3659        'security_rules': {'key': 'securityRules', 'type': '[SecurityRule]'},
3660    }
3661
3662    def __init__(
3663        self,
3664        *,
3665        security_rules: Optional[List["SecurityRule"]] = None,
3666        **kwargs
3667    ):
3668        super(NetworkInterfaceAssociation, self).__init__(**kwargs)
3669        self.id = None
3670        self.security_rules = security_rules
3671
3672
3673class NetworkInterfaceDnsSettings(msrest.serialization.Model):
3674    """DNS settings of a network interface.
3675
3676    :param dns_servers: List of DNS servers IP addresses. Use 'AzureProvidedDNS' to switch to azure
3677     provided DNS resolution. 'AzureProvidedDNS' value cannot be combined with other IPs, it must be
3678     the only value in dnsServers collection.
3679    :type dns_servers: list[str]
3680    :param applied_dns_servers: If the VM that uses this NIC is part of an Availability Set, then
3681     this list will have the union of all DNS servers from all NICs that are part of the
3682     Availability Set. This property is what is configured on each of those VMs.
3683    :type applied_dns_servers: list[str]
3684    :param internal_dns_name_label: Relative DNS name for this NIC used for internal communications
3685     between VMs in the same virtual network.
3686    :type internal_dns_name_label: str
3687    :param internal_fqdn: Fully qualified DNS name supporting internal communications between VMs
3688     in the same virtual network.
3689    :type internal_fqdn: str
3690    :param internal_domain_name_suffix: Even if internalDnsNameLabel is not specified, a DNS entry
3691     is created for the primary NIC of the VM. This DNS name can be constructed by concatenating the
3692     VM name with the value of internalDomainNameSuffix.
3693    :type internal_domain_name_suffix: str
3694    """
3695
3696    _attribute_map = {
3697        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
3698        'applied_dns_servers': {'key': 'appliedDnsServers', 'type': '[str]'},
3699        'internal_dns_name_label': {'key': 'internalDnsNameLabel', 'type': 'str'},
3700        'internal_fqdn': {'key': 'internalFqdn', 'type': 'str'},
3701        'internal_domain_name_suffix': {'key': 'internalDomainNameSuffix', 'type': 'str'},
3702    }
3703
3704    def __init__(
3705        self,
3706        *,
3707        dns_servers: Optional[List[str]] = None,
3708        applied_dns_servers: Optional[List[str]] = None,
3709        internal_dns_name_label: Optional[str] = None,
3710        internal_fqdn: Optional[str] = None,
3711        internal_domain_name_suffix: Optional[str] = None,
3712        **kwargs
3713    ):
3714        super(NetworkInterfaceDnsSettings, self).__init__(**kwargs)
3715        self.dns_servers = dns_servers
3716        self.applied_dns_servers = applied_dns_servers
3717        self.internal_dns_name_label = internal_dns_name_label
3718        self.internal_fqdn = internal_fqdn
3719        self.internal_domain_name_suffix = internal_domain_name_suffix
3720
3721
3722class NetworkInterfaceIPConfiguration(SubResource):
3723    """IPConfiguration in a network interface.
3724
3725    :param id: Resource ID.
3726    :type id: str
3727    :param name: The name of the resource that is unique within a resource group. This name can be
3728     used to access the resource.
3729    :type name: str
3730    :param etag: A unique read-only string that changes whenever the resource is updated.
3731    :type etag: str
3732    :param application_gateway_backend_address_pools: The reference of
3733     ApplicationGatewayBackendAddressPool resource.
3734    :type application_gateway_backend_address_pools:
3735     list[~azure.mgmt.network.v2016_12_01.models.ApplicationGatewayBackendAddressPool]
3736    :param load_balancer_backend_address_pools: The reference of LoadBalancerBackendAddressPool
3737     resource.
3738    :type load_balancer_backend_address_pools:
3739     list[~azure.mgmt.network.v2016_12_01.models.BackendAddressPool]
3740    :param load_balancer_inbound_nat_rules: A list of references of LoadBalancerInboundNatRules.
3741    :type load_balancer_inbound_nat_rules:
3742     list[~azure.mgmt.network.v2016_12_01.models.InboundNatRule]
3743    :param private_ip_address:
3744    :type private_ip_address: str
3745    :param private_ip_allocation_method: Defines how a private IP address is assigned. Possible
3746     values are: 'Static' and 'Dynamic'. Possible values include: "Static", "Dynamic".
3747    :type private_ip_allocation_method: str or
3748     ~azure.mgmt.network.v2016_12_01.models.IPAllocationMethod
3749    :param private_ip_address_version: Available from Api-Version 2016-03-30 onwards, it represents
3750     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
3751     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
3752    :type private_ip_address_version: str or ~azure.mgmt.network.v2016_12_01.models.IPVersion
3753    :param subnet: Subnet in a virtual network resource.
3754    :type subnet: ~azure.mgmt.network.v2016_12_01.models.Subnet
3755    :param primary: Gets whether this is a primary customer address on the network interface.
3756    :type primary: bool
3757    :param public_ip_address: Public IP address resource.
3758    :type public_ip_address: ~azure.mgmt.network.v2016_12_01.models.PublicIPAddress
3759    :param provisioning_state:
3760    :type provisioning_state: str
3761    """
3762
3763    _attribute_map = {
3764        'id': {'key': 'id', 'type': 'str'},
3765        'name': {'key': 'name', 'type': 'str'},
3766        'etag': {'key': 'etag', 'type': 'str'},
3767        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[ApplicationGatewayBackendAddressPool]'},
3768        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[BackendAddressPool]'},
3769        'load_balancer_inbound_nat_rules': {'key': 'properties.loadBalancerInboundNatRules', 'type': '[InboundNatRule]'},
3770        'private_ip_address': {'key': 'properties.privateIPAddress', 'type': 'str'},
3771        'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
3772        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
3773        'subnet': {'key': 'properties.subnet', 'type': 'Subnet'},
3774        'primary': {'key': 'properties.primary', 'type': 'bool'},
3775        'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'PublicIPAddress'},
3776        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3777    }
3778
3779    def __init__(
3780        self,
3781        *,
3782        id: Optional[str] = None,
3783        name: Optional[str] = None,
3784        etag: Optional[str] = None,
3785        application_gateway_backend_address_pools: Optional[List["ApplicationGatewayBackendAddressPool"]] = None,
3786        load_balancer_backend_address_pools: Optional[List["BackendAddressPool"]] = None,
3787        load_balancer_inbound_nat_rules: Optional[List["InboundNatRule"]] = None,
3788        private_ip_address: Optional[str] = None,
3789        private_ip_allocation_method: Optional[Union[str, "IPAllocationMethod"]] = None,
3790        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
3791        subnet: Optional["Subnet"] = None,
3792        primary: Optional[bool] = None,
3793        public_ip_address: Optional["PublicIPAddress"] = None,
3794        provisioning_state: Optional[str] = None,
3795        **kwargs
3796    ):
3797        super(NetworkInterfaceIPConfiguration, self).__init__(id=id, **kwargs)
3798        self.name = name
3799        self.etag = etag
3800        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
3801        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
3802        self.load_balancer_inbound_nat_rules = load_balancer_inbound_nat_rules
3803        self.private_ip_address = private_ip_address
3804        self.private_ip_allocation_method = private_ip_allocation_method
3805        self.private_ip_address_version = private_ip_address_version
3806        self.subnet = subnet
3807        self.primary = primary
3808        self.public_ip_address = public_ip_address
3809        self.provisioning_state = provisioning_state
3810
3811
3812class NetworkInterfaceListResult(msrest.serialization.Model):
3813    """Response for the ListNetworkInterface API service call.
3814
3815    :param value: A list of network interfaces in a resource group.
3816    :type value: list[~azure.mgmt.network.v2016_12_01.models.NetworkInterface]
3817    :param next_link: The URL to get the next set of results.
3818    :type next_link: str
3819    """
3820
3821    _attribute_map = {
3822        'value': {'key': 'value', 'type': '[NetworkInterface]'},
3823        'next_link': {'key': 'nextLink', 'type': 'str'},
3824    }
3825
3826    def __init__(
3827        self,
3828        *,
3829        value: Optional[List["NetworkInterface"]] = None,
3830        next_link: Optional[str] = None,
3831        **kwargs
3832    ):
3833        super(NetworkInterfaceListResult, self).__init__(**kwargs)
3834        self.value = value
3835        self.next_link = next_link
3836
3837
3838class NetworkSecurityGroup(Resource):
3839    """NetworkSecurityGroup resource.
3840
3841    Variables are only populated by the server, and will be ignored when sending a request.
3842
3843    :param id: Resource ID.
3844    :type id: str
3845    :ivar name: Resource name.
3846    :vartype name: str
3847    :ivar type: Resource type.
3848    :vartype type: str
3849    :param location: Resource location.
3850    :type location: str
3851    :param tags: A set of tags. Resource tags.
3852    :type tags: dict[str, str]
3853    :param etag: A unique read-only string that changes whenever the resource is updated.
3854    :type etag: str
3855    :param security_rules: A collection of security rules of the network security group.
3856    :type security_rules: list[~azure.mgmt.network.v2016_12_01.models.SecurityRule]
3857    :param default_security_rules: The default security rules of network security group.
3858    :type default_security_rules: list[~azure.mgmt.network.v2016_12_01.models.SecurityRule]
3859    :ivar network_interfaces: A collection of references to network interfaces.
3860    :vartype network_interfaces: list[~azure.mgmt.network.v2016_12_01.models.NetworkInterface]
3861    :ivar subnets: A collection of references to subnets.
3862    :vartype subnets: list[~azure.mgmt.network.v2016_12_01.models.Subnet]
3863    :param resource_guid: The resource GUID property of the network security group resource.
3864    :type resource_guid: str
3865    :param provisioning_state: The provisioning state of the public IP resource. Possible values
3866     are: 'Updating', 'Deleting', and 'Failed'.
3867    :type provisioning_state: str
3868    """
3869
3870    _validation = {
3871        'name': {'readonly': True},
3872        'type': {'readonly': True},
3873        'network_interfaces': {'readonly': True},
3874        'subnets': {'readonly': True},
3875    }
3876
3877    _attribute_map = {
3878        'id': {'key': 'id', 'type': 'str'},
3879        'name': {'key': 'name', 'type': 'str'},
3880        'type': {'key': 'type', 'type': 'str'},
3881        'location': {'key': 'location', 'type': 'str'},
3882        'tags': {'key': 'tags', 'type': '{str}'},
3883        'etag': {'key': 'etag', 'type': 'str'},
3884        'security_rules': {'key': 'properties.securityRules', 'type': '[SecurityRule]'},
3885        'default_security_rules': {'key': 'properties.defaultSecurityRules', 'type': '[SecurityRule]'},
3886        'network_interfaces': {'key': 'properties.networkInterfaces', 'type': '[NetworkInterface]'},
3887        'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
3888        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
3889        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3890    }
3891
3892    def __init__(
3893        self,
3894        *,
3895        id: Optional[str] = None,
3896        location: Optional[str] = None,
3897        tags: Optional[Dict[str, str]] = None,
3898        etag: Optional[str] = None,
3899        security_rules: Optional[List["SecurityRule"]] = None,
3900        default_security_rules: Optional[List["SecurityRule"]] = None,
3901        resource_guid: Optional[str] = None,
3902        provisioning_state: Optional[str] = None,
3903        **kwargs
3904    ):
3905        super(NetworkSecurityGroup, self).__init__(id=id, location=location, tags=tags, **kwargs)
3906        self.etag = etag
3907        self.security_rules = security_rules
3908        self.default_security_rules = default_security_rules
3909        self.network_interfaces = None
3910        self.subnets = None
3911        self.resource_guid = resource_guid
3912        self.provisioning_state = provisioning_state
3913
3914
3915class NetworkSecurityGroupListResult(msrest.serialization.Model):
3916    """Response for ListNetworkSecurityGroups API service call.
3917
3918    :param value: A list of NetworkSecurityGroup resources.
3919    :type value: list[~azure.mgmt.network.v2016_12_01.models.NetworkSecurityGroup]
3920    :param next_link: The URL to get the next set of results.
3921    :type next_link: str
3922    """
3923
3924    _attribute_map = {
3925        'value': {'key': 'value', 'type': '[NetworkSecurityGroup]'},
3926        'next_link': {'key': 'nextLink', 'type': 'str'},
3927    }
3928
3929    def __init__(
3930        self,
3931        *,
3932        value: Optional[List["NetworkSecurityGroup"]] = None,
3933        next_link: Optional[str] = None,
3934        **kwargs
3935    ):
3936        super(NetworkSecurityGroupListResult, self).__init__(**kwargs)
3937        self.value = value
3938        self.next_link = next_link
3939
3940
3941class NetworkWatcher(Resource):
3942    """Network watcher in a resource group.
3943
3944    Variables are only populated by the server, and will be ignored when sending a request.
3945
3946    :param id: Resource ID.
3947    :type id: str
3948    :ivar name: Resource name.
3949    :vartype name: str
3950    :ivar type: Resource type.
3951    :vartype type: str
3952    :param location: Resource location.
3953    :type location: str
3954    :param tags: A set of tags. Resource tags.
3955    :type tags: dict[str, str]
3956    :param etag: A unique read-only string that changes whenever the resource is updated.
3957    :type etag: str
3958    :ivar provisioning_state: The provisioning state of the resource. Possible values include:
3959     "Succeeded", "Updating", "Deleting", "Failed".
3960    :vartype provisioning_state: str or ~azure.mgmt.network.v2016_12_01.models.ProvisioningState
3961    """
3962
3963    _validation = {
3964        'name': {'readonly': True},
3965        'type': {'readonly': True},
3966        'provisioning_state': {'readonly': True},
3967    }
3968
3969    _attribute_map = {
3970        'id': {'key': 'id', 'type': 'str'},
3971        'name': {'key': 'name', 'type': 'str'},
3972        'type': {'key': 'type', 'type': 'str'},
3973        'location': {'key': 'location', 'type': 'str'},
3974        'tags': {'key': 'tags', 'type': '{str}'},
3975        'etag': {'key': 'etag', 'type': 'str'},
3976        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3977    }
3978
3979    def __init__(
3980        self,
3981        *,
3982        id: Optional[str] = None,
3983        location: Optional[str] = None,
3984        tags: Optional[Dict[str, str]] = None,
3985        etag: Optional[str] = None,
3986        **kwargs
3987    ):
3988        super(NetworkWatcher, self).__init__(id=id, location=location, tags=tags, **kwargs)
3989        self.etag = etag
3990        self.provisioning_state = None
3991
3992
3993class NetworkWatcherListResult(msrest.serialization.Model):
3994    """List of network watcher resources.
3995
3996    :param value:
3997    :type value: list[~azure.mgmt.network.v2016_12_01.models.NetworkWatcher]
3998    """
3999
4000    _attribute_map = {
4001        'value': {'key': 'value', 'type': '[NetworkWatcher]'},
4002    }
4003
4004    def __init__(
4005        self,
4006        *,
4007        value: Optional[List["NetworkWatcher"]] = None,
4008        **kwargs
4009    ):
4010        super(NetworkWatcherListResult, self).__init__(**kwargs)
4011        self.value = value
4012
4013
4014class NextHopParameters(msrest.serialization.Model):
4015    """Parameters that define the source and destination endpoint.
4016
4017    All required parameters must be populated in order to send to Azure.
4018
4019    :param target_resource_id: Required. The resource identifier of the target resource against
4020     which the action is to be performed.
4021    :type target_resource_id: str
4022    :param source_ip_address: Required. The source IP address.
4023    :type source_ip_address: str
4024    :param destination_ip_address: Required. The destination IP address.
4025    :type destination_ip_address: str
4026    :param target_nic_resource_id: The NIC ID. (If VM has multiple NICs and IP forwarding is
4027     enabled on any of the nics, then this parameter must be specified. Otherwise optional).
4028    :type target_nic_resource_id: str
4029    """
4030
4031    _validation = {
4032        'target_resource_id': {'required': True},
4033        'source_ip_address': {'required': True},
4034        'destination_ip_address': {'required': True},
4035    }
4036
4037    _attribute_map = {
4038        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
4039        'source_ip_address': {'key': 'sourceIPAddress', 'type': 'str'},
4040        'destination_ip_address': {'key': 'destinationIPAddress', 'type': 'str'},
4041        'target_nic_resource_id': {'key': 'targetNicResourceId', 'type': 'str'},
4042    }
4043
4044    def __init__(
4045        self,
4046        *,
4047        target_resource_id: str,
4048        source_ip_address: str,
4049        destination_ip_address: str,
4050        target_nic_resource_id: Optional[str] = None,
4051        **kwargs
4052    ):
4053        super(NextHopParameters, self).__init__(**kwargs)
4054        self.target_resource_id = target_resource_id
4055        self.source_ip_address = source_ip_address
4056        self.destination_ip_address = destination_ip_address
4057        self.target_nic_resource_id = target_nic_resource_id
4058
4059
4060class NextHopResult(msrest.serialization.Model):
4061    """The information about next hop from the specified VM.
4062
4063    :param next_hop_type: Next hop type. Possible values include: "Internet", "VirtualAppliance",
4064     "VirtualNetworkGateway", "VnetLocal", "HyperNetGateway", "None".
4065    :type next_hop_type: str or ~azure.mgmt.network.v2016_12_01.models.NextHopType
4066    :param next_hop_ip_address: Next hop IP Address.
4067    :type next_hop_ip_address: str
4068    :param route_table_id: The resource identifier for the route table associated with the route
4069     being returned. If the route being returned does not correspond to any user created routes then
4070     this field will be the string 'System Route'.
4071    :type route_table_id: str
4072    """
4073
4074    _attribute_map = {
4075        'next_hop_type': {'key': 'nextHopType', 'type': 'str'},
4076        'next_hop_ip_address': {'key': 'nextHopIpAddress', 'type': 'str'},
4077        'route_table_id': {'key': 'routeTableId', 'type': 'str'},
4078    }
4079
4080    def __init__(
4081        self,
4082        *,
4083        next_hop_type: Optional[Union[str, "NextHopType"]] = None,
4084        next_hop_ip_address: Optional[str] = None,
4085        route_table_id: Optional[str] = None,
4086        **kwargs
4087    ):
4088        super(NextHopResult, self).__init__(**kwargs)
4089        self.next_hop_type = next_hop_type
4090        self.next_hop_ip_address = next_hop_ip_address
4091        self.route_table_id = route_table_id
4092
4093
4094class OutboundNatRule(SubResource):
4095    """Outbound NAT pool of the load balancer.
4096
4097    :param id: Resource ID.
4098    :type id: str
4099    :param name: The name of the resource that is unique within a resource group. This name can be
4100     used to access the resource.
4101    :type name: str
4102    :param etag: A unique read-only string that changes whenever the resource is updated.
4103    :type etag: str
4104    :param allocated_outbound_ports: The number of outbound ports to be used for NAT.
4105    :type allocated_outbound_ports: int
4106    :param frontend_ip_configurations: The Frontend IP addresses of the load balancer.
4107    :type frontend_ip_configurations: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
4108    :param backend_address_pool: A reference to a pool of DIPs. Outbound traffic is randomly load
4109     balanced across IPs in the backend IPs.
4110    :type backend_address_pool: ~azure.mgmt.network.v2016_12_01.models.SubResource
4111    :param provisioning_state: Gets the provisioning state of the PublicIP resource. Possible
4112     values are: 'Updating', 'Deleting', and 'Failed'.
4113    :type provisioning_state: str
4114    """
4115
4116    _attribute_map = {
4117        'id': {'key': 'id', 'type': 'str'},
4118        'name': {'key': 'name', 'type': 'str'},
4119        'etag': {'key': 'etag', 'type': 'str'},
4120        'allocated_outbound_ports': {'key': 'properties.allocatedOutboundPorts', 'type': 'int'},
4121        'frontend_ip_configurations': {'key': 'properties.frontendIPConfigurations', 'type': '[SubResource]'},
4122        'backend_address_pool': {'key': 'properties.backendAddressPool', 'type': 'SubResource'},
4123        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4124    }
4125
4126    def __init__(
4127        self,
4128        *,
4129        id: Optional[str] = None,
4130        name: Optional[str] = None,
4131        etag: Optional[str] = None,
4132        allocated_outbound_ports: Optional[int] = None,
4133        frontend_ip_configurations: Optional[List["SubResource"]] = None,
4134        backend_address_pool: Optional["SubResource"] = None,
4135        provisioning_state: Optional[str] = None,
4136        **kwargs
4137    ):
4138        super(OutboundNatRule, self).__init__(id=id, **kwargs)
4139        self.name = name
4140        self.etag = etag
4141        self.allocated_outbound_ports = allocated_outbound_ports
4142        self.frontend_ip_configurations = frontend_ip_configurations
4143        self.backend_address_pool = backend_address_pool
4144        self.provisioning_state = provisioning_state
4145
4146
4147class PacketCapture(msrest.serialization.Model):
4148    """Parameters that define the create packet capture operation.
4149
4150    All required parameters must be populated in order to send to Azure.
4151
4152    :param target: Required. The ID of the targeted resource, only VM is currently supported.
4153    :type target: str
4154    :param bytes_to_capture_per_packet: Number of bytes captured per packet, the remaining bytes
4155     are truncated.
4156    :type bytes_to_capture_per_packet: int
4157    :param total_bytes_per_session: Maximum size of the capture output.
4158    :type total_bytes_per_session: int
4159    :param time_limit_in_seconds: Maximum duration of the capture session in seconds.
4160    :type time_limit_in_seconds: int
4161    :param storage_location: Required. Describes the storage location for a packet capture session.
4162    :type storage_location: ~azure.mgmt.network.v2016_12_01.models.PacketCaptureStorageLocation
4163    :param filters:
4164    :type filters: list[~azure.mgmt.network.v2016_12_01.models.PacketCaptureFilter]
4165    """
4166
4167    _validation = {
4168        'target': {'required': True},
4169        'storage_location': {'required': True},
4170    }
4171
4172    _attribute_map = {
4173        'target': {'key': 'properties.target', 'type': 'str'},
4174        'bytes_to_capture_per_packet': {'key': 'properties.bytesToCapturePerPacket', 'type': 'int'},
4175        'total_bytes_per_session': {'key': 'properties.totalBytesPerSession', 'type': 'int'},
4176        'time_limit_in_seconds': {'key': 'properties.timeLimitInSeconds', 'type': 'int'},
4177        'storage_location': {'key': 'properties.storageLocation', 'type': 'PacketCaptureStorageLocation'},
4178        'filters': {'key': 'properties.filters', 'type': '[PacketCaptureFilter]'},
4179    }
4180
4181    def __init__(
4182        self,
4183        *,
4184        target: str,
4185        storage_location: "PacketCaptureStorageLocation",
4186        bytes_to_capture_per_packet: Optional[int] = 0,
4187        total_bytes_per_session: Optional[int] = 1073741824,
4188        time_limit_in_seconds: Optional[int] = 18000,
4189        filters: Optional[List["PacketCaptureFilter"]] = None,
4190        **kwargs
4191    ):
4192        super(PacketCapture, self).__init__(**kwargs)
4193        self.target = target
4194        self.bytes_to_capture_per_packet = bytes_to_capture_per_packet
4195        self.total_bytes_per_session = total_bytes_per_session
4196        self.time_limit_in_seconds = time_limit_in_seconds
4197        self.storage_location = storage_location
4198        self.filters = filters
4199
4200
4201class PacketCaptureFilter(msrest.serialization.Model):
4202    """Filter that is applied to packet capture request. Multiple filters can be applied.
4203
4204    :param protocol: Protocol to be filtered on. Possible values include: "TCP", "UDP", "Any".
4205     Default value: "Any".
4206    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.PcProtocol
4207    :param local_ip_address: Local IP Address to be filtered on. Notation: "127.0.0.1" for single
4208     address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5"? for multiple entries.
4209     Multiple ranges not currently supported. Mixing ranges with multiple entries not currently
4210     supported. Default = null.
4211    :type local_ip_address: str
4212    :param remote_ip_address: Local IP Address to be filtered on. Notation: "127.0.0.1" for single
4213     address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries.
4214     Multiple ranges not currently supported. Mixing ranges with multiple entries not currently
4215     supported. Default = null.
4216    :type remote_ip_address: str
4217    :param local_port: Local port to be filtered on. Notation: "80" for single port entry."80-85"
4218     for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing
4219     ranges with multiple entries not currently supported. Default = null.
4220    :type local_port: str
4221    :param remote_port: Remote port to be filtered on. Notation: "80" for single port entry."80-85"
4222     for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing
4223     ranges with multiple entries not currently supported. Default = null.
4224    :type remote_port: str
4225    """
4226
4227    _attribute_map = {
4228        'protocol': {'key': 'protocol', 'type': 'str'},
4229        'local_ip_address': {'key': 'localIPAddress', 'type': 'str'},
4230        'remote_ip_address': {'key': 'remoteIPAddress', 'type': 'str'},
4231        'local_port': {'key': 'localPort', 'type': 'str'},
4232        'remote_port': {'key': 'remotePort', 'type': 'str'},
4233    }
4234
4235    def __init__(
4236        self,
4237        *,
4238        protocol: Optional[Union[str, "PcProtocol"]] = "Any",
4239        local_ip_address: Optional[str] = None,
4240        remote_ip_address: Optional[str] = None,
4241        local_port: Optional[str] = None,
4242        remote_port: Optional[str] = None,
4243        **kwargs
4244    ):
4245        super(PacketCaptureFilter, self).__init__(**kwargs)
4246        self.protocol = protocol
4247        self.local_ip_address = local_ip_address
4248        self.remote_ip_address = remote_ip_address
4249        self.local_port = local_port
4250        self.remote_port = remote_port
4251
4252
4253class PacketCaptureListResult(msrest.serialization.Model):
4254    """List of packet capture sessions.
4255
4256    :param value: Information about packet capture sessions.
4257    :type value: list[~azure.mgmt.network.v2016_12_01.models.PacketCaptureResult]
4258    """
4259
4260    _attribute_map = {
4261        'value': {'key': 'value', 'type': '[PacketCaptureResult]'},
4262    }
4263
4264    def __init__(
4265        self,
4266        *,
4267        value: Optional[List["PacketCaptureResult"]] = None,
4268        **kwargs
4269    ):
4270        super(PacketCaptureListResult, self).__init__(**kwargs)
4271        self.value = value
4272
4273
4274class PacketCaptureParameters(msrest.serialization.Model):
4275    """Parameters that define the create packet capture operation.
4276
4277    All required parameters must be populated in order to send to Azure.
4278
4279    :param target: Required. The ID of the targeted resource, only VM is currently supported.
4280    :type target: str
4281    :param bytes_to_capture_per_packet: Number of bytes captured per packet, the remaining bytes
4282     are truncated.
4283    :type bytes_to_capture_per_packet: int
4284    :param total_bytes_per_session: Maximum size of the capture output.
4285    :type total_bytes_per_session: int
4286    :param time_limit_in_seconds: Maximum duration of the capture session in seconds.
4287    :type time_limit_in_seconds: int
4288    :param storage_location: Required. Describes the storage location for a packet capture session.
4289    :type storage_location: ~azure.mgmt.network.v2016_12_01.models.PacketCaptureStorageLocation
4290    :param filters:
4291    :type filters: list[~azure.mgmt.network.v2016_12_01.models.PacketCaptureFilter]
4292    """
4293
4294    _validation = {
4295        'target': {'required': True},
4296        'storage_location': {'required': True},
4297    }
4298
4299    _attribute_map = {
4300        'target': {'key': 'target', 'type': 'str'},
4301        'bytes_to_capture_per_packet': {'key': 'bytesToCapturePerPacket', 'type': 'int'},
4302        'total_bytes_per_session': {'key': 'totalBytesPerSession', 'type': 'int'},
4303        'time_limit_in_seconds': {'key': 'timeLimitInSeconds', 'type': 'int'},
4304        'storage_location': {'key': 'storageLocation', 'type': 'PacketCaptureStorageLocation'},
4305        'filters': {'key': 'filters', 'type': '[PacketCaptureFilter]'},
4306    }
4307
4308    def __init__(
4309        self,
4310        *,
4311        target: str,
4312        storage_location: "PacketCaptureStorageLocation",
4313        bytes_to_capture_per_packet: Optional[int] = 0,
4314        total_bytes_per_session: Optional[int] = 1073741824,
4315        time_limit_in_seconds: Optional[int] = 18000,
4316        filters: Optional[List["PacketCaptureFilter"]] = None,
4317        **kwargs
4318    ):
4319        super(PacketCaptureParameters, self).__init__(**kwargs)
4320        self.target = target
4321        self.bytes_to_capture_per_packet = bytes_to_capture_per_packet
4322        self.total_bytes_per_session = total_bytes_per_session
4323        self.time_limit_in_seconds = time_limit_in_seconds
4324        self.storage_location = storage_location
4325        self.filters = filters
4326
4327
4328class PacketCaptureQueryStatusResult(msrest.serialization.Model):
4329    """Status of packet capture session.
4330
4331    :param name: The name of the packet capture resource.
4332    :type name: str
4333    :param id: The ID of the packet capture resource.
4334    :type id: str
4335    :param capture_start_time: The start time of the packet capture session.
4336    :type capture_start_time: ~datetime.datetime
4337    :param packet_capture_status: The status of the packet capture session. Possible values
4338     include: "NotStarted", "Running", "Stopped", "Error", "Unknown".
4339    :type packet_capture_status: str or ~azure.mgmt.network.v2016_12_01.models.PcStatus
4340    :param stop_reason: The reason the current packet capture session was stopped.
4341    :type stop_reason: str
4342    :param packet_capture_error: List of errors of packet capture session.
4343    :type packet_capture_error: list[str or ~azure.mgmt.network.v2016_12_01.models.PcError]
4344    """
4345
4346    _attribute_map = {
4347        'name': {'key': 'name', 'type': 'str'},
4348        'id': {'key': 'id', 'type': 'str'},
4349        'capture_start_time': {'key': 'captureStartTime', 'type': 'iso-8601'},
4350        'packet_capture_status': {'key': 'packetCaptureStatus', 'type': 'str'},
4351        'stop_reason': {'key': 'stopReason', 'type': 'str'},
4352        'packet_capture_error': {'key': 'packetCaptureError', 'type': '[str]'},
4353    }
4354
4355    def __init__(
4356        self,
4357        *,
4358        name: Optional[str] = None,
4359        id: Optional[str] = None,
4360        capture_start_time: Optional[datetime.datetime] = None,
4361        packet_capture_status: Optional[Union[str, "PcStatus"]] = None,
4362        stop_reason: Optional[str] = None,
4363        packet_capture_error: Optional[List[Union[str, "PcError"]]] = None,
4364        **kwargs
4365    ):
4366        super(PacketCaptureQueryStatusResult, self).__init__(**kwargs)
4367        self.name = name
4368        self.id = id
4369        self.capture_start_time = capture_start_time
4370        self.packet_capture_status = packet_capture_status
4371        self.stop_reason = stop_reason
4372        self.packet_capture_error = packet_capture_error
4373
4374
4375class PacketCaptureResult(msrest.serialization.Model):
4376    """Information about packet capture session.
4377
4378    Variables are only populated by the server, and will be ignored when sending a request.
4379
4380    :ivar name: Name of the packet capture session.
4381    :vartype name: str
4382    :ivar id: ID of the packet capture operation.
4383    :vartype id: str
4384    :param etag:
4385    :type etag: str
4386    :param target: The ID of the targeted resource, only VM is currently supported.
4387    :type target: str
4388    :param bytes_to_capture_per_packet: Number of bytes captured per packet, the remaining bytes
4389     are truncated.
4390    :type bytes_to_capture_per_packet: int
4391    :param total_bytes_per_session: Maximum size of the capture output.
4392    :type total_bytes_per_session: int
4393    :param time_limit_in_seconds: Maximum duration of the capture session in seconds.
4394    :type time_limit_in_seconds: int
4395    :param storage_location: Describes the storage location for a packet capture session.
4396    :type storage_location: ~azure.mgmt.network.v2016_12_01.models.PacketCaptureStorageLocation
4397    :param filters:
4398    :type filters: list[~azure.mgmt.network.v2016_12_01.models.PacketCaptureFilter]
4399    :param provisioning_state: The provisioning state of the packet capture session. Possible
4400     values include: "Succeeded", "Updating", "Deleting", "Failed".
4401    :type provisioning_state: str or ~azure.mgmt.network.v2016_12_01.models.ProvisioningState
4402    """
4403
4404    _validation = {
4405        'name': {'readonly': True},
4406        'id': {'readonly': True},
4407    }
4408
4409    _attribute_map = {
4410        'name': {'key': 'name', 'type': 'str'},
4411        'id': {'key': 'id', 'type': 'str'},
4412        'etag': {'key': 'etag', 'type': 'str'},
4413        'target': {'key': 'properties.target', 'type': 'str'},
4414        'bytes_to_capture_per_packet': {'key': 'properties.bytesToCapturePerPacket', 'type': 'int'},
4415        'total_bytes_per_session': {'key': 'properties.totalBytesPerSession', 'type': 'int'},
4416        'time_limit_in_seconds': {'key': 'properties.timeLimitInSeconds', 'type': 'int'},
4417        'storage_location': {'key': 'properties.storageLocation', 'type': 'PacketCaptureStorageLocation'},
4418        'filters': {'key': 'properties.filters', 'type': '[PacketCaptureFilter]'},
4419        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4420    }
4421
4422    def __init__(
4423        self,
4424        *,
4425        etag: Optional[str] = "A unique read-only string that changes whenever the resource is updated.",
4426        target: Optional[str] = None,
4427        bytes_to_capture_per_packet: Optional[int] = 0,
4428        total_bytes_per_session: Optional[int] = 1073741824,
4429        time_limit_in_seconds: Optional[int] = 18000,
4430        storage_location: Optional["PacketCaptureStorageLocation"] = None,
4431        filters: Optional[List["PacketCaptureFilter"]] = None,
4432        provisioning_state: Optional[Union[str, "ProvisioningState"]] = None,
4433        **kwargs
4434    ):
4435        super(PacketCaptureResult, self).__init__(**kwargs)
4436        self.name = None
4437        self.id = None
4438        self.etag = etag
4439        self.target = target
4440        self.bytes_to_capture_per_packet = bytes_to_capture_per_packet
4441        self.total_bytes_per_session = total_bytes_per_session
4442        self.time_limit_in_seconds = time_limit_in_seconds
4443        self.storage_location = storage_location
4444        self.filters = filters
4445        self.provisioning_state = provisioning_state
4446
4447
4448class PacketCaptureResultProperties(PacketCaptureParameters):
4449    """Describes the properties of a packet capture session.
4450
4451    All required parameters must be populated in order to send to Azure.
4452
4453    :param target: Required. The ID of the targeted resource, only VM is currently supported.
4454    :type target: str
4455    :param bytes_to_capture_per_packet: Number of bytes captured per packet, the remaining bytes
4456     are truncated.
4457    :type bytes_to_capture_per_packet: int
4458    :param total_bytes_per_session: Maximum size of the capture output.
4459    :type total_bytes_per_session: int
4460    :param time_limit_in_seconds: Maximum duration of the capture session in seconds.
4461    :type time_limit_in_seconds: int
4462    :param storage_location: Required. Describes the storage location for a packet capture session.
4463    :type storage_location: ~azure.mgmt.network.v2016_12_01.models.PacketCaptureStorageLocation
4464    :param filters:
4465    :type filters: list[~azure.mgmt.network.v2016_12_01.models.PacketCaptureFilter]
4466    :param provisioning_state: The provisioning state of the packet capture session. Possible
4467     values include: "Succeeded", "Updating", "Deleting", "Failed".
4468    :type provisioning_state: str or ~azure.mgmt.network.v2016_12_01.models.ProvisioningState
4469    """
4470
4471    _validation = {
4472        'target': {'required': True},
4473        'storage_location': {'required': True},
4474    }
4475
4476    _attribute_map = {
4477        'target': {'key': 'target', 'type': 'str'},
4478        'bytes_to_capture_per_packet': {'key': 'bytesToCapturePerPacket', 'type': 'int'},
4479        'total_bytes_per_session': {'key': 'totalBytesPerSession', 'type': 'int'},
4480        'time_limit_in_seconds': {'key': 'timeLimitInSeconds', 'type': 'int'},
4481        'storage_location': {'key': 'storageLocation', 'type': 'PacketCaptureStorageLocation'},
4482        'filters': {'key': 'filters', 'type': '[PacketCaptureFilter]'},
4483        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
4484    }
4485
4486    def __init__(
4487        self,
4488        *,
4489        target: str,
4490        storage_location: "PacketCaptureStorageLocation",
4491        bytes_to_capture_per_packet: Optional[int] = 0,
4492        total_bytes_per_session: Optional[int] = 1073741824,
4493        time_limit_in_seconds: Optional[int] = 18000,
4494        filters: Optional[List["PacketCaptureFilter"]] = None,
4495        provisioning_state: Optional[Union[str, "ProvisioningState"]] = None,
4496        **kwargs
4497    ):
4498        super(PacketCaptureResultProperties, self).__init__(target=target, bytes_to_capture_per_packet=bytes_to_capture_per_packet, total_bytes_per_session=total_bytes_per_session, time_limit_in_seconds=time_limit_in_seconds, storage_location=storage_location, filters=filters, **kwargs)
4499        self.provisioning_state = provisioning_state
4500
4501
4502class PacketCaptureStorageLocation(msrest.serialization.Model):
4503    """Describes the storage location for a packet capture session.
4504
4505    :param storage_id: The ID of the storage account to save the packet capture session. Required
4506     if no local file path is provided.
4507    :type storage_id: str
4508    :param storage_path: The URI of the storage path to save the packet capture. Must be a
4509     well-formed URI describing the location to save the packet capture.
4510    :type storage_path: str
4511    :param file_path: A valid local path on the targeting VM. Must include the name of the capture
4512     file (*.cap). For linux virtual machine it must start with /var/captures. Required if no
4513     storage ID is provided, otherwise optional.
4514    :type file_path: str
4515    """
4516
4517    _attribute_map = {
4518        'storage_id': {'key': 'storageId', 'type': 'str'},
4519        'storage_path': {'key': 'storagePath', 'type': 'str'},
4520        'file_path': {'key': 'filePath', 'type': 'str'},
4521    }
4522
4523    def __init__(
4524        self,
4525        *,
4526        storage_id: Optional[str] = None,
4527        storage_path: Optional[str] = None,
4528        file_path: Optional[str] = None,
4529        **kwargs
4530    ):
4531        super(PacketCaptureStorageLocation, self).__init__(**kwargs)
4532        self.storage_id = storage_id
4533        self.storage_path = storage_path
4534        self.file_path = file_path
4535
4536
4537class PatchRouteFilter(SubResource):
4538    """Route Filter Resource.
4539
4540    Variables are only populated by the server, and will be ignored when sending a request.
4541
4542    :param id: Resource ID.
4543    :type id: str
4544    :ivar name: The name of the resource that is unique within a resource group. This name can be
4545     used to access the resource.
4546    :vartype name: str
4547    :ivar etag: A unique read-only string that changes whenever the resource is updated.
4548    :vartype etag: str
4549    :ivar type: Resource type.
4550    :vartype type: str
4551    :param tags: A set of tags. Resource tags.
4552    :type tags: dict[str, str]
4553    :param rules: Collection of RouteFilterRules contained within a route filter.
4554    :type rules: list[~azure.mgmt.network.v2016_12_01.models.RouteFilterRule]
4555    :ivar peerings: A collection of references to express route circuit peerings.
4556    :vartype peerings: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeering]
4557    :ivar provisioning_state: The provisioning state of the resource. Possible values are:
4558     'Updating', 'Deleting', 'Succeeded' and 'Failed'.
4559    :vartype provisioning_state: str
4560    """
4561
4562    _validation = {
4563        'name': {'readonly': True},
4564        'etag': {'readonly': True},
4565        'type': {'readonly': True},
4566        'peerings': {'readonly': True},
4567        'provisioning_state': {'readonly': True},
4568    }
4569
4570    _attribute_map = {
4571        'id': {'key': 'id', 'type': 'str'},
4572        'name': {'key': 'name', 'type': 'str'},
4573        'etag': {'key': 'etag', 'type': 'str'},
4574        'type': {'key': 'type', 'type': 'str'},
4575        'tags': {'key': 'tags', 'type': '{str}'},
4576        'rules': {'key': 'properties.rules', 'type': '[RouteFilterRule]'},
4577        'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCircuitPeering]'},
4578        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4579    }
4580
4581    def __init__(
4582        self,
4583        *,
4584        id: Optional[str] = None,
4585        tags: Optional[Dict[str, str]] = None,
4586        rules: Optional[List["RouteFilterRule"]] = None,
4587        **kwargs
4588    ):
4589        super(PatchRouteFilter, self).__init__(id=id, **kwargs)
4590        self.name = None
4591        self.etag = None
4592        self.type = None
4593        self.tags = tags
4594        self.rules = rules
4595        self.peerings = None
4596        self.provisioning_state = None
4597
4598
4599class PatchRouteFilterRule(SubResource):
4600    """Route Filter Rule Resource.
4601
4602    Variables are only populated by the server, and will be ignored when sending a request.
4603
4604    :param id: Resource ID.
4605    :type id: str
4606    :ivar name: The name of the resource that is unique within a resource group. This name can be
4607     used to access the resource.
4608    :vartype name: str
4609    :ivar etag: A unique read-only string that changes whenever the resource is updated.
4610    :vartype etag: str
4611    :param tags: A set of tags. Resource tags.
4612    :type tags: dict[str, str]
4613    :param access: The access type of the rule. Valid values are: 'Allow', 'Deny'. Possible values
4614     include: "Allow", "Deny".
4615    :type access: str or ~azure.mgmt.network.v2016_12_01.models.Access
4616    :param route_filter_rule_type: The rule type of the rule. Valid value is: 'Community'. Possible
4617     values include: "Community".
4618    :type route_filter_rule_type: str or ~azure.mgmt.network.v2016_12_01.models.RouteFilterRuleType
4619    :param communities: The collection for bgp community values to filter on. e.g.
4620     ['12076:5010','12076:5020'].
4621    :type communities: list[str]
4622    :ivar provisioning_state: The provisioning state of the resource. Possible values are:
4623     'Updating', 'Deleting', 'Succeeded' and 'Failed'.
4624    :vartype provisioning_state: str
4625    """
4626
4627    _validation = {
4628        'name': {'readonly': True},
4629        'etag': {'readonly': True},
4630        'provisioning_state': {'readonly': True},
4631    }
4632
4633    _attribute_map = {
4634        'id': {'key': 'id', 'type': 'str'},
4635        'name': {'key': 'name', 'type': 'str'},
4636        'etag': {'key': 'etag', 'type': 'str'},
4637        'tags': {'key': 'tags', 'type': '{str}'},
4638        'access': {'key': 'properties.access', 'type': 'str'},
4639        'route_filter_rule_type': {'key': 'properties.routeFilterRuleType', 'type': 'str'},
4640        'communities': {'key': 'properties.communities', 'type': '[str]'},
4641        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4642    }
4643
4644    def __init__(
4645        self,
4646        *,
4647        id: Optional[str] = None,
4648        tags: Optional[Dict[str, str]] = None,
4649        access: Optional[Union[str, "Access"]] = None,
4650        route_filter_rule_type: Optional[Union[str, "RouteFilterRuleType"]] = None,
4651        communities: Optional[List[str]] = None,
4652        **kwargs
4653    ):
4654        super(PatchRouteFilterRule, self).__init__(id=id, **kwargs)
4655        self.name = None
4656        self.etag = None
4657        self.tags = tags
4658        self.access = access
4659        self.route_filter_rule_type = route_filter_rule_type
4660        self.communities = communities
4661        self.provisioning_state = None
4662
4663
4664class Probe(SubResource):
4665    """A load balancer probe.
4666
4667    Variables are only populated by the server, and will be ignored when sending a request.
4668
4669    :param id: Resource ID.
4670    :type id: str
4671    :param name: Gets name of the resource that is unique within a resource group. This name can be
4672     used to access the resource.
4673    :type name: str
4674    :param etag: A unique read-only string that changes whenever the resource is updated.
4675    :type etag: str
4676    :ivar load_balancing_rules: The load balancer rules that use this probe.
4677    :vartype load_balancing_rules: list[~azure.mgmt.network.v2016_12_01.models.SubResource]
4678    :param protocol: The protocol of the end point. Possible values are: 'Http' or 'Tcp'. If 'Tcp'
4679     is specified, a received ACK is required for the probe to be successful. If 'Http' is
4680     specified, a 200 OK response from the specifies URI is required for the probe to be successful.
4681     Possible values include: "Http", "Tcp".
4682    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.ProbeProtocol
4683    :param port: The port for communicating the probe. Possible values range from 1 to 65535,
4684     inclusive.
4685    :type port: int
4686    :param interval_in_seconds: The interval, in seconds, for how frequently to probe the endpoint
4687     for health status. Typically, the interval is slightly less than half the allocated timeout
4688     period (in seconds) which allows two full probes before taking the instance out of rotation.
4689     The default value is 15, the minimum value is 5.
4690    :type interval_in_seconds: int
4691    :param number_of_probes: The number of probes where if no response, will result in stopping
4692     further traffic from being delivered to the endpoint. This values allows endpoints to be taken
4693     out of rotation faster or slower than the typical times used in Azure.
4694    :type number_of_probes: int
4695    :param request_path: The URI used for requesting health status from the VM. Path is required if
4696     a protocol is set to http. Otherwise, it is not allowed. There is no default value.
4697    :type request_path: str
4698    :param provisioning_state: Gets the provisioning state of the public IP resource. Possible
4699     values are: 'Updating', 'Deleting', and 'Failed'.
4700    :type provisioning_state: str
4701    """
4702
4703    _validation = {
4704        'load_balancing_rules': {'readonly': True},
4705    }
4706
4707    _attribute_map = {
4708        'id': {'key': 'id', 'type': 'str'},
4709        'name': {'key': 'name', 'type': 'str'},
4710        'etag': {'key': 'etag', 'type': 'str'},
4711        'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[SubResource]'},
4712        'protocol': {'key': 'properties.protocol', 'type': 'str'},
4713        'port': {'key': 'properties.port', 'type': 'int'},
4714        'interval_in_seconds': {'key': 'properties.intervalInSeconds', 'type': 'int'},
4715        'number_of_probes': {'key': 'properties.numberOfProbes', 'type': 'int'},
4716        'request_path': {'key': 'properties.requestPath', 'type': 'str'},
4717        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4718    }
4719
4720    def __init__(
4721        self,
4722        *,
4723        id: Optional[str] = None,
4724        name: Optional[str] = None,
4725        etag: Optional[str] = None,
4726        protocol: Optional[Union[str, "ProbeProtocol"]] = None,
4727        port: Optional[int] = None,
4728        interval_in_seconds: Optional[int] = None,
4729        number_of_probes: Optional[int] = None,
4730        request_path: Optional[str] = None,
4731        provisioning_state: Optional[str] = None,
4732        **kwargs
4733    ):
4734        super(Probe, self).__init__(id=id, **kwargs)
4735        self.name = name
4736        self.etag = etag
4737        self.load_balancing_rules = None
4738        self.protocol = protocol
4739        self.port = port
4740        self.interval_in_seconds = interval_in_seconds
4741        self.number_of_probes = number_of_probes
4742        self.request_path = request_path
4743        self.provisioning_state = provisioning_state
4744
4745
4746class PublicIPAddress(Resource):
4747    """Public IP address resource.
4748
4749    Variables are only populated by the server, and will be ignored when sending a request.
4750
4751    :param id: Resource ID.
4752    :type id: str
4753    :ivar name: Resource name.
4754    :vartype name: str
4755    :ivar type: Resource type.
4756    :vartype type: str
4757    :param location: Resource location.
4758    :type location: str
4759    :param tags: A set of tags. Resource tags.
4760    :type tags: dict[str, str]
4761    :param etag: A unique read-only string that changes whenever the resource is updated.
4762    :type etag: str
4763    :param public_ip_allocation_method: The public IP allocation method. Possible values are:
4764     'Static' and 'Dynamic'. Possible values include: "Static", "Dynamic".
4765    :type public_ip_allocation_method: str or
4766     ~azure.mgmt.network.v2016_12_01.models.IPAllocationMethod
4767    :param public_ip_address_version: The public IP address version. Possible values are: 'IPv4'
4768     and 'IPv6'. Possible values include: "IPv4", "IPv6".
4769    :type public_ip_address_version: str or ~azure.mgmt.network.v2016_12_01.models.IPVersion
4770    :ivar ip_configuration: IPConfiguration.
4771    :vartype ip_configuration: ~azure.mgmt.network.v2016_12_01.models.IPConfiguration
4772    :param dns_settings: The FQDN of the DNS record associated with the public IP address.
4773    :type dns_settings: ~azure.mgmt.network.v2016_12_01.models.PublicIPAddressDnsSettings
4774    :param ip_address:
4775    :type ip_address: str
4776    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
4777    :type idle_timeout_in_minutes: int
4778    :param resource_guid: The resource GUID property of the public IP resource.
4779    :type resource_guid: str
4780    :param provisioning_state: The provisioning state of the PublicIP resource. Possible values
4781     are: 'Updating', 'Deleting', and 'Failed'.
4782    :type provisioning_state: str
4783    """
4784
4785    _validation = {
4786        'name': {'readonly': True},
4787        'type': {'readonly': True},
4788        'ip_configuration': {'readonly': True},
4789    }
4790
4791    _attribute_map = {
4792        'id': {'key': 'id', 'type': 'str'},
4793        'name': {'key': 'name', 'type': 'str'},
4794        'type': {'key': 'type', 'type': 'str'},
4795        'location': {'key': 'location', 'type': 'str'},
4796        'tags': {'key': 'tags', 'type': '{str}'},
4797        'etag': {'key': 'etag', 'type': 'str'},
4798        'public_ip_allocation_method': {'key': 'properties.publicIPAllocationMethod', 'type': 'str'},
4799        'public_ip_address_version': {'key': 'properties.publicIPAddressVersion', 'type': 'str'},
4800        'ip_configuration': {'key': 'properties.ipConfiguration', 'type': 'IPConfiguration'},
4801        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'PublicIPAddressDnsSettings'},
4802        'ip_address': {'key': 'properties.ipAddress', 'type': 'str'},
4803        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
4804        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
4805        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4806    }
4807
4808    def __init__(
4809        self,
4810        *,
4811        id: Optional[str] = None,
4812        location: Optional[str] = None,
4813        tags: Optional[Dict[str, str]] = None,
4814        etag: Optional[str] = None,
4815        public_ip_allocation_method: Optional[Union[str, "IPAllocationMethod"]] = None,
4816        public_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
4817        dns_settings: Optional["PublicIPAddressDnsSettings"] = None,
4818        ip_address: Optional[str] = None,
4819        idle_timeout_in_minutes: Optional[int] = None,
4820        resource_guid: Optional[str] = None,
4821        provisioning_state: Optional[str] = None,
4822        **kwargs
4823    ):
4824        super(PublicIPAddress, self).__init__(id=id, location=location, tags=tags, **kwargs)
4825        self.etag = etag
4826        self.public_ip_allocation_method = public_ip_allocation_method
4827        self.public_ip_address_version = public_ip_address_version
4828        self.ip_configuration = None
4829        self.dns_settings = dns_settings
4830        self.ip_address = ip_address
4831        self.idle_timeout_in_minutes = idle_timeout_in_minutes
4832        self.resource_guid = resource_guid
4833        self.provisioning_state = provisioning_state
4834
4835
4836class PublicIPAddressDnsSettings(msrest.serialization.Model):
4837    """Contains FQDN of the DNS record associated with the public IP address.
4838
4839    :param domain_name_label: Gets or sets the Domain name label.The concatenation of the domain
4840     name label and the regionalized DNS zone make up the fully qualified domain name associated
4841     with the public IP address. If a domain name label is specified, an A DNS record is created for
4842     the public IP in the Microsoft Azure DNS system.
4843    :type domain_name_label: str
4844    :param fqdn: Gets the FQDN, Fully qualified domain name of the A DNS record associated with the
4845     public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.
4846    :type fqdn: str
4847    :param reverse_fqdn: Gets or Sets the Reverse FQDN. A user-visible, fully qualified domain name
4848     that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record
4849     is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.
4850    :type reverse_fqdn: str
4851    """
4852
4853    _attribute_map = {
4854        'domain_name_label': {'key': 'domainNameLabel', 'type': 'str'},
4855        'fqdn': {'key': 'fqdn', 'type': 'str'},
4856        'reverse_fqdn': {'key': 'reverseFqdn', 'type': 'str'},
4857    }
4858
4859    def __init__(
4860        self,
4861        *,
4862        domain_name_label: Optional[str] = None,
4863        fqdn: Optional[str] = None,
4864        reverse_fqdn: Optional[str] = None,
4865        **kwargs
4866    ):
4867        super(PublicIPAddressDnsSettings, self).__init__(**kwargs)
4868        self.domain_name_label = domain_name_label
4869        self.fqdn = fqdn
4870        self.reverse_fqdn = reverse_fqdn
4871
4872
4873class PublicIPAddressListResult(msrest.serialization.Model):
4874    """Response for ListPublicIpAddresses API service call.
4875
4876    :param value: A list of public IP addresses that exists in a resource group.
4877    :type value: list[~azure.mgmt.network.v2016_12_01.models.PublicIPAddress]
4878    :param next_link: The URL to get the next set of results.
4879    :type next_link: str
4880    """
4881
4882    _attribute_map = {
4883        'value': {'key': 'value', 'type': '[PublicIPAddress]'},
4884        'next_link': {'key': 'nextLink', 'type': 'str'},
4885    }
4886
4887    def __init__(
4888        self,
4889        *,
4890        value: Optional[List["PublicIPAddress"]] = None,
4891        next_link: Optional[str] = None,
4892        **kwargs
4893    ):
4894        super(PublicIPAddressListResult, self).__init__(**kwargs)
4895        self.value = value
4896        self.next_link = next_link
4897
4898
4899class QueryTroubleshootingParameters(msrest.serialization.Model):
4900    """Parameters that define the resource to query the troubleshooting result.
4901
4902    All required parameters must be populated in order to send to Azure.
4903
4904    :param target_resource_id: Required. The target resource ID to query the troubleshooting
4905     result.
4906    :type target_resource_id: str
4907    """
4908
4909    _validation = {
4910        'target_resource_id': {'required': True},
4911    }
4912
4913    _attribute_map = {
4914        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
4915    }
4916
4917    def __init__(
4918        self,
4919        *,
4920        target_resource_id: str,
4921        **kwargs
4922    ):
4923        super(QueryTroubleshootingParameters, self).__init__(**kwargs)
4924        self.target_resource_id = target_resource_id
4925
4926
4927class ResourceNavigationLink(SubResource):
4928    """ResourceNavigationLink resource.
4929
4930    Variables are only populated by the server, and will be ignored when sending a request.
4931
4932    :param id: Resource ID.
4933    :type id: str
4934    :param name: Name of the resource that is unique within a resource group. This name can be used
4935     to access the resource.
4936    :type name: str
4937    :ivar etag: A unique read-only string that changes whenever the resource is updated.
4938    :vartype etag: str
4939    :param linked_resource_type: Resource type of the linked resource.
4940    :type linked_resource_type: str
4941    :param link: Link to the external resource.
4942    :type link: str
4943    :ivar provisioning_state: Provisioning state of the ResourceNavigationLink resource.
4944    :vartype provisioning_state: str
4945    """
4946
4947    _validation = {
4948        'etag': {'readonly': True},
4949        'provisioning_state': {'readonly': True},
4950    }
4951
4952    _attribute_map = {
4953        'id': {'key': 'id', 'type': 'str'},
4954        'name': {'key': 'name', 'type': 'str'},
4955        'etag': {'key': 'etag', 'type': 'str'},
4956        'linked_resource_type': {'key': 'properties.linkedResourceType', 'type': 'str'},
4957        'link': {'key': 'properties.link', 'type': 'str'},
4958        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4959    }
4960
4961    def __init__(
4962        self,
4963        *,
4964        id: Optional[str] = None,
4965        name: Optional[str] = None,
4966        linked_resource_type: Optional[str] = None,
4967        link: Optional[str] = None,
4968        **kwargs
4969    ):
4970        super(ResourceNavigationLink, self).__init__(id=id, **kwargs)
4971        self.name = name
4972        self.etag = None
4973        self.linked_resource_type = linked_resource_type
4974        self.link = link
4975        self.provisioning_state = None
4976
4977
4978class RetentionPolicyParameters(msrest.serialization.Model):
4979    """Parameters that define the retention policy for flow log.
4980
4981    :param days: Number of days to retain flow log records.
4982    :type days: int
4983    :param enabled: Flag to enable/disable retention.
4984    :type enabled: bool
4985    """
4986
4987    _attribute_map = {
4988        'days': {'key': 'days', 'type': 'int'},
4989        'enabled': {'key': 'enabled', 'type': 'bool'},
4990    }
4991
4992    def __init__(
4993        self,
4994        *,
4995        days: Optional[int] = 0,
4996        enabled: Optional[bool] = False,
4997        **kwargs
4998    ):
4999        super(RetentionPolicyParameters, self).__init__(**kwargs)
5000        self.days = days
5001        self.enabled = enabled
5002
5003
5004class Route(SubResource):
5005    """Route resource.
5006
5007    :param id: Resource ID.
5008    :type id: str
5009    :param name: The name of the resource that is unique within a resource group. This name can be
5010     used to access the resource.
5011    :type name: str
5012    :param etag: A unique read-only string that changes whenever the resource is updated.
5013    :type etag: str
5014    :param address_prefix: The destination CIDR to which the route applies.
5015    :type address_prefix: str
5016    :param next_hop_type: The type of Azure hop the packet should be sent to. Possible values are:
5017     'VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', and 'None'. Possible
5018     values include: "VirtualNetworkGateway", "VnetLocal", "Internet", "VirtualAppliance", "None".
5019    :type next_hop_type: str or ~azure.mgmt.network.v2016_12_01.models.RouteNextHopType
5020    :param next_hop_ip_address: The IP address packets should be forwarded to. Next hop values are
5021     only allowed in routes where the next hop type is VirtualAppliance.
5022    :type next_hop_ip_address: str
5023    :param provisioning_state: The provisioning state of the resource. Possible values are:
5024     'Updating', 'Deleting', and 'Failed'.
5025    :type provisioning_state: str
5026    """
5027
5028    _attribute_map = {
5029        'id': {'key': 'id', 'type': 'str'},
5030        'name': {'key': 'name', 'type': 'str'},
5031        'etag': {'key': 'etag', 'type': 'str'},
5032        'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
5033        'next_hop_type': {'key': 'properties.nextHopType', 'type': 'str'},
5034        'next_hop_ip_address': {'key': 'properties.nextHopIpAddress', 'type': 'str'},
5035        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5036    }
5037
5038    def __init__(
5039        self,
5040        *,
5041        id: Optional[str] = None,
5042        name: Optional[str] = None,
5043        etag: Optional[str] = None,
5044        address_prefix: Optional[str] = None,
5045        next_hop_type: Optional[Union[str, "RouteNextHopType"]] = None,
5046        next_hop_ip_address: Optional[str] = None,
5047        provisioning_state: Optional[str] = None,
5048        **kwargs
5049    ):
5050        super(Route, self).__init__(id=id, **kwargs)
5051        self.name = name
5052        self.etag = etag
5053        self.address_prefix = address_prefix
5054        self.next_hop_type = next_hop_type
5055        self.next_hop_ip_address = next_hop_ip_address
5056        self.provisioning_state = provisioning_state
5057
5058
5059class RouteFilter(Resource):
5060    """Route Filter Resource.
5061
5062    Variables are only populated by the server, and will be ignored when sending a request.
5063
5064    :param id: Resource ID.
5065    :type id: str
5066    :ivar name: Resource name.
5067    :vartype name: str
5068    :ivar type: Resource type.
5069    :vartype type: str
5070    :param location: Resource location.
5071    :type location: str
5072    :param tags: A set of tags. Resource tags.
5073    :type tags: dict[str, str]
5074    :ivar etag: Gets a unique read-only string that changes whenever the resource is updated.
5075    :vartype etag: str
5076    :param rules: Collection of RouteFilterRules contained within a route filter.
5077    :type rules: list[~azure.mgmt.network.v2016_12_01.models.RouteFilterRule]
5078    :ivar peerings: A collection of references to express route circuit peerings.
5079    :vartype peerings: list[~azure.mgmt.network.v2016_12_01.models.ExpressRouteCircuitPeering]
5080    :ivar provisioning_state: The provisioning state of the resource. Possible values are:
5081     'Updating', 'Deleting', 'Succeeded' and 'Failed'.
5082    :vartype provisioning_state: str
5083    """
5084
5085    _validation = {
5086        'name': {'readonly': True},
5087        'type': {'readonly': True},
5088        'etag': {'readonly': True},
5089        'peerings': {'readonly': True},
5090        'provisioning_state': {'readonly': True},
5091    }
5092
5093    _attribute_map = {
5094        'id': {'key': 'id', 'type': 'str'},
5095        'name': {'key': 'name', 'type': 'str'},
5096        'type': {'key': 'type', 'type': 'str'},
5097        'location': {'key': 'location', 'type': 'str'},
5098        'tags': {'key': 'tags', 'type': '{str}'},
5099        'etag': {'key': 'etag', 'type': 'str'},
5100        'rules': {'key': 'properties.rules', 'type': '[RouteFilterRule]'},
5101        'peerings': {'key': 'properties.peerings', 'type': '[ExpressRouteCircuitPeering]'},
5102        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5103    }
5104
5105    def __init__(
5106        self,
5107        *,
5108        id: Optional[str] = None,
5109        location: Optional[str] = None,
5110        tags: Optional[Dict[str, str]] = None,
5111        rules: Optional[List["RouteFilterRule"]] = None,
5112        **kwargs
5113    ):
5114        super(RouteFilter, self).__init__(id=id, location=location, tags=tags, **kwargs)
5115        self.etag = None
5116        self.rules = rules
5117        self.peerings = None
5118        self.provisioning_state = None
5119
5120
5121class RouteFilterListResult(msrest.serialization.Model):
5122    """Response for the ListRouteFilters API service call.
5123
5124    :param value: Gets a list of route filters in a resource group.
5125    :type value: list[~azure.mgmt.network.v2016_12_01.models.RouteFilter]
5126    :param next_link: The URL to get the next set of results.
5127    :type next_link: str
5128    """
5129
5130    _attribute_map = {
5131        'value': {'key': 'value', 'type': '[RouteFilter]'},
5132        'next_link': {'key': 'nextLink', 'type': 'str'},
5133    }
5134
5135    def __init__(
5136        self,
5137        *,
5138        value: Optional[List["RouteFilter"]] = None,
5139        next_link: Optional[str] = None,
5140        **kwargs
5141    ):
5142        super(RouteFilterListResult, self).__init__(**kwargs)
5143        self.value = value
5144        self.next_link = next_link
5145
5146
5147class RouteFilterRule(SubResource):
5148    """Route Filter Rule Resource.
5149
5150    Variables are only populated by the server, and will be ignored when sending a request.
5151
5152    :param id: Resource ID.
5153    :type id: str
5154    :ivar name: The name of the resource that is unique within a resource group. This name can be
5155     used to access the resource.
5156    :vartype name: str
5157    :param location: Resource location.
5158    :type location: str
5159    :ivar etag: A unique read-only string that changes whenever the resource is updated.
5160    :vartype etag: str
5161    :param tags: A set of tags. Resource tags.
5162    :type tags: dict[str, str]
5163    :param access: The access type of the rule. Valid values are: 'Allow', 'Deny'. Possible values
5164     include: "Allow", "Deny".
5165    :type access: str or ~azure.mgmt.network.v2016_12_01.models.Access
5166    :param route_filter_rule_type: The rule type of the rule. Valid value is: 'Community'. Possible
5167     values include: "Community".
5168    :type route_filter_rule_type: str or ~azure.mgmt.network.v2016_12_01.models.RouteFilterRuleType
5169    :param communities: The collection for bgp community values to filter on. e.g.
5170     ['12076:5010','12076:5020'].
5171    :type communities: list[str]
5172    :ivar provisioning_state: The provisioning state of the resource. Possible values are:
5173     'Updating', 'Deleting', 'Succeeded' and 'Failed'.
5174    :vartype provisioning_state: str
5175    """
5176
5177    _validation = {
5178        'name': {'readonly': True},
5179        'etag': {'readonly': True},
5180        'provisioning_state': {'readonly': True},
5181    }
5182
5183    _attribute_map = {
5184        'id': {'key': 'id', 'type': 'str'},
5185        'name': {'key': 'name', 'type': 'str'},
5186        'location': {'key': 'location', 'type': 'str'},
5187        'etag': {'key': 'etag', 'type': 'str'},
5188        'tags': {'key': 'tags', 'type': '{str}'},
5189        'access': {'key': 'properties.access', 'type': 'str'},
5190        'route_filter_rule_type': {'key': 'properties.routeFilterRuleType', 'type': 'str'},
5191        'communities': {'key': 'properties.communities', 'type': '[str]'},
5192        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5193    }
5194
5195    def __init__(
5196        self,
5197        *,
5198        id: Optional[str] = None,
5199        location: Optional[str] = None,
5200        tags: Optional[Dict[str, str]] = None,
5201        access: Optional[Union[str, "Access"]] = None,
5202        route_filter_rule_type: Optional[Union[str, "RouteFilterRuleType"]] = None,
5203        communities: Optional[List[str]] = None,
5204        **kwargs
5205    ):
5206        super(RouteFilterRule, self).__init__(id=id, **kwargs)
5207        self.name = None
5208        self.location = location
5209        self.etag = None
5210        self.tags = tags
5211        self.access = access
5212        self.route_filter_rule_type = route_filter_rule_type
5213        self.communities = communities
5214        self.provisioning_state = None
5215
5216
5217class RouteFilterRuleListResult(msrest.serialization.Model):
5218    """Response for the ListRouteFilterRules API service call.
5219
5220    :param value: Gets a list of RouteFilterRules in a resource group.
5221    :type value: list[~azure.mgmt.network.v2016_12_01.models.RouteFilterRule]
5222    :param next_link: The URL to get the next set of results.
5223    :type next_link: str
5224    """
5225
5226    _attribute_map = {
5227        'value': {'key': 'value', 'type': '[RouteFilterRule]'},
5228        'next_link': {'key': 'nextLink', 'type': 'str'},
5229    }
5230
5231    def __init__(
5232        self,
5233        *,
5234        value: Optional[List["RouteFilterRule"]] = None,
5235        next_link: Optional[str] = None,
5236        **kwargs
5237    ):
5238        super(RouteFilterRuleListResult, self).__init__(**kwargs)
5239        self.value = value
5240        self.next_link = next_link
5241
5242
5243class RouteListResult(msrest.serialization.Model):
5244    """Response for the ListRoute API service call.
5245
5246    :param value: Gets a list of routes in a resource group.
5247    :type value: list[~azure.mgmt.network.v2016_12_01.models.Route]
5248    :param next_link: The URL to get the next set of results.
5249    :type next_link: str
5250    """
5251
5252    _attribute_map = {
5253        'value': {'key': 'value', 'type': '[Route]'},
5254        'next_link': {'key': 'nextLink', 'type': 'str'},
5255    }
5256
5257    def __init__(
5258        self,
5259        *,
5260        value: Optional[List["Route"]] = None,
5261        next_link: Optional[str] = None,
5262        **kwargs
5263    ):
5264        super(RouteListResult, self).__init__(**kwargs)
5265        self.value = value
5266        self.next_link = next_link
5267
5268
5269class RouteTable(Resource):
5270    """Route table resource.
5271
5272    Variables are only populated by the server, and will be ignored when sending a request.
5273
5274    :param id: Resource ID.
5275    :type id: str
5276    :ivar name: Resource name.
5277    :vartype name: str
5278    :ivar type: Resource type.
5279    :vartype type: str
5280    :param location: Resource location.
5281    :type location: str
5282    :param tags: A set of tags. Resource tags.
5283    :type tags: dict[str, str]
5284    :param etag: Gets a unique read-only string that changes whenever the resource is updated.
5285    :type etag: str
5286    :param routes: Collection of routes contained within a route table.
5287    :type routes: list[~azure.mgmt.network.v2016_12_01.models.Route]
5288    :ivar subnets: A collection of references to subnets.
5289    :vartype subnets: list[~azure.mgmt.network.v2016_12_01.models.Subnet]
5290    :param provisioning_state: The provisioning state of the resource. Possible values are:
5291     'Updating', 'Deleting', and 'Failed'.
5292    :type provisioning_state: str
5293    """
5294
5295    _validation = {
5296        'name': {'readonly': True},
5297        'type': {'readonly': True},
5298        'subnets': {'readonly': True},
5299    }
5300
5301    _attribute_map = {
5302        'id': {'key': 'id', 'type': 'str'},
5303        'name': {'key': 'name', 'type': 'str'},
5304        'type': {'key': 'type', 'type': 'str'},
5305        'location': {'key': 'location', 'type': 'str'},
5306        'tags': {'key': 'tags', 'type': '{str}'},
5307        'etag': {'key': 'etag', 'type': 'str'},
5308        'routes': {'key': 'properties.routes', 'type': '[Route]'},
5309        'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
5310        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5311    }
5312
5313    def __init__(
5314        self,
5315        *,
5316        id: Optional[str] = None,
5317        location: Optional[str] = None,
5318        tags: Optional[Dict[str, str]] = None,
5319        etag: Optional[str] = None,
5320        routes: Optional[List["Route"]] = None,
5321        provisioning_state: Optional[str] = None,
5322        **kwargs
5323    ):
5324        super(RouteTable, self).__init__(id=id, location=location, tags=tags, **kwargs)
5325        self.etag = etag
5326        self.routes = routes
5327        self.subnets = None
5328        self.provisioning_state = provisioning_state
5329
5330
5331class RouteTableListResult(msrest.serialization.Model):
5332    """Response for the ListRouteTable API service call.
5333
5334    :param value: Gets a list of route tables in a resource group.
5335    :type value: list[~azure.mgmt.network.v2016_12_01.models.RouteTable]
5336    :param next_link: The URL to get the next set of results.
5337    :type next_link: str
5338    """
5339
5340    _attribute_map = {
5341        'value': {'key': 'value', 'type': '[RouteTable]'},
5342        'next_link': {'key': 'nextLink', 'type': 'str'},
5343    }
5344
5345    def __init__(
5346        self,
5347        *,
5348        value: Optional[List["RouteTable"]] = None,
5349        next_link: Optional[str] = None,
5350        **kwargs
5351    ):
5352        super(RouteTableListResult, self).__init__(**kwargs)
5353        self.value = value
5354        self.next_link = next_link
5355
5356
5357class SecurityGroupNetworkInterface(msrest.serialization.Model):
5358    """Network interface and all its associated security rules.
5359
5360    :param id: ID of the network interface.
5361    :type id: str
5362    :param security_rule_associations: All security rules associated with the network interface.
5363    :type security_rule_associations:
5364     ~azure.mgmt.network.v2016_12_01.models.SecurityRuleAssociations
5365    """
5366
5367    _attribute_map = {
5368        'id': {'key': 'id', 'type': 'str'},
5369        'security_rule_associations': {'key': 'securityRuleAssociations', 'type': 'SecurityRuleAssociations'},
5370    }
5371
5372    def __init__(
5373        self,
5374        *,
5375        id: Optional[str] = None,
5376        security_rule_associations: Optional["SecurityRuleAssociations"] = None,
5377        **kwargs
5378    ):
5379        super(SecurityGroupNetworkInterface, self).__init__(**kwargs)
5380        self.id = id
5381        self.security_rule_associations = security_rule_associations
5382
5383
5384class SecurityGroupViewParameters(msrest.serialization.Model):
5385    """Parameters that define the VM to check security groups for.
5386
5387    All required parameters must be populated in order to send to Azure.
5388
5389    :param target_resource_id: Required. ID of the target VM.
5390    :type target_resource_id: str
5391    """
5392
5393    _validation = {
5394        'target_resource_id': {'required': True},
5395    }
5396
5397    _attribute_map = {
5398        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
5399    }
5400
5401    def __init__(
5402        self,
5403        *,
5404        target_resource_id: str,
5405        **kwargs
5406    ):
5407        super(SecurityGroupViewParameters, self).__init__(**kwargs)
5408        self.target_resource_id = target_resource_id
5409
5410
5411class SecurityGroupViewResult(msrest.serialization.Model):
5412    """The information about security rules applied to the specified VM.
5413
5414    :param network_interfaces: List of network interfaces on the specified VM.
5415    :type network_interfaces:
5416     list[~azure.mgmt.network.v2016_12_01.models.SecurityGroupNetworkInterface]
5417    """
5418
5419    _attribute_map = {
5420        'network_interfaces': {'key': 'networkInterfaces', 'type': '[SecurityGroupNetworkInterface]'},
5421    }
5422
5423    def __init__(
5424        self,
5425        *,
5426        network_interfaces: Optional[List["SecurityGroupNetworkInterface"]] = None,
5427        **kwargs
5428    ):
5429        super(SecurityGroupViewResult, self).__init__(**kwargs)
5430        self.network_interfaces = network_interfaces
5431
5432
5433class SecurityRule(SubResource):
5434    """Network security rule.
5435
5436    :param id: Resource ID.
5437    :type id: str
5438    :param name: The name of the resource that is unique within a resource group. This name can be
5439     used to access the resource.
5440    :type name: str
5441    :param etag: A unique read-only string that changes whenever the resource is updated.
5442    :type etag: str
5443    :param description: A description for this rule. Restricted to 140 chars.
5444    :type description: str
5445    :param protocol: Network protocol this rule applies to. Possible values are 'Tcp', 'Udp', and
5446     '*'. Possible values include: "Tcp", "Udp", "*".
5447    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.SecurityRuleProtocol
5448    :param source_port_range: The source port or range. Integer or range between 0 and 65535.
5449     Asterisk '*' can also be used to match all ports.
5450    :type source_port_range: str
5451    :param destination_port_range: The destination port or range. Integer or range between 0 and
5452     65535. Asterisk '*' can also be used to match all ports.
5453    :type destination_port_range: str
5454    :param source_address_prefix: The CIDR or source IP range. Asterisk '*' can also be used to
5455     match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet'
5456     can also be used. If this is an ingress rule, specifies where network traffic originates from.
5457    :type source_address_prefix: str
5458    :param destination_address_prefix: The destination address prefix. CIDR or source IP range.
5459     Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork',
5460     'AzureLoadBalancer' and 'Internet' can also be used.
5461    :type destination_address_prefix: str
5462    :param access: The network traffic is allowed or denied. Possible values are: 'Allow' and
5463     'Deny'. Possible values include: "Allow", "Deny".
5464    :type access: str or ~azure.mgmt.network.v2016_12_01.models.SecurityRuleAccess
5465    :param priority: The priority of the rule. The value can be between 100 and 4096. The priority
5466     number must be unique for each rule in the collection. The lower the priority number, the
5467     higher the priority of the rule.
5468    :type priority: int
5469    :param direction: The direction of the rule. The direction specifies if rule will be evaluated
5470     on incoming or outgoing traffic. Possible values are: 'Inbound' and 'Outbound'. Possible values
5471     include: "Inbound", "Outbound".
5472    :type direction: str or ~azure.mgmt.network.v2016_12_01.models.SecurityRuleDirection
5473    :param provisioning_state: The provisioning state of the public IP resource. Possible values
5474     are: 'Updating', 'Deleting', and 'Failed'.
5475    :type provisioning_state: str
5476    """
5477
5478    _attribute_map = {
5479        'id': {'key': 'id', 'type': 'str'},
5480        'name': {'key': 'name', 'type': 'str'},
5481        'etag': {'key': 'etag', 'type': 'str'},
5482        'description': {'key': 'properties.description', 'type': 'str'},
5483        'protocol': {'key': 'properties.protocol', 'type': 'str'},
5484        'source_port_range': {'key': 'properties.sourcePortRange', 'type': 'str'},
5485        'destination_port_range': {'key': 'properties.destinationPortRange', 'type': 'str'},
5486        'source_address_prefix': {'key': 'properties.sourceAddressPrefix', 'type': 'str'},
5487        'destination_address_prefix': {'key': 'properties.destinationAddressPrefix', 'type': 'str'},
5488        'access': {'key': 'properties.access', 'type': 'str'},
5489        'priority': {'key': 'properties.priority', 'type': 'int'},
5490        'direction': {'key': 'properties.direction', 'type': 'str'},
5491        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5492    }
5493
5494    def __init__(
5495        self,
5496        *,
5497        id: Optional[str] = None,
5498        name: Optional[str] = None,
5499        etag: Optional[str] = None,
5500        description: Optional[str] = None,
5501        protocol: Optional[Union[str, "SecurityRuleProtocol"]] = None,
5502        source_port_range: Optional[str] = None,
5503        destination_port_range: Optional[str] = None,
5504        source_address_prefix: Optional[str] = None,
5505        destination_address_prefix: Optional[str] = None,
5506        access: Optional[Union[str, "SecurityRuleAccess"]] = None,
5507        priority: Optional[int] = None,
5508        direction: Optional[Union[str, "SecurityRuleDirection"]] = None,
5509        provisioning_state: Optional[str] = None,
5510        **kwargs
5511    ):
5512        super(SecurityRule, self).__init__(id=id, **kwargs)
5513        self.name = name
5514        self.etag = etag
5515        self.description = description
5516        self.protocol = protocol
5517        self.source_port_range = source_port_range
5518        self.destination_port_range = destination_port_range
5519        self.source_address_prefix = source_address_prefix
5520        self.destination_address_prefix = destination_address_prefix
5521        self.access = access
5522        self.priority = priority
5523        self.direction = direction
5524        self.provisioning_state = provisioning_state
5525
5526
5527class SecurityRuleAssociations(msrest.serialization.Model):
5528    """All security rules associated with the network interface.
5529
5530    :param network_interface_association: Network interface and its custom security rules.
5531    :type network_interface_association:
5532     ~azure.mgmt.network.v2016_12_01.models.NetworkInterfaceAssociation
5533    :param subnet_association: Network interface and its custom security rules.
5534    :type subnet_association: ~azure.mgmt.network.v2016_12_01.models.SubnetAssociation
5535    :param default_security_rules: Collection of default security rules of the network security
5536     group.
5537    :type default_security_rules: list[~azure.mgmt.network.v2016_12_01.models.SecurityRule]
5538    :param effective_security_rules: Collection of effective security rules.
5539    :type effective_security_rules:
5540     list[~azure.mgmt.network.v2016_12_01.models.EffectiveNetworkSecurityRule]
5541    """
5542
5543    _attribute_map = {
5544        'network_interface_association': {'key': 'networkInterfaceAssociation', 'type': 'NetworkInterfaceAssociation'},
5545        'subnet_association': {'key': 'subnetAssociation', 'type': 'SubnetAssociation'},
5546        'default_security_rules': {'key': 'defaultSecurityRules', 'type': '[SecurityRule]'},
5547        'effective_security_rules': {'key': 'effectiveSecurityRules', 'type': '[EffectiveNetworkSecurityRule]'},
5548    }
5549
5550    def __init__(
5551        self,
5552        *,
5553        network_interface_association: Optional["NetworkInterfaceAssociation"] = None,
5554        subnet_association: Optional["SubnetAssociation"] = None,
5555        default_security_rules: Optional[List["SecurityRule"]] = None,
5556        effective_security_rules: Optional[List["EffectiveNetworkSecurityRule"]] = None,
5557        **kwargs
5558    ):
5559        super(SecurityRuleAssociations, self).__init__(**kwargs)
5560        self.network_interface_association = network_interface_association
5561        self.subnet_association = subnet_association
5562        self.default_security_rules = default_security_rules
5563        self.effective_security_rules = effective_security_rules
5564
5565
5566class SecurityRuleListResult(msrest.serialization.Model):
5567    """Response for ListSecurityRule API service call. Retrieves all security rules that belongs to a network security group.
5568
5569    :param value: The security rules in a network security group.
5570    :type value: list[~azure.mgmt.network.v2016_12_01.models.SecurityRule]
5571    :param next_link: The URL to get the next set of results.
5572    :type next_link: str
5573    """
5574
5575    _attribute_map = {
5576        'value': {'key': 'value', 'type': '[SecurityRule]'},
5577        'next_link': {'key': 'nextLink', 'type': 'str'},
5578    }
5579
5580    def __init__(
5581        self,
5582        *,
5583        value: Optional[List["SecurityRule"]] = None,
5584        next_link: Optional[str] = None,
5585        **kwargs
5586    ):
5587        super(SecurityRuleListResult, self).__init__(**kwargs)
5588        self.value = value
5589        self.next_link = next_link
5590
5591
5592class Subnet(SubResource):
5593    """Subnet in a virtual network resource.
5594
5595    Variables are only populated by the server, and will be ignored when sending a request.
5596
5597    :param id: Resource ID.
5598    :type id: str
5599    :param name: The name of the resource that is unique within a resource group. This name can be
5600     used to access the resource.
5601    :type name: str
5602    :param etag: A unique read-only string that changes whenever the resource is updated.
5603    :type etag: str
5604    :param address_prefix: The address prefix for the subnet.
5605    :type address_prefix: str
5606    :param network_security_group: The reference of the NetworkSecurityGroup resource.
5607    :type network_security_group: ~azure.mgmt.network.v2016_12_01.models.NetworkSecurityGroup
5608    :param route_table: The reference of the RouteTable resource.
5609    :type route_table: ~azure.mgmt.network.v2016_12_01.models.RouteTable
5610    :ivar ip_configurations: Gets an array of references to the network interface IP configurations
5611     using subnet.
5612    :vartype ip_configurations: list[~azure.mgmt.network.v2016_12_01.models.IPConfiguration]
5613    :param resource_navigation_links: Gets an array of references to the external resources using
5614     subnet.
5615    :type resource_navigation_links:
5616     list[~azure.mgmt.network.v2016_12_01.models.ResourceNavigationLink]
5617    :param provisioning_state: The provisioning state of the resource.
5618    :type provisioning_state: str
5619    """
5620
5621    _validation = {
5622        'ip_configurations': {'readonly': True},
5623    }
5624
5625    _attribute_map = {
5626        'id': {'key': 'id', 'type': 'str'},
5627        'name': {'key': 'name', 'type': 'str'},
5628        'etag': {'key': 'etag', 'type': 'str'},
5629        'address_prefix': {'key': 'properties.addressPrefix', 'type': 'str'},
5630        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'NetworkSecurityGroup'},
5631        'route_table': {'key': 'properties.routeTable', 'type': 'RouteTable'},
5632        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[IPConfiguration]'},
5633        'resource_navigation_links': {'key': 'properties.resourceNavigationLinks', 'type': '[ResourceNavigationLink]'},
5634        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5635    }
5636
5637    def __init__(
5638        self,
5639        *,
5640        id: Optional[str] = None,
5641        name: Optional[str] = None,
5642        etag: Optional[str] = None,
5643        address_prefix: Optional[str] = None,
5644        network_security_group: Optional["NetworkSecurityGroup"] = None,
5645        route_table: Optional["RouteTable"] = None,
5646        resource_navigation_links: Optional[List["ResourceNavigationLink"]] = None,
5647        provisioning_state: Optional[str] = None,
5648        **kwargs
5649    ):
5650        super(Subnet, self).__init__(id=id, **kwargs)
5651        self.name = name
5652        self.etag = etag
5653        self.address_prefix = address_prefix
5654        self.network_security_group = network_security_group
5655        self.route_table = route_table
5656        self.ip_configurations = None
5657        self.resource_navigation_links = resource_navigation_links
5658        self.provisioning_state = provisioning_state
5659
5660
5661class SubnetAssociation(msrest.serialization.Model):
5662    """Network interface and its custom security rules.
5663
5664    Variables are only populated by the server, and will be ignored when sending a request.
5665
5666    :ivar id: Subnet ID.
5667    :vartype id: str
5668    :param security_rules: Collection of custom security rules.
5669    :type security_rules: list[~azure.mgmt.network.v2016_12_01.models.SecurityRule]
5670    """
5671
5672    _validation = {
5673        'id': {'readonly': True},
5674    }
5675
5676    _attribute_map = {
5677        'id': {'key': 'id', 'type': 'str'},
5678        'security_rules': {'key': 'securityRules', 'type': '[SecurityRule]'},
5679    }
5680
5681    def __init__(
5682        self,
5683        *,
5684        security_rules: Optional[List["SecurityRule"]] = None,
5685        **kwargs
5686    ):
5687        super(SubnetAssociation, self).__init__(**kwargs)
5688        self.id = None
5689        self.security_rules = security_rules
5690
5691
5692class SubnetListResult(msrest.serialization.Model):
5693    """Response for ListSubnets API service callRetrieves all subnet that belongs to a virtual network.
5694
5695    :param value: The subnets in a virtual network.
5696    :type value: list[~azure.mgmt.network.v2016_12_01.models.Subnet]
5697    :param next_link: The URL to get the next set of results.
5698    :type next_link: str
5699    """
5700
5701    _attribute_map = {
5702        'value': {'key': 'value', 'type': '[Subnet]'},
5703        'next_link': {'key': 'nextLink', 'type': 'str'},
5704    }
5705
5706    def __init__(
5707        self,
5708        *,
5709        value: Optional[List["Subnet"]] = None,
5710        next_link: Optional[str] = None,
5711        **kwargs
5712    ):
5713        super(SubnetListResult, self).__init__(**kwargs)
5714        self.value = value
5715        self.next_link = next_link
5716
5717
5718class Topology(msrest.serialization.Model):
5719    """Topology of the specified resource group.
5720
5721    Variables are only populated by the server, and will be ignored when sending a request.
5722
5723    :ivar id: GUID representing the operation id.
5724    :vartype id: str
5725    :ivar created_date_time: The datetime when the topology was initially created for the resource
5726     group.
5727    :vartype created_date_time: ~datetime.datetime
5728    :ivar last_modified: The datetime when the topology was last modified.
5729    :vartype last_modified: ~datetime.datetime
5730    :param resources:
5731    :type resources: list[~azure.mgmt.network.v2016_12_01.models.TopologyResource]
5732    """
5733
5734    _validation = {
5735        'id': {'readonly': True},
5736        'created_date_time': {'readonly': True},
5737        'last_modified': {'readonly': True},
5738    }
5739
5740    _attribute_map = {
5741        'id': {'key': 'id', 'type': 'str'},
5742        'created_date_time': {'key': 'createdDateTime', 'type': 'iso-8601'},
5743        'last_modified': {'key': 'lastModified', 'type': 'iso-8601'},
5744        'resources': {'key': 'resources', 'type': '[TopologyResource]'},
5745    }
5746
5747    def __init__(
5748        self,
5749        *,
5750        resources: Optional[List["TopologyResource"]] = None,
5751        **kwargs
5752    ):
5753        super(Topology, self).__init__(**kwargs)
5754        self.id = None
5755        self.created_date_time = None
5756        self.last_modified = None
5757        self.resources = resources
5758
5759
5760class TopologyAssociation(msrest.serialization.Model):
5761    """Resources that have an association with the parent resource.
5762
5763    :param name: The name of the resource that is associated with the parent resource.
5764    :type name: str
5765    :param resource_id: The ID of the resource that is associated with the parent resource.
5766    :type resource_id: str
5767    :param association_type: The association type of the child resource to the parent resource.
5768     Possible values include: "Associated", "Contains".
5769    :type association_type: str or ~azure.mgmt.network.v2016_12_01.models.AssociationType
5770    """
5771
5772    _attribute_map = {
5773        'name': {'key': 'name', 'type': 'str'},
5774        'resource_id': {'key': 'resourceId', 'type': 'str'},
5775        'association_type': {'key': 'associationType', 'type': 'str'},
5776    }
5777
5778    def __init__(
5779        self,
5780        *,
5781        name: Optional[str] = None,
5782        resource_id: Optional[str] = None,
5783        association_type: Optional[Union[str, "AssociationType"]] = None,
5784        **kwargs
5785    ):
5786        super(TopologyAssociation, self).__init__(**kwargs)
5787        self.name = name
5788        self.resource_id = resource_id
5789        self.association_type = association_type
5790
5791
5792class TopologyParameters(msrest.serialization.Model):
5793    """Parameters that define the representation of topology.
5794
5795    All required parameters must be populated in order to send to Azure.
5796
5797    :param target_resource_group_name: Required. The name of the target resource group to perform
5798     topology on.
5799    :type target_resource_group_name: str
5800    """
5801
5802    _validation = {
5803        'target_resource_group_name': {'required': True},
5804    }
5805
5806    _attribute_map = {
5807        'target_resource_group_name': {'key': 'targetResourceGroupName', 'type': 'str'},
5808    }
5809
5810    def __init__(
5811        self,
5812        *,
5813        target_resource_group_name: str,
5814        **kwargs
5815    ):
5816        super(TopologyParameters, self).__init__(**kwargs)
5817        self.target_resource_group_name = target_resource_group_name
5818
5819
5820class TopologyResource(msrest.serialization.Model):
5821    """The network resource topology information for the given resource group.
5822
5823    :param name: Name of the resource.
5824    :type name: str
5825    :param id: ID of the resource.
5826    :type id: str
5827    :param location: Resource location.
5828    :type location: str
5829    :param associations: Holds the associations the resource has with other resources in the
5830     resource group.
5831    :type associations: list[~azure.mgmt.network.v2016_12_01.models.TopologyAssociation]
5832    """
5833
5834    _attribute_map = {
5835        'name': {'key': 'name', 'type': 'str'},
5836        'id': {'key': 'id', 'type': 'str'},
5837        'location': {'key': 'location', 'type': 'str'},
5838        'associations': {'key': 'associations', 'type': '[TopologyAssociation]'},
5839    }
5840
5841    def __init__(
5842        self,
5843        *,
5844        name: Optional[str] = None,
5845        id: Optional[str] = None,
5846        location: Optional[str] = None,
5847        associations: Optional[List["TopologyAssociation"]] = None,
5848        **kwargs
5849    ):
5850        super(TopologyResource, self).__init__(**kwargs)
5851        self.name = name
5852        self.id = id
5853        self.location = location
5854        self.associations = associations
5855
5856
5857class TroubleshootingDetails(msrest.serialization.Model):
5858    """Information gained from troubleshooting of specified resource.
5859
5860    :param id: The id of the get troubleshoot operation.
5861    :type id: str
5862    :param reason_type: Reason type of failure.
5863    :type reason_type: str
5864    :param summary: A summary of troubleshooting.
5865    :type summary: str
5866    :param detail: Details on troubleshooting results.
5867    :type detail: str
5868    :param recommended_actions: List of recommended actions.
5869    :type recommended_actions:
5870     list[~azure.mgmt.network.v2016_12_01.models.TroubleshootingRecommendedActions]
5871    """
5872
5873    _attribute_map = {
5874        'id': {'key': 'id', 'type': 'str'},
5875        'reason_type': {'key': 'reasonType', 'type': 'str'},
5876        'summary': {'key': 'summary', 'type': 'str'},
5877        'detail': {'key': 'detail', 'type': 'str'},
5878        'recommended_actions': {'key': 'recommendedActions', 'type': '[TroubleshootingRecommendedActions]'},
5879    }
5880
5881    def __init__(
5882        self,
5883        *,
5884        id: Optional[str] = None,
5885        reason_type: Optional[str] = None,
5886        summary: Optional[str] = None,
5887        detail: Optional[str] = None,
5888        recommended_actions: Optional[List["TroubleshootingRecommendedActions"]] = None,
5889        **kwargs
5890    ):
5891        super(TroubleshootingDetails, self).__init__(**kwargs)
5892        self.id = id
5893        self.reason_type = reason_type
5894        self.summary = summary
5895        self.detail = detail
5896        self.recommended_actions = recommended_actions
5897
5898
5899class TroubleshootingParameters(msrest.serialization.Model):
5900    """Parameters that define the resource to troubleshoot.
5901
5902    All required parameters must be populated in order to send to Azure.
5903
5904    :param target_resource_id: Required. The target resource to troubleshoot.
5905    :type target_resource_id: str
5906    :param storage_id: Required. The ID for the storage account to save the troubleshoot result.
5907    :type storage_id: str
5908    :param storage_path: Required. The path to the blob to save the troubleshoot result in.
5909    :type storage_path: str
5910    """
5911
5912    _validation = {
5913        'target_resource_id': {'required': True},
5914        'storage_id': {'required': True},
5915        'storage_path': {'required': True},
5916    }
5917
5918    _attribute_map = {
5919        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
5920        'storage_id': {'key': 'properties.storageId', 'type': 'str'},
5921        'storage_path': {'key': 'properties.storagePath', 'type': 'str'},
5922    }
5923
5924    def __init__(
5925        self,
5926        *,
5927        target_resource_id: str,
5928        storage_id: str,
5929        storage_path: str,
5930        **kwargs
5931    ):
5932        super(TroubleshootingParameters, self).__init__(**kwargs)
5933        self.target_resource_id = target_resource_id
5934        self.storage_id = storage_id
5935        self.storage_path = storage_path
5936
5937
5938class TroubleshootingRecommendedActions(msrest.serialization.Model):
5939    """Recommended actions based on discovered issues.
5940
5941    :param action_id: ID of the recommended action.
5942    :type action_id: str
5943    :param action_text: Description of recommended actions.
5944    :type action_text: str
5945    :param action_uri: The uri linking to a documentation for the recommended troubleshooting
5946     actions.
5947    :type action_uri: str
5948    :param action_uri_text: The information from the URI for the recommended troubleshooting
5949     actions.
5950    :type action_uri_text: str
5951    """
5952
5953    _attribute_map = {
5954        'action_id': {'key': 'actionId', 'type': 'str'},
5955        'action_text': {'key': 'actionText', 'type': 'str'},
5956        'action_uri': {'key': 'actionUri', 'type': 'str'},
5957        'action_uri_text': {'key': 'actionUriText', 'type': 'str'},
5958    }
5959
5960    def __init__(
5961        self,
5962        *,
5963        action_id: Optional[str] = None,
5964        action_text: Optional[str] = None,
5965        action_uri: Optional[str] = None,
5966        action_uri_text: Optional[str] = None,
5967        **kwargs
5968    ):
5969        super(TroubleshootingRecommendedActions, self).__init__(**kwargs)
5970        self.action_id = action_id
5971        self.action_text = action_text
5972        self.action_uri = action_uri
5973        self.action_uri_text = action_uri_text
5974
5975
5976class TroubleshootingResult(msrest.serialization.Model):
5977    """Troubleshooting information gained from specified resource.
5978
5979    :param start_time: The start time of the troubleshooting.
5980    :type start_time: ~datetime.datetime
5981    :param end_time: The end time of the troubleshooting.
5982    :type end_time: ~datetime.datetime
5983    :param code: The result code of the troubleshooting.
5984    :type code: str
5985    :param results: Information from troubleshooting.
5986    :type results: list[~azure.mgmt.network.v2016_12_01.models.TroubleshootingDetails]
5987    """
5988
5989    _attribute_map = {
5990        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
5991        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
5992        'code': {'key': 'code', 'type': 'str'},
5993        'results': {'key': 'results', 'type': '[TroubleshootingDetails]'},
5994    }
5995
5996    def __init__(
5997        self,
5998        *,
5999        start_time: Optional[datetime.datetime] = None,
6000        end_time: Optional[datetime.datetime] = None,
6001        code: Optional[str] = None,
6002        results: Optional[List["TroubleshootingDetails"]] = None,
6003        **kwargs
6004    ):
6005        super(TroubleshootingResult, self).__init__(**kwargs)
6006        self.start_time = start_time
6007        self.end_time = end_time
6008        self.code = code
6009        self.results = results
6010
6011
6012class TunnelConnectionHealth(msrest.serialization.Model):
6013    """VirtualNetworkGatewayConnection properties.
6014
6015    Variables are only populated by the server, and will be ignored when sending a request.
6016
6017    :ivar tunnel: Tunnel name.
6018    :vartype tunnel: str
6019    :ivar connection_status: Virtual network Gateway connection status. Possible values include:
6020     "Unknown", "Connecting", "Connected", "NotConnected".
6021    :vartype connection_status: str or
6022     ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewayConnectionStatus
6023    :ivar ingress_bytes_transferred: The Ingress Bytes Transferred in this connection.
6024    :vartype ingress_bytes_transferred: long
6025    :ivar egress_bytes_transferred: The Egress Bytes Transferred in this connection.
6026    :vartype egress_bytes_transferred: long
6027    :ivar last_connection_established_utc_time: The time at which connection was established in Utc
6028     format.
6029    :vartype last_connection_established_utc_time: str
6030    """
6031
6032    _validation = {
6033        'tunnel': {'readonly': True},
6034        'connection_status': {'readonly': True},
6035        'ingress_bytes_transferred': {'readonly': True},
6036        'egress_bytes_transferred': {'readonly': True},
6037        'last_connection_established_utc_time': {'readonly': True},
6038    }
6039
6040    _attribute_map = {
6041        'tunnel': {'key': 'tunnel', 'type': 'str'},
6042        'connection_status': {'key': 'connectionStatus', 'type': 'str'},
6043        'ingress_bytes_transferred': {'key': 'ingressBytesTransferred', 'type': 'long'},
6044        'egress_bytes_transferred': {'key': 'egressBytesTransferred', 'type': 'long'},
6045        'last_connection_established_utc_time': {'key': 'lastConnectionEstablishedUtcTime', 'type': 'str'},
6046    }
6047
6048    def __init__(
6049        self,
6050        **kwargs
6051    ):
6052        super(TunnelConnectionHealth, self).__init__(**kwargs)
6053        self.tunnel = None
6054        self.connection_status = None
6055        self.ingress_bytes_transferred = None
6056        self.egress_bytes_transferred = None
6057        self.last_connection_established_utc_time = None
6058
6059
6060class Usage(msrest.serialization.Model):
6061    """Describes network resource usage.
6062
6063    All required parameters must be populated in order to send to Azure.
6064
6065    :param unit: Required. An enum describing the unit of measurement. Possible values include:
6066     "Count".
6067    :type unit: str or ~azure.mgmt.network.v2016_12_01.models.UsageUnit
6068    :param current_value: Required. The current value of the usage.
6069    :type current_value: long
6070    :param limit: Required. The limit of usage.
6071    :type limit: long
6072    :param name: Required. The name of the type of usage.
6073    :type name: ~azure.mgmt.network.v2016_12_01.models.UsageName
6074    """
6075
6076    _validation = {
6077        'unit': {'required': True},
6078        'current_value': {'required': True},
6079        'limit': {'required': True},
6080        'name': {'required': True},
6081    }
6082
6083    _attribute_map = {
6084        'unit': {'key': 'unit', 'type': 'str'},
6085        'current_value': {'key': 'currentValue', 'type': 'long'},
6086        'limit': {'key': 'limit', 'type': 'long'},
6087        'name': {'key': 'name', 'type': 'UsageName'},
6088    }
6089
6090    def __init__(
6091        self,
6092        *,
6093        unit: Union[str, "UsageUnit"],
6094        current_value: int,
6095        limit: int,
6096        name: "UsageName",
6097        **kwargs
6098    ):
6099        super(Usage, self).__init__(**kwargs)
6100        self.unit = unit
6101        self.current_value = current_value
6102        self.limit = limit
6103        self.name = name
6104
6105
6106class UsageName(msrest.serialization.Model):
6107    """The usage names.
6108
6109    :param value: A string describing the resource name.
6110    :type value: str
6111    :param localized_value: A localized string describing the resource name.
6112    :type localized_value: str
6113    """
6114
6115    _attribute_map = {
6116        'value': {'key': 'value', 'type': 'str'},
6117        'localized_value': {'key': 'localizedValue', 'type': 'str'},
6118    }
6119
6120    def __init__(
6121        self,
6122        *,
6123        value: Optional[str] = None,
6124        localized_value: Optional[str] = None,
6125        **kwargs
6126    ):
6127        super(UsageName, self).__init__(**kwargs)
6128        self.value = value
6129        self.localized_value = localized_value
6130
6131
6132class UsagesListResult(msrest.serialization.Model):
6133    """The list usages operation response.
6134
6135    :param value: The list network resource usages.
6136    :type value: list[~azure.mgmt.network.v2016_12_01.models.Usage]
6137    :param next_link: URL to get the next set of results.
6138    :type next_link: str
6139    """
6140
6141    _attribute_map = {
6142        'value': {'key': 'value', 'type': '[Usage]'},
6143        'next_link': {'key': 'nextLink', 'type': 'str'},
6144    }
6145
6146    def __init__(
6147        self,
6148        *,
6149        value: Optional[List["Usage"]] = None,
6150        next_link: Optional[str] = None,
6151        **kwargs
6152    ):
6153        super(UsagesListResult, self).__init__(**kwargs)
6154        self.value = value
6155        self.next_link = next_link
6156
6157
6158class VerificationIPFlowParameters(msrest.serialization.Model):
6159    """Parameters that define the IP flow to be verified.
6160
6161    All required parameters must be populated in order to send to Azure.
6162
6163    :param target_resource_id: Required. The ID of the target resource to perform next-hop on.
6164    :type target_resource_id: str
6165    :param direction: Required. The direction of the packet represented as a 5-tuple. Possible
6166     values include: "Inbound", "Outbound".
6167    :type direction: str or ~azure.mgmt.network.v2016_12_01.models.Direction
6168    :param protocol: Required. Protocol to be verified on. Possible values include: "TCP", "UDP".
6169    :type protocol: str or ~azure.mgmt.network.v2016_12_01.models.Protocol
6170    :param local_port: Required. The local port. Acceptable values are a single integer in the
6171     range (0-65535). Support for * for the source port, which depends on the direction.
6172    :type local_port: str
6173    :param remote_port: Required. The remote port. Acceptable values are a single integer in the
6174     range (0-65535). Support for * for the source port, which depends on the direction.
6175    :type remote_port: str
6176    :param local_ip_address: Required. The local IP address. Acceptable values are valid IPv4
6177     addresses.
6178    :type local_ip_address: str
6179    :param remote_ip_address: Required. The remote IP address. Acceptable values are valid IPv4
6180     addresses.
6181    :type remote_ip_address: str
6182    :param target_nic_resource_id: The NIC ID. (If VM has multiple NICs and IP forwarding is
6183     enabled on any of them, then this parameter must be specified. Otherwise optional).
6184    :type target_nic_resource_id: str
6185    """
6186
6187    _validation = {
6188        'target_resource_id': {'required': True},
6189        'direction': {'required': True},
6190        'protocol': {'required': True},
6191        'local_port': {'required': True},
6192        'remote_port': {'required': True},
6193        'local_ip_address': {'required': True},
6194        'remote_ip_address': {'required': True},
6195    }
6196
6197    _attribute_map = {
6198        'target_resource_id': {'key': 'targetResourceId', 'type': 'str'},
6199        'direction': {'key': 'direction', 'type': 'str'},
6200        'protocol': {'key': 'protocol', 'type': 'str'},
6201        'local_port': {'key': 'localPort', 'type': 'str'},
6202        'remote_port': {'key': 'remotePort', 'type': 'str'},
6203        'local_ip_address': {'key': 'localIPAddress', 'type': 'str'},
6204        'remote_ip_address': {'key': 'remoteIPAddress', 'type': 'str'},
6205        'target_nic_resource_id': {'key': 'targetNicResourceId', 'type': 'str'},
6206    }
6207
6208    def __init__(
6209        self,
6210        *,
6211        target_resource_id: str,
6212        direction: Union[str, "Direction"],
6213        protocol: Union[str, "Protocol"],
6214        local_port: str,
6215        remote_port: str,
6216        local_ip_address: str,
6217        remote_ip_address: str,
6218        target_nic_resource_id: Optional[str] = None,
6219        **kwargs
6220    ):
6221        super(VerificationIPFlowParameters, self).__init__(**kwargs)
6222        self.target_resource_id = target_resource_id
6223        self.direction = direction
6224        self.protocol = protocol
6225        self.local_port = local_port
6226        self.remote_port = remote_port
6227        self.local_ip_address = local_ip_address
6228        self.remote_ip_address = remote_ip_address
6229        self.target_nic_resource_id = target_nic_resource_id
6230
6231
6232class VerificationIPFlowResult(msrest.serialization.Model):
6233    """Results of IP flow verification on the target resource.
6234
6235    :param access: Indicates whether the traffic is allowed or denied. Possible values include:
6236     "Allow", "Deny".
6237    :type access: str or ~azure.mgmt.network.v2016_12_01.models.Access
6238    :param rule_name: Name of the rule. If input is not matched against any security rule, it is
6239     not displayed.
6240    :type rule_name: str
6241    """
6242
6243    _attribute_map = {
6244        'access': {'key': 'access', 'type': 'str'},
6245        'rule_name': {'key': 'ruleName', 'type': 'str'},
6246    }
6247
6248    def __init__(
6249        self,
6250        *,
6251        access: Optional[Union[str, "Access"]] = None,
6252        rule_name: Optional[str] = None,
6253        **kwargs
6254    ):
6255        super(VerificationIPFlowResult, self).__init__(**kwargs)
6256        self.access = access
6257        self.rule_name = rule_name
6258
6259
6260class VirtualNetwork(Resource):
6261    """Virtual Network resource.
6262
6263    Variables are only populated by the server, and will be ignored when sending a request.
6264
6265    :param id: Resource ID.
6266    :type id: str
6267    :ivar name: Resource name.
6268    :vartype name: str
6269    :ivar type: Resource type.
6270    :vartype type: str
6271    :param location: Resource location.
6272    :type location: str
6273    :param tags: A set of tags. Resource tags.
6274    :type tags: dict[str, str]
6275    :param etag: Gets a unique read-only string that changes whenever the resource is updated.
6276    :type etag: str
6277    :param address_space: The AddressSpace that contains an array of IP address ranges that can be
6278     used by subnets.
6279    :type address_space: ~azure.mgmt.network.v2016_12_01.models.AddressSpace
6280    :param dhcp_options: The dhcpOptions that contains an array of DNS servers available to VMs
6281     deployed in the virtual network.
6282    :type dhcp_options: ~azure.mgmt.network.v2016_12_01.models.DhcpOptions
6283    :param subnets: A list of subnets in a Virtual Network.
6284    :type subnets: list[~azure.mgmt.network.v2016_12_01.models.Subnet]
6285    :param virtual_network_peerings: A list of peerings in a Virtual Network.
6286    :type virtual_network_peerings:
6287     list[~azure.mgmt.network.v2016_12_01.models.VirtualNetworkPeering]
6288    :param resource_guid: The resourceGuid property of the Virtual Network resource.
6289    :type resource_guid: str
6290    :param provisioning_state: The provisioning state of the PublicIP resource. Possible values
6291     are: 'Updating', 'Deleting', and 'Failed'.
6292    :type provisioning_state: str
6293    """
6294
6295    _validation = {
6296        'name': {'readonly': True},
6297        'type': {'readonly': True},
6298    }
6299
6300    _attribute_map = {
6301        'id': {'key': 'id', 'type': 'str'},
6302        'name': {'key': 'name', 'type': 'str'},
6303        'type': {'key': 'type', 'type': 'str'},
6304        'location': {'key': 'location', 'type': 'str'},
6305        'tags': {'key': 'tags', 'type': '{str}'},
6306        'etag': {'key': 'etag', 'type': 'str'},
6307        'address_space': {'key': 'properties.addressSpace', 'type': 'AddressSpace'},
6308        'dhcp_options': {'key': 'properties.dhcpOptions', 'type': 'DhcpOptions'},
6309        'subnets': {'key': 'properties.subnets', 'type': '[Subnet]'},
6310        'virtual_network_peerings': {'key': 'properties.virtualNetworkPeerings', 'type': '[VirtualNetworkPeering]'},
6311        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
6312        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6313    }
6314
6315    def __init__(
6316        self,
6317        *,
6318        id: Optional[str] = None,
6319        location: Optional[str] = None,
6320        tags: Optional[Dict[str, str]] = None,
6321        etag: Optional[str] = None,
6322        address_space: Optional["AddressSpace"] = None,
6323        dhcp_options: Optional["DhcpOptions"] = None,
6324        subnets: Optional[List["Subnet"]] = None,
6325        virtual_network_peerings: Optional[List["VirtualNetworkPeering"]] = None,
6326        resource_guid: Optional[str] = None,
6327        provisioning_state: Optional[str] = None,
6328        **kwargs
6329    ):
6330        super(VirtualNetwork, self).__init__(id=id, location=location, tags=tags, **kwargs)
6331        self.etag = etag
6332        self.address_space = address_space
6333        self.dhcp_options = dhcp_options
6334        self.subnets = subnets
6335        self.virtual_network_peerings = virtual_network_peerings
6336        self.resource_guid = resource_guid
6337        self.provisioning_state = provisioning_state
6338
6339
6340class VirtualNetworkGateway(Resource):
6341    """A common class for general resource information.
6342
6343    Variables are only populated by the server, and will be ignored when sending a request.
6344
6345    :param id: Resource ID.
6346    :type id: str
6347    :ivar name: Resource name.
6348    :vartype name: str
6349    :ivar type: Resource type.
6350    :vartype type: str
6351    :param location: Resource location.
6352    :type location: str
6353    :param tags: A set of tags. Resource tags.
6354    :type tags: dict[str, str]
6355    :param etag: Gets a unique read-only string that changes whenever the resource is updated.
6356    :type etag: str
6357    :param ip_configurations: IP configurations for virtual network gateway.
6358    :type ip_configurations:
6359     list[~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewayIPConfiguration]
6360    :param gateway_type: The type of this virtual network gateway. Possible values are: 'Vpn' and
6361     'ExpressRoute'. Possible values include: "Vpn", "ExpressRoute".
6362    :type gateway_type: str or ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewayType
6363    :param vpn_type: The type of this virtual network gateway. Possible values are: 'PolicyBased'
6364     and 'RouteBased'. Possible values include: "PolicyBased", "RouteBased".
6365    :type vpn_type: str or ~azure.mgmt.network.v2016_12_01.models.VpnType
6366    :param enable_bgp: Whether BGP is enabled for this virtual network gateway or not.
6367    :type enable_bgp: bool
6368    :param active: ActiveActive flag.
6369    :type active: bool
6370    :param gateway_default_site: The reference of the LocalNetworkGateway resource which represents
6371     local network site having default routes. Assign Null value in case of removing existing
6372     default site setting.
6373    :type gateway_default_site: ~azure.mgmt.network.v2016_12_01.models.SubResource
6374    :param sku: The reference of the VirtualNetworkGatewaySku resource which represents the SKU
6375     selected for Virtual network gateway.
6376    :type sku: ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewaySku
6377    :param vpn_client_configuration: The reference of the VpnClientConfiguration resource which
6378     represents the P2S VpnClient configurations.
6379    :type vpn_client_configuration: ~azure.mgmt.network.v2016_12_01.models.VpnClientConfiguration
6380    :param bgp_settings: Virtual network gateway's BGP speaker settings.
6381    :type bgp_settings: ~azure.mgmt.network.v2016_12_01.models.BgpSettings
6382    :param resource_guid: The resource GUID property of the VirtualNetworkGateway resource.
6383    :type resource_guid: str
6384    :ivar provisioning_state: The provisioning state of the VirtualNetworkGateway resource.
6385     Possible values are: 'Updating', 'Deleting', and 'Failed'.
6386    :vartype provisioning_state: str
6387    """
6388
6389    _validation = {
6390        'name': {'readonly': True},
6391        'type': {'readonly': True},
6392        'provisioning_state': {'readonly': True},
6393    }
6394
6395    _attribute_map = {
6396        'id': {'key': 'id', 'type': 'str'},
6397        'name': {'key': 'name', 'type': 'str'},
6398        'type': {'key': 'type', 'type': 'str'},
6399        'location': {'key': 'location', 'type': 'str'},
6400        'tags': {'key': 'tags', 'type': '{str}'},
6401        'etag': {'key': 'etag', 'type': 'str'},
6402        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualNetworkGatewayIPConfiguration]'},
6403        'gateway_type': {'key': 'properties.gatewayType', 'type': 'str'},
6404        'vpn_type': {'key': 'properties.vpnType', 'type': 'str'},
6405        'enable_bgp': {'key': 'properties.enableBgp', 'type': 'bool'},
6406        'active': {'key': 'properties.activeActive', 'type': 'bool'},
6407        'gateway_default_site': {'key': 'properties.gatewayDefaultSite', 'type': 'SubResource'},
6408        'sku': {'key': 'properties.sku', 'type': 'VirtualNetworkGatewaySku'},
6409        'vpn_client_configuration': {'key': 'properties.vpnClientConfiguration', 'type': 'VpnClientConfiguration'},
6410        'bgp_settings': {'key': 'properties.bgpSettings', 'type': 'BgpSettings'},
6411        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
6412        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6413    }
6414
6415    def __init__(
6416        self,
6417        *,
6418        id: Optional[str] = None,
6419        location: Optional[str] = None,
6420        tags: Optional[Dict[str, str]] = None,
6421        etag: Optional[str] = None,
6422        ip_configurations: Optional[List["VirtualNetworkGatewayIPConfiguration"]] = None,
6423        gateway_type: Optional[Union[str, "VirtualNetworkGatewayType"]] = None,
6424        vpn_type: Optional[Union[str, "VpnType"]] = None,
6425        enable_bgp: Optional[bool] = None,
6426        active: Optional[bool] = None,
6427        gateway_default_site: Optional["SubResource"] = None,
6428        sku: Optional["VirtualNetworkGatewaySku"] = None,
6429        vpn_client_configuration: Optional["VpnClientConfiguration"] = None,
6430        bgp_settings: Optional["BgpSettings"] = None,
6431        resource_guid: Optional[str] = None,
6432        **kwargs
6433    ):
6434        super(VirtualNetworkGateway, self).__init__(id=id, location=location, tags=tags, **kwargs)
6435        self.etag = etag
6436        self.ip_configurations = ip_configurations
6437        self.gateway_type = gateway_type
6438        self.vpn_type = vpn_type
6439        self.enable_bgp = enable_bgp
6440        self.active = active
6441        self.gateway_default_site = gateway_default_site
6442        self.sku = sku
6443        self.vpn_client_configuration = vpn_client_configuration
6444        self.bgp_settings = bgp_settings
6445        self.resource_guid = resource_guid
6446        self.provisioning_state = None
6447
6448
6449class VirtualNetworkGatewayConnection(Resource):
6450    """A common class for general resource information.
6451
6452    Variables are only populated by the server, and will be ignored when sending a request.
6453
6454    All required parameters must be populated in order to send to Azure.
6455
6456    :param id: Resource ID.
6457    :type id: str
6458    :ivar name: Resource name.
6459    :vartype name: str
6460    :ivar type: Resource type.
6461    :vartype type: str
6462    :param location: Resource location.
6463    :type location: str
6464    :param tags: A set of tags. Resource tags.
6465    :type tags: dict[str, str]
6466    :param etag: Gets a unique read-only string that changes whenever the resource is updated.
6467    :type etag: str
6468    :param authorization_key: The authorizationKey.
6469    :type authorization_key: str
6470    :param virtual_network_gateway1: Required. A common class for general resource information.
6471    :type virtual_network_gateway1: ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGateway
6472    :param virtual_network_gateway2: A common class for general resource information.
6473    :type virtual_network_gateway2: ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGateway
6474    :param local_network_gateway2: A common class for general resource information.
6475    :type local_network_gateway2: ~azure.mgmt.network.v2016_12_01.models.LocalNetworkGateway
6476    :param connection_type: Required. Gateway connection type. Possible values are:
6477     'IPsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: "IPsec",
6478     "Vnet2Vnet", "ExpressRoute", "VPNClient".
6479    :type connection_type: str or
6480     ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewayConnectionType
6481    :param routing_weight: The routing weight.
6482    :type routing_weight: int
6483    :param shared_key: The IPSec shared key.
6484    :type shared_key: str
6485    :ivar connection_status: Virtual network Gateway connection status. Possible values are
6486     'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: "Unknown",
6487     "Connecting", "Connected", "NotConnected".
6488    :vartype connection_status: str or
6489     ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewayConnectionStatus
6490    :ivar tunnel_connection_status: Collection of all tunnels' connection health status.
6491    :vartype tunnel_connection_status:
6492     list[~azure.mgmt.network.v2016_12_01.models.TunnelConnectionHealth]
6493    :ivar egress_bytes_transferred: The egress bytes transferred in this connection.
6494    :vartype egress_bytes_transferred: long
6495    :ivar ingress_bytes_transferred: The ingress bytes transferred in this connection.
6496    :vartype ingress_bytes_transferred: long
6497    :param peer: The reference to peerings resource.
6498    :type peer: ~azure.mgmt.network.v2016_12_01.models.SubResource
6499    :param enable_bgp: EnableBgp flag.
6500    :type enable_bgp: bool
6501    :param resource_guid: The resource GUID property of the VirtualNetworkGatewayConnection
6502     resource.
6503    :type resource_guid: str
6504    :ivar provisioning_state: The provisioning state of the VirtualNetworkGatewayConnection
6505     resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6506    :vartype provisioning_state: str
6507    """
6508
6509    _validation = {
6510        'name': {'readonly': True},
6511        'type': {'readonly': True},
6512        'virtual_network_gateway1': {'required': True},
6513        'connection_type': {'required': True},
6514        'connection_status': {'readonly': True},
6515        'tunnel_connection_status': {'readonly': True},
6516        'egress_bytes_transferred': {'readonly': True},
6517        'ingress_bytes_transferred': {'readonly': True},
6518        'provisioning_state': {'readonly': True},
6519    }
6520
6521    _attribute_map = {
6522        'id': {'key': 'id', 'type': 'str'},
6523        'name': {'key': 'name', 'type': 'str'},
6524        'type': {'key': 'type', 'type': 'str'},
6525        'location': {'key': 'location', 'type': 'str'},
6526        'tags': {'key': 'tags', 'type': '{str}'},
6527        'etag': {'key': 'etag', 'type': 'str'},
6528        'authorization_key': {'key': 'properties.authorizationKey', 'type': 'str'},
6529        'virtual_network_gateway1': {'key': 'properties.virtualNetworkGateway1', 'type': 'VirtualNetworkGateway'},
6530        'virtual_network_gateway2': {'key': 'properties.virtualNetworkGateway2', 'type': 'VirtualNetworkGateway'},
6531        'local_network_gateway2': {'key': 'properties.localNetworkGateway2', 'type': 'LocalNetworkGateway'},
6532        'connection_type': {'key': 'properties.connectionType', 'type': 'str'},
6533        'routing_weight': {'key': 'properties.routingWeight', 'type': 'int'},
6534        'shared_key': {'key': 'properties.sharedKey', 'type': 'str'},
6535        'connection_status': {'key': 'properties.connectionStatus', 'type': 'str'},
6536        'tunnel_connection_status': {'key': 'properties.tunnelConnectionStatus', 'type': '[TunnelConnectionHealth]'},
6537        'egress_bytes_transferred': {'key': 'properties.egressBytesTransferred', 'type': 'long'},
6538        'ingress_bytes_transferred': {'key': 'properties.ingressBytesTransferred', 'type': 'long'},
6539        'peer': {'key': 'properties.peer', 'type': 'SubResource'},
6540        'enable_bgp': {'key': 'properties.enableBgp', 'type': 'bool'},
6541        'resource_guid': {'key': 'properties.resourceGuid', 'type': 'str'},
6542        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6543    }
6544
6545    def __init__(
6546        self,
6547        *,
6548        virtual_network_gateway1: "VirtualNetworkGateway",
6549        connection_type: Union[str, "VirtualNetworkGatewayConnectionType"],
6550        id: Optional[str] = None,
6551        location: Optional[str] = None,
6552        tags: Optional[Dict[str, str]] = None,
6553        etag: Optional[str] = None,
6554        authorization_key: Optional[str] = None,
6555        virtual_network_gateway2: Optional["VirtualNetworkGateway"] = None,
6556        local_network_gateway2: Optional["LocalNetworkGateway"] = None,
6557        routing_weight: Optional[int] = None,
6558        shared_key: Optional[str] = None,
6559        peer: Optional["SubResource"] = None,
6560        enable_bgp: Optional[bool] = None,
6561        resource_guid: Optional[str] = None,
6562        **kwargs
6563    ):
6564        super(VirtualNetworkGatewayConnection, self).__init__(id=id, location=location, tags=tags, **kwargs)
6565        self.etag = etag
6566        self.authorization_key = authorization_key
6567        self.virtual_network_gateway1 = virtual_network_gateway1
6568        self.virtual_network_gateway2 = virtual_network_gateway2
6569        self.local_network_gateway2 = local_network_gateway2
6570        self.connection_type = connection_type
6571        self.routing_weight = routing_weight
6572        self.shared_key = shared_key
6573        self.connection_status = None
6574        self.tunnel_connection_status = None
6575        self.egress_bytes_transferred = None
6576        self.ingress_bytes_transferred = None
6577        self.peer = peer
6578        self.enable_bgp = enable_bgp
6579        self.resource_guid = resource_guid
6580        self.provisioning_state = None
6581
6582
6583class VirtualNetworkGatewayConnectionListResult(msrest.serialization.Model):
6584    """Response for the ListVirtualNetworkGatewayConnections API service call.
6585
6586    :param value: Gets a list of VirtualNetworkGatewayConnection resources that exists in a
6587     resource group.
6588    :type value: list[~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewayConnection]
6589    :param next_link: The URL to get the next set of results.
6590    :type next_link: str
6591    """
6592
6593    _attribute_map = {
6594        'value': {'key': 'value', 'type': '[VirtualNetworkGatewayConnection]'},
6595        'next_link': {'key': 'nextLink', 'type': 'str'},
6596    }
6597
6598    def __init__(
6599        self,
6600        *,
6601        value: Optional[List["VirtualNetworkGatewayConnection"]] = None,
6602        next_link: Optional[str] = None,
6603        **kwargs
6604    ):
6605        super(VirtualNetworkGatewayConnectionListResult, self).__init__(**kwargs)
6606        self.value = value
6607        self.next_link = next_link
6608
6609
6610class VirtualNetworkGatewayIPConfiguration(SubResource):
6611    """IP configuration for virtual network gateway.
6612
6613    Variables are only populated by the server, and will be ignored when sending a request.
6614
6615    :param id: Resource ID.
6616    :type id: str
6617    :param name: The name of the resource that is unique within a resource group. This name can be
6618     used to access the resource.
6619    :type name: str
6620    :param etag: A unique read-only string that changes whenever the resource is updated.
6621    :type etag: str
6622    :param private_ip_allocation_method: The private IP allocation method. Possible values are:
6623     'Static' and 'Dynamic'. Possible values include: "Static", "Dynamic".
6624    :type private_ip_allocation_method: str or
6625     ~azure.mgmt.network.v2016_12_01.models.IPAllocationMethod
6626    :param subnet: The reference of the subnet resource.
6627    :type subnet: ~azure.mgmt.network.v2016_12_01.models.SubResource
6628    :param public_ip_address: The reference of the public IP resource.
6629    :type public_ip_address: ~azure.mgmt.network.v2016_12_01.models.SubResource
6630    :ivar provisioning_state: The provisioning state of the public IP resource. Possible values
6631     are: 'Updating', 'Deleting', and 'Failed'.
6632    :vartype provisioning_state: str
6633    """
6634
6635    _validation = {
6636        'provisioning_state': {'readonly': True},
6637    }
6638
6639    _attribute_map = {
6640        'id': {'key': 'id', 'type': 'str'},
6641        'name': {'key': 'name', 'type': 'str'},
6642        'etag': {'key': 'etag', 'type': 'str'},
6643        'private_ip_allocation_method': {'key': 'properties.privateIPAllocationMethod', 'type': 'str'},
6644        'subnet': {'key': 'properties.subnet', 'type': 'SubResource'},
6645        'public_ip_address': {'key': 'properties.publicIPAddress', 'type': 'SubResource'},
6646        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6647    }
6648
6649    def __init__(
6650        self,
6651        *,
6652        id: Optional[str] = None,
6653        name: Optional[str] = None,
6654        etag: Optional[str] = None,
6655        private_ip_allocation_method: Optional[Union[str, "IPAllocationMethod"]] = None,
6656        subnet: Optional["SubResource"] = None,
6657        public_ip_address: Optional["SubResource"] = None,
6658        **kwargs
6659    ):
6660        super(VirtualNetworkGatewayIPConfiguration, self).__init__(id=id, **kwargs)
6661        self.name = name
6662        self.etag = etag
6663        self.private_ip_allocation_method = private_ip_allocation_method
6664        self.subnet = subnet
6665        self.public_ip_address = public_ip_address
6666        self.provisioning_state = None
6667
6668
6669class VirtualNetworkGatewayListResult(msrest.serialization.Model):
6670    """Response for the ListVirtualNetworkGateways API service call.
6671
6672    :param value: Gets a list of VirtualNetworkGateway resources that exists in a resource group.
6673    :type value: list[~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGateway]
6674    :param next_link: The URL to get the next set of results.
6675    :type next_link: str
6676    """
6677
6678    _attribute_map = {
6679        'value': {'key': 'value', 'type': '[VirtualNetworkGateway]'},
6680        'next_link': {'key': 'nextLink', 'type': 'str'},
6681    }
6682
6683    def __init__(
6684        self,
6685        *,
6686        value: Optional[List["VirtualNetworkGateway"]] = None,
6687        next_link: Optional[str] = None,
6688        **kwargs
6689    ):
6690        super(VirtualNetworkGatewayListResult, self).__init__(**kwargs)
6691        self.value = value
6692        self.next_link = next_link
6693
6694
6695class VirtualNetworkGatewaySku(msrest.serialization.Model):
6696    """VirtualNetworkGatewaySku details.
6697
6698    :param name: Gateway SKU name. Possible values are: 'Basic', 'HighPerformance','Standard', and
6699     'UltraPerformance'. Possible values include: "Basic", "HighPerformance", "Standard",
6700     "UltraPerformance".
6701    :type name: str or ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewaySkuName
6702    :param tier: Gateway SKU tier. Possible values are: 'Basic', 'HighPerformance','Standard', and
6703     'UltraPerformance'. Possible values include: "Basic", "HighPerformance", "Standard",
6704     "UltraPerformance".
6705    :type tier: str or ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkGatewaySkuTier
6706    :param capacity: The capacity.
6707    :type capacity: int
6708    """
6709
6710    _attribute_map = {
6711        'name': {'key': 'name', 'type': 'str'},
6712        'tier': {'key': 'tier', 'type': 'str'},
6713        'capacity': {'key': 'capacity', 'type': 'int'},
6714    }
6715
6716    def __init__(
6717        self,
6718        *,
6719        name: Optional[Union[str, "VirtualNetworkGatewaySkuName"]] = None,
6720        tier: Optional[Union[str, "VirtualNetworkGatewaySkuTier"]] = None,
6721        capacity: Optional[int] = None,
6722        **kwargs
6723    ):
6724        super(VirtualNetworkGatewaySku, self).__init__(**kwargs)
6725        self.name = name
6726        self.tier = tier
6727        self.capacity = capacity
6728
6729
6730class VirtualNetworkListResult(msrest.serialization.Model):
6731    """Response for the ListVirtualNetworks API service call.
6732
6733    :param value: Gets a list of VirtualNetwork resources in a resource group.
6734    :type value: list[~azure.mgmt.network.v2016_12_01.models.VirtualNetwork]
6735    :param next_link: The URL to get the next set of results.
6736    :type next_link: str
6737    """
6738
6739    _attribute_map = {
6740        'value': {'key': 'value', 'type': '[VirtualNetwork]'},
6741        'next_link': {'key': 'nextLink', 'type': 'str'},
6742    }
6743
6744    def __init__(
6745        self,
6746        *,
6747        value: Optional[List["VirtualNetwork"]] = None,
6748        next_link: Optional[str] = None,
6749        **kwargs
6750    ):
6751        super(VirtualNetworkListResult, self).__init__(**kwargs)
6752        self.value = value
6753        self.next_link = next_link
6754
6755
6756class VirtualNetworkPeering(SubResource):
6757    """Peerings in a virtual network resource.
6758
6759    :param id: Resource ID.
6760    :type id: str
6761    :param name: The name of the resource that is unique within a resource group. This name can be
6762     used to access the resource.
6763    :type name: str
6764    :param etag: A unique read-only string that changes whenever the resource is updated.
6765    :type etag: str
6766    :param allow_virtual_network_access: Whether the VMs in the linked virtual network space would
6767     be able to access all the VMs in local Virtual network space.
6768    :type allow_virtual_network_access: bool
6769    :param allow_forwarded_traffic: Whether the forwarded traffic from the VMs in the remote
6770     virtual network will be allowed/disallowed.
6771    :type allow_forwarded_traffic: bool
6772    :param allow_gateway_transit: If gateway links can be used in remote virtual networking to link
6773     to this virtual network.
6774    :type allow_gateway_transit: bool
6775    :param use_remote_gateways: If remote gateways can be used on this virtual network. If the flag
6776     is set to true, and allowGatewayTransit on remote peering is also true, virtual network will
6777     use gateways of remote virtual network for transit. Only one peering can have this flag set to
6778     true. This flag cannot be set if virtual network already has a gateway.
6779    :type use_remote_gateways: bool
6780    :param remote_virtual_network: The reference of the remote virtual network.
6781    :type remote_virtual_network: ~azure.mgmt.network.v2016_12_01.models.SubResource
6782    :param peering_state: The status of the virtual network peering. Possible values are
6783     'Initiated', 'Connected', and 'Disconnected'. Possible values include: "Initiated",
6784     "Connected", "Disconnected".
6785    :type peering_state: str or ~azure.mgmt.network.v2016_12_01.models.VirtualNetworkPeeringState
6786    :param provisioning_state: The provisioning state of the resource.
6787    :type provisioning_state: str
6788    """
6789
6790    _attribute_map = {
6791        'id': {'key': 'id', 'type': 'str'},
6792        'name': {'key': 'name', 'type': 'str'},
6793        'etag': {'key': 'etag', 'type': 'str'},
6794        'allow_virtual_network_access': {'key': 'properties.allowVirtualNetworkAccess', 'type': 'bool'},
6795        'allow_forwarded_traffic': {'key': 'properties.allowForwardedTraffic', 'type': 'bool'},
6796        'allow_gateway_transit': {'key': 'properties.allowGatewayTransit', 'type': 'bool'},
6797        'use_remote_gateways': {'key': 'properties.useRemoteGateways', 'type': 'bool'},
6798        'remote_virtual_network': {'key': 'properties.remoteVirtualNetwork', 'type': 'SubResource'},
6799        'peering_state': {'key': 'properties.peeringState', 'type': 'str'},
6800        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6801    }
6802
6803    def __init__(
6804        self,
6805        *,
6806        id: Optional[str] = None,
6807        name: Optional[str] = None,
6808        etag: Optional[str] = None,
6809        allow_virtual_network_access: Optional[bool] = None,
6810        allow_forwarded_traffic: Optional[bool] = None,
6811        allow_gateway_transit: Optional[bool] = None,
6812        use_remote_gateways: Optional[bool] = None,
6813        remote_virtual_network: Optional["SubResource"] = None,
6814        peering_state: Optional[Union[str, "VirtualNetworkPeeringState"]] = None,
6815        provisioning_state: Optional[str] = None,
6816        **kwargs
6817    ):
6818        super(VirtualNetworkPeering, self).__init__(id=id, **kwargs)
6819        self.name = name
6820        self.etag = etag
6821        self.allow_virtual_network_access = allow_virtual_network_access
6822        self.allow_forwarded_traffic = allow_forwarded_traffic
6823        self.allow_gateway_transit = allow_gateway_transit
6824        self.use_remote_gateways = use_remote_gateways
6825        self.remote_virtual_network = remote_virtual_network
6826        self.peering_state = peering_state
6827        self.provisioning_state = provisioning_state
6828
6829
6830class VirtualNetworkPeeringListResult(msrest.serialization.Model):
6831    """Response for ListSubnets API service call. Retrieves all subnets that belong to a virtual network.
6832
6833    :param value: The peerings in a virtual network.
6834    :type value: list[~azure.mgmt.network.v2016_12_01.models.VirtualNetworkPeering]
6835    :param next_link: The URL to get the next set of results.
6836    :type next_link: str
6837    """
6838
6839    _attribute_map = {
6840        'value': {'key': 'value', 'type': '[VirtualNetworkPeering]'},
6841        'next_link': {'key': 'nextLink', 'type': 'str'},
6842    }
6843
6844    def __init__(
6845        self,
6846        *,
6847        value: Optional[List["VirtualNetworkPeering"]] = None,
6848        next_link: Optional[str] = None,
6849        **kwargs
6850    ):
6851        super(VirtualNetworkPeeringListResult, self).__init__(**kwargs)
6852        self.value = value
6853        self.next_link = next_link
6854
6855
6856class VpnClientConfiguration(msrest.serialization.Model):
6857    """VpnClientConfiguration for P2S client.
6858
6859    :param vpn_client_address_pool: The reference of the address space resource which represents
6860     Address space for P2S VpnClient.
6861    :type vpn_client_address_pool: ~azure.mgmt.network.v2016_12_01.models.AddressSpace
6862    :param vpn_client_root_certificates: VpnClientRootCertificate for virtual network gateway.
6863    :type vpn_client_root_certificates:
6864     list[~azure.mgmt.network.v2016_12_01.models.VpnClientRootCertificate]
6865    :param vpn_client_revoked_certificates: VpnClientRevokedCertificate for Virtual network
6866     gateway.
6867    :type vpn_client_revoked_certificates:
6868     list[~azure.mgmt.network.v2016_12_01.models.VpnClientRevokedCertificate]
6869    """
6870
6871    _attribute_map = {
6872        'vpn_client_address_pool': {'key': 'vpnClientAddressPool', 'type': 'AddressSpace'},
6873        'vpn_client_root_certificates': {'key': 'vpnClientRootCertificates', 'type': '[VpnClientRootCertificate]'},
6874        'vpn_client_revoked_certificates': {'key': 'vpnClientRevokedCertificates', 'type': '[VpnClientRevokedCertificate]'},
6875    }
6876
6877    def __init__(
6878        self,
6879        *,
6880        vpn_client_address_pool: Optional["AddressSpace"] = None,
6881        vpn_client_root_certificates: Optional[List["VpnClientRootCertificate"]] = None,
6882        vpn_client_revoked_certificates: Optional[List["VpnClientRevokedCertificate"]] = None,
6883        **kwargs
6884    ):
6885        super(VpnClientConfiguration, self).__init__(**kwargs)
6886        self.vpn_client_address_pool = vpn_client_address_pool
6887        self.vpn_client_root_certificates = vpn_client_root_certificates
6888        self.vpn_client_revoked_certificates = vpn_client_revoked_certificates
6889
6890
6891class VpnClientParameters(msrest.serialization.Model):
6892    """VpnClientParameters.
6893
6894    All required parameters must be populated in order to send to Azure.
6895
6896    :param processor_architecture: Required. VPN client Processor Architecture. Possible values
6897     are: 'AMD64' and 'X86'. Possible values include: "Amd64", "X86".
6898    :type processor_architecture: str or
6899     ~azure.mgmt.network.v2016_12_01.models.ProcessorArchitecture
6900    """
6901
6902    _validation = {
6903        'processor_architecture': {'required': True},
6904    }
6905
6906    _attribute_map = {
6907        'processor_architecture': {'key': 'ProcessorArchitecture', 'type': 'str'},
6908    }
6909
6910    def __init__(
6911        self,
6912        *,
6913        processor_architecture: Union[str, "ProcessorArchitecture"],
6914        **kwargs
6915    ):
6916        super(VpnClientParameters, self).__init__(**kwargs)
6917        self.processor_architecture = processor_architecture
6918
6919
6920class VpnClientRevokedCertificate(SubResource):
6921    """VPN client revoked certificate of virtual network gateway.
6922
6923    Variables are only populated by the server, and will be ignored when sending a request.
6924
6925    :param id: Resource ID.
6926    :type id: str
6927    :param name: The name of the resource that is unique within a resource group. This name can be
6928     used to access the resource.
6929    :type name: str
6930    :param etag: A unique read-only string that changes whenever the resource is updated.
6931    :type etag: str
6932    :param thumbprint: The revoked VPN client certificate thumbprint.
6933    :type thumbprint: str
6934    :ivar provisioning_state: The provisioning state of the VPN client revoked certificate
6935     resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6936    :vartype provisioning_state: str
6937    """
6938
6939    _validation = {
6940        'provisioning_state': {'readonly': True},
6941    }
6942
6943    _attribute_map = {
6944        'id': {'key': 'id', 'type': 'str'},
6945        'name': {'key': 'name', 'type': 'str'},
6946        'etag': {'key': 'etag', 'type': 'str'},
6947        'thumbprint': {'key': 'properties.thumbprint', 'type': 'str'},
6948        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6949    }
6950
6951    def __init__(
6952        self,
6953        *,
6954        id: Optional[str] = None,
6955        name: Optional[str] = None,
6956        etag: Optional[str] = None,
6957        thumbprint: Optional[str] = None,
6958        **kwargs
6959    ):
6960        super(VpnClientRevokedCertificate, self).__init__(id=id, **kwargs)
6961        self.name = name
6962        self.etag = etag
6963        self.thumbprint = thumbprint
6964        self.provisioning_state = None
6965
6966
6967class VpnClientRootCertificate(SubResource):
6968    """VPN client root certificate of virtual network gateway.
6969
6970    Variables are only populated by the server, and will be ignored when sending a request.
6971
6972    All required parameters must be populated in order to send to Azure.
6973
6974    :param id: Resource ID.
6975    :type id: str
6976    :param name: The name of the resource that is unique within a resource group. This name can be
6977     used to access the resource.
6978    :type name: str
6979    :param etag: A unique read-only string that changes whenever the resource is updated.
6980    :type etag: str
6981    :param public_cert_data: Required. The certificate public data.
6982    :type public_cert_data: str
6983    :ivar provisioning_state: The provisioning state of the VPN client root certificate resource.
6984     Possible values are: 'Updating', 'Deleting', and 'Failed'.
6985    :vartype provisioning_state: str
6986    """
6987
6988    _validation = {
6989        'public_cert_data': {'required': True},
6990        'provisioning_state': {'readonly': True},
6991    }
6992
6993    _attribute_map = {
6994        'id': {'key': 'id', 'type': 'str'},
6995        'name': {'key': 'name', 'type': 'str'},
6996        'etag': {'key': 'etag', 'type': 'str'},
6997        'public_cert_data': {'key': 'properties.publicCertData', 'type': 'str'},
6998        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6999    }
7000
7001    def __init__(
7002        self,
7003        *,
7004        public_cert_data: str,
7005        id: Optional[str] = None,
7006        name: Optional[str] = None,
7007        etag: Optional[str] = None,
7008        **kwargs
7009    ):
7010        super(VpnClientRootCertificate, self).__init__(id=id, **kwargs)
7011        self.name = name
7012        self.etag = etag
7013        self.public_cert_data = public_cert_data
7014        self.provisioning_state = None
7015