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 Any, Dict, List, Optional, Union
11
12import msrest.serialization
13
14from ._compute_management_client_enums import *
15
16
17class AccessUri(msrest.serialization.Model):
18    """A disk access SAS uri.
19
20    Variables are only populated by the server, and will be ignored when sending a request.
21
22    :ivar access_sas: A SAS uri for accessing a disk.
23    :vartype access_sas: str
24    """
25
26    _validation = {
27        'access_sas': {'readonly': True},
28    }
29
30    _attribute_map = {
31        'access_sas': {'key': 'accessSAS', 'type': 'str'},
32    }
33
34    def __init__(
35        self,
36        **kwargs
37    ):
38        super(AccessUri, self).__init__(**kwargs)
39        self.access_sas = None
40
41
42class AdditionalCapabilities(msrest.serialization.Model):
43    """Enables or disables a capability on the virtual machine or virtual machine scale set.
44
45    :param ultra_ssd_enabled: The flag that enables or disables a capability to have one or more
46     managed data disks with UltraSSD_LRS storage account type on the VM or VMSS. Managed disks with
47     storage account type UltraSSD_LRS can be added to a virtual machine or virtual machine scale
48     set only if this property is enabled.
49    :type ultra_ssd_enabled: bool
50    """
51
52    _attribute_map = {
53        'ultra_ssd_enabled': {'key': 'ultraSSDEnabled', 'type': 'bool'},
54    }
55
56    def __init__(
57        self,
58        *,
59        ultra_ssd_enabled: Optional[bool] = None,
60        **kwargs
61    ):
62        super(AdditionalCapabilities, self).__init__(**kwargs)
63        self.ultra_ssd_enabled = ultra_ssd_enabled
64
65
66class AdditionalUnattendContent(msrest.serialization.Model):
67    """Specifies additional XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. Contents are defined by setting name, component name, and the pass in which the content is applied.
68
69    :param pass_name: The pass name. Currently, the only allowable value is OobeSystem. The only
70     acceptable values to pass in are None and "OobeSystem". The default value is None.
71    :type pass_name: str
72    :param component_name: The component name. Currently, the only allowable value is
73     Microsoft-Windows-Shell-Setup. The only acceptable values to pass in are None and
74     "Microsoft-Windows-Shell-Setup". The default value is None.
75    :type component_name: str
76    :param setting_name: Specifies the name of the setting to which the content applies. Possible
77     values are: FirstLogonCommands and AutoLogon. Possible values include: "AutoLogon",
78     "FirstLogonCommands".
79    :type setting_name: str or ~azure.mgmt.compute.v2019_07_01.models.SettingNames
80    :param content: Specifies the XML formatted content that is added to the unattend.xml file for
81     the specified path and component. The XML must be less than 4KB and must include the root
82     element for the setting or feature that is being inserted.
83    :type content: str
84    """
85
86    _attribute_map = {
87        'pass_name': {'key': 'passName', 'type': 'str'},
88        'component_name': {'key': 'componentName', 'type': 'str'},
89        'setting_name': {'key': 'settingName', 'type': 'str'},
90        'content': {'key': 'content', 'type': 'str'},
91    }
92
93    def __init__(
94        self,
95        *,
96        pass_name: Optional[str] = None,
97        component_name: Optional[str] = None,
98        setting_name: Optional[Union[str, "SettingNames"]] = None,
99        content: Optional[str] = None,
100        **kwargs
101    ):
102        super(AdditionalUnattendContent, self).__init__(**kwargs)
103        self.pass_name = pass_name
104        self.component_name = component_name
105        self.setting_name = setting_name
106        self.content = content
107
108
109class ApiEntityReference(msrest.serialization.Model):
110    """The API entity reference.
111
112    :param id: The ARM resource id in the form of
113     /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/...
114    :type id: str
115    """
116
117    _attribute_map = {
118        'id': {'key': 'id', 'type': 'str'},
119    }
120
121    def __init__(
122        self,
123        *,
124        id: Optional[str] = None,
125        **kwargs
126    ):
127        super(ApiEntityReference, self).__init__(**kwargs)
128        self.id = id
129
130
131class ApiError(msrest.serialization.Model):
132    """Api error.
133
134    :param details: The Api error details.
135    :type details: list[~azure.mgmt.compute.v2019_07_01.models.ApiErrorBase]
136    :param innererror: The Api inner error.
137    :type innererror: ~azure.mgmt.compute.v2019_07_01.models.InnerError
138    :param code: The error code.
139    :type code: str
140    :param target: The target of the particular error.
141    :type target: str
142    :param message: The error message.
143    :type message: str
144    """
145
146    _attribute_map = {
147        'details': {'key': 'details', 'type': '[ApiErrorBase]'},
148        'innererror': {'key': 'innererror', 'type': 'InnerError'},
149        'code': {'key': 'code', 'type': 'str'},
150        'target': {'key': 'target', 'type': 'str'},
151        'message': {'key': 'message', 'type': 'str'},
152    }
153
154    def __init__(
155        self,
156        *,
157        details: Optional[List["ApiErrorBase"]] = None,
158        innererror: Optional["InnerError"] = None,
159        code: Optional[str] = None,
160        target: Optional[str] = None,
161        message: Optional[str] = None,
162        **kwargs
163    ):
164        super(ApiError, self).__init__(**kwargs)
165        self.details = details
166        self.innererror = innererror
167        self.code = code
168        self.target = target
169        self.message = message
170
171
172class ApiErrorBase(msrest.serialization.Model):
173    """Api error base.
174
175    :param code: The error code.
176    :type code: str
177    :param target: The target of the particular error.
178    :type target: str
179    :param message: The error message.
180    :type message: str
181    """
182
183    _attribute_map = {
184        'code': {'key': 'code', 'type': 'str'},
185        'target': {'key': 'target', 'type': 'str'},
186        'message': {'key': 'message', 'type': 'str'},
187    }
188
189    def __init__(
190        self,
191        *,
192        code: Optional[str] = None,
193        target: Optional[str] = None,
194        message: Optional[str] = None,
195        **kwargs
196    ):
197        super(ApiErrorBase, self).__init__(**kwargs)
198        self.code = code
199        self.target = target
200        self.message = message
201
202
203class AutomaticOSUpgradePolicy(msrest.serialization.Model):
204    """The configuration parameters used for performing automatic OS upgrade.
205
206    :param enable_automatic_os_upgrade: Indicates whether OS upgrades should automatically be
207     applied to scale set instances in a rolling fashion when a newer version of the OS image
208     becomes available. Default value is false. :code:`<br>`:code:`<br>` If this is set to true for
209     Windows based scale sets, `enableAutomaticUpdates
210     <https://docs.microsoft.com/dotnet/api/microsoft.azure.management.compute.models.windowsconfiguration.enableautomaticupdates?view=azure-dotnet>`_
211     is automatically set to false and cannot be set to true.
212    :type enable_automatic_os_upgrade: bool
213    :param disable_automatic_rollback: Whether OS image rollback feature should be disabled.
214     Default value is false.
215    :type disable_automatic_rollback: bool
216    """
217
218    _attribute_map = {
219        'enable_automatic_os_upgrade': {'key': 'enableAutomaticOSUpgrade', 'type': 'bool'},
220        'disable_automatic_rollback': {'key': 'disableAutomaticRollback', 'type': 'bool'},
221    }
222
223    def __init__(
224        self,
225        *,
226        enable_automatic_os_upgrade: Optional[bool] = None,
227        disable_automatic_rollback: Optional[bool] = None,
228        **kwargs
229    ):
230        super(AutomaticOSUpgradePolicy, self).__init__(**kwargs)
231        self.enable_automatic_os_upgrade = enable_automatic_os_upgrade
232        self.disable_automatic_rollback = disable_automatic_rollback
233
234
235class AutomaticOSUpgradeProperties(msrest.serialization.Model):
236    """Describes automatic OS upgrade properties on the image.
237
238    All required parameters must be populated in order to send to Azure.
239
240    :param automatic_os_upgrade_supported: Required. Specifies whether automatic OS upgrade is
241     supported on the image.
242    :type automatic_os_upgrade_supported: bool
243    """
244
245    _validation = {
246        'automatic_os_upgrade_supported': {'required': True},
247    }
248
249    _attribute_map = {
250        'automatic_os_upgrade_supported': {'key': 'automaticOSUpgradeSupported', 'type': 'bool'},
251    }
252
253    def __init__(
254        self,
255        *,
256        automatic_os_upgrade_supported: bool,
257        **kwargs
258    ):
259        super(AutomaticOSUpgradeProperties, self).__init__(**kwargs)
260        self.automatic_os_upgrade_supported = automatic_os_upgrade_supported
261
262
263class AutomaticRepairsPolicy(msrest.serialization.Model):
264    """Specifies the configuration parameters for automatic repairs on the virtual machine scale set.
265
266    :param enabled: Specifies whether automatic repairs should be enabled on the virtual machine
267     scale set. The default value is false.
268    :type enabled: bool
269    :param grace_period: The amount of time for which automatic repairs are suspended due to a
270     state change on VM. The grace time starts after the state change has completed. This helps
271     avoid premature or accidental repairs. The time duration should be specified in ISO 8601
272     format. The minimum allowed grace period is 30 minutes (PT30M), which is also the default
273     value. The maximum allowed grace period is 90 minutes (PT90M).
274    :type grace_period: str
275    """
276
277    _attribute_map = {
278        'enabled': {'key': 'enabled', 'type': 'bool'},
279        'grace_period': {'key': 'gracePeriod', 'type': 'str'},
280    }
281
282    def __init__(
283        self,
284        *,
285        enabled: Optional[bool] = None,
286        grace_period: Optional[str] = None,
287        **kwargs
288    ):
289        super(AutomaticRepairsPolicy, self).__init__(**kwargs)
290        self.enabled = enabled
291        self.grace_period = grace_period
292
293
294class Resource(msrest.serialization.Model):
295    """The Resource model definition.
296
297    Variables are only populated by the server, and will be ignored when sending a request.
298
299    All required parameters must be populated in order to send to Azure.
300
301    :ivar id: Resource Id.
302    :vartype id: str
303    :ivar name: Resource name.
304    :vartype name: str
305    :ivar type: Resource type.
306    :vartype type: str
307    :param location: Required. Resource location.
308    :type location: str
309    :param tags: A set of tags. Resource tags.
310    :type tags: dict[str, str]
311    """
312
313    _validation = {
314        'id': {'readonly': True},
315        'name': {'readonly': True},
316        'type': {'readonly': True},
317        'location': {'required': True},
318    }
319
320    _attribute_map = {
321        'id': {'key': 'id', 'type': 'str'},
322        'name': {'key': 'name', 'type': 'str'},
323        'type': {'key': 'type', 'type': 'str'},
324        'location': {'key': 'location', 'type': 'str'},
325        'tags': {'key': 'tags', 'type': '{str}'},
326    }
327
328    def __init__(
329        self,
330        *,
331        location: str,
332        tags: Optional[Dict[str, str]] = None,
333        **kwargs
334    ):
335        super(Resource, self).__init__(**kwargs)
336        self.id = None
337        self.name = None
338        self.type = None
339        self.location = location
340        self.tags = tags
341
342
343class AvailabilitySet(Resource):
344    """Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_. :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_ :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.
345
346    Variables are only populated by the server, and will be ignored when sending a request.
347
348    All required parameters must be populated in order to send to Azure.
349
350    :ivar id: Resource Id.
351    :vartype id: str
352    :ivar name: Resource name.
353    :vartype name: str
354    :ivar type: Resource type.
355    :vartype type: str
356    :param location: Required. Resource location.
357    :type location: str
358    :param tags: A set of tags. Resource tags.
359    :type tags: dict[str, str]
360    :param sku: Sku of the availability set, only name is required to be set. See
361     AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with
362     managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is
363     'Classic'.
364    :type sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
365    :param platform_update_domain_count: Update Domain count.
366    :type platform_update_domain_count: int
367    :param platform_fault_domain_count: Fault Domain count.
368    :type platform_fault_domain_count: int
369    :param virtual_machines: A list of references to all virtual machines in the availability set.
370    :type virtual_machines: list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
371    :param proximity_placement_group: Specifies information about the proximity placement group
372     that the availability set should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
373     2018-04-01.
374    :type proximity_placement_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
375    :ivar statuses: The resource status information.
376    :vartype statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
377    """
378
379    _validation = {
380        'id': {'readonly': True},
381        'name': {'readonly': True},
382        'type': {'readonly': True},
383        'location': {'required': True},
384        'statuses': {'readonly': True},
385    }
386
387    _attribute_map = {
388        'id': {'key': 'id', 'type': 'str'},
389        'name': {'key': 'name', 'type': 'str'},
390        'type': {'key': 'type', 'type': 'str'},
391        'location': {'key': 'location', 'type': 'str'},
392        'tags': {'key': 'tags', 'type': '{str}'},
393        'sku': {'key': 'sku', 'type': 'Sku'},
394        'platform_update_domain_count': {'key': 'properties.platformUpdateDomainCount', 'type': 'int'},
395        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
396        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
397        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
398        'statuses': {'key': 'properties.statuses', 'type': '[InstanceViewStatus]'},
399    }
400
401    def __init__(
402        self,
403        *,
404        location: str,
405        tags: Optional[Dict[str, str]] = None,
406        sku: Optional["Sku"] = None,
407        platform_update_domain_count: Optional[int] = None,
408        platform_fault_domain_count: Optional[int] = None,
409        virtual_machines: Optional[List["SubResource"]] = None,
410        proximity_placement_group: Optional["SubResource"] = None,
411        **kwargs
412    ):
413        super(AvailabilitySet, self).__init__(location=location, tags=tags, **kwargs)
414        self.sku = sku
415        self.platform_update_domain_count = platform_update_domain_count
416        self.platform_fault_domain_count = platform_fault_domain_count
417        self.virtual_machines = virtual_machines
418        self.proximity_placement_group = proximity_placement_group
419        self.statuses = None
420
421
422class AvailabilitySetListResult(msrest.serialization.Model):
423    """The List Availability Set operation response.
424
425    All required parameters must be populated in order to send to Azure.
426
427    :param value: Required. The list of availability sets.
428    :type value: list[~azure.mgmt.compute.v2019_07_01.models.AvailabilitySet]
429    :param next_link: The URI to fetch the next page of AvailabilitySets. Call ListNext() with this
430     URI to fetch the next page of AvailabilitySets.
431    :type next_link: str
432    """
433
434    _validation = {
435        'value': {'required': True},
436    }
437
438    _attribute_map = {
439        'value': {'key': 'value', 'type': '[AvailabilitySet]'},
440        'next_link': {'key': 'nextLink', 'type': 'str'},
441    }
442
443    def __init__(
444        self,
445        *,
446        value: List["AvailabilitySet"],
447        next_link: Optional[str] = None,
448        **kwargs
449    ):
450        super(AvailabilitySetListResult, self).__init__(**kwargs)
451        self.value = value
452        self.next_link = next_link
453
454
455class UpdateResource(msrest.serialization.Model):
456    """The Update Resource model definition.
457
458    :param tags: A set of tags. Resource tags.
459    :type tags: dict[str, str]
460    """
461
462    _attribute_map = {
463        'tags': {'key': 'tags', 'type': '{str}'},
464    }
465
466    def __init__(
467        self,
468        *,
469        tags: Optional[Dict[str, str]] = None,
470        **kwargs
471    ):
472        super(UpdateResource, self).__init__(**kwargs)
473        self.tags = tags
474
475
476class AvailabilitySetUpdate(UpdateResource):
477    """Specifies information about the availability set that the virtual machine should be assigned to. Only tags may be updated.
478
479    Variables are only populated by the server, and will be ignored when sending a request.
480
481    :param tags: A set of tags. Resource tags.
482    :type tags: dict[str, str]
483    :param sku: Sku of the availability set.
484    :type sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
485    :param platform_update_domain_count: Update Domain count.
486    :type platform_update_domain_count: int
487    :param platform_fault_domain_count: Fault Domain count.
488    :type platform_fault_domain_count: int
489    :param virtual_machines: A list of references to all virtual machines in the availability set.
490    :type virtual_machines: list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
491    :param proximity_placement_group: Specifies information about the proximity placement group
492     that the availability set should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
493     2018-04-01.
494    :type proximity_placement_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
495    :ivar statuses: The resource status information.
496    :vartype statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
497    """
498
499    _validation = {
500        'statuses': {'readonly': True},
501    }
502
503    _attribute_map = {
504        'tags': {'key': 'tags', 'type': '{str}'},
505        'sku': {'key': 'sku', 'type': 'Sku'},
506        'platform_update_domain_count': {'key': 'properties.platformUpdateDomainCount', 'type': 'int'},
507        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
508        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
509        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
510        'statuses': {'key': 'properties.statuses', 'type': '[InstanceViewStatus]'},
511    }
512
513    def __init__(
514        self,
515        *,
516        tags: Optional[Dict[str, str]] = None,
517        sku: Optional["Sku"] = None,
518        platform_update_domain_count: Optional[int] = None,
519        platform_fault_domain_count: Optional[int] = None,
520        virtual_machines: Optional[List["SubResource"]] = None,
521        proximity_placement_group: Optional["SubResource"] = None,
522        **kwargs
523    ):
524        super(AvailabilitySetUpdate, self).__init__(tags=tags, **kwargs)
525        self.sku = sku
526        self.platform_update_domain_count = platform_update_domain_count
527        self.platform_fault_domain_count = platform_fault_domain_count
528        self.virtual_machines = virtual_machines
529        self.proximity_placement_group = proximity_placement_group
530        self.statuses = None
531
532
533class BillingProfile(msrest.serialization.Model):
534    """Specifies the billing related details of a Azure Spot VM or VMSS. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
535
536    :param max_price: Specifies the maximum price you are willing to pay for a Azure Spot VM/VMSS.
537     This price is in US Dollars. :code:`<br>`:code:`<br>` This price will be compared with the
538     current Azure Spot price for the VM size. Also, the prices are compared at the time of
539     create/update of Azure Spot VM/VMSS and the operation will only succeed if  the maxPrice is
540     greater than the current Azure Spot price. :code:`<br>`:code:`<br>` The maxPrice will also be
541     used for evicting a Azure Spot VM/VMSS if the current Azure Spot price goes beyond the maxPrice
542     after creation of VM/VMSS. :code:`<br>`:code:`<br>` Possible values are:
543     :code:`<br>`:code:`<br>` - Any decimal value greater than zero. Example: 0.01538
544     :code:`<br>`:code:`<br>` -1 – indicates default price to be up-to on-demand.
545     :code:`<br>`:code:`<br>` You can set the maxPrice to -1 to indicate that the Azure Spot VM/VMSS
546     should not be evicted for price reasons. Also, the default max price is -1 if it is not
547     provided by you. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
548    :type max_price: float
549    """
550
551    _attribute_map = {
552        'max_price': {'key': 'maxPrice', 'type': 'float'},
553    }
554
555    def __init__(
556        self,
557        *,
558        max_price: Optional[float] = None,
559        **kwargs
560    ):
561        super(BillingProfile, self).__init__(**kwargs)
562        self.max_price = max_price
563
564
565class BootDiagnostics(msrest.serialization.Model):
566    """Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a screenshot of the VM from the hypervisor.
567
568    :param enabled: Whether boot diagnostics should be enabled on the Virtual Machine.
569    :type enabled: bool
570    :param storage_uri: Uri of the storage account to use for placing the console output and
571     screenshot.
572    :type storage_uri: str
573    """
574
575    _attribute_map = {
576        'enabled': {'key': 'enabled', 'type': 'bool'},
577        'storage_uri': {'key': 'storageUri', 'type': 'str'},
578    }
579
580    def __init__(
581        self,
582        *,
583        enabled: Optional[bool] = None,
584        storage_uri: Optional[str] = None,
585        **kwargs
586    ):
587        super(BootDiagnostics, self).__init__(**kwargs)
588        self.enabled = enabled
589        self.storage_uri = storage_uri
590
591
592class BootDiagnosticsInstanceView(msrest.serialization.Model):
593    """The instance view of a virtual machine boot diagnostics.
594
595    Variables are only populated by the server, and will be ignored when sending a request.
596
597    :ivar console_screenshot_blob_uri: The console screenshot blob URI.
598    :vartype console_screenshot_blob_uri: str
599    :ivar serial_console_log_blob_uri: The Linux serial console log blob Uri.
600    :vartype serial_console_log_blob_uri: str
601    :ivar status: The boot diagnostics status information for the VM. :code:`<br>`:code:`<br>`
602     NOTE: It will be set only if there are errors encountered in enabling boot diagnostics.
603    :vartype status: ~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus
604    """
605
606    _validation = {
607        'console_screenshot_blob_uri': {'readonly': True},
608        'serial_console_log_blob_uri': {'readonly': True},
609        'status': {'readonly': True},
610    }
611
612    _attribute_map = {
613        'console_screenshot_blob_uri': {'key': 'consoleScreenshotBlobUri', 'type': 'str'},
614        'serial_console_log_blob_uri': {'key': 'serialConsoleLogBlobUri', 'type': 'str'},
615        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
616    }
617
618    def __init__(
619        self,
620        **kwargs
621    ):
622        super(BootDiagnosticsInstanceView, self).__init__(**kwargs)
623        self.console_screenshot_blob_uri = None
624        self.serial_console_log_blob_uri = None
625        self.status = None
626
627
628class ComputeOperationListResult(msrest.serialization.Model):
629    """The List Compute Operation operation response.
630
631    Variables are only populated by the server, and will be ignored when sending a request.
632
633    :ivar value: The list of compute operations.
634    :vartype value: list[~azure.mgmt.compute.v2019_07_01.models.ComputeOperationValue]
635    """
636
637    _validation = {
638        'value': {'readonly': True},
639    }
640
641    _attribute_map = {
642        'value': {'key': 'value', 'type': '[ComputeOperationValue]'},
643    }
644
645    def __init__(
646        self,
647        **kwargs
648    ):
649        super(ComputeOperationListResult, self).__init__(**kwargs)
650        self.value = None
651
652
653class ComputeOperationValue(msrest.serialization.Model):
654    """Describes the properties of a Compute Operation value.
655
656    Variables are only populated by the server, and will be ignored when sending a request.
657
658    :ivar origin: The origin of the compute operation.
659    :vartype origin: str
660    :ivar name: The name of the compute operation.
661    :vartype name: str
662    :ivar operation: The display name of the compute operation.
663    :vartype operation: str
664    :ivar resource: The display name of the resource the operation applies to.
665    :vartype resource: str
666    :ivar description: The description of the operation.
667    :vartype description: str
668    :ivar provider: The resource provider for the operation.
669    :vartype provider: str
670    """
671
672    _validation = {
673        'origin': {'readonly': True},
674        'name': {'readonly': True},
675        'operation': {'readonly': True},
676        'resource': {'readonly': True},
677        'description': {'readonly': True},
678        'provider': {'readonly': True},
679    }
680
681    _attribute_map = {
682        'origin': {'key': 'origin', 'type': 'str'},
683        'name': {'key': 'name', 'type': 'str'},
684        'operation': {'key': 'display.operation', 'type': 'str'},
685        'resource': {'key': 'display.resource', 'type': 'str'},
686        'description': {'key': 'display.description', 'type': 'str'},
687        'provider': {'key': 'display.provider', 'type': 'str'},
688    }
689
690    def __init__(
691        self,
692        **kwargs
693    ):
694        super(ComputeOperationValue, self).__init__(**kwargs)
695        self.origin = None
696        self.name = None
697        self.operation = None
698        self.resource = None
699        self.description = None
700        self.provider = None
701
702
703class CreationData(msrest.serialization.Model):
704    """Data used when creating a disk.
705
706    Variables are only populated by the server, and will be ignored when sending a request.
707
708    All required parameters must be populated in order to send to Azure.
709
710    :param create_option: Required. This enumerates the possible sources of a disk's creation.
711     Possible values include: "Empty", "Attach", "FromImage", "Import", "Copy", "Restore", "Upload".
712    :type create_option: str or ~azure.mgmt.compute.v2019_07_01.models.DiskCreateOption
713    :param storage_account_id: Required if createOption is Import. The Azure Resource Manager
714     identifier of the storage account containing the blob to import as a disk.
715    :type storage_account_id: str
716    :param image_reference: Disk source information.
717    :type image_reference: ~azure.mgmt.compute.v2019_07_01.models.ImageDiskReference
718    :param source_uri: If createOption is Import, this is the URI of a blob to be imported into a
719     managed disk.
720    :type source_uri: str
721    :param source_resource_id: If createOption is Copy, this is the ARM id of the source snapshot
722     or disk.
723    :type source_resource_id: str
724    :ivar source_unique_id: If this field is set, this is the unique id identifying the source of
725     this resource.
726    :vartype source_unique_id: str
727    :param upload_size_bytes: If createOption is Upload, this is the size of the contents of the
728     upload including the VHD footer. This value should be between 20972032 (20 MiB + 512 bytes for
729     the VHD footer) and 35183298347520 bytes (32 TiB + 512 bytes for the VHD footer).
730    :type upload_size_bytes: long
731    """
732
733    _validation = {
734        'create_option': {'required': True},
735        'source_unique_id': {'readonly': True},
736    }
737
738    _attribute_map = {
739        'create_option': {'key': 'createOption', 'type': 'str'},
740        'storage_account_id': {'key': 'storageAccountId', 'type': 'str'},
741        'image_reference': {'key': 'imageReference', 'type': 'ImageDiskReference'},
742        'source_uri': {'key': 'sourceUri', 'type': 'str'},
743        'source_resource_id': {'key': 'sourceResourceId', 'type': 'str'},
744        'source_unique_id': {'key': 'sourceUniqueId', 'type': 'str'},
745        'upload_size_bytes': {'key': 'uploadSizeBytes', 'type': 'long'},
746    }
747
748    def __init__(
749        self,
750        *,
751        create_option: Union[str, "DiskCreateOption"],
752        storage_account_id: Optional[str] = None,
753        image_reference: Optional["ImageDiskReference"] = None,
754        source_uri: Optional[str] = None,
755        source_resource_id: Optional[str] = None,
756        upload_size_bytes: Optional[int] = None,
757        **kwargs
758    ):
759        super(CreationData, self).__init__(**kwargs)
760        self.create_option = create_option
761        self.storage_account_id = storage_account_id
762        self.image_reference = image_reference
763        self.source_uri = source_uri
764        self.source_resource_id = source_resource_id
765        self.source_unique_id = None
766        self.upload_size_bytes = upload_size_bytes
767
768
769class DataDisk(msrest.serialization.Model):
770    """Describes a data disk.
771
772    Variables are only populated by the server, and will be ignored when sending a request.
773
774    All required parameters must be populated in order to send to Azure.
775
776    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
777     identify data disks within the VM and therefore must be unique for each data disk attached to a
778     VM.
779    :type lun: int
780    :param name: The disk name.
781    :type name: str
782    :param vhd: The virtual hard disk.
783    :type vhd: ~azure.mgmt.compute.v2019_07_01.models.VirtualHardDisk
784    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
785     before being attached to the virtual machine. If SourceImage is provided, the destination
786     virtual hard drive must not exist.
787    :type image: ~azure.mgmt.compute.v2019_07_01.models.VirtualHardDisk
788    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
789     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
790     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
791     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
792     "ReadWrite".
793    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
794    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
795     disabled on the disk.
796    :type write_accelerator_enabled: bool
797    :param create_option: Required. Specifies how the virtual machine should be
798     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
799     This value is used when you are using a specialized disk to create the virtual
800     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
801     image to create the virtual machine. If you are using a platform image, you also use the
802     imageReference element described above. If you are using a marketplace image, you  also use the
803     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
804    :type create_option: str or ~azure.mgmt.compute.v2019_07_01.models.DiskCreateOptionTypes
805    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
806     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
807     This value cannot be larger than 1023 GB.
808    :type disk_size_gb: int
809    :param managed_disk: The managed disk parameters.
810    :type managed_disk: ~azure.mgmt.compute.v2019_07_01.models.ManagedDiskParameters
811    :param to_be_detached: Specifies whether the data disk is in process of detachment from the
812     VirtualMachine/VirtualMachineScaleset.
813    :type to_be_detached: bool
814    :ivar disk_iops_read_write: Specifies the Read-Write IOPS for the managed disk when
815     StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be
816     updated only via updates to the VirtualMachine Scale Set.
817    :vartype disk_iops_read_write: long
818    :ivar disk_m_bps_read_write: Specifies the bandwidth in MB per second for the managed disk when
819     StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be
820     updated only via updates to the VirtualMachine Scale Set.
821    :vartype disk_m_bps_read_write: long
822    """
823
824    _validation = {
825        'lun': {'required': True},
826        'create_option': {'required': True},
827        'disk_iops_read_write': {'readonly': True},
828        'disk_m_bps_read_write': {'readonly': True},
829    }
830
831    _attribute_map = {
832        'lun': {'key': 'lun', 'type': 'int'},
833        'name': {'key': 'name', 'type': 'str'},
834        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
835        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
836        'caching': {'key': 'caching', 'type': 'str'},
837        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
838        'create_option': {'key': 'createOption', 'type': 'str'},
839        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
840        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
841        'to_be_detached': {'key': 'toBeDetached', 'type': 'bool'},
842        'disk_iops_read_write': {'key': 'diskIOPSReadWrite', 'type': 'long'},
843        'disk_m_bps_read_write': {'key': 'diskMBpsReadWrite', 'type': 'long'},
844    }
845
846    def __init__(
847        self,
848        *,
849        lun: int,
850        create_option: Union[str, "DiskCreateOptionTypes"],
851        name: Optional[str] = None,
852        vhd: Optional["VirtualHardDisk"] = None,
853        image: Optional["VirtualHardDisk"] = None,
854        caching: Optional[Union[str, "CachingTypes"]] = None,
855        write_accelerator_enabled: Optional[bool] = None,
856        disk_size_gb: Optional[int] = None,
857        managed_disk: Optional["ManagedDiskParameters"] = None,
858        to_be_detached: Optional[bool] = None,
859        **kwargs
860    ):
861        super(DataDisk, self).__init__(**kwargs)
862        self.lun = lun
863        self.name = name
864        self.vhd = vhd
865        self.image = image
866        self.caching = caching
867        self.write_accelerator_enabled = write_accelerator_enabled
868        self.create_option = create_option
869        self.disk_size_gb = disk_size_gb
870        self.managed_disk = managed_disk
871        self.to_be_detached = to_be_detached
872        self.disk_iops_read_write = None
873        self.disk_m_bps_read_write = None
874
875
876class DataDiskImage(msrest.serialization.Model):
877    """Contains the data disk images information.
878
879    Variables are only populated by the server, and will be ignored when sending a request.
880
881    :ivar lun: Specifies the logical unit number of the data disk. This value is used to identify
882     data disks within the VM and therefore must be unique for each data disk attached to a VM.
883    :vartype lun: int
884    """
885
886    _validation = {
887        'lun': {'readonly': True},
888    }
889
890    _attribute_map = {
891        'lun': {'key': 'lun', 'type': 'int'},
892    }
893
894    def __init__(
895        self,
896        **kwargs
897    ):
898        super(DataDiskImage, self).__init__(**kwargs)
899        self.lun = None
900
901
902class DedicatedHost(Resource):
903    """Specifies information about the Dedicated host.
904
905    Variables are only populated by the server, and will be ignored when sending a request.
906
907    All required parameters must be populated in order to send to Azure.
908
909    :ivar id: Resource Id.
910    :vartype id: str
911    :ivar name: Resource name.
912    :vartype name: str
913    :ivar type: Resource type.
914    :vartype type: str
915    :param location: Required. Resource location.
916    :type location: str
917    :param tags: A set of tags. Resource tags.
918    :type tags: dict[str, str]
919    :param sku: Required. SKU of the dedicated host for Hardware Generation and VM family. Only
920     name is required to be set. List Microsoft.Compute SKUs for a list of possible values.
921    :type sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
922    :param platform_fault_domain: Fault domain of the dedicated host within a dedicated host group.
923    :type platform_fault_domain: int
924    :param auto_replace_on_failure: Specifies whether the dedicated host should be replaced
925     automatically in case of a failure. The value is defaulted to 'true' when not provided.
926    :type auto_replace_on_failure: bool
927    :ivar host_id: A unique id generated and assigned to the dedicated host by the platform.
928     :code:`<br>`:code:`<br>` Does not change throughout the lifetime of the host.
929    :vartype host_id: str
930    :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host.
931    :vartype virtual_machines: list[~azure.mgmt.compute.v2019_07_01.models.SubResourceReadOnly]
932    :param license_type: Specifies the software license type that will be applied to the VMs
933     deployed on the dedicated host. :code:`<br>`:code:`<br>` Possible values are:
934     :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **Windows_Server_Hybrid**
935     :code:`<br>`:code:`<br>` **Windows_Server_Perpetual** :code:`<br>`:code:`<br>` Default:
936     **None**. Possible values include: "None", "Windows_Server_Hybrid", "Windows_Server_Perpetual".
937    :type license_type: str or ~azure.mgmt.compute.v2019_07_01.models.DedicatedHostLicenseTypes
938    :ivar provisioning_time: The date when the host was first provisioned.
939    :vartype provisioning_time: ~datetime.datetime
940    :ivar provisioning_state: The provisioning state, which only appears in the response.
941    :vartype provisioning_state: str
942    :ivar instance_view: The dedicated host instance view.
943    :vartype instance_view: ~azure.mgmt.compute.v2019_07_01.models.DedicatedHostInstanceView
944    """
945
946    _validation = {
947        'id': {'readonly': True},
948        'name': {'readonly': True},
949        'type': {'readonly': True},
950        'location': {'required': True},
951        'sku': {'required': True},
952        'platform_fault_domain': {'maximum': 2, 'minimum': 0},
953        'host_id': {'readonly': True},
954        'virtual_machines': {'readonly': True},
955        'provisioning_time': {'readonly': True},
956        'provisioning_state': {'readonly': True},
957        'instance_view': {'readonly': True},
958    }
959
960    _attribute_map = {
961        'id': {'key': 'id', 'type': 'str'},
962        'name': {'key': 'name', 'type': 'str'},
963        'type': {'key': 'type', 'type': 'str'},
964        'location': {'key': 'location', 'type': 'str'},
965        'tags': {'key': 'tags', 'type': '{str}'},
966        'sku': {'key': 'sku', 'type': 'Sku'},
967        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
968        'auto_replace_on_failure': {'key': 'properties.autoReplaceOnFailure', 'type': 'bool'},
969        'host_id': {'key': 'properties.hostId', 'type': 'str'},
970        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceReadOnly]'},
971        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
972        'provisioning_time': {'key': 'properties.provisioningTime', 'type': 'iso-8601'},
973        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
974        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostInstanceView'},
975    }
976
977    def __init__(
978        self,
979        *,
980        location: str,
981        sku: "Sku",
982        tags: Optional[Dict[str, str]] = None,
983        platform_fault_domain: Optional[int] = None,
984        auto_replace_on_failure: Optional[bool] = None,
985        license_type: Optional[Union[str, "DedicatedHostLicenseTypes"]] = None,
986        **kwargs
987    ):
988        super(DedicatedHost, self).__init__(location=location, tags=tags, **kwargs)
989        self.sku = sku
990        self.platform_fault_domain = platform_fault_domain
991        self.auto_replace_on_failure = auto_replace_on_failure
992        self.host_id = None
993        self.virtual_machines = None
994        self.license_type = license_type
995        self.provisioning_time = None
996        self.provisioning_state = None
997        self.instance_view = None
998
999
1000class DedicatedHostAllocatableVM(msrest.serialization.Model):
1001    """Represents the dedicated host unutilized capacity in terms of a specific VM size.
1002
1003    :param vm_size: VM size in terms of which the unutilized capacity is represented.
1004    :type vm_size: str
1005    :param count: Maximum number of VMs of size vmSize that can fit in the dedicated host's
1006     remaining capacity.
1007    :type count: float
1008    """
1009
1010    _attribute_map = {
1011        'vm_size': {'key': 'vmSize', 'type': 'str'},
1012        'count': {'key': 'count', 'type': 'float'},
1013    }
1014
1015    def __init__(
1016        self,
1017        *,
1018        vm_size: Optional[str] = None,
1019        count: Optional[float] = None,
1020        **kwargs
1021    ):
1022        super(DedicatedHostAllocatableVM, self).__init__(**kwargs)
1023        self.vm_size = vm_size
1024        self.count = count
1025
1026
1027class DedicatedHostAvailableCapacity(msrest.serialization.Model):
1028    """Dedicated host unutilized capacity.
1029
1030    :param allocatable_v_ms: The unutilized capacity of the dedicated host represented in terms of
1031     each VM size that is allowed to be deployed to the dedicated host.
1032    :type allocatable_v_ms: list[~azure.mgmt.compute.v2019_07_01.models.DedicatedHostAllocatableVM]
1033    """
1034
1035    _attribute_map = {
1036        'allocatable_v_ms': {'key': 'allocatableVMs', 'type': '[DedicatedHostAllocatableVM]'},
1037    }
1038
1039    def __init__(
1040        self,
1041        *,
1042        allocatable_v_ms: Optional[List["DedicatedHostAllocatableVM"]] = None,
1043        **kwargs
1044    ):
1045        super(DedicatedHostAvailableCapacity, self).__init__(**kwargs)
1046        self.allocatable_v_ms = allocatable_v_ms
1047
1048
1049class DedicatedHostGroup(Resource):
1050    """Specifies information about the dedicated host group that the dedicated hosts should be assigned to. :code:`<br>`:code:`<br>` Currently, a dedicated host can only be added to a dedicated host group at creation time. An existing dedicated host cannot be added to another dedicated host group.
1051
1052    Variables are only populated by the server, and will be ignored when sending a request.
1053
1054    All required parameters must be populated in order to send to Azure.
1055
1056    :ivar id: Resource Id.
1057    :vartype id: str
1058    :ivar name: Resource name.
1059    :vartype name: str
1060    :ivar type: Resource type.
1061    :vartype type: str
1062    :param location: Required. Resource location.
1063    :type location: str
1064    :param tags: A set of tags. Resource tags.
1065    :type tags: dict[str, str]
1066    :param zones: Availability Zone to use for this host group. Only single zone is supported. The
1067     zone can be assigned only during creation. If not provided, the group supports all zones in the
1068     region. If provided, enforces each host in the group to be in the same zone.
1069    :type zones: list[str]
1070    :param platform_fault_domain_count: Number of fault domains that the host group can span.
1071    :type platform_fault_domain_count: int
1072    :ivar hosts: A list of references to all dedicated hosts in the dedicated host group.
1073    :vartype hosts: list[~azure.mgmt.compute.v2019_07_01.models.SubResourceReadOnly]
1074    """
1075
1076    _validation = {
1077        'id': {'readonly': True},
1078        'name': {'readonly': True},
1079        'type': {'readonly': True},
1080        'location': {'required': True},
1081        'platform_fault_domain_count': {'maximum': 3, 'minimum': 1},
1082        'hosts': {'readonly': True},
1083    }
1084
1085    _attribute_map = {
1086        'id': {'key': 'id', 'type': 'str'},
1087        'name': {'key': 'name', 'type': 'str'},
1088        'type': {'key': 'type', 'type': 'str'},
1089        'location': {'key': 'location', 'type': 'str'},
1090        'tags': {'key': 'tags', 'type': '{str}'},
1091        'zones': {'key': 'zones', 'type': '[str]'},
1092        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
1093        'hosts': {'key': 'properties.hosts', 'type': '[SubResourceReadOnly]'},
1094    }
1095
1096    def __init__(
1097        self,
1098        *,
1099        location: str,
1100        tags: Optional[Dict[str, str]] = None,
1101        zones: Optional[List[str]] = None,
1102        platform_fault_domain_count: Optional[int] = None,
1103        **kwargs
1104    ):
1105        super(DedicatedHostGroup, self).__init__(location=location, tags=tags, **kwargs)
1106        self.zones = zones
1107        self.platform_fault_domain_count = platform_fault_domain_count
1108        self.hosts = None
1109
1110
1111class DedicatedHostGroupListResult(msrest.serialization.Model):
1112    """The List Dedicated Host Group with resource group response.
1113
1114    All required parameters must be populated in order to send to Azure.
1115
1116    :param value: Required. The list of dedicated host groups.
1117    :type value: list[~azure.mgmt.compute.v2019_07_01.models.DedicatedHostGroup]
1118    :param next_link: The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with
1119     this URI to fetch the next page of Dedicated Host Groups.
1120    :type next_link: str
1121    """
1122
1123    _validation = {
1124        'value': {'required': True},
1125    }
1126
1127    _attribute_map = {
1128        'value': {'key': 'value', 'type': '[DedicatedHostGroup]'},
1129        'next_link': {'key': 'nextLink', 'type': 'str'},
1130    }
1131
1132    def __init__(
1133        self,
1134        *,
1135        value: List["DedicatedHostGroup"],
1136        next_link: Optional[str] = None,
1137        **kwargs
1138    ):
1139        super(DedicatedHostGroupListResult, self).__init__(**kwargs)
1140        self.value = value
1141        self.next_link = next_link
1142
1143
1144class DedicatedHostGroupUpdate(UpdateResource):
1145    """Specifies information about the dedicated host group that the dedicated host should be assigned to. Only tags may be updated.
1146
1147    Variables are only populated by the server, and will be ignored when sending a request.
1148
1149    :param tags: A set of tags. Resource tags.
1150    :type tags: dict[str, str]
1151    :param zones: Availability Zone to use for this host group. Only single zone is supported. The
1152     zone can be assigned only during creation. If not provided, the group supports all zones in the
1153     region. If provided, enforces each host in the group to be in the same zone.
1154    :type zones: list[str]
1155    :param platform_fault_domain_count: Number of fault domains that the host group can span.
1156    :type platform_fault_domain_count: int
1157    :ivar hosts: A list of references to all dedicated hosts in the dedicated host group.
1158    :vartype hosts: list[~azure.mgmt.compute.v2019_07_01.models.SubResourceReadOnly]
1159    """
1160
1161    _validation = {
1162        'platform_fault_domain_count': {'maximum': 3, 'minimum': 1},
1163        'hosts': {'readonly': True},
1164    }
1165
1166    _attribute_map = {
1167        'tags': {'key': 'tags', 'type': '{str}'},
1168        'zones': {'key': 'zones', 'type': '[str]'},
1169        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
1170        'hosts': {'key': 'properties.hosts', 'type': '[SubResourceReadOnly]'},
1171    }
1172
1173    def __init__(
1174        self,
1175        *,
1176        tags: Optional[Dict[str, str]] = None,
1177        zones: Optional[List[str]] = None,
1178        platform_fault_domain_count: Optional[int] = None,
1179        **kwargs
1180    ):
1181        super(DedicatedHostGroupUpdate, self).__init__(tags=tags, **kwargs)
1182        self.zones = zones
1183        self.platform_fault_domain_count = platform_fault_domain_count
1184        self.hosts = None
1185
1186
1187class DedicatedHostInstanceView(msrest.serialization.Model):
1188    """The instance view of a dedicated host.
1189
1190    Variables are only populated by the server, and will be ignored when sending a request.
1191
1192    :ivar asset_id: Specifies the unique id of the dedicated physical machine on which the
1193     dedicated host resides.
1194    :vartype asset_id: str
1195    :param available_capacity: Unutilized capacity of the dedicated host.
1196    :type available_capacity: ~azure.mgmt.compute.v2019_07_01.models.DedicatedHostAvailableCapacity
1197    :param statuses: The resource status information.
1198    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
1199    """
1200
1201    _validation = {
1202        'asset_id': {'readonly': True},
1203    }
1204
1205    _attribute_map = {
1206        'asset_id': {'key': 'assetId', 'type': 'str'},
1207        'available_capacity': {'key': 'availableCapacity', 'type': 'DedicatedHostAvailableCapacity'},
1208        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
1209    }
1210
1211    def __init__(
1212        self,
1213        *,
1214        available_capacity: Optional["DedicatedHostAvailableCapacity"] = None,
1215        statuses: Optional[List["InstanceViewStatus"]] = None,
1216        **kwargs
1217    ):
1218        super(DedicatedHostInstanceView, self).__init__(**kwargs)
1219        self.asset_id = None
1220        self.available_capacity = available_capacity
1221        self.statuses = statuses
1222
1223
1224class DedicatedHostListResult(msrest.serialization.Model):
1225    """The list dedicated host operation response.
1226
1227    All required parameters must be populated in order to send to Azure.
1228
1229    :param value: Required. The list of dedicated hosts.
1230    :type value: list[~azure.mgmt.compute.v2019_07_01.models.DedicatedHost]
1231    :param next_link: The URI to fetch the next page of dedicated hosts. Call ListNext() with this
1232     URI to fetch the next page of dedicated hosts.
1233    :type next_link: str
1234    """
1235
1236    _validation = {
1237        'value': {'required': True},
1238    }
1239
1240    _attribute_map = {
1241        'value': {'key': 'value', 'type': '[DedicatedHost]'},
1242        'next_link': {'key': 'nextLink', 'type': 'str'},
1243    }
1244
1245    def __init__(
1246        self,
1247        *,
1248        value: List["DedicatedHost"],
1249        next_link: Optional[str] = None,
1250        **kwargs
1251    ):
1252        super(DedicatedHostListResult, self).__init__(**kwargs)
1253        self.value = value
1254        self.next_link = next_link
1255
1256
1257class DedicatedHostUpdate(UpdateResource):
1258    """Specifies information about the dedicated host. Only tags, autoReplaceOnFailure and licenseType may be updated.
1259
1260    Variables are only populated by the server, and will be ignored when sending a request.
1261
1262    :param tags: A set of tags. Resource tags.
1263    :type tags: dict[str, str]
1264    :param platform_fault_domain: Fault domain of the dedicated host within a dedicated host group.
1265    :type platform_fault_domain: int
1266    :param auto_replace_on_failure: Specifies whether the dedicated host should be replaced
1267     automatically in case of a failure. The value is defaulted to 'true' when not provided.
1268    :type auto_replace_on_failure: bool
1269    :ivar host_id: A unique id generated and assigned to the dedicated host by the platform.
1270     :code:`<br>`:code:`<br>` Does not change throughout the lifetime of the host.
1271    :vartype host_id: str
1272    :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host.
1273    :vartype virtual_machines: list[~azure.mgmt.compute.v2019_07_01.models.SubResourceReadOnly]
1274    :param license_type: Specifies the software license type that will be applied to the VMs
1275     deployed on the dedicated host. :code:`<br>`:code:`<br>` Possible values are:
1276     :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **Windows_Server_Hybrid**
1277     :code:`<br>`:code:`<br>` **Windows_Server_Perpetual** :code:`<br>`:code:`<br>` Default:
1278     **None**. Possible values include: "None", "Windows_Server_Hybrid", "Windows_Server_Perpetual".
1279    :type license_type: str or ~azure.mgmt.compute.v2019_07_01.models.DedicatedHostLicenseTypes
1280    :ivar provisioning_time: The date when the host was first provisioned.
1281    :vartype provisioning_time: ~datetime.datetime
1282    :ivar provisioning_state: The provisioning state, which only appears in the response.
1283    :vartype provisioning_state: str
1284    :ivar instance_view: The dedicated host instance view.
1285    :vartype instance_view: ~azure.mgmt.compute.v2019_07_01.models.DedicatedHostInstanceView
1286    """
1287
1288    _validation = {
1289        'platform_fault_domain': {'maximum': 2, 'minimum': 0},
1290        'host_id': {'readonly': True},
1291        'virtual_machines': {'readonly': True},
1292        'provisioning_time': {'readonly': True},
1293        'provisioning_state': {'readonly': True},
1294        'instance_view': {'readonly': True},
1295    }
1296
1297    _attribute_map = {
1298        'tags': {'key': 'tags', 'type': '{str}'},
1299        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
1300        'auto_replace_on_failure': {'key': 'properties.autoReplaceOnFailure', 'type': 'bool'},
1301        'host_id': {'key': 'properties.hostId', 'type': 'str'},
1302        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceReadOnly]'},
1303        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
1304        'provisioning_time': {'key': 'properties.provisioningTime', 'type': 'iso-8601'},
1305        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1306        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostInstanceView'},
1307    }
1308
1309    def __init__(
1310        self,
1311        *,
1312        tags: Optional[Dict[str, str]] = None,
1313        platform_fault_domain: Optional[int] = None,
1314        auto_replace_on_failure: Optional[bool] = None,
1315        license_type: Optional[Union[str, "DedicatedHostLicenseTypes"]] = None,
1316        **kwargs
1317    ):
1318        super(DedicatedHostUpdate, self).__init__(tags=tags, **kwargs)
1319        self.platform_fault_domain = platform_fault_domain
1320        self.auto_replace_on_failure = auto_replace_on_failure
1321        self.host_id = None
1322        self.virtual_machines = None
1323        self.license_type = license_type
1324        self.provisioning_time = None
1325        self.provisioning_state = None
1326        self.instance_view = None
1327
1328
1329class DiagnosticsProfile(msrest.serialization.Model):
1330    """Specifies the boot diagnostic settings state. :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
1331
1332    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
1333     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
1334     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
1335     screenshot of the VM from the hypervisor.
1336    :type boot_diagnostics: ~azure.mgmt.compute.v2019_07_01.models.BootDiagnostics
1337    """
1338
1339    _attribute_map = {
1340        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnostics'},
1341    }
1342
1343    def __init__(
1344        self,
1345        *,
1346        boot_diagnostics: Optional["BootDiagnostics"] = None,
1347        **kwargs
1348    ):
1349        super(DiagnosticsProfile, self).__init__(**kwargs)
1350        self.boot_diagnostics = boot_diagnostics
1351
1352
1353class DiffDiskSettings(msrest.serialization.Model):
1354    """Describes the parameters of ephemeral disk settings that can be specified for operating system disk. :code:`<br>`:code:`<br>` NOTE: The ephemeral disk settings can only be specified for managed disk.
1355
1356    :param option: Specifies the ephemeral disk settings for operating system disk. Possible values
1357     include: "Local".
1358    :type option: str or ~azure.mgmt.compute.v2019_07_01.models.DiffDiskOptions
1359    """
1360
1361    _attribute_map = {
1362        'option': {'key': 'option', 'type': 'str'},
1363    }
1364
1365    def __init__(
1366        self,
1367        *,
1368        option: Optional[Union[str, "DiffDiskOptions"]] = None,
1369        **kwargs
1370    ):
1371        super(DiffDiskSettings, self).__init__(**kwargs)
1372        self.option = option
1373
1374
1375class Disallowed(msrest.serialization.Model):
1376    """Describes the disallowed disk types.
1377
1378    :param disk_types: A list of disk types.
1379    :type disk_types: list[str]
1380    """
1381
1382    _attribute_map = {
1383        'disk_types': {'key': 'diskTypes', 'type': '[str]'},
1384    }
1385
1386    def __init__(
1387        self,
1388        *,
1389        disk_types: Optional[List[str]] = None,
1390        **kwargs
1391    ):
1392        super(Disallowed, self).__init__(**kwargs)
1393        self.disk_types = disk_types
1394
1395
1396class Disk(Resource):
1397    """Disk resource.
1398
1399    Variables are only populated by the server, and will be ignored when sending a request.
1400
1401    All required parameters must be populated in order to send to Azure.
1402
1403    :ivar id: Resource Id.
1404    :vartype id: str
1405    :ivar name: Resource name.
1406    :vartype name: str
1407    :ivar type: Resource type.
1408    :vartype type: str
1409    :param location: Required. Resource location.
1410    :type location: str
1411    :param tags: A set of tags. Resource tags.
1412    :type tags: dict[str, str]
1413    :ivar managed_by: A relative URI containing the ID of the VM that has the disk attached.
1414    :vartype managed_by: str
1415    :param sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, or
1416     UltraSSD_LRS.
1417    :type sku: ~azure.mgmt.compute.v2019_07_01.models.DiskSku
1418    :param zones: The Logical zone list for Disk.
1419    :type zones: list[str]
1420    :ivar time_created: The time when the disk was created.
1421    :vartype time_created: ~datetime.datetime
1422    :param os_type: The Operating System type. Possible values include: "Windows", "Linux".
1423    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
1424    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
1425     disks only. Possible values include: "V1", "V2".
1426    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGeneration
1427    :param creation_data: Disk source information. CreationData information cannot be changed after
1428     the disk has been created.
1429    :type creation_data: ~azure.mgmt.compute.v2019_07_01.models.CreationData
1430    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
1431     indicates the size of the disk to create. If this field is present for updates or creation with
1432     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
1433     running VM, and can only increase the disk's size.
1434    :type disk_size_gb: int
1435    :ivar disk_size_bytes: The size of the disk in bytes. This field is read only.
1436    :vartype disk_size_bytes: long
1437    :ivar unique_id: Unique Guid identifying the resource.
1438    :vartype unique_id: str
1439    :param encryption_settings_collection: Encryption settings collection used for Azure Disk
1440     Encryption, can contain multiple encryption settings per disk or snapshot.
1441    :type encryption_settings_collection:
1442     ~azure.mgmt.compute.v2019_07_01.models.EncryptionSettingsCollection
1443    :ivar provisioning_state: The disk provisioning state.
1444    :vartype provisioning_state: str
1445    :param disk_iops_read_write: The number of IOPS allowed for this disk; only settable for
1446     UltraSSD disks. One operation can transfer between 4k and 256k bytes.
1447    :type disk_iops_read_write: long
1448    :param disk_m_bps_read_write: The bandwidth allowed for this disk; only settable for UltraSSD
1449     disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of
1450     10.
1451    :type disk_m_bps_read_write: int
1452    :ivar disk_state: The state of the disk. Possible values include: "Unattached", "Attached",
1453     "Reserved", "ActiveSAS", "ReadyToUpload", "ActiveUpload".
1454    :vartype disk_state: str or ~azure.mgmt.compute.v2019_07_01.models.DiskState
1455    :param encryption: Encryption property can be used to encrypt data at rest with customer
1456     managed keys or platform managed keys.
1457    :type encryption: ~azure.mgmt.compute.v2019_07_01.models.Encryption
1458    """
1459
1460    _validation = {
1461        'id': {'readonly': True},
1462        'name': {'readonly': True},
1463        'type': {'readonly': True},
1464        'location': {'required': True},
1465        'managed_by': {'readonly': True},
1466        'time_created': {'readonly': True},
1467        'disk_size_bytes': {'readonly': True},
1468        'unique_id': {'readonly': True},
1469        'provisioning_state': {'readonly': True},
1470        'disk_state': {'readonly': True},
1471    }
1472
1473    _attribute_map = {
1474        'id': {'key': 'id', 'type': 'str'},
1475        'name': {'key': 'name', 'type': 'str'},
1476        'type': {'key': 'type', 'type': 'str'},
1477        'location': {'key': 'location', 'type': 'str'},
1478        'tags': {'key': 'tags', 'type': '{str}'},
1479        'managed_by': {'key': 'managedBy', 'type': 'str'},
1480        'sku': {'key': 'sku', 'type': 'DiskSku'},
1481        'zones': {'key': 'zones', 'type': '[str]'},
1482        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
1483        'os_type': {'key': 'properties.osType', 'type': 'str'},
1484        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
1485        'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'},
1486        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
1487        'disk_size_bytes': {'key': 'properties.diskSizeBytes', 'type': 'long'},
1488        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
1489        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
1490        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1491        'disk_iops_read_write': {'key': 'properties.diskIOPSReadWrite', 'type': 'long'},
1492        'disk_m_bps_read_write': {'key': 'properties.diskMBpsReadWrite', 'type': 'int'},
1493        'disk_state': {'key': 'properties.diskState', 'type': 'str'},
1494        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
1495    }
1496
1497    def __init__(
1498        self,
1499        *,
1500        location: str,
1501        tags: Optional[Dict[str, str]] = None,
1502        sku: Optional["DiskSku"] = None,
1503        zones: Optional[List[str]] = None,
1504        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1505        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
1506        creation_data: Optional["CreationData"] = None,
1507        disk_size_gb: Optional[int] = None,
1508        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
1509        disk_iops_read_write: Optional[int] = None,
1510        disk_m_bps_read_write: Optional[int] = None,
1511        encryption: Optional["Encryption"] = None,
1512        **kwargs
1513    ):
1514        super(Disk, self).__init__(location=location, tags=tags, **kwargs)
1515        self.managed_by = None
1516        self.sku = sku
1517        self.zones = zones
1518        self.time_created = None
1519        self.os_type = os_type
1520        self.hyper_v_generation = hyper_v_generation
1521        self.creation_data = creation_data
1522        self.disk_size_gb = disk_size_gb
1523        self.disk_size_bytes = None
1524        self.unique_id = None
1525        self.encryption_settings_collection = encryption_settings_collection
1526        self.provisioning_state = None
1527        self.disk_iops_read_write = disk_iops_read_write
1528        self.disk_m_bps_read_write = disk_m_bps_read_write
1529        self.disk_state = None
1530        self.encryption = encryption
1531
1532
1533class DiskEncryptionSet(Resource):
1534    """disk encryption set resource.
1535
1536    Variables are only populated by the server, and will be ignored when sending a request.
1537
1538    All required parameters must be populated in order to send to Azure.
1539
1540    :ivar id: Resource Id.
1541    :vartype id: str
1542    :ivar name: Resource name.
1543    :vartype name: str
1544    :ivar type: Resource type.
1545    :vartype type: str
1546    :param location: Required. Resource location.
1547    :type location: str
1548    :param tags: A set of tags. Resource tags.
1549    :type tags: dict[str, str]
1550    :param identity: The managed identity for the disk encryption set. It should be given
1551     permission on the key vault before it can be used to encrypt disks.
1552    :type identity: ~azure.mgmt.compute.v2019_07_01.models.EncryptionSetIdentity
1553    :param active_key: The key vault key which is currently used by this disk encryption set.
1554    :type active_key: ~azure.mgmt.compute.v2019_07_01.models.KeyVaultAndKeyReference
1555    :ivar previous_keys: A readonly collection of key vault keys previously used by this disk
1556     encryption set while a key rotation is in progress. It will be empty if there is no ongoing key
1557     rotation.
1558    :vartype previous_keys: list[~azure.mgmt.compute.v2019_07_01.models.KeyVaultAndKeyReference]
1559    :ivar provisioning_state: The disk encryption set provisioning state.
1560    :vartype provisioning_state: str
1561    """
1562
1563    _validation = {
1564        'id': {'readonly': True},
1565        'name': {'readonly': True},
1566        'type': {'readonly': True},
1567        'location': {'required': True},
1568        'previous_keys': {'readonly': True},
1569        'provisioning_state': {'readonly': True},
1570    }
1571
1572    _attribute_map = {
1573        'id': {'key': 'id', 'type': 'str'},
1574        'name': {'key': 'name', 'type': 'str'},
1575        'type': {'key': 'type', 'type': 'str'},
1576        'location': {'key': 'location', 'type': 'str'},
1577        'tags': {'key': 'tags', 'type': '{str}'},
1578        'identity': {'key': 'identity', 'type': 'EncryptionSetIdentity'},
1579        'active_key': {'key': 'properties.activeKey', 'type': 'KeyVaultAndKeyReference'},
1580        'previous_keys': {'key': 'properties.previousKeys', 'type': '[KeyVaultAndKeyReference]'},
1581        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1582    }
1583
1584    def __init__(
1585        self,
1586        *,
1587        location: str,
1588        tags: Optional[Dict[str, str]] = None,
1589        identity: Optional["EncryptionSetIdentity"] = None,
1590        active_key: Optional["KeyVaultAndKeyReference"] = None,
1591        **kwargs
1592    ):
1593        super(DiskEncryptionSet, self).__init__(location=location, tags=tags, **kwargs)
1594        self.identity = identity
1595        self.active_key = active_key
1596        self.previous_keys = None
1597        self.provisioning_state = None
1598
1599
1600class DiskEncryptionSetList(msrest.serialization.Model):
1601    """The List disk encryption set operation response.
1602
1603    All required parameters must be populated in order to send to Azure.
1604
1605    :param value: Required. A list of disk encryption sets.
1606    :type value: list[~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSet]
1607    :param next_link: The uri to fetch the next page of disk encryption sets. Call ListNext() with
1608     this to fetch the next page of disk encryption sets.
1609    :type next_link: str
1610    """
1611
1612    _validation = {
1613        'value': {'required': True},
1614    }
1615
1616    _attribute_map = {
1617        'value': {'key': 'value', 'type': '[DiskEncryptionSet]'},
1618        'next_link': {'key': 'nextLink', 'type': 'str'},
1619    }
1620
1621    def __init__(
1622        self,
1623        *,
1624        value: List["DiskEncryptionSet"],
1625        next_link: Optional[str] = None,
1626        **kwargs
1627    ):
1628        super(DiskEncryptionSetList, self).__init__(**kwargs)
1629        self.value = value
1630        self.next_link = next_link
1631
1632
1633class SubResource(msrest.serialization.Model):
1634    """SubResource.
1635
1636    :param id: Resource Id.
1637    :type id: str
1638    """
1639
1640    _attribute_map = {
1641        'id': {'key': 'id', 'type': 'str'},
1642    }
1643
1644    def __init__(
1645        self,
1646        *,
1647        id: Optional[str] = None,
1648        **kwargs
1649    ):
1650        super(SubResource, self).__init__(**kwargs)
1651        self.id = id
1652
1653
1654class DiskEncryptionSetParameters(SubResource):
1655    """Describes the parameter of customer managed disk encryption set resource id that can be specified for disk. :code:`<br>`:code:`<br>` NOTE: The disk encryption set resource id can only be specified for managed disk. Please refer https://aka.ms/mdssewithcmkoverview for more details.
1656
1657    :param id: Resource Id.
1658    :type id: str
1659    """
1660
1661    _attribute_map = {
1662        'id': {'key': 'id', 'type': 'str'},
1663    }
1664
1665    def __init__(
1666        self,
1667        *,
1668        id: Optional[str] = None,
1669        **kwargs
1670    ):
1671        super(DiskEncryptionSetParameters, self).__init__(id=id, **kwargs)
1672
1673
1674class DiskEncryptionSettings(msrest.serialization.Model):
1675    """Describes a Encryption Settings for a Disk.
1676
1677    :param disk_encryption_key: Specifies the location of the disk encryption key, which is a Key
1678     Vault Secret.
1679    :type disk_encryption_key: ~azure.mgmt.compute.v2019_07_01.models.KeyVaultSecretReference
1680    :param key_encryption_key: Specifies the location of the key encryption key in Key Vault.
1681    :type key_encryption_key: ~azure.mgmt.compute.v2019_07_01.models.KeyVaultKeyReference
1682    :param enabled: Specifies whether disk encryption should be enabled on the virtual machine.
1683    :type enabled: bool
1684    """
1685
1686    _attribute_map = {
1687        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultSecretReference'},
1688        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultKeyReference'},
1689        'enabled': {'key': 'enabled', 'type': 'bool'},
1690    }
1691
1692    def __init__(
1693        self,
1694        *,
1695        disk_encryption_key: Optional["KeyVaultSecretReference"] = None,
1696        key_encryption_key: Optional["KeyVaultKeyReference"] = None,
1697        enabled: Optional[bool] = None,
1698        **kwargs
1699    ):
1700        super(DiskEncryptionSettings, self).__init__(**kwargs)
1701        self.disk_encryption_key = disk_encryption_key
1702        self.key_encryption_key = key_encryption_key
1703        self.enabled = enabled
1704
1705
1706class DiskEncryptionSetUpdate(msrest.serialization.Model):
1707    """disk encryption set update resource.
1708
1709    :param tags: A set of tags. Resource tags.
1710    :type tags: dict[str, str]
1711    :param active_key: Key Vault Key Url and vault id of KeK, KeK is optional and when provided is
1712     used to unwrap the encryptionKey.
1713    :type active_key: ~azure.mgmt.compute.v2019_07_01.models.KeyVaultAndKeyReference
1714    """
1715
1716    _attribute_map = {
1717        'tags': {'key': 'tags', 'type': '{str}'},
1718        'active_key': {'key': 'properties.activeKey', 'type': 'KeyVaultAndKeyReference'},
1719    }
1720
1721    def __init__(
1722        self,
1723        *,
1724        tags: Optional[Dict[str, str]] = None,
1725        active_key: Optional["KeyVaultAndKeyReference"] = None,
1726        **kwargs
1727    ):
1728        super(DiskEncryptionSetUpdate, self).__init__(**kwargs)
1729        self.tags = tags
1730        self.active_key = active_key
1731
1732
1733class DiskInstanceView(msrest.serialization.Model):
1734    """The instance view of the disk.
1735
1736    :param name: The disk name.
1737    :type name: str
1738    :param encryption_settings: Specifies the encryption settings for the OS Disk.
1739     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
1740    :type encryption_settings: list[~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSettings]
1741    :param statuses: The resource status information.
1742    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
1743    """
1744
1745    _attribute_map = {
1746        'name': {'key': 'name', 'type': 'str'},
1747        'encryption_settings': {'key': 'encryptionSettings', 'type': '[DiskEncryptionSettings]'},
1748        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
1749    }
1750
1751    def __init__(
1752        self,
1753        *,
1754        name: Optional[str] = None,
1755        encryption_settings: Optional[List["DiskEncryptionSettings"]] = None,
1756        statuses: Optional[List["InstanceViewStatus"]] = None,
1757        **kwargs
1758    ):
1759        super(DiskInstanceView, self).__init__(**kwargs)
1760        self.name = name
1761        self.encryption_settings = encryption_settings
1762        self.statuses = statuses
1763
1764
1765class DiskList(msrest.serialization.Model):
1766    """The List Disks operation response.
1767
1768    All required parameters must be populated in order to send to Azure.
1769
1770    :param value: Required. A list of disks.
1771    :type value: list[~azure.mgmt.compute.v2019_07_01.models.Disk]
1772    :param next_link: The uri to fetch the next page of disks. Call ListNext() with this to fetch
1773     the next page of disks.
1774    :type next_link: str
1775    """
1776
1777    _validation = {
1778        'value': {'required': True},
1779    }
1780
1781    _attribute_map = {
1782        'value': {'key': 'value', 'type': '[Disk]'},
1783        'next_link': {'key': 'nextLink', 'type': 'str'},
1784    }
1785
1786    def __init__(
1787        self,
1788        *,
1789        value: List["Disk"],
1790        next_link: Optional[str] = None,
1791        **kwargs
1792    ):
1793        super(DiskList, self).__init__(**kwargs)
1794        self.value = value
1795        self.next_link = next_link
1796
1797
1798class DiskSku(msrest.serialization.Model):
1799    """The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, or UltraSSD_LRS.
1800
1801    Variables are only populated by the server, and will be ignored when sending a request.
1802
1803    :param name: The sku name. Possible values include: "Standard_LRS", "Premium_LRS",
1804     "StandardSSD_LRS", "UltraSSD_LRS".
1805    :type name: str or ~azure.mgmt.compute.v2019_07_01.models.DiskStorageAccountTypes
1806    :ivar tier: The sku tier.
1807    :vartype tier: str
1808    """
1809
1810    _validation = {
1811        'tier': {'readonly': True},
1812    }
1813
1814    _attribute_map = {
1815        'name': {'key': 'name', 'type': 'str'},
1816        'tier': {'key': 'tier', 'type': 'str'},
1817    }
1818
1819    def __init__(
1820        self,
1821        *,
1822        name: Optional[Union[str, "DiskStorageAccountTypes"]] = None,
1823        **kwargs
1824    ):
1825        super(DiskSku, self).__init__(**kwargs)
1826        self.name = name
1827        self.tier = None
1828
1829
1830class DiskUpdate(msrest.serialization.Model):
1831    """Disk update resource.
1832
1833    :param tags: A set of tags. Resource tags.
1834    :type tags: dict[str, str]
1835    :param sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, or
1836     UltraSSD_LRS.
1837    :type sku: ~azure.mgmt.compute.v2019_07_01.models.DiskSku
1838    :param os_type: the Operating System type. Possible values include: "Windows", "Linux".
1839    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
1840    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
1841     indicates the size of the disk to create. If this field is present for updates or creation with
1842     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
1843     running VM, and can only increase the disk's size.
1844    :type disk_size_gb: int
1845    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
1846     Encryption, can contain multiple encryption settings per disk or snapshot.
1847    :type encryption_settings_collection:
1848     ~azure.mgmt.compute.v2019_07_01.models.EncryptionSettingsCollection
1849    :param disk_iops_read_write: The number of IOPS allowed for this disk; only settable for
1850     UltraSSD disks. One operation can transfer between 4k and 256k bytes.
1851    :type disk_iops_read_write: long
1852    :param disk_m_bps_read_write: The bandwidth allowed for this disk; only settable for UltraSSD
1853     disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of
1854     10.
1855    :type disk_m_bps_read_write: int
1856    :param encryption: Encryption property can be used to encrypt data at rest with customer
1857     managed keys or platform managed keys.
1858    :type encryption: ~azure.mgmt.compute.v2019_07_01.models.Encryption
1859    """
1860
1861    _attribute_map = {
1862        'tags': {'key': 'tags', 'type': '{str}'},
1863        'sku': {'key': 'sku', 'type': 'DiskSku'},
1864        'os_type': {'key': 'properties.osType', 'type': 'str'},
1865        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
1866        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
1867        'disk_iops_read_write': {'key': 'properties.diskIOPSReadWrite', 'type': 'long'},
1868        'disk_m_bps_read_write': {'key': 'properties.diskMBpsReadWrite', 'type': 'int'},
1869        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
1870    }
1871
1872    def __init__(
1873        self,
1874        *,
1875        tags: Optional[Dict[str, str]] = None,
1876        sku: Optional["DiskSku"] = None,
1877        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1878        disk_size_gb: Optional[int] = None,
1879        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
1880        disk_iops_read_write: Optional[int] = None,
1881        disk_m_bps_read_write: Optional[int] = None,
1882        encryption: Optional["Encryption"] = None,
1883        **kwargs
1884    ):
1885        super(DiskUpdate, self).__init__(**kwargs)
1886        self.tags = tags
1887        self.sku = sku
1888        self.os_type = os_type
1889        self.disk_size_gb = disk_size_gb
1890        self.encryption_settings_collection = encryption_settings_collection
1891        self.disk_iops_read_write = disk_iops_read_write
1892        self.disk_m_bps_read_write = disk_m_bps_read_write
1893        self.encryption = encryption
1894
1895
1896class Encryption(msrest.serialization.Model):
1897    """Encryption at rest settings for disk or snapshot.
1898
1899    All required parameters must be populated in order to send to Azure.
1900
1901    :param disk_encryption_set_id: ResourceId of the disk encryption set to use for enabling
1902     encryption at rest.
1903    :type disk_encryption_set_id: str
1904    :param type: Required. The type of key used to encrypt the data of the disk. Possible values
1905     include: "EncryptionAtRestWithPlatformKey", "EncryptionAtRestWithCustomerKey".
1906    :type type: str or ~azure.mgmt.compute.v2019_07_01.models.EncryptionType
1907    """
1908
1909    _validation = {
1910        'type': {'required': True},
1911    }
1912
1913    _attribute_map = {
1914        'disk_encryption_set_id': {'key': 'diskEncryptionSetId', 'type': 'str'},
1915        'type': {'key': 'type', 'type': 'str'},
1916    }
1917
1918    def __init__(
1919        self,
1920        *,
1921        type: Union[str, "EncryptionType"],
1922        disk_encryption_set_id: Optional[str] = None,
1923        **kwargs
1924    ):
1925        super(Encryption, self).__init__(**kwargs)
1926        self.disk_encryption_set_id = disk_encryption_set_id
1927        self.type = type
1928
1929
1930class EncryptionSetIdentity(msrest.serialization.Model):
1931    """The managed identity for the disk encryption set. It should be given permission on the key vault before it can be used to encrypt disks.
1932
1933    Variables are only populated by the server, and will be ignored when sending a request.
1934
1935    :param type: The type of Managed Identity used by the DiskEncryptionSet. Only SystemAssigned is
1936     supported. Possible values include: "SystemAssigned".
1937    :type type: str or ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSetIdentityType
1938    :ivar principal_id: The object id of the Managed Identity Resource. This will be sent to the RP
1939     from ARM via the x-ms-identity-principal-id header in the PUT request if the resource has a
1940     systemAssigned(implicit) identity.
1941    :vartype principal_id: str
1942    :ivar tenant_id: The tenant id of the Managed Identity Resource. This will be sent to the RP
1943     from ARM via the x-ms-client-tenant-id header in the PUT request if the resource has a
1944     systemAssigned(implicit) identity.
1945    :vartype tenant_id: str
1946    """
1947
1948    _validation = {
1949        'principal_id': {'readonly': True},
1950        'tenant_id': {'readonly': True},
1951    }
1952
1953    _attribute_map = {
1954        'type': {'key': 'type', 'type': 'str'},
1955        'principal_id': {'key': 'principalId', 'type': 'str'},
1956        'tenant_id': {'key': 'tenantId', 'type': 'str'},
1957    }
1958
1959    def __init__(
1960        self,
1961        *,
1962        type: Optional[Union[str, "DiskEncryptionSetIdentityType"]] = None,
1963        **kwargs
1964    ):
1965        super(EncryptionSetIdentity, self).__init__(**kwargs)
1966        self.type = type
1967        self.principal_id = None
1968        self.tenant_id = None
1969
1970
1971class EncryptionSettingsCollection(msrest.serialization.Model):
1972    """Encryption settings for disk or snapshot.
1973
1974    All required parameters must be populated in order to send to Azure.
1975
1976    :param enabled: Required. Set this flag to true and provide DiskEncryptionKey and optional
1977     KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and
1978     KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object,
1979     the existing settings remain unchanged.
1980    :type enabled: bool
1981    :param encryption_settings: A collection of encryption settings, one for each disk volume.
1982    :type encryption_settings:
1983     list[~azure.mgmt.compute.v2019_07_01.models.EncryptionSettingsElement]
1984    :param encryption_settings_version: Describes what type of encryption is used for the disks.
1985     Once this field is set, it cannot be overwritten. '1.0' corresponds to Azure Disk Encryption
1986     with AAD app.'1.1' corresponds to Azure Disk Encryption.
1987    :type encryption_settings_version: str
1988    """
1989
1990    _validation = {
1991        'enabled': {'required': True},
1992    }
1993
1994    _attribute_map = {
1995        'enabled': {'key': 'enabled', 'type': 'bool'},
1996        'encryption_settings': {'key': 'encryptionSettings', 'type': '[EncryptionSettingsElement]'},
1997        'encryption_settings_version': {'key': 'encryptionSettingsVersion', 'type': 'str'},
1998    }
1999
2000    def __init__(
2001        self,
2002        *,
2003        enabled: bool,
2004        encryption_settings: Optional[List["EncryptionSettingsElement"]] = None,
2005        encryption_settings_version: Optional[str] = None,
2006        **kwargs
2007    ):
2008        super(EncryptionSettingsCollection, self).__init__(**kwargs)
2009        self.enabled = enabled
2010        self.encryption_settings = encryption_settings
2011        self.encryption_settings_version = encryption_settings_version
2012
2013
2014class EncryptionSettingsElement(msrest.serialization.Model):
2015    """Encryption settings for one disk volume.
2016
2017    :param disk_encryption_key: Key Vault Secret Url and vault id of the disk encryption key.
2018    :type disk_encryption_key: ~azure.mgmt.compute.v2019_07_01.models.KeyVaultAndSecretReference
2019    :param key_encryption_key: Key Vault Key Url and vault id of the key encryption key.
2020     KeyEncryptionKey is optional and when provided is used to unwrap the disk encryption key.
2021    :type key_encryption_key: ~azure.mgmt.compute.v2019_07_01.models.KeyVaultAndKeyReference
2022    """
2023
2024    _attribute_map = {
2025        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultAndSecretReference'},
2026        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultAndKeyReference'},
2027    }
2028
2029    def __init__(
2030        self,
2031        *,
2032        disk_encryption_key: Optional["KeyVaultAndSecretReference"] = None,
2033        key_encryption_key: Optional["KeyVaultAndKeyReference"] = None,
2034        **kwargs
2035    ):
2036        super(EncryptionSettingsElement, self).__init__(**kwargs)
2037        self.disk_encryption_key = disk_encryption_key
2038        self.key_encryption_key = key_encryption_key
2039
2040
2041class Gallery(Resource):
2042    """Specifies information about the Shared Image Gallery that you want to create or update.
2043
2044    Variables are only populated by the server, and will be ignored when sending a request.
2045
2046    All required parameters must be populated in order to send to Azure.
2047
2048    :ivar id: Resource Id.
2049    :vartype id: str
2050    :ivar name: Resource name.
2051    :vartype name: str
2052    :ivar type: Resource type.
2053    :vartype type: str
2054    :param location: Required. Resource location.
2055    :type location: str
2056    :param tags: A set of tags. Resource tags.
2057    :type tags: dict[str, str]
2058    :param description: The description of this Shared Image Gallery resource. This property is
2059     updatable.
2060    :type description: str
2061    :param identifier: Describes the gallery unique name.
2062    :type identifier: ~azure.mgmt.compute.v2019_07_01.models.GalleryIdentifier
2063    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2064     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2065    :vartype provisioning_state: str or
2066     ~azure.mgmt.compute.v2019_07_01.models.GalleryPropertiesProvisioningState
2067    """
2068
2069    _validation = {
2070        'id': {'readonly': True},
2071        'name': {'readonly': True},
2072        'type': {'readonly': True},
2073        'location': {'required': True},
2074        'provisioning_state': {'readonly': True},
2075    }
2076
2077    _attribute_map = {
2078        'id': {'key': 'id', 'type': 'str'},
2079        'name': {'key': 'name', 'type': 'str'},
2080        'type': {'key': 'type', 'type': 'str'},
2081        'location': {'key': 'location', 'type': 'str'},
2082        'tags': {'key': 'tags', 'type': '{str}'},
2083        'description': {'key': 'properties.description', 'type': 'str'},
2084        'identifier': {'key': 'properties.identifier', 'type': 'GalleryIdentifier'},
2085        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2086    }
2087
2088    def __init__(
2089        self,
2090        *,
2091        location: str,
2092        tags: Optional[Dict[str, str]] = None,
2093        description: Optional[str] = None,
2094        identifier: Optional["GalleryIdentifier"] = None,
2095        **kwargs
2096    ):
2097        super(Gallery, self).__init__(location=location, tags=tags, **kwargs)
2098        self.description = description
2099        self.identifier = identifier
2100        self.provisioning_state = None
2101
2102
2103class GalleryApplication(Resource):
2104    """Specifies information about the gallery Application Definition that you want to create or update.
2105
2106    Variables are only populated by the server, and will be ignored when sending a request.
2107
2108    All required parameters must be populated in order to send to Azure.
2109
2110    :ivar id: Resource Id.
2111    :vartype id: str
2112    :ivar name: Resource name.
2113    :vartype name: str
2114    :ivar type: Resource type.
2115    :vartype type: str
2116    :param location: Required. Resource location.
2117    :type location: str
2118    :param tags: A set of tags. Resource tags.
2119    :type tags: dict[str, str]
2120    :param description: The description of this gallery Application Definition resource. This
2121     property is updatable.
2122    :type description: str
2123    :param eula: The Eula agreement for the gallery Application Definition.
2124    :type eula: str
2125    :param privacy_statement_uri: The privacy statement uri.
2126    :type privacy_statement_uri: str
2127    :param release_note_uri: The release note uri.
2128    :type release_note_uri: str
2129    :param end_of_life_date: The end of life date of the gallery Application Definition. This
2130     property can be used for decommissioning purposes. This property is updatable.
2131    :type end_of_life_date: ~datetime.datetime
2132    :param supported_os_type: This property allows you to specify the supported type of the OS that
2133     application is built for. :code:`<br>`:code:`<br>` Possible values are:
2134     :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible values
2135     include: "Windows", "Linux".
2136    :type supported_os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
2137    """
2138
2139    _validation = {
2140        'id': {'readonly': True},
2141        'name': {'readonly': True},
2142        'type': {'readonly': True},
2143        'location': {'required': True},
2144    }
2145
2146    _attribute_map = {
2147        'id': {'key': 'id', 'type': 'str'},
2148        'name': {'key': 'name', 'type': 'str'},
2149        'type': {'key': 'type', 'type': 'str'},
2150        'location': {'key': 'location', 'type': 'str'},
2151        'tags': {'key': 'tags', 'type': '{str}'},
2152        'description': {'key': 'properties.description', 'type': 'str'},
2153        'eula': {'key': 'properties.eula', 'type': 'str'},
2154        'privacy_statement_uri': {'key': 'properties.privacyStatementUri', 'type': 'str'},
2155        'release_note_uri': {'key': 'properties.releaseNoteUri', 'type': 'str'},
2156        'end_of_life_date': {'key': 'properties.endOfLifeDate', 'type': 'iso-8601'},
2157        'supported_os_type': {'key': 'properties.supportedOSType', 'type': 'str'},
2158    }
2159
2160    def __init__(
2161        self,
2162        *,
2163        location: str,
2164        tags: Optional[Dict[str, str]] = None,
2165        description: Optional[str] = None,
2166        eula: Optional[str] = None,
2167        privacy_statement_uri: Optional[str] = None,
2168        release_note_uri: Optional[str] = None,
2169        end_of_life_date: Optional[datetime.datetime] = None,
2170        supported_os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
2171        **kwargs
2172    ):
2173        super(GalleryApplication, self).__init__(location=location, tags=tags, **kwargs)
2174        self.description = description
2175        self.eula = eula
2176        self.privacy_statement_uri = privacy_statement_uri
2177        self.release_note_uri = release_note_uri
2178        self.end_of_life_date = end_of_life_date
2179        self.supported_os_type = supported_os_type
2180
2181
2182class GalleryApplicationList(msrest.serialization.Model):
2183    """The List Gallery Applications operation response.
2184
2185    All required parameters must be populated in order to send to Azure.
2186
2187    :param value: Required. A list of Gallery Applications.
2188    :type value: list[~azure.mgmt.compute.v2019_07_01.models.GalleryApplication]
2189    :param next_link: The uri to fetch the next page of Application Definitions in the Application
2190     Gallery. Call ListNext() with this to fetch the next page of gallery Application Definitions.
2191    :type next_link: str
2192    """
2193
2194    _validation = {
2195        'value': {'required': True},
2196    }
2197
2198    _attribute_map = {
2199        'value': {'key': 'value', 'type': '[GalleryApplication]'},
2200        'next_link': {'key': 'nextLink', 'type': 'str'},
2201    }
2202
2203    def __init__(
2204        self,
2205        *,
2206        value: List["GalleryApplication"],
2207        next_link: Optional[str] = None,
2208        **kwargs
2209    ):
2210        super(GalleryApplicationList, self).__init__(**kwargs)
2211        self.value = value
2212        self.next_link = next_link
2213
2214
2215class GalleryApplicationUpdate(UpdateResource):
2216    """Specifies information about the gallery Application Definition that you want to update.
2217
2218    :param tags: A set of tags. Resource tags.
2219    :type tags: dict[str, str]
2220    :param description: The description of this gallery Application Definition resource. This
2221     property is updatable.
2222    :type description: str
2223    :param eula: The Eula agreement for the gallery Application Definition.
2224    :type eula: str
2225    :param privacy_statement_uri: The privacy statement uri.
2226    :type privacy_statement_uri: str
2227    :param release_note_uri: The release note uri.
2228    :type release_note_uri: str
2229    :param end_of_life_date: The end of life date of the gallery Application Definition. This
2230     property can be used for decommissioning purposes. This property is updatable.
2231    :type end_of_life_date: ~datetime.datetime
2232    :param supported_os_type: This property allows you to specify the supported type of the OS that
2233     application is built for. :code:`<br>`:code:`<br>` Possible values are:
2234     :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible values
2235     include: "Windows", "Linux".
2236    :type supported_os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
2237    """
2238
2239    _attribute_map = {
2240        'tags': {'key': 'tags', 'type': '{str}'},
2241        'description': {'key': 'properties.description', 'type': 'str'},
2242        'eula': {'key': 'properties.eula', 'type': 'str'},
2243        'privacy_statement_uri': {'key': 'properties.privacyStatementUri', 'type': 'str'},
2244        'release_note_uri': {'key': 'properties.releaseNoteUri', 'type': 'str'},
2245        'end_of_life_date': {'key': 'properties.endOfLifeDate', 'type': 'iso-8601'},
2246        'supported_os_type': {'key': 'properties.supportedOSType', 'type': 'str'},
2247    }
2248
2249    def __init__(
2250        self,
2251        *,
2252        tags: Optional[Dict[str, str]] = None,
2253        description: Optional[str] = None,
2254        eula: Optional[str] = None,
2255        privacy_statement_uri: Optional[str] = None,
2256        release_note_uri: Optional[str] = None,
2257        end_of_life_date: Optional[datetime.datetime] = None,
2258        supported_os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
2259        **kwargs
2260    ):
2261        super(GalleryApplicationUpdate, self).__init__(tags=tags, **kwargs)
2262        self.description = description
2263        self.eula = eula
2264        self.privacy_statement_uri = privacy_statement_uri
2265        self.release_note_uri = release_note_uri
2266        self.end_of_life_date = end_of_life_date
2267        self.supported_os_type = supported_os_type
2268
2269
2270class GalleryApplicationVersion(Resource):
2271    """Specifies information about the gallery Application Version that you want to create or update.
2272
2273    Variables are only populated by the server, and will be ignored when sending a request.
2274
2275    All required parameters must be populated in order to send to Azure.
2276
2277    :ivar id: Resource Id.
2278    :vartype id: str
2279    :ivar name: Resource name.
2280    :vartype name: str
2281    :ivar type: Resource type.
2282    :vartype type: str
2283    :param location: Required. Resource location.
2284    :type location: str
2285    :param tags: A set of tags. Resource tags.
2286    :type tags: dict[str, str]
2287    :param publishing_profile: The publishing profile of a gallery image version.
2288    :type publishing_profile:
2289     ~azure.mgmt.compute.v2019_07_01.models.GalleryApplicationVersionPublishingProfile
2290    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2291     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2292    :vartype provisioning_state: str or
2293     ~azure.mgmt.compute.v2019_07_01.models.GalleryApplicationVersionPropertiesProvisioningState
2294    :ivar replication_status: This is the replication status of the gallery Image Version.
2295    :vartype replication_status: ~azure.mgmt.compute.v2019_07_01.models.ReplicationStatus
2296    """
2297
2298    _validation = {
2299        'id': {'readonly': True},
2300        'name': {'readonly': True},
2301        'type': {'readonly': True},
2302        'location': {'required': True},
2303        'provisioning_state': {'readonly': True},
2304        'replication_status': {'readonly': True},
2305    }
2306
2307    _attribute_map = {
2308        'id': {'key': 'id', 'type': 'str'},
2309        'name': {'key': 'name', 'type': 'str'},
2310        'type': {'key': 'type', 'type': 'str'},
2311        'location': {'key': 'location', 'type': 'str'},
2312        'tags': {'key': 'tags', 'type': '{str}'},
2313        'publishing_profile': {'key': 'properties.publishingProfile', 'type': 'GalleryApplicationVersionPublishingProfile'},
2314        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2315        'replication_status': {'key': 'properties.replicationStatus', 'type': 'ReplicationStatus'},
2316    }
2317
2318    def __init__(
2319        self,
2320        *,
2321        location: str,
2322        tags: Optional[Dict[str, str]] = None,
2323        publishing_profile: Optional["GalleryApplicationVersionPublishingProfile"] = None,
2324        **kwargs
2325    ):
2326        super(GalleryApplicationVersion, self).__init__(location=location, tags=tags, **kwargs)
2327        self.publishing_profile = publishing_profile
2328        self.provisioning_state = None
2329        self.replication_status = None
2330
2331
2332class GalleryApplicationVersionList(msrest.serialization.Model):
2333    """The List Gallery Application version operation response.
2334
2335    All required parameters must be populated in order to send to Azure.
2336
2337    :param value: Required. A list of gallery Application Versions.
2338    :type value: list[~azure.mgmt.compute.v2019_07_01.models.GalleryApplicationVersion]
2339    :param next_link: The uri to fetch the next page of gallery Application Versions. Call
2340     ListNext() with this to fetch the next page of gallery Application Versions.
2341    :type next_link: str
2342    """
2343
2344    _validation = {
2345        'value': {'required': True},
2346    }
2347
2348    _attribute_map = {
2349        'value': {'key': 'value', 'type': '[GalleryApplicationVersion]'},
2350        'next_link': {'key': 'nextLink', 'type': 'str'},
2351    }
2352
2353    def __init__(
2354        self,
2355        *,
2356        value: List["GalleryApplicationVersion"],
2357        next_link: Optional[str] = None,
2358        **kwargs
2359    ):
2360        super(GalleryApplicationVersionList, self).__init__(**kwargs)
2361        self.value = value
2362        self.next_link = next_link
2363
2364
2365class GalleryArtifactPublishingProfileBase(msrest.serialization.Model):
2366    """Describes the basic gallery artifact publishing profile.
2367
2368    Variables are only populated by the server, and will be ignored when sending a request.
2369
2370    :param target_regions: The target regions where the Image Version is going to be replicated to.
2371     This property is updatable.
2372    :type target_regions: list[~azure.mgmt.compute.v2019_07_01.models.TargetRegion]
2373    :param replica_count: The number of replicas of the Image Version to be created per region.
2374     This property would take effect for a region when regionalReplicaCount is not specified. This
2375     property is updatable.
2376    :type replica_count: int
2377    :param exclude_from_latest: If set to true, Virtual Machines deployed from the latest version
2378     of the Image Definition won't use this Image Version.
2379    :type exclude_from_latest: bool
2380    :ivar published_date: The timestamp for when the gallery Image Version is published.
2381    :vartype published_date: ~datetime.datetime
2382    :param end_of_life_date: The end of life date of the gallery Image Version. This property can
2383     be used for decommissioning purposes. This property is updatable.
2384    :type end_of_life_date: ~datetime.datetime
2385    :param storage_account_type: Specifies the storage account type to be used to store the image.
2386     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
2387    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountType
2388    """
2389
2390    _validation = {
2391        'published_date': {'readonly': True},
2392    }
2393
2394    _attribute_map = {
2395        'target_regions': {'key': 'targetRegions', 'type': '[TargetRegion]'},
2396        'replica_count': {'key': 'replicaCount', 'type': 'int'},
2397        'exclude_from_latest': {'key': 'excludeFromLatest', 'type': 'bool'},
2398        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
2399        'end_of_life_date': {'key': 'endOfLifeDate', 'type': 'iso-8601'},
2400        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2401    }
2402
2403    def __init__(
2404        self,
2405        *,
2406        target_regions: Optional[List["TargetRegion"]] = None,
2407        replica_count: Optional[int] = None,
2408        exclude_from_latest: Optional[bool] = None,
2409        end_of_life_date: Optional[datetime.datetime] = None,
2410        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
2411        **kwargs
2412    ):
2413        super(GalleryArtifactPublishingProfileBase, self).__init__(**kwargs)
2414        self.target_regions = target_regions
2415        self.replica_count = replica_count
2416        self.exclude_from_latest = exclude_from_latest
2417        self.published_date = None
2418        self.end_of_life_date = end_of_life_date
2419        self.storage_account_type = storage_account_type
2420
2421
2422class GalleryApplicationVersionPublishingProfile(GalleryArtifactPublishingProfileBase):
2423    """The publishing profile of a gallery image version.
2424
2425    Variables are only populated by the server, and will be ignored when sending a request.
2426
2427    All required parameters must be populated in order to send to Azure.
2428
2429    :param target_regions: The target regions where the Image Version is going to be replicated to.
2430     This property is updatable.
2431    :type target_regions: list[~azure.mgmt.compute.v2019_07_01.models.TargetRegion]
2432    :param replica_count: The number of replicas of the Image Version to be created per region.
2433     This property would take effect for a region when regionalReplicaCount is not specified. This
2434     property is updatable.
2435    :type replica_count: int
2436    :param exclude_from_latest: If set to true, Virtual Machines deployed from the latest version
2437     of the Image Definition won't use this Image Version.
2438    :type exclude_from_latest: bool
2439    :ivar published_date: The timestamp for when the gallery Image Version is published.
2440    :vartype published_date: ~datetime.datetime
2441    :param end_of_life_date: The end of life date of the gallery Image Version. This property can
2442     be used for decommissioning purposes. This property is updatable.
2443    :type end_of_life_date: ~datetime.datetime
2444    :param storage_account_type: Specifies the storage account type to be used to store the image.
2445     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
2446    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountType
2447    :param source: Required. The source image from which the Image Version is going to be created.
2448    :type source: ~azure.mgmt.compute.v2019_07_01.models.UserArtifactSource
2449    :param manage_actions:
2450    :type manage_actions: ~azure.mgmt.compute.v2019_07_01.models.UserArtifactManage
2451    :param enable_health_check: Optional. Whether or not this application reports health.
2452    :type enable_health_check: bool
2453    """
2454
2455    _validation = {
2456        'published_date': {'readonly': True},
2457        'source': {'required': True},
2458    }
2459
2460    _attribute_map = {
2461        'target_regions': {'key': 'targetRegions', 'type': '[TargetRegion]'},
2462        'replica_count': {'key': 'replicaCount', 'type': 'int'},
2463        'exclude_from_latest': {'key': 'excludeFromLatest', 'type': 'bool'},
2464        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
2465        'end_of_life_date': {'key': 'endOfLifeDate', 'type': 'iso-8601'},
2466        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2467        'source': {'key': 'source', 'type': 'UserArtifactSource'},
2468        'manage_actions': {'key': 'manageActions', 'type': 'UserArtifactManage'},
2469        'enable_health_check': {'key': 'enableHealthCheck', 'type': 'bool'},
2470    }
2471
2472    def __init__(
2473        self,
2474        *,
2475        source: "UserArtifactSource",
2476        target_regions: Optional[List["TargetRegion"]] = None,
2477        replica_count: Optional[int] = None,
2478        exclude_from_latest: Optional[bool] = None,
2479        end_of_life_date: Optional[datetime.datetime] = None,
2480        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
2481        manage_actions: Optional["UserArtifactManage"] = None,
2482        enable_health_check: Optional[bool] = None,
2483        **kwargs
2484    ):
2485        super(GalleryApplicationVersionPublishingProfile, self).__init__(target_regions=target_regions, replica_count=replica_count, exclude_from_latest=exclude_from_latest, end_of_life_date=end_of_life_date, storage_account_type=storage_account_type, **kwargs)
2486        self.source = source
2487        self.manage_actions = manage_actions
2488        self.enable_health_check = enable_health_check
2489
2490
2491class GalleryApplicationVersionUpdate(UpdateResource):
2492    """Specifies information about the gallery Application Version that you want to update.
2493
2494    Variables are only populated by the server, and will be ignored when sending a request.
2495
2496    :param tags: A set of tags. Resource tags.
2497    :type tags: dict[str, str]
2498    :param publishing_profile: The publishing profile of a gallery image version.
2499    :type publishing_profile:
2500     ~azure.mgmt.compute.v2019_07_01.models.GalleryApplicationVersionPublishingProfile
2501    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2502     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2503    :vartype provisioning_state: str or
2504     ~azure.mgmt.compute.v2019_07_01.models.GalleryApplicationVersionPropertiesProvisioningState
2505    :ivar replication_status: This is the replication status of the gallery Image Version.
2506    :vartype replication_status: ~azure.mgmt.compute.v2019_07_01.models.ReplicationStatus
2507    """
2508
2509    _validation = {
2510        'provisioning_state': {'readonly': True},
2511        'replication_status': {'readonly': True},
2512    }
2513
2514    _attribute_map = {
2515        'tags': {'key': 'tags', 'type': '{str}'},
2516        'publishing_profile': {'key': 'properties.publishingProfile', 'type': 'GalleryApplicationVersionPublishingProfile'},
2517        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2518        'replication_status': {'key': 'properties.replicationStatus', 'type': 'ReplicationStatus'},
2519    }
2520
2521    def __init__(
2522        self,
2523        *,
2524        tags: Optional[Dict[str, str]] = None,
2525        publishing_profile: Optional["GalleryApplicationVersionPublishingProfile"] = None,
2526        **kwargs
2527    ):
2528        super(GalleryApplicationVersionUpdate, self).__init__(tags=tags, **kwargs)
2529        self.publishing_profile = publishing_profile
2530        self.provisioning_state = None
2531        self.replication_status = None
2532
2533
2534class GalleryArtifactSource(msrest.serialization.Model):
2535    """The source image from which the Image Version is going to be created.
2536
2537    All required parameters must be populated in order to send to Azure.
2538
2539    :param managed_image: Required. The managed artifact.
2540    :type managed_image: ~azure.mgmt.compute.v2019_07_01.models.ManagedArtifact
2541    """
2542
2543    _validation = {
2544        'managed_image': {'required': True},
2545    }
2546
2547    _attribute_map = {
2548        'managed_image': {'key': 'managedImage', 'type': 'ManagedArtifact'},
2549    }
2550
2551    def __init__(
2552        self,
2553        *,
2554        managed_image: "ManagedArtifact",
2555        **kwargs
2556    ):
2557        super(GalleryArtifactSource, self).__init__(**kwargs)
2558        self.managed_image = managed_image
2559
2560
2561class GalleryArtifactVersionSource(msrest.serialization.Model):
2562    """The gallery artifact version source.
2563
2564    :param id: The id of the gallery artifact version source. Can specify a disk uri, snapshot uri,
2565     or user image.
2566    :type id: str
2567    """
2568
2569    _attribute_map = {
2570        'id': {'key': 'id', 'type': 'str'},
2571    }
2572
2573    def __init__(
2574        self,
2575        *,
2576        id: Optional[str] = None,
2577        **kwargs
2578    ):
2579        super(GalleryArtifactVersionSource, self).__init__(**kwargs)
2580        self.id = id
2581
2582
2583class GalleryDiskImage(msrest.serialization.Model):
2584    """This is the disk image base class.
2585
2586    Variables are only populated by the server, and will be ignored when sending a request.
2587
2588    :ivar size_in_gb: This property indicates the size of the VHD to be created.
2589    :vartype size_in_gb: int
2590    :param host_caching: The host caching of the disk. Valid values are 'None', 'ReadOnly', and
2591     'ReadWrite'. Possible values include: "None", "ReadOnly", "ReadWrite".
2592    :type host_caching: str or ~azure.mgmt.compute.v2019_07_01.models.HostCaching
2593    :param source: The gallery artifact version source.
2594    :type source: ~azure.mgmt.compute.v2019_07_01.models.GalleryArtifactVersionSource
2595    """
2596
2597    _validation = {
2598        'size_in_gb': {'readonly': True},
2599    }
2600
2601    _attribute_map = {
2602        'size_in_gb': {'key': 'sizeInGB', 'type': 'int'},
2603        'host_caching': {'key': 'hostCaching', 'type': 'str'},
2604        'source': {'key': 'source', 'type': 'GalleryArtifactVersionSource'},
2605    }
2606
2607    def __init__(
2608        self,
2609        *,
2610        host_caching: Optional[Union[str, "HostCaching"]] = None,
2611        source: Optional["GalleryArtifactVersionSource"] = None,
2612        **kwargs
2613    ):
2614        super(GalleryDiskImage, self).__init__(**kwargs)
2615        self.size_in_gb = None
2616        self.host_caching = host_caching
2617        self.source = source
2618
2619
2620class GalleryDataDiskImage(GalleryDiskImage):
2621    """This is the data disk image.
2622
2623    Variables are only populated by the server, and will be ignored when sending a request.
2624
2625    All required parameters must be populated in order to send to Azure.
2626
2627    :ivar size_in_gb: This property indicates the size of the VHD to be created.
2628    :vartype size_in_gb: int
2629    :param host_caching: The host caching of the disk. Valid values are 'None', 'ReadOnly', and
2630     'ReadWrite'. Possible values include: "None", "ReadOnly", "ReadWrite".
2631    :type host_caching: str or ~azure.mgmt.compute.v2019_07_01.models.HostCaching
2632    :param source: The gallery artifact version source.
2633    :type source: ~azure.mgmt.compute.v2019_07_01.models.GalleryArtifactVersionSource
2634    :param lun: Required. This property specifies the logical unit number of the data disk. This
2635     value is used to identify data disks within the Virtual Machine and therefore must be unique
2636     for each data disk attached to the Virtual Machine.
2637    :type lun: int
2638    """
2639
2640    _validation = {
2641        'size_in_gb': {'readonly': True},
2642        'lun': {'required': True},
2643    }
2644
2645    _attribute_map = {
2646        'size_in_gb': {'key': 'sizeInGB', 'type': 'int'},
2647        'host_caching': {'key': 'hostCaching', 'type': 'str'},
2648        'source': {'key': 'source', 'type': 'GalleryArtifactVersionSource'},
2649        'lun': {'key': 'lun', 'type': 'int'},
2650    }
2651
2652    def __init__(
2653        self,
2654        *,
2655        lun: int,
2656        host_caching: Optional[Union[str, "HostCaching"]] = None,
2657        source: Optional["GalleryArtifactVersionSource"] = None,
2658        **kwargs
2659    ):
2660        super(GalleryDataDiskImage, self).__init__(host_caching=host_caching, source=source, **kwargs)
2661        self.lun = lun
2662
2663
2664class GalleryIdentifier(msrest.serialization.Model):
2665    """Describes the gallery unique name.
2666
2667    Variables are only populated by the server, and will be ignored when sending a request.
2668
2669    :ivar unique_name: The unique name of the Shared Image Gallery. This name is generated
2670     automatically by Azure.
2671    :vartype unique_name: str
2672    """
2673
2674    _validation = {
2675        'unique_name': {'readonly': True},
2676    }
2677
2678    _attribute_map = {
2679        'unique_name': {'key': 'uniqueName', 'type': 'str'},
2680    }
2681
2682    def __init__(
2683        self,
2684        **kwargs
2685    ):
2686        super(GalleryIdentifier, self).__init__(**kwargs)
2687        self.unique_name = None
2688
2689
2690class GalleryImage(Resource):
2691    """Specifies information about the gallery Image Definition that you want to create or update.
2692
2693    Variables are only populated by the server, and will be ignored when sending a request.
2694
2695    All required parameters must be populated in order to send to Azure.
2696
2697    :ivar id: Resource Id.
2698    :vartype id: str
2699    :ivar name: Resource name.
2700    :vartype name: str
2701    :ivar type: Resource type.
2702    :vartype type: str
2703    :param location: Required. Resource location.
2704    :type location: str
2705    :param tags: A set of tags. Resource tags.
2706    :type tags: dict[str, str]
2707    :param description: The description of this gallery Image Definition resource. This property is
2708     updatable.
2709    :type description: str
2710    :param eula: The Eula agreement for the gallery Image Definition.
2711    :type eula: str
2712    :param privacy_statement_uri: The privacy statement uri.
2713    :type privacy_statement_uri: str
2714    :param release_note_uri: The release note uri.
2715    :type release_note_uri: str
2716    :param os_type: This property allows you to specify the type of the OS that is included in the
2717     disk when creating a VM from a managed image. :code:`<br>`:code:`<br>` Possible values are:
2718     :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible values
2719     include: "Windows", "Linux".
2720    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
2721    :param os_state: This property allows the user to specify whether the virtual machines created
2722     under this image are 'Generalized' or 'Specialized'. Possible values include: "Generalized",
2723     "Specialized".
2724    :type os_state: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemStateTypes
2725    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
2726     disks only. Possible values include: "V1", "V2".
2727    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGeneration
2728    :param end_of_life_date: The end of life date of the gallery Image Definition. This property
2729     can be used for decommissioning purposes. This property is updatable.
2730    :type end_of_life_date: ~datetime.datetime
2731    :param identifier: This is the gallery Image Definition identifier.
2732    :type identifier: ~azure.mgmt.compute.v2019_07_01.models.GalleryImageIdentifier
2733    :param recommended: The properties describe the recommended machine configuration for this
2734     Image Definition. These properties are updatable.
2735    :type recommended: ~azure.mgmt.compute.v2019_07_01.models.RecommendedMachineConfiguration
2736    :param disallowed: Describes the disallowed disk types.
2737    :type disallowed: ~azure.mgmt.compute.v2019_07_01.models.Disallowed
2738    :param purchase_plan: Describes the gallery Image Definition purchase plan. This is used by
2739     marketplace images.
2740    :type purchase_plan: ~azure.mgmt.compute.v2019_07_01.models.ImagePurchasePlan
2741    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2742     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2743    :vartype provisioning_state: str or
2744     ~azure.mgmt.compute.v2019_07_01.models.GalleryImagePropertiesProvisioningState
2745    """
2746
2747    _validation = {
2748        'id': {'readonly': True},
2749        'name': {'readonly': True},
2750        'type': {'readonly': True},
2751        'location': {'required': True},
2752        'provisioning_state': {'readonly': True},
2753    }
2754
2755    _attribute_map = {
2756        'id': {'key': 'id', 'type': 'str'},
2757        'name': {'key': 'name', 'type': 'str'},
2758        'type': {'key': 'type', 'type': 'str'},
2759        'location': {'key': 'location', 'type': 'str'},
2760        'tags': {'key': 'tags', 'type': '{str}'},
2761        'description': {'key': 'properties.description', 'type': 'str'},
2762        'eula': {'key': 'properties.eula', 'type': 'str'},
2763        'privacy_statement_uri': {'key': 'properties.privacyStatementUri', 'type': 'str'},
2764        'release_note_uri': {'key': 'properties.releaseNoteUri', 'type': 'str'},
2765        'os_type': {'key': 'properties.osType', 'type': 'str'},
2766        'os_state': {'key': 'properties.osState', 'type': 'str'},
2767        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
2768        'end_of_life_date': {'key': 'properties.endOfLifeDate', 'type': 'iso-8601'},
2769        'identifier': {'key': 'properties.identifier', 'type': 'GalleryImageIdentifier'},
2770        'recommended': {'key': 'properties.recommended', 'type': 'RecommendedMachineConfiguration'},
2771        'disallowed': {'key': 'properties.disallowed', 'type': 'Disallowed'},
2772        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'ImagePurchasePlan'},
2773        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2774    }
2775
2776    def __init__(
2777        self,
2778        *,
2779        location: str,
2780        tags: Optional[Dict[str, str]] = None,
2781        description: Optional[str] = None,
2782        eula: Optional[str] = None,
2783        privacy_statement_uri: Optional[str] = None,
2784        release_note_uri: Optional[str] = None,
2785        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
2786        os_state: Optional[Union[str, "OperatingSystemStateTypes"]] = None,
2787        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
2788        end_of_life_date: Optional[datetime.datetime] = None,
2789        identifier: Optional["GalleryImageIdentifier"] = None,
2790        recommended: Optional["RecommendedMachineConfiguration"] = None,
2791        disallowed: Optional["Disallowed"] = None,
2792        purchase_plan: Optional["ImagePurchasePlan"] = None,
2793        **kwargs
2794    ):
2795        super(GalleryImage, self).__init__(location=location, tags=tags, **kwargs)
2796        self.description = description
2797        self.eula = eula
2798        self.privacy_statement_uri = privacy_statement_uri
2799        self.release_note_uri = release_note_uri
2800        self.os_type = os_type
2801        self.os_state = os_state
2802        self.hyper_v_generation = hyper_v_generation
2803        self.end_of_life_date = end_of_life_date
2804        self.identifier = identifier
2805        self.recommended = recommended
2806        self.disallowed = disallowed
2807        self.purchase_plan = purchase_plan
2808        self.provisioning_state = None
2809
2810
2811class GalleryImageIdentifier(msrest.serialization.Model):
2812    """This is the gallery Image Definition identifier.
2813
2814    All required parameters must be populated in order to send to Azure.
2815
2816    :param publisher: Required. The name of the gallery Image Definition publisher.
2817    :type publisher: str
2818    :param offer: Required. The name of the gallery Image Definition offer.
2819    :type offer: str
2820    :param sku: Required. The name of the gallery Image Definition SKU.
2821    :type sku: str
2822    """
2823
2824    _validation = {
2825        'publisher': {'required': True},
2826        'offer': {'required': True},
2827        'sku': {'required': True},
2828    }
2829
2830    _attribute_map = {
2831        'publisher': {'key': 'publisher', 'type': 'str'},
2832        'offer': {'key': 'offer', 'type': 'str'},
2833        'sku': {'key': 'sku', 'type': 'str'},
2834    }
2835
2836    def __init__(
2837        self,
2838        *,
2839        publisher: str,
2840        offer: str,
2841        sku: str,
2842        **kwargs
2843    ):
2844        super(GalleryImageIdentifier, self).__init__(**kwargs)
2845        self.publisher = publisher
2846        self.offer = offer
2847        self.sku = sku
2848
2849
2850class GalleryImageList(msrest.serialization.Model):
2851    """The List Gallery Images operation response.
2852
2853    All required parameters must be populated in order to send to Azure.
2854
2855    :param value: Required. A list of Shared Image Gallery images.
2856    :type value: list[~azure.mgmt.compute.v2019_07_01.models.GalleryImage]
2857    :param next_link: The uri to fetch the next page of Image Definitions in the Shared Image
2858     Gallery. Call ListNext() with this to fetch the next page of gallery Image Definitions.
2859    :type next_link: str
2860    """
2861
2862    _validation = {
2863        'value': {'required': True},
2864    }
2865
2866    _attribute_map = {
2867        'value': {'key': 'value', 'type': '[GalleryImage]'},
2868        'next_link': {'key': 'nextLink', 'type': 'str'},
2869    }
2870
2871    def __init__(
2872        self,
2873        *,
2874        value: List["GalleryImage"],
2875        next_link: Optional[str] = None,
2876        **kwargs
2877    ):
2878        super(GalleryImageList, self).__init__(**kwargs)
2879        self.value = value
2880        self.next_link = next_link
2881
2882
2883class GalleryImageUpdate(UpdateResource):
2884    """Specifies information about the gallery Image Definition that you want to update.
2885
2886    Variables are only populated by the server, and will be ignored when sending a request.
2887
2888    :param tags: A set of tags. Resource tags.
2889    :type tags: dict[str, str]
2890    :param description: The description of this gallery Image Definition resource. This property is
2891     updatable.
2892    :type description: str
2893    :param eula: The Eula agreement for the gallery Image Definition.
2894    :type eula: str
2895    :param privacy_statement_uri: The privacy statement uri.
2896    :type privacy_statement_uri: str
2897    :param release_note_uri: The release note uri.
2898    :type release_note_uri: str
2899    :param os_type: This property allows you to specify the type of the OS that is included in the
2900     disk when creating a VM from a managed image. :code:`<br>`:code:`<br>` Possible values are:
2901     :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible values
2902     include: "Windows", "Linux".
2903    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
2904    :param os_state: This property allows the user to specify whether the virtual machines created
2905     under this image are 'Generalized' or 'Specialized'. Possible values include: "Generalized",
2906     "Specialized".
2907    :type os_state: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemStateTypes
2908    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
2909     disks only. Possible values include: "V1", "V2".
2910    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGeneration
2911    :param end_of_life_date: The end of life date of the gallery Image Definition. This property
2912     can be used for decommissioning purposes. This property is updatable.
2913    :type end_of_life_date: ~datetime.datetime
2914    :param identifier: This is the gallery Image Definition identifier.
2915    :type identifier: ~azure.mgmt.compute.v2019_07_01.models.GalleryImageIdentifier
2916    :param recommended: The properties describe the recommended machine configuration for this
2917     Image Definition. These properties are updatable.
2918    :type recommended: ~azure.mgmt.compute.v2019_07_01.models.RecommendedMachineConfiguration
2919    :param disallowed: Describes the disallowed disk types.
2920    :type disallowed: ~azure.mgmt.compute.v2019_07_01.models.Disallowed
2921    :param purchase_plan: Describes the gallery Image Definition purchase plan. This is used by
2922     marketplace images.
2923    :type purchase_plan: ~azure.mgmt.compute.v2019_07_01.models.ImagePurchasePlan
2924    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2925     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2926    :vartype provisioning_state: str or
2927     ~azure.mgmt.compute.v2019_07_01.models.GalleryImagePropertiesProvisioningState
2928    """
2929
2930    _validation = {
2931        'provisioning_state': {'readonly': True},
2932    }
2933
2934    _attribute_map = {
2935        'tags': {'key': 'tags', 'type': '{str}'},
2936        'description': {'key': 'properties.description', 'type': 'str'},
2937        'eula': {'key': 'properties.eula', 'type': 'str'},
2938        'privacy_statement_uri': {'key': 'properties.privacyStatementUri', 'type': 'str'},
2939        'release_note_uri': {'key': 'properties.releaseNoteUri', 'type': 'str'},
2940        'os_type': {'key': 'properties.osType', 'type': 'str'},
2941        'os_state': {'key': 'properties.osState', 'type': 'str'},
2942        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
2943        'end_of_life_date': {'key': 'properties.endOfLifeDate', 'type': 'iso-8601'},
2944        'identifier': {'key': 'properties.identifier', 'type': 'GalleryImageIdentifier'},
2945        'recommended': {'key': 'properties.recommended', 'type': 'RecommendedMachineConfiguration'},
2946        'disallowed': {'key': 'properties.disallowed', 'type': 'Disallowed'},
2947        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'ImagePurchasePlan'},
2948        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2949    }
2950
2951    def __init__(
2952        self,
2953        *,
2954        tags: Optional[Dict[str, str]] = None,
2955        description: Optional[str] = None,
2956        eula: Optional[str] = None,
2957        privacy_statement_uri: Optional[str] = None,
2958        release_note_uri: Optional[str] = None,
2959        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
2960        os_state: Optional[Union[str, "OperatingSystemStateTypes"]] = None,
2961        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
2962        end_of_life_date: Optional[datetime.datetime] = None,
2963        identifier: Optional["GalleryImageIdentifier"] = None,
2964        recommended: Optional["RecommendedMachineConfiguration"] = None,
2965        disallowed: Optional["Disallowed"] = None,
2966        purchase_plan: Optional["ImagePurchasePlan"] = None,
2967        **kwargs
2968    ):
2969        super(GalleryImageUpdate, self).__init__(tags=tags, **kwargs)
2970        self.description = description
2971        self.eula = eula
2972        self.privacy_statement_uri = privacy_statement_uri
2973        self.release_note_uri = release_note_uri
2974        self.os_type = os_type
2975        self.os_state = os_state
2976        self.hyper_v_generation = hyper_v_generation
2977        self.end_of_life_date = end_of_life_date
2978        self.identifier = identifier
2979        self.recommended = recommended
2980        self.disallowed = disallowed
2981        self.purchase_plan = purchase_plan
2982        self.provisioning_state = None
2983
2984
2985class GalleryImageVersion(Resource):
2986    """Specifies information about the gallery Image Version that you want to create or update.
2987
2988    Variables are only populated by the server, and will be ignored when sending a request.
2989
2990    All required parameters must be populated in order to send to Azure.
2991
2992    :ivar id: Resource Id.
2993    :vartype id: str
2994    :ivar name: Resource name.
2995    :vartype name: str
2996    :ivar type: Resource type.
2997    :vartype type: str
2998    :param location: Required. Resource location.
2999    :type location: str
3000    :param tags: A set of tags. Resource tags.
3001    :type tags: dict[str, str]
3002    :param publishing_profile: The publishing profile of a gallery Image Version.
3003    :type publishing_profile:
3004     ~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersionPublishingProfile
3005    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
3006     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
3007    :vartype provisioning_state: str or
3008     ~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersionPropertiesProvisioningState
3009    :param storage_profile: This is the storage profile of a Gallery Image Version.
3010    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersionStorageProfile
3011    :ivar replication_status: This is the replication status of the gallery Image Version.
3012    :vartype replication_status: ~azure.mgmt.compute.v2019_07_01.models.ReplicationStatus
3013    """
3014
3015    _validation = {
3016        'id': {'readonly': True},
3017        'name': {'readonly': True},
3018        'type': {'readonly': True},
3019        'location': {'required': True},
3020        'provisioning_state': {'readonly': True},
3021        'replication_status': {'readonly': True},
3022    }
3023
3024    _attribute_map = {
3025        'id': {'key': 'id', 'type': 'str'},
3026        'name': {'key': 'name', 'type': 'str'},
3027        'type': {'key': 'type', 'type': 'str'},
3028        'location': {'key': 'location', 'type': 'str'},
3029        'tags': {'key': 'tags', 'type': '{str}'},
3030        'publishing_profile': {'key': 'properties.publishingProfile', 'type': 'GalleryImageVersionPublishingProfile'},
3031        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3032        'storage_profile': {'key': 'properties.storageProfile', 'type': 'GalleryImageVersionStorageProfile'},
3033        'replication_status': {'key': 'properties.replicationStatus', 'type': 'ReplicationStatus'},
3034    }
3035
3036    def __init__(
3037        self,
3038        *,
3039        location: str,
3040        tags: Optional[Dict[str, str]] = None,
3041        publishing_profile: Optional["GalleryImageVersionPublishingProfile"] = None,
3042        storage_profile: Optional["GalleryImageVersionStorageProfile"] = None,
3043        **kwargs
3044    ):
3045        super(GalleryImageVersion, self).__init__(location=location, tags=tags, **kwargs)
3046        self.publishing_profile = publishing_profile
3047        self.provisioning_state = None
3048        self.storage_profile = storage_profile
3049        self.replication_status = None
3050
3051
3052class GalleryImageVersionList(msrest.serialization.Model):
3053    """The List Gallery Image version operation response.
3054
3055    All required parameters must be populated in order to send to Azure.
3056
3057    :param value: Required. A list of gallery Image Versions.
3058    :type value: list[~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersion]
3059    :param next_link: The uri to fetch the next page of gallery Image Versions. Call ListNext()
3060     with this to fetch the next page of gallery Image Versions.
3061    :type next_link: str
3062    """
3063
3064    _validation = {
3065        'value': {'required': True},
3066    }
3067
3068    _attribute_map = {
3069        'value': {'key': 'value', 'type': '[GalleryImageVersion]'},
3070        'next_link': {'key': 'nextLink', 'type': 'str'},
3071    }
3072
3073    def __init__(
3074        self,
3075        *,
3076        value: List["GalleryImageVersion"],
3077        next_link: Optional[str] = None,
3078        **kwargs
3079    ):
3080        super(GalleryImageVersionList, self).__init__(**kwargs)
3081        self.value = value
3082        self.next_link = next_link
3083
3084
3085class GalleryImageVersionPublishingProfile(GalleryArtifactPublishingProfileBase):
3086    """The publishing profile of a gallery Image Version.
3087
3088    Variables are only populated by the server, and will be ignored when sending a request.
3089
3090    :param target_regions: The target regions where the Image Version is going to be replicated to.
3091     This property is updatable.
3092    :type target_regions: list[~azure.mgmt.compute.v2019_07_01.models.TargetRegion]
3093    :param replica_count: The number of replicas of the Image Version to be created per region.
3094     This property would take effect for a region when regionalReplicaCount is not specified. This
3095     property is updatable.
3096    :type replica_count: int
3097    :param exclude_from_latest: If set to true, Virtual Machines deployed from the latest version
3098     of the Image Definition won't use this Image Version.
3099    :type exclude_from_latest: bool
3100    :ivar published_date: The timestamp for when the gallery Image Version is published.
3101    :vartype published_date: ~datetime.datetime
3102    :param end_of_life_date: The end of life date of the gallery Image Version. This property can
3103     be used for decommissioning purposes. This property is updatable.
3104    :type end_of_life_date: ~datetime.datetime
3105    :param storage_account_type: Specifies the storage account type to be used to store the image.
3106     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
3107    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountType
3108    """
3109
3110    _validation = {
3111        'published_date': {'readonly': True},
3112    }
3113
3114    _attribute_map = {
3115        'target_regions': {'key': 'targetRegions', 'type': '[TargetRegion]'},
3116        'replica_count': {'key': 'replicaCount', 'type': 'int'},
3117        'exclude_from_latest': {'key': 'excludeFromLatest', 'type': 'bool'},
3118        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
3119        'end_of_life_date': {'key': 'endOfLifeDate', 'type': 'iso-8601'},
3120        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3121    }
3122
3123    def __init__(
3124        self,
3125        *,
3126        target_regions: Optional[List["TargetRegion"]] = None,
3127        replica_count: Optional[int] = None,
3128        exclude_from_latest: Optional[bool] = None,
3129        end_of_life_date: Optional[datetime.datetime] = None,
3130        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
3131        **kwargs
3132    ):
3133        super(GalleryImageVersionPublishingProfile, self).__init__(target_regions=target_regions, replica_count=replica_count, exclude_from_latest=exclude_from_latest, end_of_life_date=end_of_life_date, storage_account_type=storage_account_type, **kwargs)
3134
3135
3136class GalleryImageVersionStorageProfile(msrest.serialization.Model):
3137    """This is the storage profile of a Gallery Image Version.
3138
3139    :param source: The gallery artifact version source.
3140    :type source: ~azure.mgmt.compute.v2019_07_01.models.GalleryArtifactVersionSource
3141    :param os_disk_image: This is the OS disk image.
3142    :type os_disk_image: ~azure.mgmt.compute.v2019_07_01.models.GalleryOSDiskImage
3143    :param data_disk_images: A list of data disk images.
3144    :type data_disk_images: list[~azure.mgmt.compute.v2019_07_01.models.GalleryDataDiskImage]
3145    """
3146
3147    _attribute_map = {
3148        'source': {'key': 'source', 'type': 'GalleryArtifactVersionSource'},
3149        'os_disk_image': {'key': 'osDiskImage', 'type': 'GalleryOSDiskImage'},
3150        'data_disk_images': {'key': 'dataDiskImages', 'type': '[GalleryDataDiskImage]'},
3151    }
3152
3153    def __init__(
3154        self,
3155        *,
3156        source: Optional["GalleryArtifactVersionSource"] = None,
3157        os_disk_image: Optional["GalleryOSDiskImage"] = None,
3158        data_disk_images: Optional[List["GalleryDataDiskImage"]] = None,
3159        **kwargs
3160    ):
3161        super(GalleryImageVersionStorageProfile, self).__init__(**kwargs)
3162        self.source = source
3163        self.os_disk_image = os_disk_image
3164        self.data_disk_images = data_disk_images
3165
3166
3167class GalleryImageVersionUpdate(UpdateResource):
3168    """Specifies information about the gallery Image Version that you want to update.
3169
3170    Variables are only populated by the server, and will be ignored when sending a request.
3171
3172    :param tags: A set of tags. Resource tags.
3173    :type tags: dict[str, str]
3174    :param publishing_profile: The publishing profile of a gallery Image Version.
3175    :type publishing_profile:
3176     ~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersionPublishingProfile
3177    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
3178     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
3179    :vartype provisioning_state: str or
3180     ~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersionPropertiesProvisioningState
3181    :param storage_profile: This is the storage profile of a Gallery Image Version.
3182    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.GalleryImageVersionStorageProfile
3183    :ivar replication_status: This is the replication status of the gallery Image Version.
3184    :vartype replication_status: ~azure.mgmt.compute.v2019_07_01.models.ReplicationStatus
3185    """
3186
3187    _validation = {
3188        'provisioning_state': {'readonly': True},
3189        'replication_status': {'readonly': True},
3190    }
3191
3192    _attribute_map = {
3193        'tags': {'key': 'tags', 'type': '{str}'},
3194        'publishing_profile': {'key': 'properties.publishingProfile', 'type': 'GalleryImageVersionPublishingProfile'},
3195        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3196        'storage_profile': {'key': 'properties.storageProfile', 'type': 'GalleryImageVersionStorageProfile'},
3197        'replication_status': {'key': 'properties.replicationStatus', 'type': 'ReplicationStatus'},
3198    }
3199
3200    def __init__(
3201        self,
3202        *,
3203        tags: Optional[Dict[str, str]] = None,
3204        publishing_profile: Optional["GalleryImageVersionPublishingProfile"] = None,
3205        storage_profile: Optional["GalleryImageVersionStorageProfile"] = None,
3206        **kwargs
3207    ):
3208        super(GalleryImageVersionUpdate, self).__init__(tags=tags, **kwargs)
3209        self.publishing_profile = publishing_profile
3210        self.provisioning_state = None
3211        self.storage_profile = storage_profile
3212        self.replication_status = None
3213
3214
3215class GalleryList(msrest.serialization.Model):
3216    """The List Galleries operation response.
3217
3218    All required parameters must be populated in order to send to Azure.
3219
3220    :param value: Required. A list of galleries.
3221    :type value: list[~azure.mgmt.compute.v2019_07_01.models.Gallery]
3222    :param next_link: The uri to fetch the next page of galleries. Call ListNext() with this to
3223     fetch the next page of galleries.
3224    :type next_link: str
3225    """
3226
3227    _validation = {
3228        'value': {'required': True},
3229    }
3230
3231    _attribute_map = {
3232        'value': {'key': 'value', 'type': '[Gallery]'},
3233        'next_link': {'key': 'nextLink', 'type': 'str'},
3234    }
3235
3236    def __init__(
3237        self,
3238        *,
3239        value: List["Gallery"],
3240        next_link: Optional[str] = None,
3241        **kwargs
3242    ):
3243        super(GalleryList, self).__init__(**kwargs)
3244        self.value = value
3245        self.next_link = next_link
3246
3247
3248class GalleryOSDiskImage(GalleryDiskImage):
3249    """This is the OS disk image.
3250
3251    Variables are only populated by the server, and will be ignored when sending a request.
3252
3253    :ivar size_in_gb: This property indicates the size of the VHD to be created.
3254    :vartype size_in_gb: int
3255    :param host_caching: The host caching of the disk. Valid values are 'None', 'ReadOnly', and
3256     'ReadWrite'. Possible values include: "None", "ReadOnly", "ReadWrite".
3257    :type host_caching: str or ~azure.mgmt.compute.v2019_07_01.models.HostCaching
3258    :param source: The gallery artifact version source.
3259    :type source: ~azure.mgmt.compute.v2019_07_01.models.GalleryArtifactVersionSource
3260    """
3261
3262    _validation = {
3263        'size_in_gb': {'readonly': True},
3264    }
3265
3266    _attribute_map = {
3267        'size_in_gb': {'key': 'sizeInGB', 'type': 'int'},
3268        'host_caching': {'key': 'hostCaching', 'type': 'str'},
3269        'source': {'key': 'source', 'type': 'GalleryArtifactVersionSource'},
3270    }
3271
3272    def __init__(
3273        self,
3274        *,
3275        host_caching: Optional[Union[str, "HostCaching"]] = None,
3276        source: Optional["GalleryArtifactVersionSource"] = None,
3277        **kwargs
3278    ):
3279        super(GalleryOSDiskImage, self).__init__(host_caching=host_caching, source=source, **kwargs)
3280
3281
3282class GalleryUpdate(UpdateResource):
3283    """Specifies information about the Shared Image Gallery that you want to update.
3284
3285    Variables are only populated by the server, and will be ignored when sending a request.
3286
3287    :param tags: A set of tags. Resource tags.
3288    :type tags: dict[str, str]
3289    :param description: The description of this Shared Image Gallery resource. This property is
3290     updatable.
3291    :type description: str
3292    :param identifier: Describes the gallery unique name.
3293    :type identifier: ~azure.mgmt.compute.v2019_07_01.models.GalleryIdentifier
3294    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
3295     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
3296    :vartype provisioning_state: str or
3297     ~azure.mgmt.compute.v2019_07_01.models.GalleryPropertiesProvisioningState
3298    """
3299
3300    _validation = {
3301        'provisioning_state': {'readonly': True},
3302    }
3303
3304    _attribute_map = {
3305        'tags': {'key': 'tags', 'type': '{str}'},
3306        'description': {'key': 'properties.description', 'type': 'str'},
3307        'identifier': {'key': 'properties.identifier', 'type': 'GalleryIdentifier'},
3308        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3309    }
3310
3311    def __init__(
3312        self,
3313        *,
3314        tags: Optional[Dict[str, str]] = None,
3315        description: Optional[str] = None,
3316        identifier: Optional["GalleryIdentifier"] = None,
3317        **kwargs
3318    ):
3319        super(GalleryUpdate, self).__init__(tags=tags, **kwargs)
3320        self.description = description
3321        self.identifier = identifier
3322        self.provisioning_state = None
3323
3324
3325class GrantAccessData(msrest.serialization.Model):
3326    """Data used for requesting a SAS.
3327
3328    All required parameters must be populated in order to send to Azure.
3329
3330    :param access: Required.  Possible values include: "None", "Read", "Write".
3331    :type access: str or ~azure.mgmt.compute.v2019_07_01.models.AccessLevel
3332    :param duration_in_seconds: Required. Time duration in seconds until the SAS access expires.
3333    :type duration_in_seconds: int
3334    """
3335
3336    _validation = {
3337        'access': {'required': True},
3338        'duration_in_seconds': {'required': True},
3339    }
3340
3341    _attribute_map = {
3342        'access': {'key': 'access', 'type': 'str'},
3343        'duration_in_seconds': {'key': 'durationInSeconds', 'type': 'int'},
3344    }
3345
3346    def __init__(
3347        self,
3348        *,
3349        access: Union[str, "AccessLevel"],
3350        duration_in_seconds: int,
3351        **kwargs
3352    ):
3353        super(GrantAccessData, self).__init__(**kwargs)
3354        self.access = access
3355        self.duration_in_seconds = duration_in_seconds
3356
3357
3358class HardwareProfile(msrest.serialization.Model):
3359    """Specifies the hardware settings for the virtual machine.
3360
3361    :param vm_size: Specifies the size of the virtual machine. For more information about virtual
3362     machine sizes, see `Sizes for virtual machines
3363     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3364     :code:`<br>`:code:`<br>` The available VM sizes depend on region and availability set. For a
3365     list of available sizes use these APIs:  :code:`<br>`:code:`<br>` `List all available virtual
3366     machine sizes in an availability set
3367     <https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes>`_
3368     :code:`<br>`:code:`<br>` `List all available virtual machine sizes in a region
3369     <https://docs.microsoft.com/rest/api/compute/virtualmachinesizes/list>`_
3370     :code:`<br>`:code:`<br>` `List all available virtual machine sizes for resizing
3371     <https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes>`_. Possible
3372     values include: "Basic_A0", "Basic_A1", "Basic_A2", "Basic_A3", "Basic_A4", "Standard_A0",
3373     "Standard_A1", "Standard_A2", "Standard_A3", "Standard_A4", "Standard_A5", "Standard_A6",
3374     "Standard_A7", "Standard_A8", "Standard_A9", "Standard_A10", "Standard_A11", "Standard_A1_v2",
3375     "Standard_A2_v2", "Standard_A4_v2", "Standard_A8_v2", "Standard_A2m_v2", "Standard_A4m_v2",
3376     "Standard_A8m_v2", "Standard_B1s", "Standard_B1ms", "Standard_B2s", "Standard_B2ms",
3377     "Standard_B4ms", "Standard_B8ms", "Standard_D1", "Standard_D2", "Standard_D3", "Standard_D4",
3378     "Standard_D11", "Standard_D12", "Standard_D13", "Standard_D14", "Standard_D1_v2",
3379     "Standard_D2_v2", "Standard_D3_v2", "Standard_D4_v2", "Standard_D5_v2", "Standard_D2_v3",
3380     "Standard_D4_v3", "Standard_D8_v3", "Standard_D16_v3", "Standard_D32_v3", "Standard_D64_v3",
3381     "Standard_D2s_v3", "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3",
3382     "Standard_D32s_v3", "Standard_D64s_v3", "Standard_D11_v2", "Standard_D12_v2",
3383     "Standard_D13_v2", "Standard_D14_v2", "Standard_D15_v2", "Standard_DS1", "Standard_DS2",
3384     "Standard_DS3", "Standard_DS4", "Standard_DS11", "Standard_DS12", "Standard_DS13",
3385     "Standard_DS14", "Standard_DS1_v2", "Standard_DS2_v2", "Standard_DS3_v2", "Standard_DS4_v2",
3386     "Standard_DS5_v2", "Standard_DS11_v2", "Standard_DS12_v2", "Standard_DS13_v2",
3387     "Standard_DS14_v2", "Standard_DS15_v2", "Standard_DS13-4_v2", "Standard_DS13-2_v2",
3388     "Standard_DS14-8_v2", "Standard_DS14-4_v2", "Standard_E2_v3", "Standard_E4_v3",
3389     "Standard_E8_v3", "Standard_E16_v3", "Standard_E32_v3", "Standard_E64_v3", "Standard_E2s_v3",
3390     "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E32s_v3",
3391     "Standard_E64s_v3", "Standard_E32-16_v3", "Standard_E32-8s_v3", "Standard_E64-32s_v3",
3392     "Standard_E64-16s_v3", "Standard_F1", "Standard_F2", "Standard_F4", "Standard_F8",
3393     "Standard_F16", "Standard_F1s", "Standard_F2s", "Standard_F4s", "Standard_F8s",
3394     "Standard_F16s", "Standard_F2s_v2", "Standard_F4s_v2", "Standard_F8s_v2", "Standard_F16s_v2",
3395     "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_G1", "Standard_G2",
3396     "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", "Standard_GS3",
3397     "Standard_GS4", "Standard_GS5", "Standard_GS4-8", "Standard_GS4-4", "Standard_GS5-16",
3398     "Standard_GS5-8", "Standard_H8", "Standard_H16", "Standard_H8m", "Standard_H16m",
3399     "Standard_H16r", "Standard_H16mr", "Standard_L4s", "Standard_L8s", "Standard_L16s",
3400     "Standard_L32s", "Standard_M64s", "Standard_M64ms", "Standard_M128s", "Standard_M128ms",
3401     "Standard_M64-32ms", "Standard_M64-16ms", "Standard_M128-64ms", "Standard_M128-32ms",
3402     "Standard_NC6", "Standard_NC12", "Standard_NC24", "Standard_NC24r", "Standard_NC6s_v2",
3403     "Standard_NC12s_v2", "Standard_NC24s_v2", "Standard_NC24rs_v2", "Standard_NC6s_v3",
3404     "Standard_NC12s_v3", "Standard_NC24s_v3", "Standard_NC24rs_v3", "Standard_ND6s",
3405     "Standard_ND12s", "Standard_ND24s", "Standard_ND24rs", "Standard_NV6", "Standard_NV12",
3406     "Standard_NV24".
3407    :type vm_size: str or ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineSizeTypes
3408    """
3409
3410    _attribute_map = {
3411        'vm_size': {'key': 'vmSize', 'type': 'str'},
3412    }
3413
3414    def __init__(
3415        self,
3416        *,
3417        vm_size: Optional[Union[str, "VirtualMachineSizeTypes"]] = None,
3418        **kwargs
3419    ):
3420        super(HardwareProfile, self).__init__(**kwargs)
3421        self.vm_size = vm_size
3422
3423
3424class Image(Resource):
3425    """The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.
3426
3427    Variables are only populated by the server, and will be ignored when sending a request.
3428
3429    All required parameters must be populated in order to send to Azure.
3430
3431    :ivar id: Resource Id.
3432    :vartype id: str
3433    :ivar name: Resource name.
3434    :vartype name: str
3435    :ivar type: Resource type.
3436    :vartype type: str
3437    :param location: Required. Resource location.
3438    :type location: str
3439    :param tags: A set of tags. Resource tags.
3440    :type tags: dict[str, str]
3441    :param source_virtual_machine: The source virtual machine from which Image is created.
3442    :type source_virtual_machine: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3443    :param storage_profile: Specifies the storage settings for the virtual machine disks.
3444    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.ImageStorageProfile
3445    :ivar provisioning_state: The provisioning state.
3446    :vartype provisioning_state: str
3447    :param hyper_v_generation: Gets the HyperVGenerationType of the VirtualMachine created from the
3448     image. Possible values include: "V1", "V2".
3449    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGenerationTypes
3450    """
3451
3452    _validation = {
3453        'id': {'readonly': True},
3454        'name': {'readonly': True},
3455        'type': {'readonly': True},
3456        'location': {'required': True},
3457        'provisioning_state': {'readonly': True},
3458    }
3459
3460    _attribute_map = {
3461        'id': {'key': 'id', 'type': 'str'},
3462        'name': {'key': 'name', 'type': 'str'},
3463        'type': {'key': 'type', 'type': 'str'},
3464        'location': {'key': 'location', 'type': 'str'},
3465        'tags': {'key': 'tags', 'type': '{str}'},
3466        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
3467        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
3468        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3469        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
3470    }
3471
3472    def __init__(
3473        self,
3474        *,
3475        location: str,
3476        tags: Optional[Dict[str, str]] = None,
3477        source_virtual_machine: Optional["SubResource"] = None,
3478        storage_profile: Optional["ImageStorageProfile"] = None,
3479        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
3480        **kwargs
3481    ):
3482        super(Image, self).__init__(location=location, tags=tags, **kwargs)
3483        self.source_virtual_machine = source_virtual_machine
3484        self.storage_profile = storage_profile
3485        self.provisioning_state = None
3486        self.hyper_v_generation = hyper_v_generation
3487
3488
3489class ImageDisk(msrest.serialization.Model):
3490    """Describes a image disk.
3491
3492    :param snapshot: The snapshot.
3493    :type snapshot: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3494    :param managed_disk: The managedDisk.
3495    :type managed_disk: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3496    :param blob_uri: The Virtual Hard Disk.
3497    :type blob_uri: str
3498    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
3499     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
3500     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
3501     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
3502     "ReadWrite".
3503    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
3504    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
3505     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
3506     This value cannot be larger than 1023 GB.
3507    :type disk_size_gb: int
3508    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
3509     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
3510     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
3511    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountTypes
3512    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
3513     the managed image disk.
3514    :type disk_encryption_set: ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSetParameters
3515    """
3516
3517    _attribute_map = {
3518        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
3519        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
3520        'blob_uri': {'key': 'blobUri', 'type': 'str'},
3521        'caching': {'key': 'caching', 'type': 'str'},
3522        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3523        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3524        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
3525    }
3526
3527    def __init__(
3528        self,
3529        *,
3530        snapshot: Optional["SubResource"] = None,
3531        managed_disk: Optional["SubResource"] = None,
3532        blob_uri: Optional[str] = None,
3533        caching: Optional[Union[str, "CachingTypes"]] = None,
3534        disk_size_gb: Optional[int] = None,
3535        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3536        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
3537        **kwargs
3538    ):
3539        super(ImageDisk, self).__init__(**kwargs)
3540        self.snapshot = snapshot
3541        self.managed_disk = managed_disk
3542        self.blob_uri = blob_uri
3543        self.caching = caching
3544        self.disk_size_gb = disk_size_gb
3545        self.storage_account_type = storage_account_type
3546        self.disk_encryption_set = disk_encryption_set
3547
3548
3549class ImageDataDisk(ImageDisk):
3550    """Describes a data disk.
3551
3552    All required parameters must be populated in order to send to Azure.
3553
3554    :param snapshot: The snapshot.
3555    :type snapshot: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3556    :param managed_disk: The managedDisk.
3557    :type managed_disk: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3558    :param blob_uri: The Virtual Hard Disk.
3559    :type blob_uri: str
3560    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
3561     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
3562     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
3563     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
3564     "ReadWrite".
3565    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
3566    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
3567     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
3568     This value cannot be larger than 1023 GB.
3569    :type disk_size_gb: int
3570    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
3571     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
3572     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
3573    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountTypes
3574    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
3575     the managed image disk.
3576    :type disk_encryption_set: ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSetParameters
3577    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
3578     identify data disks within the VM and therefore must be unique for each data disk attached to a
3579     VM.
3580    :type lun: int
3581    """
3582
3583    _validation = {
3584        'lun': {'required': True},
3585    }
3586
3587    _attribute_map = {
3588        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
3589        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
3590        'blob_uri': {'key': 'blobUri', 'type': 'str'},
3591        'caching': {'key': 'caching', 'type': 'str'},
3592        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3593        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3594        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
3595        'lun': {'key': 'lun', 'type': 'int'},
3596    }
3597
3598    def __init__(
3599        self,
3600        *,
3601        lun: int,
3602        snapshot: Optional["SubResource"] = None,
3603        managed_disk: Optional["SubResource"] = None,
3604        blob_uri: Optional[str] = None,
3605        caching: Optional[Union[str, "CachingTypes"]] = None,
3606        disk_size_gb: Optional[int] = None,
3607        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3608        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
3609        **kwargs
3610    ):
3611        super(ImageDataDisk, self).__init__(snapshot=snapshot, managed_disk=managed_disk, blob_uri=blob_uri, caching=caching, disk_size_gb=disk_size_gb, storage_account_type=storage_account_type, disk_encryption_set=disk_encryption_set, **kwargs)
3612        self.lun = lun
3613
3614
3615class ImageDiskReference(msrest.serialization.Model):
3616    """The source image used for creating the disk.
3617
3618    All required parameters must be populated in order to send to Azure.
3619
3620    :param id: Required. A relative uri containing either a Platform Image Repository or user image
3621     reference.
3622    :type id: str
3623    :param lun: If the disk is created from an image's data disk, this is an index that indicates
3624     which of the data disks in the image to use. For OS disks, this field is null.
3625    :type lun: int
3626    """
3627
3628    _validation = {
3629        'id': {'required': True},
3630    }
3631
3632    _attribute_map = {
3633        'id': {'key': 'id', 'type': 'str'},
3634        'lun': {'key': 'lun', 'type': 'int'},
3635    }
3636
3637    def __init__(
3638        self,
3639        *,
3640        id: str,
3641        lun: Optional[int] = None,
3642        **kwargs
3643    ):
3644        super(ImageDiskReference, self).__init__(**kwargs)
3645        self.id = id
3646        self.lun = lun
3647
3648
3649class ImageListResult(msrest.serialization.Model):
3650    """The List Image operation response.
3651
3652    All required parameters must be populated in order to send to Azure.
3653
3654    :param value: Required. The list of Images.
3655    :type value: list[~azure.mgmt.compute.v2019_07_01.models.Image]
3656    :param next_link: The uri to fetch the next page of Images. Call ListNext() with this to fetch
3657     the next page of Images.
3658    :type next_link: str
3659    """
3660
3661    _validation = {
3662        'value': {'required': True},
3663    }
3664
3665    _attribute_map = {
3666        'value': {'key': 'value', 'type': '[Image]'},
3667        'next_link': {'key': 'nextLink', 'type': 'str'},
3668    }
3669
3670    def __init__(
3671        self,
3672        *,
3673        value: List["Image"],
3674        next_link: Optional[str] = None,
3675        **kwargs
3676    ):
3677        super(ImageListResult, self).__init__(**kwargs)
3678        self.value = value
3679        self.next_link = next_link
3680
3681
3682class ImageOSDisk(ImageDisk):
3683    """Describes an Operating System disk.
3684
3685    All required parameters must be populated in order to send to Azure.
3686
3687    :param snapshot: The snapshot.
3688    :type snapshot: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3689    :param managed_disk: The managedDisk.
3690    :type managed_disk: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3691    :param blob_uri: The Virtual Hard Disk.
3692    :type blob_uri: str
3693    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
3694     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
3695     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
3696     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
3697     "ReadWrite".
3698    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
3699    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
3700     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
3701     This value cannot be larger than 1023 GB.
3702    :type disk_size_gb: int
3703    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
3704     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
3705     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
3706    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountTypes
3707    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
3708     the managed image disk.
3709    :type disk_encryption_set: ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSetParameters
3710    :param os_type: Required. This property allows you to specify the type of the OS that is
3711     included in the disk if creating a VM from a custom image. :code:`<br>`:code:`<br>` Possible
3712     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
3713     values include: "Windows", "Linux".
3714    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
3715    :param os_state: Required. The OS State. Possible values include: "Generalized", "Specialized".
3716    :type os_state: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemStateTypes
3717    """
3718
3719    _validation = {
3720        'os_type': {'required': True},
3721        'os_state': {'required': True},
3722    }
3723
3724    _attribute_map = {
3725        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
3726        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
3727        'blob_uri': {'key': 'blobUri', 'type': 'str'},
3728        'caching': {'key': 'caching', 'type': 'str'},
3729        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3730        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3731        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
3732        'os_type': {'key': 'osType', 'type': 'str'},
3733        'os_state': {'key': 'osState', 'type': 'str'},
3734    }
3735
3736    def __init__(
3737        self,
3738        *,
3739        os_type: Union[str, "OperatingSystemTypes"],
3740        os_state: Union[str, "OperatingSystemStateTypes"],
3741        snapshot: Optional["SubResource"] = None,
3742        managed_disk: Optional["SubResource"] = None,
3743        blob_uri: Optional[str] = None,
3744        caching: Optional[Union[str, "CachingTypes"]] = None,
3745        disk_size_gb: Optional[int] = None,
3746        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3747        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
3748        **kwargs
3749    ):
3750        super(ImageOSDisk, self).__init__(snapshot=snapshot, managed_disk=managed_disk, blob_uri=blob_uri, caching=caching, disk_size_gb=disk_size_gb, storage_account_type=storage_account_type, disk_encryption_set=disk_encryption_set, **kwargs)
3751        self.os_type = os_type
3752        self.os_state = os_state
3753
3754
3755class ImagePurchasePlan(msrest.serialization.Model):
3756    """Describes the gallery Image Definition purchase plan. This is used by marketplace images.
3757
3758    :param name: The plan ID.
3759    :type name: str
3760    :param publisher: The publisher ID.
3761    :type publisher: str
3762    :param product: The product ID.
3763    :type product: str
3764    """
3765
3766    _attribute_map = {
3767        'name': {'key': 'name', 'type': 'str'},
3768        'publisher': {'key': 'publisher', 'type': 'str'},
3769        'product': {'key': 'product', 'type': 'str'},
3770    }
3771
3772    def __init__(
3773        self,
3774        *,
3775        name: Optional[str] = None,
3776        publisher: Optional[str] = None,
3777        product: Optional[str] = None,
3778        **kwargs
3779    ):
3780        super(ImagePurchasePlan, self).__init__(**kwargs)
3781        self.name = name
3782        self.publisher = publisher
3783        self.product = product
3784
3785
3786class ImageReference(SubResource):
3787    """Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations. NOTE: Image reference publisher and offer can only be set when you create the scale set.
3788
3789    Variables are only populated by the server, and will be ignored when sending a request.
3790
3791    :param id: Resource Id.
3792    :type id: str
3793    :param publisher: The image publisher.
3794    :type publisher: str
3795    :param offer: Specifies the offer of the platform image or marketplace image used to create the
3796     virtual machine.
3797    :type offer: str
3798    :param sku: The image SKU.
3799    :type sku: str
3800    :param version: Specifies the version of the platform image or marketplace image used to create
3801     the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and
3802     Build are decimal numbers. Specify 'latest' to use the latest version of an image available at
3803     deploy time. Even if you use 'latest', the VM image will not automatically update after deploy
3804     time even if a new version becomes available.
3805    :type version: str
3806    :ivar exact_version: Specifies in decimal numbers, the version of platform image or marketplace
3807     image used to create the virtual machine. This readonly field differs from 'version', only if
3808     the value specified in 'version' field is 'latest'.
3809    :vartype exact_version: str
3810    """
3811
3812    _validation = {
3813        'exact_version': {'readonly': True},
3814    }
3815
3816    _attribute_map = {
3817        'id': {'key': 'id', 'type': 'str'},
3818        'publisher': {'key': 'publisher', 'type': 'str'},
3819        'offer': {'key': 'offer', 'type': 'str'},
3820        'sku': {'key': 'sku', 'type': 'str'},
3821        'version': {'key': 'version', 'type': 'str'},
3822        'exact_version': {'key': 'exactVersion', 'type': 'str'},
3823    }
3824
3825    def __init__(
3826        self,
3827        *,
3828        id: Optional[str] = None,
3829        publisher: Optional[str] = None,
3830        offer: Optional[str] = None,
3831        sku: Optional[str] = None,
3832        version: Optional[str] = None,
3833        **kwargs
3834    ):
3835        super(ImageReference, self).__init__(id=id, **kwargs)
3836        self.publisher = publisher
3837        self.offer = offer
3838        self.sku = sku
3839        self.version = version
3840        self.exact_version = None
3841
3842
3843class ImageStorageProfile(msrest.serialization.Model):
3844    """Describes a storage profile.
3845
3846    :param os_disk: Specifies information about the operating system disk used by the virtual
3847     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
3848     for Azure virtual machines
3849     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3850    :type os_disk: ~azure.mgmt.compute.v2019_07_01.models.ImageOSDisk
3851    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
3852     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
3853     for Azure virtual machines
3854     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3855    :type data_disks: list[~azure.mgmt.compute.v2019_07_01.models.ImageDataDisk]
3856    :param zone_resilient: Specifies whether an image is zone resilient or not. Default is false.
3857     Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS).
3858    :type zone_resilient: bool
3859    """
3860
3861    _attribute_map = {
3862        'os_disk': {'key': 'osDisk', 'type': 'ImageOSDisk'},
3863        'data_disks': {'key': 'dataDisks', 'type': '[ImageDataDisk]'},
3864        'zone_resilient': {'key': 'zoneResilient', 'type': 'bool'},
3865    }
3866
3867    def __init__(
3868        self,
3869        *,
3870        os_disk: Optional["ImageOSDisk"] = None,
3871        data_disks: Optional[List["ImageDataDisk"]] = None,
3872        zone_resilient: Optional[bool] = None,
3873        **kwargs
3874    ):
3875        super(ImageStorageProfile, self).__init__(**kwargs)
3876        self.os_disk = os_disk
3877        self.data_disks = data_disks
3878        self.zone_resilient = zone_resilient
3879
3880
3881class ImageUpdate(UpdateResource):
3882    """The source user image virtual hard disk. Only tags may be updated.
3883
3884    Variables are only populated by the server, and will be ignored when sending a request.
3885
3886    :param tags: A set of tags. Resource tags.
3887    :type tags: dict[str, str]
3888    :param source_virtual_machine: The source virtual machine from which Image is created.
3889    :type source_virtual_machine: ~azure.mgmt.compute.v2019_07_01.models.SubResource
3890    :param storage_profile: Specifies the storage settings for the virtual machine disks.
3891    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.ImageStorageProfile
3892    :ivar provisioning_state: The provisioning state.
3893    :vartype provisioning_state: str
3894    :param hyper_v_generation: Gets the HyperVGenerationType of the VirtualMachine created from the
3895     image. Possible values include: "V1", "V2".
3896    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGenerationTypes
3897    """
3898
3899    _validation = {
3900        'provisioning_state': {'readonly': True},
3901    }
3902
3903    _attribute_map = {
3904        'tags': {'key': 'tags', 'type': '{str}'},
3905        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
3906        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
3907        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3908        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
3909    }
3910
3911    def __init__(
3912        self,
3913        *,
3914        tags: Optional[Dict[str, str]] = None,
3915        source_virtual_machine: Optional["SubResource"] = None,
3916        storage_profile: Optional["ImageStorageProfile"] = None,
3917        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
3918        **kwargs
3919    ):
3920        super(ImageUpdate, self).__init__(tags=tags, **kwargs)
3921        self.source_virtual_machine = source_virtual_machine
3922        self.storage_profile = storage_profile
3923        self.provisioning_state = None
3924        self.hyper_v_generation = hyper_v_generation
3925
3926
3927class InnerError(msrest.serialization.Model):
3928    """Inner error details.
3929
3930    :param exceptiontype: The exception type.
3931    :type exceptiontype: str
3932    :param errordetail: The internal error message or exception dump.
3933    :type errordetail: str
3934    """
3935
3936    _attribute_map = {
3937        'exceptiontype': {'key': 'exceptiontype', 'type': 'str'},
3938        'errordetail': {'key': 'errordetail', 'type': 'str'},
3939    }
3940
3941    def __init__(
3942        self,
3943        *,
3944        exceptiontype: Optional[str] = None,
3945        errordetail: Optional[str] = None,
3946        **kwargs
3947    ):
3948        super(InnerError, self).__init__(**kwargs)
3949        self.exceptiontype = exceptiontype
3950        self.errordetail = errordetail
3951
3952
3953class InstanceViewStatus(msrest.serialization.Model):
3954    """Instance view status.
3955
3956    :param code: The status code.
3957    :type code: str
3958    :param level: The level code. Possible values include: "Info", "Warning", "Error".
3959    :type level: str or ~azure.mgmt.compute.v2019_07_01.models.StatusLevelTypes
3960    :param display_status: The short localizable label for the status.
3961    :type display_status: str
3962    :param message: The detailed status message, including for alerts and error messages.
3963    :type message: str
3964    :param time: The time of the status.
3965    :type time: ~datetime.datetime
3966    """
3967
3968    _attribute_map = {
3969        'code': {'key': 'code', 'type': 'str'},
3970        'level': {'key': 'level', 'type': 'str'},
3971        'display_status': {'key': 'displayStatus', 'type': 'str'},
3972        'message': {'key': 'message', 'type': 'str'},
3973        'time': {'key': 'time', 'type': 'iso-8601'},
3974    }
3975
3976    def __init__(
3977        self,
3978        *,
3979        code: Optional[str] = None,
3980        level: Optional[Union[str, "StatusLevelTypes"]] = None,
3981        display_status: Optional[str] = None,
3982        message: Optional[str] = None,
3983        time: Optional[datetime.datetime] = None,
3984        **kwargs
3985    ):
3986        super(InstanceViewStatus, self).__init__(**kwargs)
3987        self.code = code
3988        self.level = level
3989        self.display_status = display_status
3990        self.message = message
3991        self.time = time
3992
3993
3994class KeyVaultAndKeyReference(msrest.serialization.Model):
3995    """Key Vault Key Url and vault id of KeK, KeK is optional and when provided is used to unwrap the encryptionKey.
3996
3997    All required parameters must be populated in order to send to Azure.
3998
3999    :param source_vault: Required. Resource id of the KeyVault containing the key or secret.
4000    :type source_vault: ~azure.mgmt.compute.v2019_07_01.models.SourceVault
4001    :param key_url: Required. Url pointing to a key or secret in KeyVault.
4002    :type key_url: str
4003    """
4004
4005    _validation = {
4006        'source_vault': {'required': True},
4007        'key_url': {'required': True},
4008    }
4009
4010    _attribute_map = {
4011        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
4012        'key_url': {'key': 'keyUrl', 'type': 'str'},
4013    }
4014
4015    def __init__(
4016        self,
4017        *,
4018        source_vault: "SourceVault",
4019        key_url: str,
4020        **kwargs
4021    ):
4022        super(KeyVaultAndKeyReference, self).__init__(**kwargs)
4023        self.source_vault = source_vault
4024        self.key_url = key_url
4025
4026
4027class KeyVaultAndSecretReference(msrest.serialization.Model):
4028    """Key Vault Secret Url and vault id of the encryption key.
4029
4030    All required parameters must be populated in order to send to Azure.
4031
4032    :param source_vault: Required. Resource id of the KeyVault containing the key or secret.
4033    :type source_vault: ~azure.mgmt.compute.v2019_07_01.models.SourceVault
4034    :param secret_url: Required. Url pointing to a key or secret in KeyVault.
4035    :type secret_url: str
4036    """
4037
4038    _validation = {
4039        'source_vault': {'required': True},
4040        'secret_url': {'required': True},
4041    }
4042
4043    _attribute_map = {
4044        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
4045        'secret_url': {'key': 'secretUrl', 'type': 'str'},
4046    }
4047
4048    def __init__(
4049        self,
4050        *,
4051        source_vault: "SourceVault",
4052        secret_url: str,
4053        **kwargs
4054    ):
4055        super(KeyVaultAndSecretReference, self).__init__(**kwargs)
4056        self.source_vault = source_vault
4057        self.secret_url = secret_url
4058
4059
4060class KeyVaultKeyReference(msrest.serialization.Model):
4061    """Describes a reference to Key Vault Key.
4062
4063    All required parameters must be populated in order to send to Azure.
4064
4065    :param key_url: Required. The URL referencing a key encryption key in Key Vault.
4066    :type key_url: str
4067    :param source_vault: Required. The relative URL of the Key Vault containing the key.
4068    :type source_vault: ~azure.mgmt.compute.v2019_07_01.models.SubResource
4069    """
4070
4071    _validation = {
4072        'key_url': {'required': True},
4073        'source_vault': {'required': True},
4074    }
4075
4076    _attribute_map = {
4077        'key_url': {'key': 'keyUrl', 'type': 'str'},
4078        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
4079    }
4080
4081    def __init__(
4082        self,
4083        *,
4084        key_url: str,
4085        source_vault: "SubResource",
4086        **kwargs
4087    ):
4088        super(KeyVaultKeyReference, self).__init__(**kwargs)
4089        self.key_url = key_url
4090        self.source_vault = source_vault
4091
4092
4093class KeyVaultSecretReference(msrest.serialization.Model):
4094    """Describes a reference to Key Vault Secret.
4095
4096    All required parameters must be populated in order to send to Azure.
4097
4098    :param secret_url: Required. The URL referencing a secret in a Key Vault.
4099    :type secret_url: str
4100    :param source_vault: Required. The relative URL of the Key Vault containing the secret.
4101    :type source_vault: ~azure.mgmt.compute.v2019_07_01.models.SubResource
4102    """
4103
4104    _validation = {
4105        'secret_url': {'required': True},
4106        'source_vault': {'required': True},
4107    }
4108
4109    _attribute_map = {
4110        'secret_url': {'key': 'secretUrl', 'type': 'str'},
4111        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
4112    }
4113
4114    def __init__(
4115        self,
4116        *,
4117        secret_url: str,
4118        source_vault: "SubResource",
4119        **kwargs
4120    ):
4121        super(KeyVaultSecretReference, self).__init__(**kwargs)
4122        self.secret_url = secret_url
4123        self.source_vault = source_vault
4124
4125
4126class LinuxConfiguration(msrest.serialization.Model):
4127    """Specifies the Linux operating system settings on the virtual machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on Azure-Endorsed Distributions <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_ :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for Non-Endorsed Distributions <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4128
4129    :param disable_password_authentication: Specifies whether password authentication should be
4130     disabled.
4131    :type disable_password_authentication: bool
4132    :param ssh: Specifies the ssh key configuration for a Linux OS.
4133    :type ssh: ~azure.mgmt.compute.v2019_07_01.models.SshConfiguration
4134    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
4135     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
4136     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
4137     the VM so that extensions can be added to the VM later.
4138    :type provision_vm_agent: bool
4139    """
4140
4141    _attribute_map = {
4142        'disable_password_authentication': {'key': 'disablePasswordAuthentication', 'type': 'bool'},
4143        'ssh': {'key': 'ssh', 'type': 'SshConfiguration'},
4144        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
4145    }
4146
4147    def __init__(
4148        self,
4149        *,
4150        disable_password_authentication: Optional[bool] = None,
4151        ssh: Optional["SshConfiguration"] = None,
4152        provision_vm_agent: Optional[bool] = None,
4153        **kwargs
4154    ):
4155        super(LinuxConfiguration, self).__init__(**kwargs)
4156        self.disable_password_authentication = disable_password_authentication
4157        self.ssh = ssh
4158        self.provision_vm_agent = provision_vm_agent
4159
4160
4161class ListUsagesResult(msrest.serialization.Model):
4162    """The List Usages operation response.
4163
4164    All required parameters must be populated in order to send to Azure.
4165
4166    :param value: Required. The list of compute resource usages.
4167    :type value: list[~azure.mgmt.compute.v2019_07_01.models.Usage]
4168    :param next_link: The URI to fetch the next page of compute resource usage information. Call
4169     ListNext() with this to fetch the next page of compute resource usage information.
4170    :type next_link: str
4171    """
4172
4173    _validation = {
4174        'value': {'required': True},
4175    }
4176
4177    _attribute_map = {
4178        'value': {'key': 'value', 'type': '[Usage]'},
4179        'next_link': {'key': 'nextLink', 'type': 'str'},
4180    }
4181
4182    def __init__(
4183        self,
4184        *,
4185        value: List["Usage"],
4186        next_link: Optional[str] = None,
4187        **kwargs
4188    ):
4189        super(ListUsagesResult, self).__init__(**kwargs)
4190        self.value = value
4191        self.next_link = next_link
4192
4193
4194class LogAnalyticsInputBase(msrest.serialization.Model):
4195    """Api input base class for LogAnalytics Api.
4196
4197    All required parameters must be populated in order to send to Azure.
4198
4199    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
4200     LogAnalytics Api writes output logs to.
4201    :type blob_container_sas_uri: str
4202    :param from_time: Required. From time of the query.
4203    :type from_time: ~datetime.datetime
4204    :param to_time: Required. To time of the query.
4205    :type to_time: ~datetime.datetime
4206    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
4207    :type group_by_throttle_policy: bool
4208    :param group_by_operation_name: Group query result by Operation Name.
4209    :type group_by_operation_name: bool
4210    :param group_by_resource_name: Group query result by Resource Name.
4211    :type group_by_resource_name: bool
4212    """
4213
4214    _validation = {
4215        'blob_container_sas_uri': {'required': True},
4216        'from_time': {'required': True},
4217        'to_time': {'required': True},
4218    }
4219
4220    _attribute_map = {
4221        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
4222        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
4223        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
4224        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
4225        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
4226        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
4227    }
4228
4229    def __init__(
4230        self,
4231        *,
4232        blob_container_sas_uri: str,
4233        from_time: datetime.datetime,
4234        to_time: datetime.datetime,
4235        group_by_throttle_policy: Optional[bool] = None,
4236        group_by_operation_name: Optional[bool] = None,
4237        group_by_resource_name: Optional[bool] = None,
4238        **kwargs
4239    ):
4240        super(LogAnalyticsInputBase, self).__init__(**kwargs)
4241        self.blob_container_sas_uri = blob_container_sas_uri
4242        self.from_time = from_time
4243        self.to_time = to_time
4244        self.group_by_throttle_policy = group_by_throttle_policy
4245        self.group_by_operation_name = group_by_operation_name
4246        self.group_by_resource_name = group_by_resource_name
4247
4248
4249class LogAnalyticsOperationResult(msrest.serialization.Model):
4250    """LogAnalytics operation status response.
4251
4252    Variables are only populated by the server, and will be ignored when sending a request.
4253
4254    :ivar properties: LogAnalyticsOutput.
4255    :vartype properties: ~azure.mgmt.compute.v2019_07_01.models.LogAnalyticsOutput
4256    """
4257
4258    _validation = {
4259        'properties': {'readonly': True},
4260    }
4261
4262    _attribute_map = {
4263        'properties': {'key': 'properties', 'type': 'LogAnalyticsOutput'},
4264    }
4265
4266    def __init__(
4267        self,
4268        **kwargs
4269    ):
4270        super(LogAnalyticsOperationResult, self).__init__(**kwargs)
4271        self.properties = None
4272
4273
4274class LogAnalyticsOutput(msrest.serialization.Model):
4275    """LogAnalytics output properties.
4276
4277    Variables are only populated by the server, and will be ignored when sending a request.
4278
4279    :ivar output: Output file Uri path to blob container.
4280    :vartype output: str
4281    """
4282
4283    _validation = {
4284        'output': {'readonly': True},
4285    }
4286
4287    _attribute_map = {
4288        'output': {'key': 'output', 'type': 'str'},
4289    }
4290
4291    def __init__(
4292        self,
4293        **kwargs
4294    ):
4295        super(LogAnalyticsOutput, self).__init__(**kwargs)
4296        self.output = None
4297
4298
4299class MaintenanceRedeployStatus(msrest.serialization.Model):
4300    """Maintenance Operation Status.
4301
4302    :param is_customer_initiated_maintenance_allowed: True, if customer is allowed to perform
4303     Maintenance.
4304    :type is_customer_initiated_maintenance_allowed: bool
4305    :param pre_maintenance_window_start_time: Start Time for the Pre Maintenance Window.
4306    :type pre_maintenance_window_start_time: ~datetime.datetime
4307    :param pre_maintenance_window_end_time: End Time for the Pre Maintenance Window.
4308    :type pre_maintenance_window_end_time: ~datetime.datetime
4309    :param maintenance_window_start_time: Start Time for the Maintenance Window.
4310    :type maintenance_window_start_time: ~datetime.datetime
4311    :param maintenance_window_end_time: End Time for the Maintenance Window.
4312    :type maintenance_window_end_time: ~datetime.datetime
4313    :param last_operation_result_code: The Last Maintenance Operation Result Code. Possible values
4314     include: "None", "RetryLater", "MaintenanceAborted", "MaintenanceCompleted".
4315    :type last_operation_result_code: str or
4316     ~azure.mgmt.compute.v2019_07_01.models.MaintenanceOperationResultCodeTypes
4317    :param last_operation_message: Message returned for the last Maintenance Operation.
4318    :type last_operation_message: str
4319    """
4320
4321    _attribute_map = {
4322        'is_customer_initiated_maintenance_allowed': {'key': 'isCustomerInitiatedMaintenanceAllowed', 'type': 'bool'},
4323        'pre_maintenance_window_start_time': {'key': 'preMaintenanceWindowStartTime', 'type': 'iso-8601'},
4324        'pre_maintenance_window_end_time': {'key': 'preMaintenanceWindowEndTime', 'type': 'iso-8601'},
4325        'maintenance_window_start_time': {'key': 'maintenanceWindowStartTime', 'type': 'iso-8601'},
4326        'maintenance_window_end_time': {'key': 'maintenanceWindowEndTime', 'type': 'iso-8601'},
4327        'last_operation_result_code': {'key': 'lastOperationResultCode', 'type': 'str'},
4328        'last_operation_message': {'key': 'lastOperationMessage', 'type': 'str'},
4329    }
4330
4331    def __init__(
4332        self,
4333        *,
4334        is_customer_initiated_maintenance_allowed: Optional[bool] = None,
4335        pre_maintenance_window_start_time: Optional[datetime.datetime] = None,
4336        pre_maintenance_window_end_time: Optional[datetime.datetime] = None,
4337        maintenance_window_start_time: Optional[datetime.datetime] = None,
4338        maintenance_window_end_time: Optional[datetime.datetime] = None,
4339        last_operation_result_code: Optional[Union[str, "MaintenanceOperationResultCodeTypes"]] = None,
4340        last_operation_message: Optional[str] = None,
4341        **kwargs
4342    ):
4343        super(MaintenanceRedeployStatus, self).__init__(**kwargs)
4344        self.is_customer_initiated_maintenance_allowed = is_customer_initiated_maintenance_allowed
4345        self.pre_maintenance_window_start_time = pre_maintenance_window_start_time
4346        self.pre_maintenance_window_end_time = pre_maintenance_window_end_time
4347        self.maintenance_window_start_time = maintenance_window_start_time
4348        self.maintenance_window_end_time = maintenance_window_end_time
4349        self.last_operation_result_code = last_operation_result_code
4350        self.last_operation_message = last_operation_message
4351
4352
4353class ManagedArtifact(msrest.serialization.Model):
4354    """The managed artifact.
4355
4356    All required parameters must be populated in order to send to Azure.
4357
4358    :param id: Required. The managed artifact id.
4359    :type id: str
4360    """
4361
4362    _validation = {
4363        'id': {'required': True},
4364    }
4365
4366    _attribute_map = {
4367        'id': {'key': 'id', 'type': 'str'},
4368    }
4369
4370    def __init__(
4371        self,
4372        *,
4373        id: str,
4374        **kwargs
4375    ):
4376        super(ManagedArtifact, self).__init__(**kwargs)
4377        self.id = id
4378
4379
4380class ManagedDiskParameters(SubResource):
4381    """The parameters of a managed disk.
4382
4383    :param id: Resource Id.
4384    :type id: str
4385    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
4386     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
4387     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
4388    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountTypes
4389    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
4390     the managed disk.
4391    :type disk_encryption_set: ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSetParameters
4392    """
4393
4394    _attribute_map = {
4395        'id': {'key': 'id', 'type': 'str'},
4396        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
4397        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
4398    }
4399
4400    def __init__(
4401        self,
4402        *,
4403        id: Optional[str] = None,
4404        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
4405        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
4406        **kwargs
4407    ):
4408        super(ManagedDiskParameters, self).__init__(id=id, **kwargs)
4409        self.storage_account_type = storage_account_type
4410        self.disk_encryption_set = disk_encryption_set
4411
4412
4413class NetworkInterfaceReference(SubResource):
4414    """Describes a network interface reference.
4415
4416    :param id: Resource Id.
4417    :type id: str
4418    :param primary: Specifies the primary network interface in case the virtual machine has more
4419     than 1 network interface.
4420    :type primary: bool
4421    """
4422
4423    _attribute_map = {
4424        'id': {'key': 'id', 'type': 'str'},
4425        'primary': {'key': 'properties.primary', 'type': 'bool'},
4426    }
4427
4428    def __init__(
4429        self,
4430        *,
4431        id: Optional[str] = None,
4432        primary: Optional[bool] = None,
4433        **kwargs
4434    ):
4435        super(NetworkInterfaceReference, self).__init__(id=id, **kwargs)
4436        self.primary = primary
4437
4438
4439class NetworkProfile(msrest.serialization.Model):
4440    """Specifies the network interfaces of the virtual machine.
4441
4442    :param network_interfaces: Specifies the list of resource Ids for the network interfaces
4443     associated with the virtual machine.
4444    :type network_interfaces:
4445     list[~azure.mgmt.compute.v2019_07_01.models.NetworkInterfaceReference]
4446    """
4447
4448    _attribute_map = {
4449        'network_interfaces': {'key': 'networkInterfaces', 'type': '[NetworkInterfaceReference]'},
4450    }
4451
4452    def __init__(
4453        self,
4454        *,
4455        network_interfaces: Optional[List["NetworkInterfaceReference"]] = None,
4456        **kwargs
4457    ):
4458        super(NetworkProfile, self).__init__(**kwargs)
4459        self.network_interfaces = network_interfaces
4460
4461
4462class OSDisk(msrest.serialization.Model):
4463    """Specifies information about the operating system disk used by the virtual machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs for Azure virtual machines <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
4464
4465    All required parameters must be populated in order to send to Azure.
4466
4467    :param os_type: This property allows you to specify the type of the OS that is included in the
4468     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
4469     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
4470     values include: "Windows", "Linux".
4471    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
4472    :param encryption_settings: Specifies the encryption settings for the OS Disk.
4473     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
4474    :type encryption_settings: ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSettings
4475    :param name: The disk name.
4476    :type name: str
4477    :param vhd: The virtual hard disk.
4478    :type vhd: ~azure.mgmt.compute.v2019_07_01.models.VirtualHardDisk
4479    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
4480     before being attached to the virtual machine. If SourceImage is provided, the destination
4481     virtual hard drive must not exist.
4482    :type image: ~azure.mgmt.compute.v2019_07_01.models.VirtualHardDisk
4483    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
4484     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
4485     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
4486     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
4487     "ReadWrite".
4488    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
4489    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
4490     disabled on the disk.
4491    :type write_accelerator_enabled: bool
4492    :param diff_disk_settings: Specifies the ephemeral Disk Settings for the operating system disk
4493     used by the virtual machine.
4494    :type diff_disk_settings: ~azure.mgmt.compute.v2019_07_01.models.DiffDiskSettings
4495    :param create_option: Required. Specifies how the virtual machine should be
4496     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
4497     This value is used when you are using a specialized disk to create the virtual
4498     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
4499     image to create the virtual machine. If you are using a platform image, you also use the
4500     imageReference element described above. If you are using a marketplace image, you  also use the
4501     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
4502    :type create_option: str or ~azure.mgmt.compute.v2019_07_01.models.DiskCreateOptionTypes
4503    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
4504     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
4505     This value cannot be larger than 1023 GB.
4506    :type disk_size_gb: int
4507    :param managed_disk: The managed disk parameters.
4508    :type managed_disk: ~azure.mgmt.compute.v2019_07_01.models.ManagedDiskParameters
4509    """
4510
4511    _validation = {
4512        'create_option': {'required': True},
4513    }
4514
4515    _attribute_map = {
4516        'os_type': {'key': 'osType', 'type': 'str'},
4517        'encryption_settings': {'key': 'encryptionSettings', 'type': 'DiskEncryptionSettings'},
4518        'name': {'key': 'name', 'type': 'str'},
4519        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
4520        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
4521        'caching': {'key': 'caching', 'type': 'str'},
4522        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
4523        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
4524        'create_option': {'key': 'createOption', 'type': 'str'},
4525        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
4526        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
4527    }
4528
4529    def __init__(
4530        self,
4531        *,
4532        create_option: Union[str, "DiskCreateOptionTypes"],
4533        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
4534        encryption_settings: Optional["DiskEncryptionSettings"] = None,
4535        name: Optional[str] = None,
4536        vhd: Optional["VirtualHardDisk"] = None,
4537        image: Optional["VirtualHardDisk"] = None,
4538        caching: Optional[Union[str, "CachingTypes"]] = None,
4539        write_accelerator_enabled: Optional[bool] = None,
4540        diff_disk_settings: Optional["DiffDiskSettings"] = None,
4541        disk_size_gb: Optional[int] = None,
4542        managed_disk: Optional["ManagedDiskParameters"] = None,
4543        **kwargs
4544    ):
4545        super(OSDisk, self).__init__(**kwargs)
4546        self.os_type = os_type
4547        self.encryption_settings = encryption_settings
4548        self.name = name
4549        self.vhd = vhd
4550        self.image = image
4551        self.caching = caching
4552        self.write_accelerator_enabled = write_accelerator_enabled
4553        self.diff_disk_settings = diff_disk_settings
4554        self.create_option = create_option
4555        self.disk_size_gb = disk_size_gb
4556        self.managed_disk = managed_disk
4557
4558
4559class OSDiskImage(msrest.serialization.Model):
4560    """Contains the os disk image information.
4561
4562    All required parameters must be populated in order to send to Azure.
4563
4564    :param operating_system: Required. The operating system of the osDiskImage. Possible values
4565     include: "Windows", "Linux".
4566    :type operating_system: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
4567    """
4568
4569    _validation = {
4570        'operating_system': {'required': True},
4571    }
4572
4573    _attribute_map = {
4574        'operating_system': {'key': 'operatingSystem', 'type': 'str'},
4575    }
4576
4577    def __init__(
4578        self,
4579        *,
4580        operating_system: Union[str, "OperatingSystemTypes"],
4581        **kwargs
4582    ):
4583        super(OSDiskImage, self).__init__(**kwargs)
4584        self.operating_system = operating_system
4585
4586
4587class OSProfile(msrest.serialization.Model):
4588    """Specifies the operating system settings for the virtual machine. Some of the settings cannot be changed once VM is provisioned.
4589
4590    :param computer_name: Specifies the host OS name of the virtual machine.
4591     :code:`<br>`:code:`<br>` This name cannot be updated after the VM is created.
4592     :code:`<br>`:code:`<br>` **Max-length (Windows):** 15 characters :code:`<br>`:code:`<br>`
4593     **Max-length (Linux):** 64 characters. :code:`<br>`:code:`<br>` For naming conventions and
4594     restrictions see `Azure infrastructure services implementation guidelines
4595     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions>`_.
4596    :type computer_name: str
4597    :param admin_username: Specifies the name of the administrator account.
4598     :code:`<br>`:code:`<br>` This property cannot be updated after the VM is created.
4599     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
4600     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
4601     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
4602     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
4603     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
4604     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
4605     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
4606     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
4607     root privileges on Linux virtual machines in Azure
4608     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
4609     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
4610     in this field, see `Selecting User Names for Linux on Azure
4611     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4612    :type admin_username: str
4613    :param admin_password: Specifies the password of the administrator account.
4614     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
4615     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
4616     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
4617     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
4618     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
4619     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
4620     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
4621     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
4622     resetting the password, see `How to reset the Remote Desktop service or its login password in a
4623     Windows VM
4624     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
4625     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
4626     repair disks on Azure Linux VMs using the VMAccess Extension
4627     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
4628    :type admin_password: str
4629    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
4630     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
4631     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` **Note: Do not pass any
4632     secrets or passwords in customData property** :code:`<br>`:code:`<br>` This property cannot be
4633     updated after the VM is created. :code:`<br>`:code:`<br>` customData is passed to the VM to be
4634     saved as a file, for more information see `Custom Data on Azure VMs
4635     <https://docs.microsoft.com/azure/virtual-machines/custom-data>`_ :code:`<br>`:code:`<br>` For
4636     using cloud-init for your Linux VM, see `Using cloud-init to customize a Linux VM during
4637     creation
4638     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4639    :type custom_data: str
4640    :param windows_configuration: Specifies Windows operating system settings on the virtual
4641     machine.
4642    :type windows_configuration: ~azure.mgmt.compute.v2019_07_01.models.WindowsConfiguration
4643    :param linux_configuration: Specifies the Linux operating system settings on the virtual
4644     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
4645     Azure-Endorsed Distributions
4646     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
4647     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
4648     Non-Endorsed Distributions
4649     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4650    :type linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration
4651    :param secrets: Specifies set of certificates that should be installed onto the virtual
4652     machine.
4653    :type secrets: list[~azure.mgmt.compute.v2019_07_01.models.VaultSecretGroup]
4654    :param allow_extension_operations: Specifies whether extension operations should be allowed on
4655     the virtual machine. :code:`<br>`:code:`<br>`This may only be set to False when no extensions
4656     are present on the virtual machine.
4657    :type allow_extension_operations: bool
4658    :param require_guest_provision_signal: Specifies whether the guest provision signal is required
4659     to infer provision success of the virtual machine.
4660    :type require_guest_provision_signal: bool
4661    """
4662
4663    _attribute_map = {
4664        'computer_name': {'key': 'computerName', 'type': 'str'},
4665        'admin_username': {'key': 'adminUsername', 'type': 'str'},
4666        'admin_password': {'key': 'adminPassword', 'type': 'str'},
4667        'custom_data': {'key': 'customData', 'type': 'str'},
4668        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
4669        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
4670        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
4671        'allow_extension_operations': {'key': 'allowExtensionOperations', 'type': 'bool'},
4672        'require_guest_provision_signal': {'key': 'requireGuestProvisionSignal', 'type': 'bool'},
4673    }
4674
4675    def __init__(
4676        self,
4677        *,
4678        computer_name: Optional[str] = None,
4679        admin_username: Optional[str] = None,
4680        admin_password: Optional[str] = None,
4681        custom_data: Optional[str] = None,
4682        windows_configuration: Optional["WindowsConfiguration"] = None,
4683        linux_configuration: Optional["LinuxConfiguration"] = None,
4684        secrets: Optional[List["VaultSecretGroup"]] = None,
4685        allow_extension_operations: Optional[bool] = None,
4686        require_guest_provision_signal: Optional[bool] = None,
4687        **kwargs
4688    ):
4689        super(OSProfile, self).__init__(**kwargs)
4690        self.computer_name = computer_name
4691        self.admin_username = admin_username
4692        self.admin_password = admin_password
4693        self.custom_data = custom_data
4694        self.windows_configuration = windows_configuration
4695        self.linux_configuration = linux_configuration
4696        self.secrets = secrets
4697        self.allow_extension_operations = allow_extension_operations
4698        self.require_guest_provision_signal = require_guest_provision_signal
4699
4700
4701class Plan(msrest.serialization.Model):
4702    """Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.
4703
4704    :param name: The plan ID.
4705    :type name: str
4706    :param publisher: The publisher ID.
4707    :type publisher: str
4708    :param product: Specifies the product of the image from the marketplace. This is the same value
4709     as Offer under the imageReference element.
4710    :type product: str
4711    :param promotion_code: The promotion code.
4712    :type promotion_code: str
4713    """
4714
4715    _attribute_map = {
4716        'name': {'key': 'name', 'type': 'str'},
4717        'publisher': {'key': 'publisher', 'type': 'str'},
4718        'product': {'key': 'product', 'type': 'str'},
4719        'promotion_code': {'key': 'promotionCode', 'type': 'str'},
4720    }
4721
4722    def __init__(
4723        self,
4724        *,
4725        name: Optional[str] = None,
4726        publisher: Optional[str] = None,
4727        product: Optional[str] = None,
4728        promotion_code: Optional[str] = None,
4729        **kwargs
4730    ):
4731        super(Plan, self).__init__(**kwargs)
4732        self.name = name
4733        self.publisher = publisher
4734        self.product = product
4735        self.promotion_code = promotion_code
4736
4737
4738class ProximityPlacementGroup(Resource):
4739    """Specifies information about the proximity placement group.
4740
4741    Variables are only populated by the server, and will be ignored when sending a request.
4742
4743    All required parameters must be populated in order to send to Azure.
4744
4745    :ivar id: Resource Id.
4746    :vartype id: str
4747    :ivar name: Resource name.
4748    :vartype name: str
4749    :ivar type: Resource type.
4750    :vartype type: str
4751    :param location: Required. Resource location.
4752    :type location: str
4753    :param tags: A set of tags. Resource tags.
4754    :type tags: dict[str, str]
4755    :param proximity_placement_group_type: Specifies the type of the proximity placement group.
4756     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Standard** : Co-locate
4757     resources within an Azure region or Availability Zone. :code:`<br>`:code:`<br>` **Ultra** : For
4758     future use. Possible values include: "Standard", "Ultra".
4759    :type proximity_placement_group_type: str or
4760     ~azure.mgmt.compute.v2019_07_01.models.ProximityPlacementGroupType
4761    :ivar virtual_machines: A list of references to all virtual machines in the proximity placement
4762     group.
4763    :vartype virtual_machines:
4764     list[~azure.mgmt.compute.v2019_07_01.models.SubResourceWithColocationStatus]
4765    :ivar virtual_machine_scale_sets: A list of references to all virtual machine scale sets in the
4766     proximity placement group.
4767    :vartype virtual_machine_scale_sets:
4768     list[~azure.mgmt.compute.v2019_07_01.models.SubResourceWithColocationStatus]
4769    :ivar availability_sets: A list of references to all availability sets in the proximity
4770     placement group.
4771    :vartype availability_sets:
4772     list[~azure.mgmt.compute.v2019_07_01.models.SubResourceWithColocationStatus]
4773    :param colocation_status: Describes colocation status of the Proximity Placement Group.
4774    :type colocation_status: ~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus
4775    """
4776
4777    _validation = {
4778        'id': {'readonly': True},
4779        'name': {'readonly': True},
4780        'type': {'readonly': True},
4781        'location': {'required': True},
4782        'virtual_machines': {'readonly': True},
4783        'virtual_machine_scale_sets': {'readonly': True},
4784        'availability_sets': {'readonly': True},
4785    }
4786
4787    _attribute_map = {
4788        'id': {'key': 'id', 'type': 'str'},
4789        'name': {'key': 'name', 'type': 'str'},
4790        'type': {'key': 'type', 'type': 'str'},
4791        'location': {'key': 'location', 'type': 'str'},
4792        'tags': {'key': 'tags', 'type': '{str}'},
4793        'proximity_placement_group_type': {'key': 'properties.proximityPlacementGroupType', 'type': 'str'},
4794        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceWithColocationStatus]'},
4795        'virtual_machine_scale_sets': {'key': 'properties.virtualMachineScaleSets', 'type': '[SubResourceWithColocationStatus]'},
4796        'availability_sets': {'key': 'properties.availabilitySets', 'type': '[SubResourceWithColocationStatus]'},
4797        'colocation_status': {'key': 'properties.colocationStatus', 'type': 'InstanceViewStatus'},
4798    }
4799
4800    def __init__(
4801        self,
4802        *,
4803        location: str,
4804        tags: Optional[Dict[str, str]] = None,
4805        proximity_placement_group_type: Optional[Union[str, "ProximityPlacementGroupType"]] = None,
4806        colocation_status: Optional["InstanceViewStatus"] = None,
4807        **kwargs
4808    ):
4809        super(ProximityPlacementGroup, self).__init__(location=location, tags=tags, **kwargs)
4810        self.proximity_placement_group_type = proximity_placement_group_type
4811        self.virtual_machines = None
4812        self.virtual_machine_scale_sets = None
4813        self.availability_sets = None
4814        self.colocation_status = colocation_status
4815
4816
4817class ProximityPlacementGroupListResult(msrest.serialization.Model):
4818    """The List Proximity Placement Group operation response.
4819
4820    All required parameters must be populated in order to send to Azure.
4821
4822    :param value: Required. The list of proximity placement groups.
4823    :type value: list[~azure.mgmt.compute.v2019_07_01.models.ProximityPlacementGroup]
4824    :param next_link: The URI to fetch the next page of proximity placement groups.
4825    :type next_link: str
4826    """
4827
4828    _validation = {
4829        'value': {'required': True},
4830    }
4831
4832    _attribute_map = {
4833        'value': {'key': 'value', 'type': '[ProximityPlacementGroup]'},
4834        'next_link': {'key': 'nextLink', 'type': 'str'},
4835    }
4836
4837    def __init__(
4838        self,
4839        *,
4840        value: List["ProximityPlacementGroup"],
4841        next_link: Optional[str] = None,
4842        **kwargs
4843    ):
4844        super(ProximityPlacementGroupListResult, self).__init__(**kwargs)
4845        self.value = value
4846        self.next_link = next_link
4847
4848
4849class ProximityPlacementGroupUpdate(UpdateResource):
4850    """Specifies information about the proximity placement group.
4851
4852    :param tags: A set of tags. Resource tags.
4853    :type tags: dict[str, str]
4854    """
4855
4856    _attribute_map = {
4857        'tags': {'key': 'tags', 'type': '{str}'},
4858    }
4859
4860    def __init__(
4861        self,
4862        *,
4863        tags: Optional[Dict[str, str]] = None,
4864        **kwargs
4865    ):
4866        super(ProximityPlacementGroupUpdate, self).__init__(tags=tags, **kwargs)
4867
4868
4869class PurchasePlan(msrest.serialization.Model):
4870    """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
4871
4872    All required parameters must be populated in order to send to Azure.
4873
4874    :param publisher: Required. The publisher ID.
4875    :type publisher: str
4876    :param name: Required. The plan ID.
4877    :type name: str
4878    :param product: Required. Specifies the product of the image from the marketplace. This is the
4879     same value as Offer under the imageReference element.
4880    :type product: str
4881    """
4882
4883    _validation = {
4884        'publisher': {'required': True},
4885        'name': {'required': True},
4886        'product': {'required': True},
4887    }
4888
4889    _attribute_map = {
4890        'publisher': {'key': 'publisher', 'type': 'str'},
4891        'name': {'key': 'name', 'type': 'str'},
4892        'product': {'key': 'product', 'type': 'str'},
4893    }
4894
4895    def __init__(
4896        self,
4897        *,
4898        publisher: str,
4899        name: str,
4900        product: str,
4901        **kwargs
4902    ):
4903        super(PurchasePlan, self).__init__(**kwargs)
4904        self.publisher = publisher
4905        self.name = name
4906        self.product = product
4907
4908
4909class RecommendedMachineConfiguration(msrest.serialization.Model):
4910    """The properties describe the recommended machine configuration for this Image Definition. These properties are updatable.
4911
4912    :param v_cp_us: Describes the resource range.
4913    :type v_cp_us: ~azure.mgmt.compute.v2019_07_01.models.ResourceRange
4914    :param memory: Describes the resource range.
4915    :type memory: ~azure.mgmt.compute.v2019_07_01.models.ResourceRange
4916    """
4917
4918    _attribute_map = {
4919        'v_cp_us': {'key': 'vCPUs', 'type': 'ResourceRange'},
4920        'memory': {'key': 'memory', 'type': 'ResourceRange'},
4921    }
4922
4923    def __init__(
4924        self,
4925        *,
4926        v_cp_us: Optional["ResourceRange"] = None,
4927        memory: Optional["ResourceRange"] = None,
4928        **kwargs
4929    ):
4930        super(RecommendedMachineConfiguration, self).__init__(**kwargs)
4931        self.v_cp_us = v_cp_us
4932        self.memory = memory
4933
4934
4935class RecoveryWalkResponse(msrest.serialization.Model):
4936    """Response after calling a manual recovery walk.
4937
4938    Variables are only populated by the server, and will be ignored when sending a request.
4939
4940    :ivar walk_performed: Whether the recovery walk was performed.
4941    :vartype walk_performed: bool
4942    :ivar next_platform_update_domain: The next update domain that needs to be walked. Null means
4943     walk spanning all update domains has been completed.
4944    :vartype next_platform_update_domain: int
4945    """
4946
4947    _validation = {
4948        'walk_performed': {'readonly': True},
4949        'next_platform_update_domain': {'readonly': True},
4950    }
4951
4952    _attribute_map = {
4953        'walk_performed': {'key': 'walkPerformed', 'type': 'bool'},
4954        'next_platform_update_domain': {'key': 'nextPlatformUpdateDomain', 'type': 'int'},
4955    }
4956
4957    def __init__(
4958        self,
4959        **kwargs
4960    ):
4961        super(RecoveryWalkResponse, self).__init__(**kwargs)
4962        self.walk_performed = None
4963        self.next_platform_update_domain = None
4964
4965
4966class RegionalReplicationStatus(msrest.serialization.Model):
4967    """This is the regional replication status.
4968
4969    Variables are only populated by the server, and will be ignored when sending a request.
4970
4971    :ivar region: The region to which the gallery Image Version is being replicated to.
4972    :vartype region: str
4973    :ivar state: This is the regional replication state. Possible values include: "Unknown",
4974     "Replicating", "Completed", "Failed".
4975    :vartype state: str or ~azure.mgmt.compute.v2019_07_01.models.ReplicationState
4976    :ivar details: The details of the replication status.
4977    :vartype details: str
4978    :ivar progress: It indicates progress of the replication job.
4979    :vartype progress: int
4980    """
4981
4982    _validation = {
4983        'region': {'readonly': True},
4984        'state': {'readonly': True},
4985        'details': {'readonly': True},
4986        'progress': {'readonly': True},
4987    }
4988
4989    _attribute_map = {
4990        'region': {'key': 'region', 'type': 'str'},
4991        'state': {'key': 'state', 'type': 'str'},
4992        'details': {'key': 'details', 'type': 'str'},
4993        'progress': {'key': 'progress', 'type': 'int'},
4994    }
4995
4996    def __init__(
4997        self,
4998        **kwargs
4999    ):
5000        super(RegionalReplicationStatus, self).__init__(**kwargs)
5001        self.region = None
5002        self.state = None
5003        self.details = None
5004        self.progress = None
5005
5006
5007class ReplicationStatus(msrest.serialization.Model):
5008    """This is the replication status of the gallery Image Version.
5009
5010    Variables are only populated by the server, and will be ignored when sending a request.
5011
5012    :ivar aggregated_state: This is the aggregated replication status based on all the regional
5013     replication status flags. Possible values include: "Unknown", "InProgress", "Completed",
5014     "Failed".
5015    :vartype aggregated_state: str or
5016     ~azure.mgmt.compute.v2019_07_01.models.AggregatedReplicationState
5017    :ivar summary: This is a summary of replication status for each region.
5018    :vartype summary: list[~azure.mgmt.compute.v2019_07_01.models.RegionalReplicationStatus]
5019    """
5020
5021    _validation = {
5022        'aggregated_state': {'readonly': True},
5023        'summary': {'readonly': True},
5024    }
5025
5026    _attribute_map = {
5027        'aggregated_state': {'key': 'aggregatedState', 'type': 'str'},
5028        'summary': {'key': 'summary', 'type': '[RegionalReplicationStatus]'},
5029    }
5030
5031    def __init__(
5032        self,
5033        **kwargs
5034    ):
5035        super(ReplicationStatus, self).__init__(**kwargs)
5036        self.aggregated_state = None
5037        self.summary = None
5038
5039
5040class RequestRateByIntervalInput(LogAnalyticsInputBase):
5041    """Api request input for LogAnalytics getRequestRateByInterval Api.
5042
5043    All required parameters must be populated in order to send to Azure.
5044
5045    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
5046     LogAnalytics Api writes output logs to.
5047    :type blob_container_sas_uri: str
5048    :param from_time: Required. From time of the query.
5049    :type from_time: ~datetime.datetime
5050    :param to_time: Required. To time of the query.
5051    :type to_time: ~datetime.datetime
5052    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
5053    :type group_by_throttle_policy: bool
5054    :param group_by_operation_name: Group query result by Operation Name.
5055    :type group_by_operation_name: bool
5056    :param group_by_resource_name: Group query result by Resource Name.
5057    :type group_by_resource_name: bool
5058    :param interval_length: Required. Interval value in minutes used to create LogAnalytics call
5059     rate logs. Possible values include: "ThreeMins", "FiveMins", "ThirtyMins", "SixtyMins".
5060    :type interval_length: str or ~azure.mgmt.compute.v2019_07_01.models.IntervalInMins
5061    """
5062
5063    _validation = {
5064        'blob_container_sas_uri': {'required': True},
5065        'from_time': {'required': True},
5066        'to_time': {'required': True},
5067        'interval_length': {'required': True},
5068    }
5069
5070    _attribute_map = {
5071        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
5072        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
5073        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
5074        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
5075        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
5076        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
5077        'interval_length': {'key': 'intervalLength', 'type': 'str'},
5078    }
5079
5080    def __init__(
5081        self,
5082        *,
5083        blob_container_sas_uri: str,
5084        from_time: datetime.datetime,
5085        to_time: datetime.datetime,
5086        interval_length: Union[str, "IntervalInMins"],
5087        group_by_throttle_policy: Optional[bool] = None,
5088        group_by_operation_name: Optional[bool] = None,
5089        group_by_resource_name: Optional[bool] = None,
5090        **kwargs
5091    ):
5092        super(RequestRateByIntervalInput, self).__init__(blob_container_sas_uri=blob_container_sas_uri, from_time=from_time, to_time=to_time, group_by_throttle_policy=group_by_throttle_policy, group_by_operation_name=group_by_operation_name, group_by_resource_name=group_by_resource_name, **kwargs)
5093        self.interval_length = interval_length
5094
5095
5096class ResourceRange(msrest.serialization.Model):
5097    """Describes the resource range.
5098
5099    :param min: The minimum number of the resource.
5100    :type min: int
5101    :param max: The maximum number of the resource.
5102    :type max: int
5103    """
5104
5105    _attribute_map = {
5106        'min': {'key': 'min', 'type': 'int'},
5107        'max': {'key': 'max', 'type': 'int'},
5108    }
5109
5110    def __init__(
5111        self,
5112        *,
5113        min: Optional[int] = None,
5114        max: Optional[int] = None,
5115        **kwargs
5116    ):
5117        super(ResourceRange, self).__init__(**kwargs)
5118        self.min = min
5119        self.max = max
5120
5121
5122class RollbackStatusInfo(msrest.serialization.Model):
5123    """Information about rollback on failed VM instances after a OS Upgrade operation.
5124
5125    Variables are only populated by the server, and will be ignored when sending a request.
5126
5127    :ivar successfully_rolledback_instance_count: The number of instances which have been
5128     successfully rolled back.
5129    :vartype successfully_rolledback_instance_count: int
5130    :ivar failed_rolledback_instance_count: The number of instances which failed to rollback.
5131    :vartype failed_rolledback_instance_count: int
5132    :ivar rollback_error: Error details if OS rollback failed.
5133    :vartype rollback_error: ~azure.mgmt.compute.v2019_07_01.models.ApiError
5134    """
5135
5136    _validation = {
5137        'successfully_rolledback_instance_count': {'readonly': True},
5138        'failed_rolledback_instance_count': {'readonly': True},
5139        'rollback_error': {'readonly': True},
5140    }
5141
5142    _attribute_map = {
5143        'successfully_rolledback_instance_count': {'key': 'successfullyRolledbackInstanceCount', 'type': 'int'},
5144        'failed_rolledback_instance_count': {'key': 'failedRolledbackInstanceCount', 'type': 'int'},
5145        'rollback_error': {'key': 'rollbackError', 'type': 'ApiError'},
5146    }
5147
5148    def __init__(
5149        self,
5150        **kwargs
5151    ):
5152        super(RollbackStatusInfo, self).__init__(**kwargs)
5153        self.successfully_rolledback_instance_count = None
5154        self.failed_rolledback_instance_count = None
5155        self.rollback_error = None
5156
5157
5158class RollingUpgradePolicy(msrest.serialization.Model):
5159    """The configuration parameters used while performing a rolling upgrade.
5160
5161    :param max_batch_instance_percent: The maximum percent of total virtual machine instances that
5162     will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum,
5163     unhealthy instances in previous or future batches can cause the percentage of instances in a
5164     batch to decrease to ensure higher reliability. The default value for this parameter is 20%.
5165    :type max_batch_instance_percent: int
5166    :param max_unhealthy_instance_percent: The maximum percentage of the total virtual machine
5167     instances in the scale set that can be simultaneously unhealthy, either as a result of being
5168     upgraded, or by being found in an unhealthy state by the virtual machine health checks before
5169     the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The
5170     default value for this parameter is 20%.
5171    :type max_unhealthy_instance_percent: int
5172    :param max_unhealthy_upgraded_instance_percent: The maximum percentage of upgraded virtual
5173     machine instances that can be found to be in an unhealthy state. This check will happen after
5174     each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The
5175     default value for this parameter is 20%.
5176    :type max_unhealthy_upgraded_instance_percent: int
5177    :param pause_time_between_batches: The wait time between completing the update for all virtual
5178     machines in one batch and starting the next batch. The time duration should be specified in ISO
5179     8601 format. The default value is 0 seconds (PT0S).
5180    :type pause_time_between_batches: str
5181    """
5182
5183    _validation = {
5184        'max_batch_instance_percent': {'maximum': 100, 'minimum': 5},
5185        'max_unhealthy_instance_percent': {'maximum': 100, 'minimum': 5},
5186        'max_unhealthy_upgraded_instance_percent': {'maximum': 100, 'minimum': 0},
5187    }
5188
5189    _attribute_map = {
5190        'max_batch_instance_percent': {'key': 'maxBatchInstancePercent', 'type': 'int'},
5191        'max_unhealthy_instance_percent': {'key': 'maxUnhealthyInstancePercent', 'type': 'int'},
5192        'max_unhealthy_upgraded_instance_percent': {'key': 'maxUnhealthyUpgradedInstancePercent', 'type': 'int'},
5193        'pause_time_between_batches': {'key': 'pauseTimeBetweenBatches', 'type': 'str'},
5194    }
5195
5196    def __init__(
5197        self,
5198        *,
5199        max_batch_instance_percent: Optional[int] = None,
5200        max_unhealthy_instance_percent: Optional[int] = None,
5201        max_unhealthy_upgraded_instance_percent: Optional[int] = None,
5202        pause_time_between_batches: Optional[str] = None,
5203        **kwargs
5204    ):
5205        super(RollingUpgradePolicy, self).__init__(**kwargs)
5206        self.max_batch_instance_percent = max_batch_instance_percent
5207        self.max_unhealthy_instance_percent = max_unhealthy_instance_percent
5208        self.max_unhealthy_upgraded_instance_percent = max_unhealthy_upgraded_instance_percent
5209        self.pause_time_between_batches = pause_time_between_batches
5210
5211
5212class RollingUpgradeProgressInfo(msrest.serialization.Model):
5213    """Information about the number of virtual machine instances in each upgrade state.
5214
5215    Variables are only populated by the server, and will be ignored when sending a request.
5216
5217    :ivar successful_instance_count: The number of instances that have been successfully upgraded.
5218    :vartype successful_instance_count: int
5219    :ivar failed_instance_count: The number of instances that have failed to be upgraded
5220     successfully.
5221    :vartype failed_instance_count: int
5222    :ivar in_progress_instance_count: The number of instances that are currently being upgraded.
5223    :vartype in_progress_instance_count: int
5224    :ivar pending_instance_count: The number of instances that have not yet begun to be upgraded.
5225    :vartype pending_instance_count: int
5226    """
5227
5228    _validation = {
5229        'successful_instance_count': {'readonly': True},
5230        'failed_instance_count': {'readonly': True},
5231        'in_progress_instance_count': {'readonly': True},
5232        'pending_instance_count': {'readonly': True},
5233    }
5234
5235    _attribute_map = {
5236        'successful_instance_count': {'key': 'successfulInstanceCount', 'type': 'int'},
5237        'failed_instance_count': {'key': 'failedInstanceCount', 'type': 'int'},
5238        'in_progress_instance_count': {'key': 'inProgressInstanceCount', 'type': 'int'},
5239        'pending_instance_count': {'key': 'pendingInstanceCount', 'type': 'int'},
5240    }
5241
5242    def __init__(
5243        self,
5244        **kwargs
5245    ):
5246        super(RollingUpgradeProgressInfo, self).__init__(**kwargs)
5247        self.successful_instance_count = None
5248        self.failed_instance_count = None
5249        self.in_progress_instance_count = None
5250        self.pending_instance_count = None
5251
5252
5253class RollingUpgradeRunningStatus(msrest.serialization.Model):
5254    """Information about the current running state of the overall upgrade.
5255
5256    Variables are only populated by the server, and will be ignored when sending a request.
5257
5258    :ivar code: Code indicating the current status of the upgrade. Possible values include:
5259     "RollingForward", "Cancelled", "Completed", "Faulted".
5260    :vartype code: str or ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradeStatusCode
5261    :ivar start_time: Start time of the upgrade.
5262    :vartype start_time: ~datetime.datetime
5263    :ivar last_action: The last action performed on the rolling upgrade. Possible values include:
5264     "Start", "Cancel".
5265    :vartype last_action: str or ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradeActionType
5266    :ivar last_action_time: Last action time of the upgrade.
5267    :vartype last_action_time: ~datetime.datetime
5268    """
5269
5270    _validation = {
5271        'code': {'readonly': True},
5272        'start_time': {'readonly': True},
5273        'last_action': {'readonly': True},
5274        'last_action_time': {'readonly': True},
5275    }
5276
5277    _attribute_map = {
5278        'code': {'key': 'code', 'type': 'str'},
5279        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
5280        'last_action': {'key': 'lastAction', 'type': 'str'},
5281        'last_action_time': {'key': 'lastActionTime', 'type': 'iso-8601'},
5282    }
5283
5284    def __init__(
5285        self,
5286        **kwargs
5287    ):
5288        super(RollingUpgradeRunningStatus, self).__init__(**kwargs)
5289        self.code = None
5290        self.start_time = None
5291        self.last_action = None
5292        self.last_action_time = None
5293
5294
5295class RollingUpgradeStatusInfo(Resource):
5296    """The status of the latest virtual machine scale set rolling upgrade.
5297
5298    Variables are only populated by the server, and will be ignored when sending a request.
5299
5300    All required parameters must be populated in order to send to Azure.
5301
5302    :ivar id: Resource Id.
5303    :vartype id: str
5304    :ivar name: Resource name.
5305    :vartype name: str
5306    :ivar type: Resource type.
5307    :vartype type: str
5308    :param location: Required. Resource location.
5309    :type location: str
5310    :param tags: A set of tags. Resource tags.
5311    :type tags: dict[str, str]
5312    :ivar policy: The rolling upgrade policies applied for this upgrade.
5313    :vartype policy: ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradePolicy
5314    :ivar running_status: Information about the current running state of the overall upgrade.
5315    :vartype running_status: ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradeRunningStatus
5316    :ivar progress: Information about the number of virtual machine instances in each upgrade
5317     state.
5318    :vartype progress: ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradeProgressInfo
5319    :ivar error: Error details for this upgrade, if there are any.
5320    :vartype error: ~azure.mgmt.compute.v2019_07_01.models.ApiError
5321    """
5322
5323    _validation = {
5324        'id': {'readonly': True},
5325        'name': {'readonly': True},
5326        'type': {'readonly': True},
5327        'location': {'required': True},
5328        'policy': {'readonly': True},
5329        'running_status': {'readonly': True},
5330        'progress': {'readonly': True},
5331        'error': {'readonly': True},
5332    }
5333
5334    _attribute_map = {
5335        'id': {'key': 'id', 'type': 'str'},
5336        'name': {'key': 'name', 'type': 'str'},
5337        'type': {'key': 'type', 'type': 'str'},
5338        'location': {'key': 'location', 'type': 'str'},
5339        'tags': {'key': 'tags', 'type': '{str}'},
5340        'policy': {'key': 'properties.policy', 'type': 'RollingUpgradePolicy'},
5341        'running_status': {'key': 'properties.runningStatus', 'type': 'RollingUpgradeRunningStatus'},
5342        'progress': {'key': 'properties.progress', 'type': 'RollingUpgradeProgressInfo'},
5343        'error': {'key': 'properties.error', 'type': 'ApiError'},
5344    }
5345
5346    def __init__(
5347        self,
5348        *,
5349        location: str,
5350        tags: Optional[Dict[str, str]] = None,
5351        **kwargs
5352    ):
5353        super(RollingUpgradeStatusInfo, self).__init__(location=location, tags=tags, **kwargs)
5354        self.policy = None
5355        self.running_status = None
5356        self.progress = None
5357        self.error = None
5358
5359
5360class RunCommandDocumentBase(msrest.serialization.Model):
5361    """Describes the properties of a Run Command metadata.
5362
5363    All required parameters must be populated in order to send to Azure.
5364
5365    :param schema: Required. The VM run command schema.
5366    :type schema: str
5367    :param id: Required. The VM run command id.
5368    :type id: str
5369    :param os_type: Required. The Operating System type. Possible values include: "Windows",
5370     "Linux".
5371    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
5372    :param label: Required. The VM run command label.
5373    :type label: str
5374    :param description: Required. The VM run command description.
5375    :type description: str
5376    """
5377
5378    _validation = {
5379        'schema': {'required': True},
5380        'id': {'required': True},
5381        'os_type': {'required': True},
5382        'label': {'required': True},
5383        'description': {'required': True},
5384    }
5385
5386    _attribute_map = {
5387        'schema': {'key': '$schema', 'type': 'str'},
5388        'id': {'key': 'id', 'type': 'str'},
5389        'os_type': {'key': 'osType', 'type': 'str'},
5390        'label': {'key': 'label', 'type': 'str'},
5391        'description': {'key': 'description', 'type': 'str'},
5392    }
5393
5394    def __init__(
5395        self,
5396        *,
5397        schema: str,
5398        id: str,
5399        os_type: Union[str, "OperatingSystemTypes"],
5400        label: str,
5401        description: str,
5402        **kwargs
5403    ):
5404        super(RunCommandDocumentBase, self).__init__(**kwargs)
5405        self.schema = schema
5406        self.id = id
5407        self.os_type = os_type
5408        self.label = label
5409        self.description = description
5410
5411
5412class RunCommandDocument(RunCommandDocumentBase):
5413    """Describes the properties of a Run Command.
5414
5415    All required parameters must be populated in order to send to Azure.
5416
5417    :param schema: Required. The VM run command schema.
5418    :type schema: str
5419    :param id: Required. The VM run command id.
5420    :type id: str
5421    :param os_type: Required. The Operating System type. Possible values include: "Windows",
5422     "Linux".
5423    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
5424    :param label: Required. The VM run command label.
5425    :type label: str
5426    :param description: Required. The VM run command description.
5427    :type description: str
5428    :param script: Required. The script to be executed.
5429    :type script: list[str]
5430    :param parameters: The parameters used by the script.
5431    :type parameters: list[~azure.mgmt.compute.v2019_07_01.models.RunCommandParameterDefinition]
5432    """
5433
5434    _validation = {
5435        'schema': {'required': True},
5436        'id': {'required': True},
5437        'os_type': {'required': True},
5438        'label': {'required': True},
5439        'description': {'required': True},
5440        'script': {'required': True},
5441    }
5442
5443    _attribute_map = {
5444        'schema': {'key': '$schema', 'type': 'str'},
5445        'id': {'key': 'id', 'type': 'str'},
5446        'os_type': {'key': 'osType', 'type': 'str'},
5447        'label': {'key': 'label', 'type': 'str'},
5448        'description': {'key': 'description', 'type': 'str'},
5449        'script': {'key': 'script', 'type': '[str]'},
5450        'parameters': {'key': 'parameters', 'type': '[RunCommandParameterDefinition]'},
5451    }
5452
5453    def __init__(
5454        self,
5455        *,
5456        schema: str,
5457        id: str,
5458        os_type: Union[str, "OperatingSystemTypes"],
5459        label: str,
5460        description: str,
5461        script: List[str],
5462        parameters: Optional[List["RunCommandParameterDefinition"]] = None,
5463        **kwargs
5464    ):
5465        super(RunCommandDocument, self).__init__(schema=schema, id=id, os_type=os_type, label=label, description=description, **kwargs)
5466        self.script = script
5467        self.parameters = parameters
5468
5469
5470class RunCommandInput(msrest.serialization.Model):
5471    """Capture Virtual Machine parameters.
5472
5473    All required parameters must be populated in order to send to Azure.
5474
5475    :param command_id: Required. The run command id.
5476    :type command_id: str
5477    :param script: Optional. The script to be executed.  When this value is given, the given script
5478     will override the default script of the command.
5479    :type script: list[str]
5480    :param parameters: The run command parameters.
5481    :type parameters: list[~azure.mgmt.compute.v2019_07_01.models.RunCommandInputParameter]
5482    """
5483
5484    _validation = {
5485        'command_id': {'required': True},
5486    }
5487
5488    _attribute_map = {
5489        'command_id': {'key': 'commandId', 'type': 'str'},
5490        'script': {'key': 'script', 'type': '[str]'},
5491        'parameters': {'key': 'parameters', 'type': '[RunCommandInputParameter]'},
5492    }
5493
5494    def __init__(
5495        self,
5496        *,
5497        command_id: str,
5498        script: Optional[List[str]] = None,
5499        parameters: Optional[List["RunCommandInputParameter"]] = None,
5500        **kwargs
5501    ):
5502        super(RunCommandInput, self).__init__(**kwargs)
5503        self.command_id = command_id
5504        self.script = script
5505        self.parameters = parameters
5506
5507
5508class RunCommandInputParameter(msrest.serialization.Model):
5509    """Describes the properties of a run command parameter.
5510
5511    All required parameters must be populated in order to send to Azure.
5512
5513    :param name: Required. The run command parameter name.
5514    :type name: str
5515    :param value: Required. The run command parameter value.
5516    :type value: str
5517    """
5518
5519    _validation = {
5520        'name': {'required': True},
5521        'value': {'required': True},
5522    }
5523
5524    _attribute_map = {
5525        'name': {'key': 'name', 'type': 'str'},
5526        'value': {'key': 'value', 'type': 'str'},
5527    }
5528
5529    def __init__(
5530        self,
5531        *,
5532        name: str,
5533        value: str,
5534        **kwargs
5535    ):
5536        super(RunCommandInputParameter, self).__init__(**kwargs)
5537        self.name = name
5538        self.value = value
5539
5540
5541class RunCommandListResult(msrest.serialization.Model):
5542    """The List Virtual Machine operation response.
5543
5544    All required parameters must be populated in order to send to Azure.
5545
5546    :param value: Required. The list of virtual machine run commands.
5547    :type value: list[~azure.mgmt.compute.v2019_07_01.models.RunCommandDocumentBase]
5548    :param next_link: The uri to fetch the next page of run commands. Call ListNext() with this to
5549     fetch the next page of run commands.
5550    :type next_link: str
5551    """
5552
5553    _validation = {
5554        'value': {'required': True},
5555    }
5556
5557    _attribute_map = {
5558        'value': {'key': 'value', 'type': '[RunCommandDocumentBase]'},
5559        'next_link': {'key': 'nextLink', 'type': 'str'},
5560    }
5561
5562    def __init__(
5563        self,
5564        *,
5565        value: List["RunCommandDocumentBase"],
5566        next_link: Optional[str] = None,
5567        **kwargs
5568    ):
5569        super(RunCommandListResult, self).__init__(**kwargs)
5570        self.value = value
5571        self.next_link = next_link
5572
5573
5574class RunCommandParameterDefinition(msrest.serialization.Model):
5575    """Describes the properties of a run command parameter.
5576
5577    All required parameters must be populated in order to send to Azure.
5578
5579    :param name: Required. The run command parameter name.
5580    :type name: str
5581    :param type: Required. The run command parameter type.
5582    :type type: str
5583    :param default_value: The run command parameter default value.
5584    :type default_value: str
5585    :param required: The run command parameter required.
5586    :type required: bool
5587    """
5588
5589    _validation = {
5590        'name': {'required': True},
5591        'type': {'required': True},
5592    }
5593
5594    _attribute_map = {
5595        'name': {'key': 'name', 'type': 'str'},
5596        'type': {'key': 'type', 'type': 'str'},
5597        'default_value': {'key': 'defaultValue', 'type': 'str'},
5598        'required': {'key': 'required', 'type': 'bool'},
5599    }
5600
5601    def __init__(
5602        self,
5603        *,
5604        name: str,
5605        type: str,
5606        default_value: Optional[str] = None,
5607        required: Optional[bool] = False,
5608        **kwargs
5609    ):
5610        super(RunCommandParameterDefinition, self).__init__(**kwargs)
5611        self.name = name
5612        self.type = type
5613        self.default_value = default_value
5614        self.required = required
5615
5616
5617class RunCommandResult(msrest.serialization.Model):
5618    """RunCommandResult.
5619
5620    :param value: Run command operation response.
5621    :type value: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
5622    """
5623
5624    _attribute_map = {
5625        'value': {'key': 'value', 'type': '[InstanceViewStatus]'},
5626    }
5627
5628    def __init__(
5629        self,
5630        *,
5631        value: Optional[List["InstanceViewStatus"]] = None,
5632        **kwargs
5633    ):
5634        super(RunCommandResult, self).__init__(**kwargs)
5635        self.value = value
5636
5637
5638class ScaleInPolicy(msrest.serialization.Model):
5639    """Describes a scale-in policy for a virtual machine scale set.
5640
5641    :param rules: The rules to be followed when scaling-in a virtual machine scale set.
5642     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Default** When a
5643     virtual machine scale set is scaled in, the scale set will first be balanced across zones if it
5644     is a zonal scale set. Then, it will be balanced across Fault Domains as far as possible. Within
5645     each Fault Domain, the virtual machines chosen for removal will be the newest ones that are not
5646     protected from scale-in. :code:`<br>`:code:`<br>` **OldestVM** When a virtual machine scale set
5647     is being scaled-in, the oldest virtual machines that are not protected from scale-in will be
5648     chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced
5649     across zones. Within each zone, the oldest virtual machines that are not protected will be
5650     chosen for removal. :code:`<br>`:code:`<br>` **NewestVM** When a virtual machine scale set is
5651     being scaled-in, the newest virtual machines that are not protected from scale-in will be
5652     chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced
5653     across zones. Within each zone, the newest virtual machines that are not protected will be
5654     chosen for removal. :code:`<br>`:code:`<br>`.
5655    :type rules: list[str or
5656     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetScaleInRules]
5657    """
5658
5659    _attribute_map = {
5660        'rules': {'key': 'rules', 'type': '[str]'},
5661    }
5662
5663    def __init__(
5664        self,
5665        *,
5666        rules: Optional[List[Union[str, "VirtualMachineScaleSetScaleInRules"]]] = None,
5667        **kwargs
5668    ):
5669        super(ScaleInPolicy, self).__init__(**kwargs)
5670        self.rules = rules
5671
5672
5673class ScheduledEventsProfile(msrest.serialization.Model):
5674    """ScheduledEventsProfile.
5675
5676    :param terminate_notification_profile: Specifies Terminate Scheduled Event related
5677     configurations.
5678    :type terminate_notification_profile:
5679     ~azure.mgmt.compute.v2019_07_01.models.TerminateNotificationProfile
5680    """
5681
5682    _attribute_map = {
5683        'terminate_notification_profile': {'key': 'terminateNotificationProfile', 'type': 'TerminateNotificationProfile'},
5684    }
5685
5686    def __init__(
5687        self,
5688        *,
5689        terminate_notification_profile: Optional["TerminateNotificationProfile"] = None,
5690        **kwargs
5691    ):
5692        super(ScheduledEventsProfile, self).__init__(**kwargs)
5693        self.terminate_notification_profile = terminate_notification_profile
5694
5695
5696class Sku(msrest.serialization.Model):
5697    """Describes a virtual machine scale set sku. NOTE: If the new VM SKU is not supported on the hardware the scale set is currently on, you need to deallocate the VMs in the scale set before you modify the SKU name.
5698
5699    :param name: The sku name.
5700    :type name: str
5701    :param tier: Specifies the tier of virtual machines in a scale set.:code:`<br />`:code:`<br />`
5702     Possible Values::code:`<br />`:code:`<br />` **Standard**\ :code:`<br />`:code:`<br />`
5703     **Basic**.
5704    :type tier: str
5705    :param capacity: Specifies the number of virtual machines in the scale set.
5706    :type capacity: long
5707    """
5708
5709    _attribute_map = {
5710        'name': {'key': 'name', 'type': 'str'},
5711        'tier': {'key': 'tier', 'type': 'str'},
5712        'capacity': {'key': 'capacity', 'type': 'long'},
5713    }
5714
5715    def __init__(
5716        self,
5717        *,
5718        name: Optional[str] = None,
5719        tier: Optional[str] = None,
5720        capacity: Optional[int] = None,
5721        **kwargs
5722    ):
5723        super(Sku, self).__init__(**kwargs)
5724        self.name = name
5725        self.tier = tier
5726        self.capacity = capacity
5727
5728
5729class Snapshot(Resource):
5730    """Snapshot resource.
5731
5732    Variables are only populated by the server, and will be ignored when sending a request.
5733
5734    All required parameters must be populated in order to send to Azure.
5735
5736    :ivar id: Resource Id.
5737    :vartype id: str
5738    :ivar name: Resource name.
5739    :vartype name: str
5740    :ivar type: Resource type.
5741    :vartype type: str
5742    :param location: Required. Resource location.
5743    :type location: str
5744    :param tags: A set of tags. Resource tags.
5745    :type tags: dict[str, str]
5746    :ivar managed_by: Unused. Always Null.
5747    :vartype managed_by: str
5748    :param sku: The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.
5749    :type sku: ~azure.mgmt.compute.v2019_07_01.models.SnapshotSku
5750    :ivar time_created: The time when the disk was created.
5751    :vartype time_created: ~datetime.datetime
5752    :param os_type: The Operating System type. Possible values include: "Windows", "Linux".
5753    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
5754    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
5755     disks only. Possible values include: "V1", "V2".
5756    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGeneration
5757    :param creation_data: Disk source information. CreationData information cannot be changed after
5758     the disk has been created.
5759    :type creation_data: ~azure.mgmt.compute.v2019_07_01.models.CreationData
5760    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
5761     indicates the size of the disk to create. If this field is present for updates or creation with
5762     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
5763     running VM, and can only increase the disk's size.
5764    :type disk_size_gb: int
5765    :ivar disk_size_bytes: The size of the disk in bytes. This field is read only.
5766    :vartype disk_size_bytes: long
5767    :ivar unique_id: Unique Guid identifying the resource.
5768    :vartype unique_id: str
5769    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
5770     Encryption, can contain multiple encryption settings per disk or snapshot.
5771    :type encryption_settings_collection:
5772     ~azure.mgmt.compute.v2019_07_01.models.EncryptionSettingsCollection
5773    :ivar provisioning_state: The disk provisioning state.
5774    :vartype provisioning_state: str
5775    :param incremental: Whether a snapshot is incremental. Incremental snapshots on the same disk
5776     occupy less space than full snapshots and can be diffed.
5777    :type incremental: bool
5778    :param encryption: Encryption property can be used to encrypt data at rest with customer
5779     managed keys or platform managed keys.
5780    :type encryption: ~azure.mgmt.compute.v2019_07_01.models.Encryption
5781    """
5782
5783    _validation = {
5784        'id': {'readonly': True},
5785        'name': {'readonly': True},
5786        'type': {'readonly': True},
5787        'location': {'required': True},
5788        'managed_by': {'readonly': True},
5789        'time_created': {'readonly': True},
5790        'disk_size_bytes': {'readonly': True},
5791        'unique_id': {'readonly': True},
5792        'provisioning_state': {'readonly': True},
5793    }
5794
5795    _attribute_map = {
5796        'id': {'key': 'id', 'type': 'str'},
5797        'name': {'key': 'name', 'type': 'str'},
5798        'type': {'key': 'type', 'type': 'str'},
5799        'location': {'key': 'location', 'type': 'str'},
5800        'tags': {'key': 'tags', 'type': '{str}'},
5801        'managed_by': {'key': 'managedBy', 'type': 'str'},
5802        'sku': {'key': 'sku', 'type': 'SnapshotSku'},
5803        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
5804        'os_type': {'key': 'properties.osType', 'type': 'str'},
5805        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
5806        'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'},
5807        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
5808        'disk_size_bytes': {'key': 'properties.diskSizeBytes', 'type': 'long'},
5809        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
5810        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
5811        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5812        'incremental': {'key': 'properties.incremental', 'type': 'bool'},
5813        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
5814    }
5815
5816    def __init__(
5817        self,
5818        *,
5819        location: str,
5820        tags: Optional[Dict[str, str]] = None,
5821        sku: Optional["SnapshotSku"] = None,
5822        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
5823        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
5824        creation_data: Optional["CreationData"] = None,
5825        disk_size_gb: Optional[int] = None,
5826        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
5827        incremental: Optional[bool] = None,
5828        encryption: Optional["Encryption"] = None,
5829        **kwargs
5830    ):
5831        super(Snapshot, self).__init__(location=location, tags=tags, **kwargs)
5832        self.managed_by = None
5833        self.sku = sku
5834        self.time_created = None
5835        self.os_type = os_type
5836        self.hyper_v_generation = hyper_v_generation
5837        self.creation_data = creation_data
5838        self.disk_size_gb = disk_size_gb
5839        self.disk_size_bytes = None
5840        self.unique_id = None
5841        self.encryption_settings_collection = encryption_settings_collection
5842        self.provisioning_state = None
5843        self.incremental = incremental
5844        self.encryption = encryption
5845
5846
5847class SnapshotList(msrest.serialization.Model):
5848    """The List Snapshots operation response.
5849
5850    All required parameters must be populated in order to send to Azure.
5851
5852    :param value: Required. A list of snapshots.
5853    :type value: list[~azure.mgmt.compute.v2019_07_01.models.Snapshot]
5854    :param next_link: The uri to fetch the next page of snapshots. Call ListNext() with this to
5855     fetch the next page of snapshots.
5856    :type next_link: str
5857    """
5858
5859    _validation = {
5860        'value': {'required': True},
5861    }
5862
5863    _attribute_map = {
5864        'value': {'key': 'value', 'type': '[Snapshot]'},
5865        'next_link': {'key': 'nextLink', 'type': 'str'},
5866    }
5867
5868    def __init__(
5869        self,
5870        *,
5871        value: List["Snapshot"],
5872        next_link: Optional[str] = None,
5873        **kwargs
5874    ):
5875        super(SnapshotList, self).__init__(**kwargs)
5876        self.value = value
5877        self.next_link = next_link
5878
5879
5880class SnapshotSku(msrest.serialization.Model):
5881    """The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.
5882
5883    Variables are only populated by the server, and will be ignored when sending a request.
5884
5885    :param name: The sku name. Possible values include: "Standard_LRS", "Premium_LRS",
5886     "Standard_ZRS".
5887    :type name: str or ~azure.mgmt.compute.v2019_07_01.models.SnapshotStorageAccountTypes
5888    :ivar tier: The sku tier.
5889    :vartype tier: str
5890    """
5891
5892    _validation = {
5893        'tier': {'readonly': True},
5894    }
5895
5896    _attribute_map = {
5897        'name': {'key': 'name', 'type': 'str'},
5898        'tier': {'key': 'tier', 'type': 'str'},
5899    }
5900
5901    def __init__(
5902        self,
5903        *,
5904        name: Optional[Union[str, "SnapshotStorageAccountTypes"]] = None,
5905        **kwargs
5906    ):
5907        super(SnapshotSku, self).__init__(**kwargs)
5908        self.name = name
5909        self.tier = None
5910
5911
5912class SnapshotUpdate(msrest.serialization.Model):
5913    """Snapshot update resource.
5914
5915    :param tags: A set of tags. Resource tags.
5916    :type tags: dict[str, str]
5917    :param sku: The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.
5918    :type sku: ~azure.mgmt.compute.v2019_07_01.models.SnapshotSku
5919    :param os_type: the Operating System type. Possible values include: "Windows", "Linux".
5920    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
5921    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
5922     indicates the size of the disk to create. If this field is present for updates or creation with
5923     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
5924     running VM, and can only increase the disk's size.
5925    :type disk_size_gb: int
5926    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
5927     Encryption, can contain multiple encryption settings per disk or snapshot.
5928    :type encryption_settings_collection:
5929     ~azure.mgmt.compute.v2019_07_01.models.EncryptionSettingsCollection
5930    :param encryption: Encryption property can be used to encrypt data at rest with customer
5931     managed keys or platform managed keys.
5932    :type encryption: ~azure.mgmt.compute.v2019_07_01.models.Encryption
5933    """
5934
5935    _attribute_map = {
5936        'tags': {'key': 'tags', 'type': '{str}'},
5937        'sku': {'key': 'sku', 'type': 'SnapshotSku'},
5938        'os_type': {'key': 'properties.osType', 'type': 'str'},
5939        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
5940        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
5941        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
5942    }
5943
5944    def __init__(
5945        self,
5946        *,
5947        tags: Optional[Dict[str, str]] = None,
5948        sku: Optional["SnapshotSku"] = None,
5949        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
5950        disk_size_gb: Optional[int] = None,
5951        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
5952        encryption: Optional["Encryption"] = None,
5953        **kwargs
5954    ):
5955        super(SnapshotUpdate, self).__init__(**kwargs)
5956        self.tags = tags
5957        self.sku = sku
5958        self.os_type = os_type
5959        self.disk_size_gb = disk_size_gb
5960        self.encryption_settings_collection = encryption_settings_collection
5961        self.encryption = encryption
5962
5963
5964class SourceVault(msrest.serialization.Model):
5965    """The vault id is an Azure Resource Manager Resource id in the form /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}.
5966
5967    :param id: Resource Id.
5968    :type id: str
5969    """
5970
5971    _attribute_map = {
5972        'id': {'key': 'id', 'type': 'str'},
5973    }
5974
5975    def __init__(
5976        self,
5977        *,
5978        id: Optional[str] = None,
5979        **kwargs
5980    ):
5981        super(SourceVault, self).__init__(**kwargs)
5982        self.id = id
5983
5984
5985class SshConfiguration(msrest.serialization.Model):
5986    """SSH configuration for Linux based VMs running on Azure.
5987
5988    :param public_keys: The list of SSH public keys used to authenticate with linux based VMs.
5989    :type public_keys: list[~azure.mgmt.compute.v2019_07_01.models.SshPublicKey]
5990    """
5991
5992    _attribute_map = {
5993        'public_keys': {'key': 'publicKeys', 'type': '[SshPublicKey]'},
5994    }
5995
5996    def __init__(
5997        self,
5998        *,
5999        public_keys: Optional[List["SshPublicKey"]] = None,
6000        **kwargs
6001    ):
6002        super(SshConfiguration, self).__init__(**kwargs)
6003        self.public_keys = public_keys
6004
6005
6006class SshPublicKey(msrest.serialization.Model):
6007    """Contains information about SSH certificate public key and the path on the Linux VM where the public key is placed.
6008
6009    :param path: Specifies the full path on the created VM where ssh public key is stored. If the
6010     file already exists, the specified key is appended to the file. Example:
6011     /home/user/.ssh/authorized_keys.
6012    :type path: str
6013    :param key_data: SSH public key certificate used to authenticate with the VM through ssh. The
6014     key needs to be at least 2048-bit and in ssh-rsa format. :code:`<br>`:code:`<br>` For creating
6015     ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure
6016     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
6017    :type key_data: str
6018    """
6019
6020    _attribute_map = {
6021        'path': {'key': 'path', 'type': 'str'},
6022        'key_data': {'key': 'keyData', 'type': 'str'},
6023    }
6024
6025    def __init__(
6026        self,
6027        *,
6028        path: Optional[str] = None,
6029        key_data: Optional[str] = None,
6030        **kwargs
6031    ):
6032        super(SshPublicKey, self).__init__(**kwargs)
6033        self.path = path
6034        self.key_data = key_data
6035
6036
6037class StorageProfile(msrest.serialization.Model):
6038    """Specifies the storage settings for the virtual machine disks.
6039
6040    :param image_reference: Specifies information about the image to use. You can specify
6041     information about platform images, marketplace images, or virtual machine images. This element
6042     is required when you want to use a platform image, marketplace image, or virtual machine image,
6043     but is not used in other creation operations.
6044    :type image_reference: ~azure.mgmt.compute.v2019_07_01.models.ImageReference
6045    :param os_disk: Specifies information about the operating system disk used by the virtual
6046     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
6047     for Azure virtual machines
6048     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6049    :type os_disk: ~azure.mgmt.compute.v2019_07_01.models.OSDisk
6050    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
6051     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
6052     for Azure virtual machines
6053     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6054    :type data_disks: list[~azure.mgmt.compute.v2019_07_01.models.DataDisk]
6055    """
6056
6057    _attribute_map = {
6058        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
6059        'os_disk': {'key': 'osDisk', 'type': 'OSDisk'},
6060        'data_disks': {'key': 'dataDisks', 'type': '[DataDisk]'},
6061    }
6062
6063    def __init__(
6064        self,
6065        *,
6066        image_reference: Optional["ImageReference"] = None,
6067        os_disk: Optional["OSDisk"] = None,
6068        data_disks: Optional[List["DataDisk"]] = None,
6069        **kwargs
6070    ):
6071        super(StorageProfile, self).__init__(**kwargs)
6072        self.image_reference = image_reference
6073        self.os_disk = os_disk
6074        self.data_disks = data_disks
6075
6076
6077class SubResourceReadOnly(msrest.serialization.Model):
6078    """SubResourceReadOnly.
6079
6080    Variables are only populated by the server, and will be ignored when sending a request.
6081
6082    :ivar id: Resource Id.
6083    :vartype id: str
6084    """
6085
6086    _validation = {
6087        'id': {'readonly': True},
6088    }
6089
6090    _attribute_map = {
6091        'id': {'key': 'id', 'type': 'str'},
6092    }
6093
6094    def __init__(
6095        self,
6096        **kwargs
6097    ):
6098        super(SubResourceReadOnly, self).__init__(**kwargs)
6099        self.id = None
6100
6101
6102class SubResourceWithColocationStatus(SubResource):
6103    """SubResourceWithColocationStatus.
6104
6105    :param id: Resource Id.
6106    :type id: str
6107    :param colocation_status: Describes colocation status of a resource in the Proximity Placement
6108     Group.
6109    :type colocation_status: ~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus
6110    """
6111
6112    _attribute_map = {
6113        'id': {'key': 'id', 'type': 'str'},
6114        'colocation_status': {'key': 'colocationStatus', 'type': 'InstanceViewStatus'},
6115    }
6116
6117    def __init__(
6118        self,
6119        *,
6120        id: Optional[str] = None,
6121        colocation_status: Optional["InstanceViewStatus"] = None,
6122        **kwargs
6123    ):
6124        super(SubResourceWithColocationStatus, self).__init__(id=id, **kwargs)
6125        self.colocation_status = colocation_status
6126
6127
6128class TargetRegion(msrest.serialization.Model):
6129    """Describes the target region information.
6130
6131    All required parameters must be populated in order to send to Azure.
6132
6133    :param name: Required. The name of the region.
6134    :type name: str
6135    :param regional_replica_count: The number of replicas of the Image Version to be created per
6136     region. This property is updatable.
6137    :type regional_replica_count: int
6138    :param storage_account_type: Specifies the storage account type to be used to store the image.
6139     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
6140    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountType
6141    """
6142
6143    _validation = {
6144        'name': {'required': True},
6145    }
6146
6147    _attribute_map = {
6148        'name': {'key': 'name', 'type': 'str'},
6149        'regional_replica_count': {'key': 'regionalReplicaCount', 'type': 'int'},
6150        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
6151    }
6152
6153    def __init__(
6154        self,
6155        *,
6156        name: str,
6157        regional_replica_count: Optional[int] = None,
6158        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
6159        **kwargs
6160    ):
6161        super(TargetRegion, self).__init__(**kwargs)
6162        self.name = name
6163        self.regional_replica_count = regional_replica_count
6164        self.storage_account_type = storage_account_type
6165
6166
6167class TerminateNotificationProfile(msrest.serialization.Model):
6168    """TerminateNotificationProfile.
6169
6170    :param not_before_timeout: Configurable length of time a Virtual Machine being deleted will
6171     have to potentially approve the Terminate Scheduled Event before the event is auto approved
6172     (timed out). The configuration must be specified in ISO 8601 format, the default value is 5
6173     minutes (PT5M).
6174    :type not_before_timeout: str
6175    :param enable: Specifies whether the Terminate Scheduled event is enabled or disabled.
6176    :type enable: bool
6177    """
6178
6179    _attribute_map = {
6180        'not_before_timeout': {'key': 'notBeforeTimeout', 'type': 'str'},
6181        'enable': {'key': 'enable', 'type': 'bool'},
6182    }
6183
6184    def __init__(
6185        self,
6186        *,
6187        not_before_timeout: Optional[str] = None,
6188        enable: Optional[bool] = None,
6189        **kwargs
6190    ):
6191        super(TerminateNotificationProfile, self).__init__(**kwargs)
6192        self.not_before_timeout = not_before_timeout
6193        self.enable = enable
6194
6195
6196class ThrottledRequestsInput(LogAnalyticsInputBase):
6197    """Api request input for LogAnalytics getThrottledRequests Api.
6198
6199    All required parameters must be populated in order to send to Azure.
6200
6201    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
6202     LogAnalytics Api writes output logs to.
6203    :type blob_container_sas_uri: str
6204    :param from_time: Required. From time of the query.
6205    :type from_time: ~datetime.datetime
6206    :param to_time: Required. To time of the query.
6207    :type to_time: ~datetime.datetime
6208    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
6209    :type group_by_throttle_policy: bool
6210    :param group_by_operation_name: Group query result by Operation Name.
6211    :type group_by_operation_name: bool
6212    :param group_by_resource_name: Group query result by Resource Name.
6213    :type group_by_resource_name: bool
6214    """
6215
6216    _validation = {
6217        'blob_container_sas_uri': {'required': True},
6218        'from_time': {'required': True},
6219        'to_time': {'required': True},
6220    }
6221
6222    _attribute_map = {
6223        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
6224        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
6225        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
6226        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
6227        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
6228        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
6229    }
6230
6231    def __init__(
6232        self,
6233        *,
6234        blob_container_sas_uri: str,
6235        from_time: datetime.datetime,
6236        to_time: datetime.datetime,
6237        group_by_throttle_policy: Optional[bool] = None,
6238        group_by_operation_name: Optional[bool] = None,
6239        group_by_resource_name: Optional[bool] = None,
6240        **kwargs
6241    ):
6242        super(ThrottledRequestsInput, self).__init__(blob_container_sas_uri=blob_container_sas_uri, from_time=from_time, to_time=to_time, group_by_throttle_policy=group_by_throttle_policy, group_by_operation_name=group_by_operation_name, group_by_resource_name=group_by_resource_name, **kwargs)
6243
6244
6245class UpgradeOperationHistoricalStatusInfo(msrest.serialization.Model):
6246    """Virtual Machine Scale Set OS Upgrade History operation response.
6247
6248    Variables are only populated by the server, and will be ignored when sending a request.
6249
6250    :ivar properties: Information about the properties of the upgrade operation.
6251    :vartype properties:
6252     ~azure.mgmt.compute.v2019_07_01.models.UpgradeOperationHistoricalStatusInfoProperties
6253    :ivar type: Resource type.
6254    :vartype type: str
6255    :ivar location: Resource location.
6256    :vartype location: str
6257    """
6258
6259    _validation = {
6260        'properties': {'readonly': True},
6261        'type': {'readonly': True},
6262        'location': {'readonly': True},
6263    }
6264
6265    _attribute_map = {
6266        'properties': {'key': 'properties', 'type': 'UpgradeOperationHistoricalStatusInfoProperties'},
6267        'type': {'key': 'type', 'type': 'str'},
6268        'location': {'key': 'location', 'type': 'str'},
6269    }
6270
6271    def __init__(
6272        self,
6273        **kwargs
6274    ):
6275        super(UpgradeOperationHistoricalStatusInfo, self).__init__(**kwargs)
6276        self.properties = None
6277        self.type = None
6278        self.location = None
6279
6280
6281class UpgradeOperationHistoricalStatusInfoProperties(msrest.serialization.Model):
6282    """Describes each OS upgrade on the Virtual Machine Scale Set.
6283
6284    Variables are only populated by the server, and will be ignored when sending a request.
6285
6286    :ivar running_status: Information about the overall status of the upgrade operation.
6287    :vartype running_status: ~azure.mgmt.compute.v2019_07_01.models.UpgradeOperationHistoryStatus
6288    :ivar progress: Counts of the VMs in each state.
6289    :vartype progress: ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradeProgressInfo
6290    :ivar error: Error Details for this upgrade if there are any.
6291    :vartype error: ~azure.mgmt.compute.v2019_07_01.models.ApiError
6292    :ivar started_by: Invoker of the Upgrade Operation. Possible values include: "Unknown", "User",
6293     "Platform".
6294    :vartype started_by: str or ~azure.mgmt.compute.v2019_07_01.models.UpgradeOperationInvoker
6295    :ivar target_image_reference: Image Reference details.
6296    :vartype target_image_reference: ~azure.mgmt.compute.v2019_07_01.models.ImageReference
6297    :ivar rollback_info: Information about OS rollback if performed.
6298    :vartype rollback_info: ~azure.mgmt.compute.v2019_07_01.models.RollbackStatusInfo
6299    """
6300
6301    _validation = {
6302        'running_status': {'readonly': True},
6303        'progress': {'readonly': True},
6304        'error': {'readonly': True},
6305        'started_by': {'readonly': True},
6306        'target_image_reference': {'readonly': True},
6307        'rollback_info': {'readonly': True},
6308    }
6309
6310    _attribute_map = {
6311        'running_status': {'key': 'runningStatus', 'type': 'UpgradeOperationHistoryStatus'},
6312        'progress': {'key': 'progress', 'type': 'RollingUpgradeProgressInfo'},
6313        'error': {'key': 'error', 'type': 'ApiError'},
6314        'started_by': {'key': 'startedBy', 'type': 'str'},
6315        'target_image_reference': {'key': 'targetImageReference', 'type': 'ImageReference'},
6316        'rollback_info': {'key': 'rollbackInfo', 'type': 'RollbackStatusInfo'},
6317    }
6318
6319    def __init__(
6320        self,
6321        **kwargs
6322    ):
6323        super(UpgradeOperationHistoricalStatusInfoProperties, self).__init__(**kwargs)
6324        self.running_status = None
6325        self.progress = None
6326        self.error = None
6327        self.started_by = None
6328        self.target_image_reference = None
6329        self.rollback_info = None
6330
6331
6332class UpgradeOperationHistoryStatus(msrest.serialization.Model):
6333    """Information about the current running state of the overall upgrade.
6334
6335    Variables are only populated by the server, and will be ignored when sending a request.
6336
6337    :ivar code: Code indicating the current status of the upgrade. Possible values include:
6338     "RollingForward", "Cancelled", "Completed", "Faulted".
6339    :vartype code: str or ~azure.mgmt.compute.v2019_07_01.models.UpgradeState
6340    :ivar start_time: Start time of the upgrade.
6341    :vartype start_time: ~datetime.datetime
6342    :ivar end_time: End time of the upgrade.
6343    :vartype end_time: ~datetime.datetime
6344    """
6345
6346    _validation = {
6347        'code': {'readonly': True},
6348        'start_time': {'readonly': True},
6349        'end_time': {'readonly': True},
6350    }
6351
6352    _attribute_map = {
6353        'code': {'key': 'code', 'type': 'str'},
6354        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
6355        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
6356    }
6357
6358    def __init__(
6359        self,
6360        **kwargs
6361    ):
6362        super(UpgradeOperationHistoryStatus, self).__init__(**kwargs)
6363        self.code = None
6364        self.start_time = None
6365        self.end_time = None
6366
6367
6368class UpgradePolicy(msrest.serialization.Model):
6369    """Describes an upgrade policy - automatic, manual, or rolling.
6370
6371    :param mode: Specifies the mode of an upgrade to virtual machines in the scale set.:code:`<br
6372     />`:code:`<br />` Possible values are::code:`<br />`:code:`<br />` **Manual** - You  control
6373     the application of updates to virtual machines in the scale set. You do this by using the
6374     manualUpgrade action.:code:`<br />`:code:`<br />` **Automatic** - All virtual machines in the
6375     scale set are  automatically updated at the same time. Possible values include: "Automatic",
6376     "Manual", "Rolling".
6377    :type mode: str or ~azure.mgmt.compute.v2019_07_01.models.UpgradeMode
6378    :param rolling_upgrade_policy: The configuration parameters used while performing a rolling
6379     upgrade.
6380    :type rolling_upgrade_policy: ~azure.mgmt.compute.v2019_07_01.models.RollingUpgradePolicy
6381    :param automatic_os_upgrade_policy: Configuration parameters used for performing automatic OS
6382     Upgrade.
6383    :type automatic_os_upgrade_policy:
6384     ~azure.mgmt.compute.v2019_07_01.models.AutomaticOSUpgradePolicy
6385    """
6386
6387    _attribute_map = {
6388        'mode': {'key': 'mode', 'type': 'str'},
6389        'rolling_upgrade_policy': {'key': 'rollingUpgradePolicy', 'type': 'RollingUpgradePolicy'},
6390        'automatic_os_upgrade_policy': {'key': 'automaticOSUpgradePolicy', 'type': 'AutomaticOSUpgradePolicy'},
6391    }
6392
6393    def __init__(
6394        self,
6395        *,
6396        mode: Optional[Union[str, "UpgradeMode"]] = None,
6397        rolling_upgrade_policy: Optional["RollingUpgradePolicy"] = None,
6398        automatic_os_upgrade_policy: Optional["AutomaticOSUpgradePolicy"] = None,
6399        **kwargs
6400    ):
6401        super(UpgradePolicy, self).__init__(**kwargs)
6402        self.mode = mode
6403        self.rolling_upgrade_policy = rolling_upgrade_policy
6404        self.automatic_os_upgrade_policy = automatic_os_upgrade_policy
6405
6406
6407class Usage(msrest.serialization.Model):
6408    """Describes Compute Resource Usage.
6409
6410    Variables are only populated by the server, and will be ignored when sending a request.
6411
6412    All required parameters must be populated in order to send to Azure.
6413
6414    :ivar unit: An enum describing the unit of usage measurement. Has constant value: "Count".
6415    :vartype unit: str
6416    :param current_value: Required. The current usage of the resource.
6417    :type current_value: int
6418    :param limit: Required. The maximum permitted usage of the resource.
6419    :type limit: long
6420    :param name: Required. The name of the type of usage.
6421    :type name: ~azure.mgmt.compute.v2019_07_01.models.UsageName
6422    """
6423
6424    _validation = {
6425        'unit': {'required': True, 'constant': True},
6426        'current_value': {'required': True},
6427        'limit': {'required': True},
6428        'name': {'required': True},
6429    }
6430
6431    _attribute_map = {
6432        'unit': {'key': 'unit', 'type': 'str'},
6433        'current_value': {'key': 'currentValue', 'type': 'int'},
6434        'limit': {'key': 'limit', 'type': 'long'},
6435        'name': {'key': 'name', 'type': 'UsageName'},
6436    }
6437
6438    unit = "Count"
6439
6440    def __init__(
6441        self,
6442        *,
6443        current_value: int,
6444        limit: int,
6445        name: "UsageName",
6446        **kwargs
6447    ):
6448        super(Usage, self).__init__(**kwargs)
6449        self.current_value = current_value
6450        self.limit = limit
6451        self.name = name
6452
6453
6454class UsageName(msrest.serialization.Model):
6455    """The Usage Names.
6456
6457    :param value: The name of the resource.
6458    :type value: str
6459    :param localized_value: The localized name of the resource.
6460    :type localized_value: str
6461    """
6462
6463    _attribute_map = {
6464        'value': {'key': 'value', 'type': 'str'},
6465        'localized_value': {'key': 'localizedValue', 'type': 'str'},
6466    }
6467
6468    def __init__(
6469        self,
6470        *,
6471        value: Optional[str] = None,
6472        localized_value: Optional[str] = None,
6473        **kwargs
6474    ):
6475        super(UsageName, self).__init__(**kwargs)
6476        self.value = value
6477        self.localized_value = localized_value
6478
6479
6480class UserArtifactManage(msrest.serialization.Model):
6481    """UserArtifactManage.
6482
6483    All required parameters must be populated in order to send to Azure.
6484
6485    :param install: Required. Required. The path and arguments to install the gallery application.
6486     This is limited to 4096 characters.
6487    :type install: str
6488    :param remove: Required. Required. The path and arguments to remove the gallery application.
6489     This is limited to 4096 characters.
6490    :type remove: str
6491    :param update: Optional. The path and arguments to update the gallery application. If not
6492     present, then update operation will invoke remove command on the previous version and install
6493     command on the current version of the gallery application. This is limited to 4096 characters.
6494    :type update: str
6495    """
6496
6497    _validation = {
6498        'install': {'required': True},
6499        'remove': {'required': True},
6500    }
6501
6502    _attribute_map = {
6503        'install': {'key': 'install', 'type': 'str'},
6504        'remove': {'key': 'remove', 'type': 'str'},
6505        'update': {'key': 'update', 'type': 'str'},
6506    }
6507
6508    def __init__(
6509        self,
6510        *,
6511        install: str,
6512        remove: str,
6513        update: Optional[str] = None,
6514        **kwargs
6515    ):
6516        super(UserArtifactManage, self).__init__(**kwargs)
6517        self.install = install
6518        self.remove = remove
6519        self.update = update
6520
6521
6522class UserArtifactSource(msrest.serialization.Model):
6523    """The source image from which the Image Version is going to be created.
6524
6525    All required parameters must be populated in order to send to Azure.
6526
6527    :param media_link: Required. Required. The mediaLink of the artifact, must be a readable
6528     storage page blob.
6529    :type media_link: str
6530    :param default_configuration_link: Optional. The defaultConfigurationLink of the artifact, must
6531     be a readable storage page blob.
6532    :type default_configuration_link: str
6533    """
6534
6535    _validation = {
6536        'media_link': {'required': True},
6537    }
6538
6539    _attribute_map = {
6540        'media_link': {'key': 'mediaLink', 'type': 'str'},
6541        'default_configuration_link': {'key': 'defaultConfigurationLink', 'type': 'str'},
6542    }
6543
6544    def __init__(
6545        self,
6546        *,
6547        media_link: str,
6548        default_configuration_link: Optional[str] = None,
6549        **kwargs
6550    ):
6551        super(UserArtifactSource, self).__init__(**kwargs)
6552        self.media_link = media_link
6553        self.default_configuration_link = default_configuration_link
6554
6555
6556class UserAssignedIdentitiesValue(msrest.serialization.Model):
6557    """UserAssignedIdentitiesValue.
6558
6559    Variables are only populated by the server, and will be ignored when sending a request.
6560
6561    :ivar principal_id: The principal id of user assigned identity.
6562    :vartype principal_id: str
6563    :ivar client_id: The client id of user assigned identity.
6564    :vartype client_id: str
6565    """
6566
6567    _validation = {
6568        'principal_id': {'readonly': True},
6569        'client_id': {'readonly': True},
6570    }
6571
6572    _attribute_map = {
6573        'principal_id': {'key': 'principalId', 'type': 'str'},
6574        'client_id': {'key': 'clientId', 'type': 'str'},
6575    }
6576
6577    def __init__(
6578        self,
6579        **kwargs
6580    ):
6581        super(UserAssignedIdentitiesValue, self).__init__(**kwargs)
6582        self.principal_id = None
6583        self.client_id = None
6584
6585
6586class VaultCertificate(msrest.serialization.Model):
6587    """Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.
6588
6589    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
6590     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
6591     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
6592     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
6593     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
6594     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
6595     "password":":code:`<pfx-file-password>`":code:`<br>`}.
6596    :type certificate_url: str
6597    :param certificate_store: For Windows VMs, specifies the certificate store on the Virtual
6598     Machine to which the certificate should be added. The specified certificate store is implicitly
6599     in the LocalMachine account. :code:`<br>`:code:`<br>`For Linux VMs, the certificate file is
6600     placed under the /var/lib/waagent directory, with the file name &lt;UppercaseThumbprint&gt;.crt
6601     for the X509 certificate file and &lt;UppercaseThumbprint&gt;.prv for private key. Both of
6602     these files are .pem formatted.
6603    :type certificate_store: str
6604    """
6605
6606    _attribute_map = {
6607        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
6608        'certificate_store': {'key': 'certificateStore', 'type': 'str'},
6609    }
6610
6611    def __init__(
6612        self,
6613        *,
6614        certificate_url: Optional[str] = None,
6615        certificate_store: Optional[str] = None,
6616        **kwargs
6617    ):
6618        super(VaultCertificate, self).__init__(**kwargs)
6619        self.certificate_url = certificate_url
6620        self.certificate_store = certificate_store
6621
6622
6623class VaultSecretGroup(msrest.serialization.Model):
6624    """Describes a set of certificates which are all in the same Key Vault.
6625
6626    :param source_vault: The relative URL of the Key Vault containing all of the certificates in
6627     VaultCertificates.
6628    :type source_vault: ~azure.mgmt.compute.v2019_07_01.models.SubResource
6629    :param vault_certificates: The list of key vault references in SourceVault which contain
6630     certificates.
6631    :type vault_certificates: list[~azure.mgmt.compute.v2019_07_01.models.VaultCertificate]
6632    """
6633
6634    _attribute_map = {
6635        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
6636        'vault_certificates': {'key': 'vaultCertificates', 'type': '[VaultCertificate]'},
6637    }
6638
6639    def __init__(
6640        self,
6641        *,
6642        source_vault: Optional["SubResource"] = None,
6643        vault_certificates: Optional[List["VaultCertificate"]] = None,
6644        **kwargs
6645    ):
6646        super(VaultSecretGroup, self).__init__(**kwargs)
6647        self.source_vault = source_vault
6648        self.vault_certificates = vault_certificates
6649
6650
6651class VirtualHardDisk(msrest.serialization.Model):
6652    """Describes the uri of a disk.
6653
6654    :param uri: Specifies the virtual hard disk's uri.
6655    :type uri: str
6656    """
6657
6658    _attribute_map = {
6659        'uri': {'key': 'uri', 'type': 'str'},
6660    }
6661
6662    def __init__(
6663        self,
6664        *,
6665        uri: Optional[str] = None,
6666        **kwargs
6667    ):
6668        super(VirtualHardDisk, self).__init__(**kwargs)
6669        self.uri = uri
6670
6671
6672class VirtualMachine(Resource):
6673    """Describes a Virtual Machine.
6674
6675    Variables are only populated by the server, and will be ignored when sending a request.
6676
6677    All required parameters must be populated in order to send to Azure.
6678
6679    :ivar id: Resource Id.
6680    :vartype id: str
6681    :ivar name: Resource name.
6682    :vartype name: str
6683    :ivar type: Resource type.
6684    :vartype type: str
6685    :param location: Required. Resource location.
6686    :type location: str
6687    :param tags: A set of tags. Resource tags.
6688    :type tags: dict[str, str]
6689    :param plan: Specifies information about the marketplace image used to create the virtual
6690     machine. This element is only used for marketplace images. Before you can use a marketplace
6691     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
6692     the marketplace image that you want to use and then click **Want to deploy programmatically,
6693     Get Started ->**. Enter any required information and then click **Save**.
6694    :type plan: ~azure.mgmt.compute.v2019_07_01.models.Plan
6695    :ivar resources: The virtual machine child extension resources.
6696    :vartype resources: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtension]
6697    :param identity: The identity of the virtual machine, if configured.
6698    :type identity: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineIdentity
6699    :param zones: The virtual machine zones.
6700    :type zones: list[str]
6701    :param hardware_profile: Specifies the hardware settings for the virtual machine.
6702    :type hardware_profile: ~azure.mgmt.compute.v2019_07_01.models.HardwareProfile
6703    :param storage_profile: Specifies the storage settings for the virtual machine disks.
6704    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.StorageProfile
6705    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
6706     virtual machine.
6707    :type additional_capabilities: ~azure.mgmt.compute.v2019_07_01.models.AdditionalCapabilities
6708    :param os_profile: Specifies the operating system settings used while creating the virtual
6709     machine. Some of the settings cannot be changed once VM is provisioned.
6710    :type os_profile: ~azure.mgmt.compute.v2019_07_01.models.OSProfile
6711    :param network_profile: Specifies the network interfaces of the virtual machine.
6712    :type network_profile: ~azure.mgmt.compute.v2019_07_01.models.NetworkProfile
6713    :param diagnostics_profile: Specifies the boot diagnostic settings state.
6714     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
6715    :type diagnostics_profile: ~azure.mgmt.compute.v2019_07_01.models.DiagnosticsProfile
6716    :param availability_set: Specifies information about the availability set that the virtual
6717     machine should be assigned to. Virtual machines specified in the same availability set are
6718     allocated to different nodes to maximize availability. For more information about availability
6719     sets, see `Manage the availability of virtual machines
6720     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6721     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
6722     maintenance for virtual machines in Azure
6723     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6724     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
6725     time. The availability set to which the VM is being added should be under the same resource
6726     group as the availability set resource. An existing VM cannot be added to an availability set.
6727     :code:`<br>`:code:`<br>`This property cannot exist along with a non-null
6728     properties.virtualMachineScaleSet reference.
6729    :type availability_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource
6730    :param virtual_machine_scale_set: Specifies information about the virtual machine scale set
6731     that the virtual machine should be assigned to. Virtual machines specified in the same virtual
6732     machine scale set are allocated to different nodes to maximize availability. Currently, a VM
6733     can only be added to virtual machine scale set at creation time. An existing VM cannot be added
6734     to a virtual machine scale set. :code:`<br>`:code:`<br>`This property cannot exist along with a
6735     non-null properties.availabilitySet reference. :code:`<br>`:code:`<br>`Minimum api‐version:
6736     2019‐03‐01.
6737    :type virtual_machine_scale_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource
6738    :param proximity_placement_group: Specifies information about the proximity placement group
6739     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
6740     2018-04-01.
6741    :type proximity_placement_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
6742    :param priority: Specifies the priority for the virtual machine.
6743     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01. Possible values include: "Regular",
6744     "Low", "Spot".
6745    :type priority: str or ~azure.mgmt.compute.v2019_07_01.models.VirtualMachinePriorityTypes
6746    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and
6747     Azure Spot scale set. :code:`<br>`:code:`<br>`For Azure Spot virtual machines, the only
6748     supported value is 'Deallocate' and the minimum api-version is 2019-03-01.
6749     :code:`<br>`:code:`<br>`For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported
6750     and the minimum api-version is 2017-10-30-preview. Possible values include: "Deallocate",
6751     "Delete".
6752    :type eviction_policy: str or
6753     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineEvictionPolicyTypes
6754    :param billing_profile: Specifies the billing related details of a Azure Spot virtual machine.
6755     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
6756    :type billing_profile: ~azure.mgmt.compute.v2019_07_01.models.BillingProfile
6757    :param host: Specifies information about the dedicated host that the virtual machine resides
6758     in. :code:`<br>`:code:`<br>`Minimum api-version: 2018-10-01.
6759    :type host: ~azure.mgmt.compute.v2019_07_01.models.SubResource
6760    :ivar provisioning_state: The provisioning state, which only appears in the response.
6761    :vartype provisioning_state: str
6762    :ivar instance_view: The virtual machine instance view.
6763    :vartype instance_view: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineInstanceView
6764    :param license_type: Specifies that the image or disk that is being used was licensed
6765     on-premises. This element is only used for images that contain the Windows Server operating
6766     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
6767     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
6768     a request for an update, the value must match the initial value. This value cannot be updated.
6769     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
6770     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6771     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
6772    :type license_type: str
6773    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
6774     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
6775    :vartype vm_id: str
6776    """
6777
6778    _validation = {
6779        'id': {'readonly': True},
6780        'name': {'readonly': True},
6781        'type': {'readonly': True},
6782        'location': {'required': True},
6783        'resources': {'readonly': True},
6784        'provisioning_state': {'readonly': True},
6785        'instance_view': {'readonly': True},
6786        'vm_id': {'readonly': True},
6787    }
6788
6789    _attribute_map = {
6790        'id': {'key': 'id', 'type': 'str'},
6791        'name': {'key': 'name', 'type': 'str'},
6792        'type': {'key': 'type', 'type': 'str'},
6793        'location': {'key': 'location', 'type': 'str'},
6794        'tags': {'key': 'tags', 'type': '{str}'},
6795        'plan': {'key': 'plan', 'type': 'Plan'},
6796        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
6797        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
6798        'zones': {'key': 'zones', 'type': '[str]'},
6799        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
6800        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
6801        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
6802        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
6803        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
6804        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
6805        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
6806        'virtual_machine_scale_set': {'key': 'properties.virtualMachineScaleSet', 'type': 'SubResource'},
6807        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
6808        'priority': {'key': 'properties.priority', 'type': 'str'},
6809        'eviction_policy': {'key': 'properties.evictionPolicy', 'type': 'str'},
6810        'billing_profile': {'key': 'properties.billingProfile', 'type': 'BillingProfile'},
6811        'host': {'key': 'properties.host', 'type': 'SubResource'},
6812        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6813        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
6814        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
6815        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
6816    }
6817
6818    def __init__(
6819        self,
6820        *,
6821        location: str,
6822        tags: Optional[Dict[str, str]] = None,
6823        plan: Optional["Plan"] = None,
6824        identity: Optional["VirtualMachineIdentity"] = None,
6825        zones: Optional[List[str]] = None,
6826        hardware_profile: Optional["HardwareProfile"] = None,
6827        storage_profile: Optional["StorageProfile"] = None,
6828        additional_capabilities: Optional["AdditionalCapabilities"] = None,
6829        os_profile: Optional["OSProfile"] = None,
6830        network_profile: Optional["NetworkProfile"] = None,
6831        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
6832        availability_set: Optional["SubResource"] = None,
6833        virtual_machine_scale_set: Optional["SubResource"] = None,
6834        proximity_placement_group: Optional["SubResource"] = None,
6835        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
6836        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
6837        billing_profile: Optional["BillingProfile"] = None,
6838        host: Optional["SubResource"] = None,
6839        license_type: Optional[str] = None,
6840        **kwargs
6841    ):
6842        super(VirtualMachine, self).__init__(location=location, tags=tags, **kwargs)
6843        self.plan = plan
6844        self.resources = None
6845        self.identity = identity
6846        self.zones = zones
6847        self.hardware_profile = hardware_profile
6848        self.storage_profile = storage_profile
6849        self.additional_capabilities = additional_capabilities
6850        self.os_profile = os_profile
6851        self.network_profile = network_profile
6852        self.diagnostics_profile = diagnostics_profile
6853        self.availability_set = availability_set
6854        self.virtual_machine_scale_set = virtual_machine_scale_set
6855        self.proximity_placement_group = proximity_placement_group
6856        self.priority = priority
6857        self.eviction_policy = eviction_policy
6858        self.billing_profile = billing_profile
6859        self.host = host
6860        self.provisioning_state = None
6861        self.instance_view = None
6862        self.license_type = license_type
6863        self.vm_id = None
6864
6865
6866class VirtualMachineAgentInstanceView(msrest.serialization.Model):
6867    """The instance view of the VM Agent running on the virtual machine.
6868
6869    :param vm_agent_version: The VM Agent full version.
6870    :type vm_agent_version: str
6871    :param extension_handlers: The virtual machine extension handler instance view.
6872    :type extension_handlers:
6873     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtensionHandlerInstanceView]
6874    :param statuses: The resource status information.
6875    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
6876    """
6877
6878    _attribute_map = {
6879        'vm_agent_version': {'key': 'vmAgentVersion', 'type': 'str'},
6880        'extension_handlers': {'key': 'extensionHandlers', 'type': '[VirtualMachineExtensionHandlerInstanceView]'},
6881        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
6882    }
6883
6884    def __init__(
6885        self,
6886        *,
6887        vm_agent_version: Optional[str] = None,
6888        extension_handlers: Optional[List["VirtualMachineExtensionHandlerInstanceView"]] = None,
6889        statuses: Optional[List["InstanceViewStatus"]] = None,
6890        **kwargs
6891    ):
6892        super(VirtualMachineAgentInstanceView, self).__init__(**kwargs)
6893        self.vm_agent_version = vm_agent_version
6894        self.extension_handlers = extension_handlers
6895        self.statuses = statuses
6896
6897
6898class VirtualMachineCaptureParameters(msrest.serialization.Model):
6899    """Capture Virtual Machine parameters.
6900
6901    All required parameters must be populated in order to send to Azure.
6902
6903    :param vhd_prefix: Required. The captured virtual hard disk's name prefix.
6904    :type vhd_prefix: str
6905    :param destination_container_name: Required. The destination container name.
6906    :type destination_container_name: str
6907    :param overwrite_vhds: Required. Specifies whether to overwrite the destination virtual hard
6908     disk, in case of conflict.
6909    :type overwrite_vhds: bool
6910    """
6911
6912    _validation = {
6913        'vhd_prefix': {'required': True},
6914        'destination_container_name': {'required': True},
6915        'overwrite_vhds': {'required': True},
6916    }
6917
6918    _attribute_map = {
6919        'vhd_prefix': {'key': 'vhdPrefix', 'type': 'str'},
6920        'destination_container_name': {'key': 'destinationContainerName', 'type': 'str'},
6921        'overwrite_vhds': {'key': 'overwriteVhds', 'type': 'bool'},
6922    }
6923
6924    def __init__(
6925        self,
6926        *,
6927        vhd_prefix: str,
6928        destination_container_name: str,
6929        overwrite_vhds: bool,
6930        **kwargs
6931    ):
6932        super(VirtualMachineCaptureParameters, self).__init__(**kwargs)
6933        self.vhd_prefix = vhd_prefix
6934        self.destination_container_name = destination_container_name
6935        self.overwrite_vhds = overwrite_vhds
6936
6937
6938class VirtualMachineCaptureResult(SubResource):
6939    """Output of virtual machine capture operation.
6940
6941    Variables are only populated by the server, and will be ignored when sending a request.
6942
6943    :param id: Resource Id.
6944    :type id: str
6945    :ivar schema: the schema of the captured virtual machine.
6946    :vartype schema: str
6947    :ivar content_version: the version of the content.
6948    :vartype content_version: str
6949    :ivar parameters: parameters of the captured virtual machine.
6950    :vartype parameters: any
6951    :ivar resources: a list of resource items of the captured virtual machine.
6952    :vartype resources: list[any]
6953    """
6954
6955    _validation = {
6956        'schema': {'readonly': True},
6957        'content_version': {'readonly': True},
6958        'parameters': {'readonly': True},
6959        'resources': {'readonly': True},
6960    }
6961
6962    _attribute_map = {
6963        'id': {'key': 'id', 'type': 'str'},
6964        'schema': {'key': '$schema', 'type': 'str'},
6965        'content_version': {'key': 'contentVersion', 'type': 'str'},
6966        'parameters': {'key': 'parameters', 'type': 'object'},
6967        'resources': {'key': 'resources', 'type': '[object]'},
6968    }
6969
6970    def __init__(
6971        self,
6972        *,
6973        id: Optional[str] = None,
6974        **kwargs
6975    ):
6976        super(VirtualMachineCaptureResult, self).__init__(id=id, **kwargs)
6977        self.schema = None
6978        self.content_version = None
6979        self.parameters = None
6980        self.resources = None
6981
6982
6983class VirtualMachineExtension(Resource):
6984    """Describes a Virtual Machine Extension.
6985
6986    Variables are only populated by the server, and will be ignored when sending a request.
6987
6988    All required parameters must be populated in order to send to Azure.
6989
6990    :ivar id: Resource Id.
6991    :vartype id: str
6992    :ivar name: Resource name.
6993    :vartype name: str
6994    :ivar type: Resource type.
6995    :vartype type: str
6996    :param location: Required. Resource location.
6997    :type location: str
6998    :param tags: A set of tags. Resource tags.
6999    :type tags: dict[str, str]
7000    :param force_update_tag: How the extension handler should be forced to update even if the
7001     extension configuration has not changed.
7002    :type force_update_tag: str
7003    :param publisher: The name of the extension handler publisher.
7004    :type publisher: str
7005    :param type_properties_type: Specifies the type of the extension; an example is
7006     "CustomScriptExtension".
7007    :type type_properties_type: str
7008    :param type_handler_version: Specifies the version of the script handler.
7009    :type type_handler_version: str
7010    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
7011     version if one is available at deployment time. Once deployed, however, the extension will not
7012     upgrade minor versions unless redeployed, even with this property set to true.
7013    :type auto_upgrade_minor_version: bool
7014    :param settings: Json formatted public settings for the extension.
7015    :type settings: any
7016    :param protected_settings: The extension can contain either protectedSettings or
7017     protectedSettingsFromKeyVault or no protected settings at all.
7018    :type protected_settings: any
7019    :ivar provisioning_state: The provisioning state, which only appears in the response.
7020    :vartype provisioning_state: str
7021    :param instance_view: The virtual machine extension instance view.
7022    :type instance_view: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtensionInstanceView
7023    """
7024
7025    _validation = {
7026        'id': {'readonly': True},
7027        'name': {'readonly': True},
7028        'type': {'readonly': True},
7029        'location': {'required': True},
7030        'provisioning_state': {'readonly': True},
7031    }
7032
7033    _attribute_map = {
7034        'id': {'key': 'id', 'type': 'str'},
7035        'name': {'key': 'name', 'type': 'str'},
7036        'type': {'key': 'type', 'type': 'str'},
7037        'location': {'key': 'location', 'type': 'str'},
7038        'tags': {'key': 'tags', 'type': '{str}'},
7039        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
7040        'publisher': {'key': 'properties.publisher', 'type': 'str'},
7041        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
7042        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
7043        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
7044        'settings': {'key': 'properties.settings', 'type': 'object'},
7045        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
7046        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7047        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineExtensionInstanceView'},
7048    }
7049
7050    def __init__(
7051        self,
7052        *,
7053        location: str,
7054        tags: Optional[Dict[str, str]] = None,
7055        force_update_tag: Optional[str] = None,
7056        publisher: Optional[str] = None,
7057        type_properties_type: Optional[str] = None,
7058        type_handler_version: Optional[str] = None,
7059        auto_upgrade_minor_version: Optional[bool] = None,
7060        settings: Optional[Any] = None,
7061        protected_settings: Optional[Any] = None,
7062        instance_view: Optional["VirtualMachineExtensionInstanceView"] = None,
7063        **kwargs
7064    ):
7065        super(VirtualMachineExtension, self).__init__(location=location, tags=tags, **kwargs)
7066        self.force_update_tag = force_update_tag
7067        self.publisher = publisher
7068        self.type_properties_type = type_properties_type
7069        self.type_handler_version = type_handler_version
7070        self.auto_upgrade_minor_version = auto_upgrade_minor_version
7071        self.settings = settings
7072        self.protected_settings = protected_settings
7073        self.provisioning_state = None
7074        self.instance_view = instance_view
7075
7076
7077class VirtualMachineExtensionHandlerInstanceView(msrest.serialization.Model):
7078    """The instance view of a virtual machine extension handler.
7079
7080    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7081    :type type: str
7082    :param type_handler_version: Specifies the version of the script handler.
7083    :type type_handler_version: str
7084    :param status: The extension handler status.
7085    :type status: ~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus
7086    """
7087
7088    _attribute_map = {
7089        'type': {'key': 'type', 'type': 'str'},
7090        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
7091        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
7092    }
7093
7094    def __init__(
7095        self,
7096        *,
7097        type: Optional[str] = None,
7098        type_handler_version: Optional[str] = None,
7099        status: Optional["InstanceViewStatus"] = None,
7100        **kwargs
7101    ):
7102        super(VirtualMachineExtensionHandlerInstanceView, self).__init__(**kwargs)
7103        self.type = type
7104        self.type_handler_version = type_handler_version
7105        self.status = status
7106
7107
7108class VirtualMachineExtensionImage(Resource):
7109    """Describes a Virtual Machine Extension Image.
7110
7111    Variables are only populated by the server, and will be ignored when sending a request.
7112
7113    All required parameters must be populated in order to send to Azure.
7114
7115    :ivar id: Resource Id.
7116    :vartype id: str
7117    :ivar name: Resource name.
7118    :vartype name: str
7119    :ivar type: Resource type.
7120    :vartype type: str
7121    :param location: Required. Resource location.
7122    :type location: str
7123    :param tags: A set of tags. Resource tags.
7124    :type tags: dict[str, str]
7125    :param operating_system: The operating system this extension supports.
7126    :type operating_system: str
7127    :param compute_role: The type of role (IaaS or PaaS) this extension supports.
7128    :type compute_role: str
7129    :param handler_schema: The schema defined by publisher, where extension consumers should
7130     provide settings in a matching schema.
7131    :type handler_schema: str
7132    :param vm_scale_set_enabled: Whether the extension can be used on xRP VMScaleSets. By default
7133     existing extensions are usable on scalesets, but there might be cases where a publisher wants
7134     to explicitly indicate the extension is only enabled for CRP VMs but not VMSS.
7135    :type vm_scale_set_enabled: bool
7136    :param supports_multiple_extensions: Whether the handler can support multiple extensions.
7137    :type supports_multiple_extensions: bool
7138    """
7139
7140    _validation = {
7141        'id': {'readonly': True},
7142        'name': {'readonly': True},
7143        'type': {'readonly': True},
7144        'location': {'required': True},
7145    }
7146
7147    _attribute_map = {
7148        'id': {'key': 'id', 'type': 'str'},
7149        'name': {'key': 'name', 'type': 'str'},
7150        'type': {'key': 'type', 'type': 'str'},
7151        'location': {'key': 'location', 'type': 'str'},
7152        'tags': {'key': 'tags', 'type': '{str}'},
7153        'operating_system': {'key': 'properties.operatingSystem', 'type': 'str'},
7154        'compute_role': {'key': 'properties.computeRole', 'type': 'str'},
7155        'handler_schema': {'key': 'properties.handlerSchema', 'type': 'str'},
7156        'vm_scale_set_enabled': {'key': 'properties.vmScaleSetEnabled', 'type': 'bool'},
7157        'supports_multiple_extensions': {'key': 'properties.supportsMultipleExtensions', 'type': 'bool'},
7158    }
7159
7160    def __init__(
7161        self,
7162        *,
7163        location: str,
7164        tags: Optional[Dict[str, str]] = None,
7165        operating_system: Optional[str] = None,
7166        compute_role: Optional[str] = None,
7167        handler_schema: Optional[str] = None,
7168        vm_scale_set_enabled: Optional[bool] = None,
7169        supports_multiple_extensions: Optional[bool] = None,
7170        **kwargs
7171    ):
7172        super(VirtualMachineExtensionImage, self).__init__(location=location, tags=tags, **kwargs)
7173        self.operating_system = operating_system
7174        self.compute_role = compute_role
7175        self.handler_schema = handler_schema
7176        self.vm_scale_set_enabled = vm_scale_set_enabled
7177        self.supports_multiple_extensions = supports_multiple_extensions
7178
7179
7180class VirtualMachineExtensionInstanceView(msrest.serialization.Model):
7181    """The instance view of a virtual machine extension.
7182
7183    :param name: The virtual machine extension name.
7184    :type name: str
7185    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7186    :type type: str
7187    :param type_handler_version: Specifies the version of the script handler.
7188    :type type_handler_version: str
7189    :param substatuses: The resource status information.
7190    :type substatuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
7191    :param statuses: The resource status information.
7192    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
7193    """
7194
7195    _attribute_map = {
7196        'name': {'key': 'name', 'type': 'str'},
7197        'type': {'key': 'type', 'type': 'str'},
7198        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
7199        'substatuses': {'key': 'substatuses', 'type': '[InstanceViewStatus]'},
7200        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
7201    }
7202
7203    def __init__(
7204        self,
7205        *,
7206        name: Optional[str] = None,
7207        type: Optional[str] = None,
7208        type_handler_version: Optional[str] = None,
7209        substatuses: Optional[List["InstanceViewStatus"]] = None,
7210        statuses: Optional[List["InstanceViewStatus"]] = None,
7211        **kwargs
7212    ):
7213        super(VirtualMachineExtensionInstanceView, self).__init__(**kwargs)
7214        self.name = name
7215        self.type = type
7216        self.type_handler_version = type_handler_version
7217        self.substatuses = substatuses
7218        self.statuses = statuses
7219
7220
7221class VirtualMachineExtensionsListResult(msrest.serialization.Model):
7222    """The List Extension operation response.
7223
7224    :param value: The list of extensions.
7225    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtension]
7226    """
7227
7228    _attribute_map = {
7229        'value': {'key': 'value', 'type': '[VirtualMachineExtension]'},
7230    }
7231
7232    def __init__(
7233        self,
7234        *,
7235        value: Optional[List["VirtualMachineExtension"]] = None,
7236        **kwargs
7237    ):
7238        super(VirtualMachineExtensionsListResult, self).__init__(**kwargs)
7239        self.value = value
7240
7241
7242class VirtualMachineExtensionUpdate(UpdateResource):
7243    """Describes a Virtual Machine Extension.
7244
7245    :param tags: A set of tags. Resource tags.
7246    :type tags: dict[str, str]
7247    :param force_update_tag: How the extension handler should be forced to update even if the
7248     extension configuration has not changed.
7249    :type force_update_tag: str
7250    :param publisher: The name of the extension handler publisher.
7251    :type publisher: str
7252    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7253    :type type: str
7254    :param type_handler_version: Specifies the version of the script handler.
7255    :type type_handler_version: str
7256    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
7257     version if one is available at deployment time. Once deployed, however, the extension will not
7258     upgrade minor versions unless redeployed, even with this property set to true.
7259    :type auto_upgrade_minor_version: bool
7260    :param settings: Json formatted public settings for the extension.
7261    :type settings: any
7262    :param protected_settings: The extension can contain either protectedSettings or
7263     protectedSettingsFromKeyVault or no protected settings at all.
7264    :type protected_settings: any
7265    """
7266
7267    _attribute_map = {
7268        'tags': {'key': 'tags', 'type': '{str}'},
7269        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
7270        'publisher': {'key': 'properties.publisher', 'type': 'str'},
7271        'type': {'key': 'properties.type', 'type': 'str'},
7272        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
7273        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
7274        'settings': {'key': 'properties.settings', 'type': 'object'},
7275        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
7276    }
7277
7278    def __init__(
7279        self,
7280        *,
7281        tags: Optional[Dict[str, str]] = None,
7282        force_update_tag: Optional[str] = None,
7283        publisher: Optional[str] = None,
7284        type: Optional[str] = None,
7285        type_handler_version: Optional[str] = None,
7286        auto_upgrade_minor_version: Optional[bool] = None,
7287        settings: Optional[Any] = None,
7288        protected_settings: Optional[Any] = None,
7289        **kwargs
7290    ):
7291        super(VirtualMachineExtensionUpdate, self).__init__(tags=tags, **kwargs)
7292        self.force_update_tag = force_update_tag
7293        self.publisher = publisher
7294        self.type = type
7295        self.type_handler_version = type_handler_version
7296        self.auto_upgrade_minor_version = auto_upgrade_minor_version
7297        self.settings = settings
7298        self.protected_settings = protected_settings
7299
7300
7301class VirtualMachineHealthStatus(msrest.serialization.Model):
7302    """The health status of the VM.
7303
7304    Variables are only populated by the server, and will be ignored when sending a request.
7305
7306    :ivar status: The health status information for the VM.
7307    :vartype status: ~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus
7308    """
7309
7310    _validation = {
7311        'status': {'readonly': True},
7312    }
7313
7314    _attribute_map = {
7315        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
7316    }
7317
7318    def __init__(
7319        self,
7320        **kwargs
7321    ):
7322        super(VirtualMachineHealthStatus, self).__init__(**kwargs)
7323        self.status = None
7324
7325
7326class VirtualMachineIdentity(msrest.serialization.Model):
7327    """Identity for the virtual machine.
7328
7329    Variables are only populated by the server, and will be ignored when sending a request.
7330
7331    :ivar principal_id: The principal id of virtual machine identity. This property will only be
7332     provided for a system assigned identity.
7333    :vartype principal_id: str
7334    :ivar tenant_id: The tenant id associated with the virtual machine. This property will only be
7335     provided for a system assigned identity.
7336    :vartype tenant_id: str
7337    :param type: The type of identity used for the virtual machine. The type 'SystemAssigned,
7338     UserAssigned' includes both an implicitly created identity and a set of user assigned
7339     identities. The type 'None' will remove any identities from the virtual machine. Possible
7340     values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", "None".
7341    :type type: str or ~azure.mgmt.compute.v2019_07_01.models.ResourceIdentityType
7342    :param user_assigned_identities: The list of user identities associated with the Virtual
7343     Machine. The user identity dictionary key references will be ARM resource ids in the form:
7344     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
7345    :type user_assigned_identities: dict[str,
7346     ~azure.mgmt.compute.v2019_07_01.models.UserAssignedIdentitiesValue]
7347    """
7348
7349    _validation = {
7350        'principal_id': {'readonly': True},
7351        'tenant_id': {'readonly': True},
7352    }
7353
7354    _attribute_map = {
7355        'principal_id': {'key': 'principalId', 'type': 'str'},
7356        'tenant_id': {'key': 'tenantId', 'type': 'str'},
7357        'type': {'key': 'type', 'type': 'str'},
7358        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserAssignedIdentitiesValue}'},
7359    }
7360
7361    def __init__(
7362        self,
7363        *,
7364        type: Optional[Union[str, "ResourceIdentityType"]] = None,
7365        user_assigned_identities: Optional[Dict[str, "UserAssignedIdentitiesValue"]] = None,
7366        **kwargs
7367    ):
7368        super(VirtualMachineIdentity, self).__init__(**kwargs)
7369        self.principal_id = None
7370        self.tenant_id = None
7371        self.type = type
7372        self.user_assigned_identities = user_assigned_identities
7373
7374
7375class VirtualMachineImageResource(SubResource):
7376    """Virtual machine image resource information.
7377
7378    All required parameters must be populated in order to send to Azure.
7379
7380    :param id: Resource Id.
7381    :type id: str
7382    :param name: Required. The name of the resource.
7383    :type name: str
7384    :param location: Required. The supported Azure location of the resource.
7385    :type location: str
7386    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
7387     more information about using tags, see `Using tags to organize your Azure resources
7388     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
7389    :type tags: dict[str, str]
7390    """
7391
7392    _validation = {
7393        'name': {'required': True},
7394        'location': {'required': True},
7395    }
7396
7397    _attribute_map = {
7398        'id': {'key': 'id', 'type': 'str'},
7399        'name': {'key': 'name', 'type': 'str'},
7400        'location': {'key': 'location', 'type': 'str'},
7401        'tags': {'key': 'tags', 'type': '{str}'},
7402    }
7403
7404    def __init__(
7405        self,
7406        *,
7407        name: str,
7408        location: str,
7409        id: Optional[str] = None,
7410        tags: Optional[Dict[str, str]] = None,
7411        **kwargs
7412    ):
7413        super(VirtualMachineImageResource, self).__init__(id=id, **kwargs)
7414        self.name = name
7415        self.location = location
7416        self.tags = tags
7417
7418
7419class VirtualMachineImage(VirtualMachineImageResource):
7420    """Describes a Virtual Machine Image.
7421
7422    All required parameters must be populated in order to send to Azure.
7423
7424    :param id: Resource Id.
7425    :type id: str
7426    :param name: Required. The name of the resource.
7427    :type name: str
7428    :param location: Required. The supported Azure location of the resource.
7429    :type location: str
7430    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
7431     more information about using tags, see `Using tags to organize your Azure resources
7432     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
7433    :type tags: dict[str, str]
7434    :param plan: Used for establishing the purchase context of any 3rd Party artifact through
7435     MarketPlace.
7436    :type plan: ~azure.mgmt.compute.v2019_07_01.models.PurchasePlan
7437    :param os_disk_image: Contains the os disk image information.
7438    :type os_disk_image: ~azure.mgmt.compute.v2019_07_01.models.OSDiskImage
7439    :param data_disk_images:
7440    :type data_disk_images: list[~azure.mgmt.compute.v2019_07_01.models.DataDiskImage]
7441    :param automatic_os_upgrade_properties: Describes automatic OS upgrade properties on the image.
7442    :type automatic_os_upgrade_properties:
7443     ~azure.mgmt.compute.v2019_07_01.models.AutomaticOSUpgradeProperties
7444    :param hyper_v_generation: Specifies the HyperVGeneration Type. Possible values include: "V1",
7445     "V2".
7446    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGenerationTypes
7447    """
7448
7449    _validation = {
7450        'name': {'required': True},
7451        'location': {'required': True},
7452    }
7453
7454    _attribute_map = {
7455        'id': {'key': 'id', 'type': 'str'},
7456        'name': {'key': 'name', 'type': 'str'},
7457        'location': {'key': 'location', 'type': 'str'},
7458        'tags': {'key': 'tags', 'type': '{str}'},
7459        'plan': {'key': 'properties.plan', 'type': 'PurchasePlan'},
7460        'os_disk_image': {'key': 'properties.osDiskImage', 'type': 'OSDiskImage'},
7461        'data_disk_images': {'key': 'properties.dataDiskImages', 'type': '[DataDiskImage]'},
7462        'automatic_os_upgrade_properties': {'key': 'properties.automaticOSUpgradeProperties', 'type': 'AutomaticOSUpgradeProperties'},
7463        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
7464    }
7465
7466    def __init__(
7467        self,
7468        *,
7469        name: str,
7470        location: str,
7471        id: Optional[str] = None,
7472        tags: Optional[Dict[str, str]] = None,
7473        plan: Optional["PurchasePlan"] = None,
7474        os_disk_image: Optional["OSDiskImage"] = None,
7475        data_disk_images: Optional[List["DataDiskImage"]] = None,
7476        automatic_os_upgrade_properties: Optional["AutomaticOSUpgradeProperties"] = None,
7477        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
7478        **kwargs
7479    ):
7480        super(VirtualMachineImage, self).__init__(id=id, name=name, location=location, tags=tags, **kwargs)
7481        self.plan = plan
7482        self.os_disk_image = os_disk_image
7483        self.data_disk_images = data_disk_images
7484        self.automatic_os_upgrade_properties = automatic_os_upgrade_properties
7485        self.hyper_v_generation = hyper_v_generation
7486
7487
7488class VirtualMachineInstanceView(msrest.serialization.Model):
7489    """The instance view of a virtual machine.
7490
7491    :param platform_update_domain: Specifies the update domain of the virtual machine.
7492    :type platform_update_domain: int
7493    :param platform_fault_domain: Specifies the fault domain of the virtual machine.
7494    :type platform_fault_domain: int
7495    :param computer_name: The computer name assigned to the virtual machine.
7496    :type computer_name: str
7497    :param os_name: The Operating System running on the virtual machine.
7498    :type os_name: str
7499    :param os_version: The version of Operating System running on the virtual machine.
7500    :type os_version: str
7501    :param hyper_v_generation: Specifies the HyperVGeneration Type associated with a resource.
7502     Possible values include: "V1", "V2".
7503    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_07_01.models.HyperVGenerationType
7504    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
7505    :type rdp_thumb_print: str
7506    :param vm_agent: The VM Agent running on the virtual machine.
7507    :type vm_agent: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineAgentInstanceView
7508    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
7509    :type maintenance_redeploy_status:
7510     ~azure.mgmt.compute.v2019_07_01.models.MaintenanceRedeployStatus
7511    :param disks: The virtual machine disk information.
7512    :type disks: list[~azure.mgmt.compute.v2019_07_01.models.DiskInstanceView]
7513    :param extensions: The extensions information.
7514    :type extensions:
7515     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtensionInstanceView]
7516    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
7517     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
7518     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
7519     screenshot of the VM from the hypervisor.
7520    :type boot_diagnostics: ~azure.mgmt.compute.v2019_07_01.models.BootDiagnosticsInstanceView
7521    :param statuses: The resource status information.
7522    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
7523    """
7524
7525    _attribute_map = {
7526        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
7527        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
7528        'computer_name': {'key': 'computerName', 'type': 'str'},
7529        'os_name': {'key': 'osName', 'type': 'str'},
7530        'os_version': {'key': 'osVersion', 'type': 'str'},
7531        'hyper_v_generation': {'key': 'hyperVGeneration', 'type': 'str'},
7532        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
7533        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
7534        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
7535        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
7536        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
7537        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
7538        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
7539    }
7540
7541    def __init__(
7542        self,
7543        *,
7544        platform_update_domain: Optional[int] = None,
7545        platform_fault_domain: Optional[int] = None,
7546        computer_name: Optional[str] = None,
7547        os_name: Optional[str] = None,
7548        os_version: Optional[str] = None,
7549        hyper_v_generation: Optional[Union[str, "HyperVGenerationType"]] = None,
7550        rdp_thumb_print: Optional[str] = None,
7551        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
7552        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
7553        disks: Optional[List["DiskInstanceView"]] = None,
7554        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
7555        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
7556        statuses: Optional[List["InstanceViewStatus"]] = None,
7557        **kwargs
7558    ):
7559        super(VirtualMachineInstanceView, self).__init__(**kwargs)
7560        self.platform_update_domain = platform_update_domain
7561        self.platform_fault_domain = platform_fault_domain
7562        self.computer_name = computer_name
7563        self.os_name = os_name
7564        self.os_version = os_version
7565        self.hyper_v_generation = hyper_v_generation
7566        self.rdp_thumb_print = rdp_thumb_print
7567        self.vm_agent = vm_agent
7568        self.maintenance_redeploy_status = maintenance_redeploy_status
7569        self.disks = disks
7570        self.extensions = extensions
7571        self.boot_diagnostics = boot_diagnostics
7572        self.statuses = statuses
7573
7574
7575class VirtualMachineListResult(msrest.serialization.Model):
7576    """The List Virtual Machine operation response.
7577
7578    All required parameters must be populated in order to send to Azure.
7579
7580    :param value: Required. The list of virtual machines.
7581    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachine]
7582    :param next_link: The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch
7583     the next page of Virtual Machines.
7584    :type next_link: str
7585    """
7586
7587    _validation = {
7588        'value': {'required': True},
7589    }
7590
7591    _attribute_map = {
7592        'value': {'key': 'value', 'type': '[VirtualMachine]'},
7593        'next_link': {'key': 'nextLink', 'type': 'str'},
7594    }
7595
7596    def __init__(
7597        self,
7598        *,
7599        value: List["VirtualMachine"],
7600        next_link: Optional[str] = None,
7601        **kwargs
7602    ):
7603        super(VirtualMachineListResult, self).__init__(**kwargs)
7604        self.value = value
7605        self.next_link = next_link
7606
7607
7608class VirtualMachineReimageParameters(msrest.serialization.Model):
7609    """Parameters for Reimaging Virtual Machine. NOTE: Virtual Machine OS disk will always be reimaged.
7610
7611    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
7612     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
7613    :type temp_disk: bool
7614    """
7615
7616    _attribute_map = {
7617        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
7618    }
7619
7620    def __init__(
7621        self,
7622        *,
7623        temp_disk: Optional[bool] = None,
7624        **kwargs
7625    ):
7626        super(VirtualMachineReimageParameters, self).__init__(**kwargs)
7627        self.temp_disk = temp_disk
7628
7629
7630class VirtualMachineScaleSet(Resource):
7631    """Describes a Virtual Machine Scale Set.
7632
7633    Variables are only populated by the server, and will be ignored when sending a request.
7634
7635    All required parameters must be populated in order to send to Azure.
7636
7637    :ivar id: Resource Id.
7638    :vartype id: str
7639    :ivar name: Resource name.
7640    :vartype name: str
7641    :ivar type: Resource type.
7642    :vartype type: str
7643    :param location: Required. Resource location.
7644    :type location: str
7645    :param tags: A set of tags. Resource tags.
7646    :type tags: dict[str, str]
7647    :param sku: The virtual machine scale set sku.
7648    :type sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
7649    :param plan: Specifies information about the marketplace image used to create the virtual
7650     machine. This element is only used for marketplace images. Before you can use a marketplace
7651     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
7652     the marketplace image that you want to use and then click **Want to deploy programmatically,
7653     Get Started ->**. Enter any required information and then click **Save**.
7654    :type plan: ~azure.mgmt.compute.v2019_07_01.models.Plan
7655    :param identity: The identity of the virtual machine scale set, if configured.
7656    :type identity: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIdentity
7657    :param zones: The virtual machine scale set zones. NOTE: Availability zones can only be set
7658     when you create the scale set.
7659    :type zones: list[str]
7660    :param upgrade_policy: The upgrade policy.
7661    :type upgrade_policy: ~azure.mgmt.compute.v2019_07_01.models.UpgradePolicy
7662    :param automatic_repairs_policy: Policy for automatic repairs.
7663    :type automatic_repairs_policy: ~azure.mgmt.compute.v2019_07_01.models.AutomaticRepairsPolicy
7664    :param virtual_machine_profile: The virtual machine profile.
7665    :type virtual_machine_profile:
7666     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVMProfile
7667    :ivar provisioning_state: The provisioning state, which only appears in the response.
7668    :vartype provisioning_state: str
7669    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
7670     overprovisioned.
7671    :type overprovision: bool
7672    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
7673     are launched only on the requested number of VMs which are finally kept. This property will
7674     hence ensure that the extensions do not run on the extra overprovisioned VMs.
7675    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
7676    :ivar unique_id: Specifies the ID which uniquely identifies a Virtual Machine Scale Set.
7677    :vartype unique_id: str
7678    :param single_placement_group: When true this limits the scale set to a single placement group,
7679     of max size 100 virtual machines.
7680    :type single_placement_group: bool
7681    :param zone_balance: Whether to force strictly even Virtual Machine distribution cross x-zones
7682     in case there is zone outage.
7683    :type zone_balance: bool
7684    :param platform_fault_domain_count: Fault Domain count for each placement group.
7685    :type platform_fault_domain_count: int
7686    :param proximity_placement_group: Specifies information about the proximity placement group
7687     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
7688     api-version: 2018-04-01.
7689    :type proximity_placement_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
7690    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
7691     Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines
7692     have the capability to support attaching managed data disks with UltraSSD_LRS storage account
7693     type.
7694    :type additional_capabilities: ~azure.mgmt.compute.v2019_07_01.models.AdditionalCapabilities
7695    :param scale_in_policy: Specifies the scale-in policy that decides which virtual machines are
7696     chosen for removal when a Virtual Machine Scale Set is scaled-in.
7697    :type scale_in_policy: ~azure.mgmt.compute.v2019_07_01.models.ScaleInPolicy
7698    """
7699
7700    _validation = {
7701        'id': {'readonly': True},
7702        'name': {'readonly': True},
7703        'type': {'readonly': True},
7704        'location': {'required': True},
7705        'provisioning_state': {'readonly': True},
7706        'unique_id': {'readonly': True},
7707    }
7708
7709    _attribute_map = {
7710        'id': {'key': 'id', 'type': 'str'},
7711        'name': {'key': 'name', 'type': 'str'},
7712        'type': {'key': 'type', 'type': 'str'},
7713        'location': {'key': 'location', 'type': 'str'},
7714        'tags': {'key': 'tags', 'type': '{str}'},
7715        'sku': {'key': 'sku', 'type': 'Sku'},
7716        'plan': {'key': 'plan', 'type': 'Plan'},
7717        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
7718        'zones': {'key': 'zones', 'type': '[str]'},
7719        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
7720        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
7721        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetVMProfile'},
7722        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7723        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
7724        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
7725        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
7726        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
7727        'zone_balance': {'key': 'properties.zoneBalance', 'type': 'bool'},
7728        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
7729        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
7730        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
7731        'scale_in_policy': {'key': 'properties.scaleInPolicy', 'type': 'ScaleInPolicy'},
7732    }
7733
7734    def __init__(
7735        self,
7736        *,
7737        location: str,
7738        tags: Optional[Dict[str, str]] = None,
7739        sku: Optional["Sku"] = None,
7740        plan: Optional["Plan"] = None,
7741        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
7742        zones: Optional[List[str]] = None,
7743        upgrade_policy: Optional["UpgradePolicy"] = None,
7744        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
7745        virtual_machine_profile: Optional["VirtualMachineScaleSetVMProfile"] = None,
7746        overprovision: Optional[bool] = None,
7747        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
7748        single_placement_group: Optional[bool] = None,
7749        zone_balance: Optional[bool] = None,
7750        platform_fault_domain_count: Optional[int] = None,
7751        proximity_placement_group: Optional["SubResource"] = None,
7752        additional_capabilities: Optional["AdditionalCapabilities"] = None,
7753        scale_in_policy: Optional["ScaleInPolicy"] = None,
7754        **kwargs
7755    ):
7756        super(VirtualMachineScaleSet, self).__init__(location=location, tags=tags, **kwargs)
7757        self.sku = sku
7758        self.plan = plan
7759        self.identity = identity
7760        self.zones = zones
7761        self.upgrade_policy = upgrade_policy
7762        self.automatic_repairs_policy = automatic_repairs_policy
7763        self.virtual_machine_profile = virtual_machine_profile
7764        self.provisioning_state = None
7765        self.overprovision = overprovision
7766        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
7767        self.unique_id = None
7768        self.single_placement_group = single_placement_group
7769        self.zone_balance = zone_balance
7770        self.platform_fault_domain_count = platform_fault_domain_count
7771        self.proximity_placement_group = proximity_placement_group
7772        self.additional_capabilities = additional_capabilities
7773        self.scale_in_policy = scale_in_policy
7774
7775
7776class VirtualMachineScaleSetDataDisk(msrest.serialization.Model):
7777    """Describes a virtual machine scale set data disk.
7778
7779    All required parameters must be populated in order to send to Azure.
7780
7781    :param name: The disk name.
7782    :type name: str
7783    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
7784     identify data disks within the VM and therefore must be unique for each data disk attached to a
7785     VM.
7786    :type lun: int
7787    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
7788     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
7789     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
7790     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
7791     "ReadWrite".
7792    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
7793    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
7794     disabled on the disk.
7795    :type write_accelerator_enabled: bool
7796    :param create_option: Required. The create option. Possible values include: "FromImage",
7797     "Empty", "Attach".
7798    :type create_option: str or ~azure.mgmt.compute.v2019_07_01.models.DiskCreateOptionTypes
7799    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
7800     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
7801     This value cannot be larger than 1023 GB.
7802    :type disk_size_gb: int
7803    :param managed_disk: The managed disk parameters.
7804    :type managed_disk:
7805     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetManagedDiskParameters
7806    :param disk_iops_read_write: Specifies the Read-Write IOPS for the managed disk. Should be used
7807     only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be
7808     assigned based on diskSizeGB.
7809    :type disk_iops_read_write: long
7810    :param disk_m_bps_read_write: Specifies the bandwidth in MB per second for the managed disk.
7811     Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value
7812     would be assigned based on diskSizeGB.
7813    :type disk_m_bps_read_write: long
7814    """
7815
7816    _validation = {
7817        'lun': {'required': True},
7818        'create_option': {'required': True},
7819    }
7820
7821    _attribute_map = {
7822        'name': {'key': 'name', 'type': 'str'},
7823        'lun': {'key': 'lun', 'type': 'int'},
7824        'caching': {'key': 'caching', 'type': 'str'},
7825        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
7826        'create_option': {'key': 'createOption', 'type': 'str'},
7827        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
7828        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
7829        'disk_iops_read_write': {'key': 'diskIOPSReadWrite', 'type': 'long'},
7830        'disk_m_bps_read_write': {'key': 'diskMBpsReadWrite', 'type': 'long'},
7831    }
7832
7833    def __init__(
7834        self,
7835        *,
7836        lun: int,
7837        create_option: Union[str, "DiskCreateOptionTypes"],
7838        name: Optional[str] = None,
7839        caching: Optional[Union[str, "CachingTypes"]] = None,
7840        write_accelerator_enabled: Optional[bool] = None,
7841        disk_size_gb: Optional[int] = None,
7842        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
7843        disk_iops_read_write: Optional[int] = None,
7844        disk_m_bps_read_write: Optional[int] = None,
7845        **kwargs
7846    ):
7847        super(VirtualMachineScaleSetDataDisk, self).__init__(**kwargs)
7848        self.name = name
7849        self.lun = lun
7850        self.caching = caching
7851        self.write_accelerator_enabled = write_accelerator_enabled
7852        self.create_option = create_option
7853        self.disk_size_gb = disk_size_gb
7854        self.managed_disk = managed_disk
7855        self.disk_iops_read_write = disk_iops_read_write
7856        self.disk_m_bps_read_write = disk_m_bps_read_write
7857
7858
7859class VirtualMachineScaleSetExtension(SubResourceReadOnly):
7860    """Describes a Virtual Machine Scale Set Extension.
7861
7862    Variables are only populated by the server, and will be ignored when sending a request.
7863
7864    :ivar id: Resource Id.
7865    :vartype id: str
7866    :param name: The name of the extension.
7867    :type name: str
7868    :ivar type: Resource type.
7869    :vartype type: str
7870    :param force_update_tag: If a value is provided and is different from the previous value, the
7871     extension handler will be forced to update even if the extension configuration has not changed.
7872    :type force_update_tag: str
7873    :param publisher: The name of the extension handler publisher.
7874    :type publisher: str
7875    :param type_properties_type: Specifies the type of the extension; an example is
7876     "CustomScriptExtension".
7877    :type type_properties_type: str
7878    :param type_handler_version: Specifies the version of the script handler.
7879    :type type_handler_version: str
7880    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
7881     version if one is available at deployment time. Once deployed, however, the extension will not
7882     upgrade minor versions unless redeployed, even with this property set to true.
7883    :type auto_upgrade_minor_version: bool
7884    :param settings: Json formatted public settings for the extension.
7885    :type settings: any
7886    :param protected_settings: The extension can contain either protectedSettings or
7887     protectedSettingsFromKeyVault or no protected settings at all.
7888    :type protected_settings: any
7889    :ivar provisioning_state: The provisioning state, which only appears in the response.
7890    :vartype provisioning_state: str
7891    :param provision_after_extensions: Collection of extension names after which this extension
7892     needs to be provisioned.
7893    :type provision_after_extensions: list[str]
7894    """
7895
7896    _validation = {
7897        'id': {'readonly': True},
7898        'type': {'readonly': True},
7899        'provisioning_state': {'readonly': True},
7900    }
7901
7902    _attribute_map = {
7903        'id': {'key': 'id', 'type': 'str'},
7904        'name': {'key': 'name', 'type': 'str'},
7905        'type': {'key': 'type', 'type': 'str'},
7906        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
7907        'publisher': {'key': 'properties.publisher', 'type': 'str'},
7908        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
7909        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
7910        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
7911        'settings': {'key': 'properties.settings', 'type': 'object'},
7912        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
7913        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7914        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
7915    }
7916
7917    def __init__(
7918        self,
7919        *,
7920        name: Optional[str] = None,
7921        force_update_tag: Optional[str] = None,
7922        publisher: Optional[str] = None,
7923        type_properties_type: Optional[str] = None,
7924        type_handler_version: Optional[str] = None,
7925        auto_upgrade_minor_version: Optional[bool] = None,
7926        settings: Optional[Any] = None,
7927        protected_settings: Optional[Any] = None,
7928        provision_after_extensions: Optional[List[str]] = None,
7929        **kwargs
7930    ):
7931        super(VirtualMachineScaleSetExtension, self).__init__(**kwargs)
7932        self.name = name
7933        self.type = None
7934        self.force_update_tag = force_update_tag
7935        self.publisher = publisher
7936        self.type_properties_type = type_properties_type
7937        self.type_handler_version = type_handler_version
7938        self.auto_upgrade_minor_version = auto_upgrade_minor_version
7939        self.settings = settings
7940        self.protected_settings = protected_settings
7941        self.provisioning_state = None
7942        self.provision_after_extensions = provision_after_extensions
7943
7944
7945class VirtualMachineScaleSetExtensionListResult(msrest.serialization.Model):
7946    """The List VM scale set extension operation response.
7947
7948    All required parameters must be populated in order to send to Azure.
7949
7950    :param value: Required. The list of VM scale set extensions.
7951    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetExtension]
7952    :param next_link: The uri to fetch the next page of VM scale set extensions. Call ListNext()
7953     with this to fetch the next page of VM scale set extensions.
7954    :type next_link: str
7955    """
7956
7957    _validation = {
7958        'value': {'required': True},
7959    }
7960
7961    _attribute_map = {
7962        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetExtension]'},
7963        'next_link': {'key': 'nextLink', 'type': 'str'},
7964    }
7965
7966    def __init__(
7967        self,
7968        *,
7969        value: List["VirtualMachineScaleSetExtension"],
7970        next_link: Optional[str] = None,
7971        **kwargs
7972    ):
7973        super(VirtualMachineScaleSetExtensionListResult, self).__init__(**kwargs)
7974        self.value = value
7975        self.next_link = next_link
7976
7977
7978class VirtualMachineScaleSetExtensionProfile(msrest.serialization.Model):
7979    """Describes a virtual machine scale set extension profile.
7980
7981    :param extensions: The virtual machine scale set child extension resources.
7982    :type extensions: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetExtension]
7983    """
7984
7985    _attribute_map = {
7986        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetExtension]'},
7987    }
7988
7989    def __init__(
7990        self,
7991        *,
7992        extensions: Optional[List["VirtualMachineScaleSetExtension"]] = None,
7993        **kwargs
7994    ):
7995        super(VirtualMachineScaleSetExtensionProfile, self).__init__(**kwargs)
7996        self.extensions = extensions
7997
7998
7999class VirtualMachineScaleSetExtensionUpdate(SubResourceReadOnly):
8000    """Describes a Virtual Machine Scale Set Extension.
8001
8002    Variables are only populated by the server, and will be ignored when sending a request.
8003
8004    :ivar id: Resource Id.
8005    :vartype id: str
8006    :ivar name: The name of the extension.
8007    :vartype name: str
8008    :ivar type: Resource type.
8009    :vartype type: str
8010    :param force_update_tag: If a value is provided and is different from the previous value, the
8011     extension handler will be forced to update even if the extension configuration has not changed.
8012    :type force_update_tag: str
8013    :param publisher: The name of the extension handler publisher.
8014    :type publisher: str
8015    :param type_properties_type: Specifies the type of the extension; an example is
8016     "CustomScriptExtension".
8017    :type type_properties_type: str
8018    :param type_handler_version: Specifies the version of the script handler.
8019    :type type_handler_version: str
8020    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
8021     version if one is available at deployment time. Once deployed, however, the extension will not
8022     upgrade minor versions unless redeployed, even with this property set to true.
8023    :type auto_upgrade_minor_version: bool
8024    :param settings: Json formatted public settings for the extension.
8025    :type settings: any
8026    :param protected_settings: The extension can contain either protectedSettings or
8027     protectedSettingsFromKeyVault or no protected settings at all.
8028    :type protected_settings: any
8029    :ivar provisioning_state: The provisioning state, which only appears in the response.
8030    :vartype provisioning_state: str
8031    :param provision_after_extensions: Collection of extension names after which this extension
8032     needs to be provisioned.
8033    :type provision_after_extensions: list[str]
8034    """
8035
8036    _validation = {
8037        'id': {'readonly': True},
8038        'name': {'readonly': True},
8039        'type': {'readonly': True},
8040        'provisioning_state': {'readonly': True},
8041    }
8042
8043    _attribute_map = {
8044        'id': {'key': 'id', 'type': 'str'},
8045        'name': {'key': 'name', 'type': 'str'},
8046        'type': {'key': 'type', 'type': 'str'},
8047        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
8048        'publisher': {'key': 'properties.publisher', 'type': 'str'},
8049        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
8050        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
8051        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
8052        'settings': {'key': 'properties.settings', 'type': 'object'},
8053        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
8054        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8055        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
8056    }
8057
8058    def __init__(
8059        self,
8060        *,
8061        force_update_tag: Optional[str] = None,
8062        publisher: Optional[str] = None,
8063        type_properties_type: Optional[str] = None,
8064        type_handler_version: Optional[str] = None,
8065        auto_upgrade_minor_version: Optional[bool] = None,
8066        settings: Optional[Any] = None,
8067        protected_settings: Optional[Any] = None,
8068        provision_after_extensions: Optional[List[str]] = None,
8069        **kwargs
8070    ):
8071        super(VirtualMachineScaleSetExtensionUpdate, self).__init__(**kwargs)
8072        self.name = None
8073        self.type = None
8074        self.force_update_tag = force_update_tag
8075        self.publisher = publisher
8076        self.type_properties_type = type_properties_type
8077        self.type_handler_version = type_handler_version
8078        self.auto_upgrade_minor_version = auto_upgrade_minor_version
8079        self.settings = settings
8080        self.protected_settings = protected_settings
8081        self.provisioning_state = None
8082        self.provision_after_extensions = provision_after_extensions
8083
8084
8085class VirtualMachineScaleSetIdentity(msrest.serialization.Model):
8086    """Identity for the virtual machine scale set.
8087
8088    Variables are only populated by the server, and will be ignored when sending a request.
8089
8090    :ivar principal_id: The principal id of virtual machine scale set identity. This property will
8091     only be provided for a system assigned identity.
8092    :vartype principal_id: str
8093    :ivar tenant_id: The tenant id associated with the virtual machine scale set. This property
8094     will only be provided for a system assigned identity.
8095    :vartype tenant_id: str
8096    :param type: The type of identity used for the virtual machine scale set. The type
8097     'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user
8098     assigned identities. The type 'None' will remove any identities from the virtual machine scale
8099     set. Possible values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned",
8100     "None".
8101    :type type: str or ~azure.mgmt.compute.v2019_07_01.models.ResourceIdentityType
8102    :param user_assigned_identities: The list of user identities associated with the virtual
8103     machine scale set. The user identity dictionary key references will be ARM resource ids in the
8104     form:
8105     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
8106    :type user_assigned_identities: dict[str,
8107     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue]
8108    """
8109
8110    _validation = {
8111        'principal_id': {'readonly': True},
8112        'tenant_id': {'readonly': True},
8113    }
8114
8115    _attribute_map = {
8116        'principal_id': {'key': 'principalId', 'type': 'str'},
8117        'tenant_id': {'key': 'tenantId', 'type': 'str'},
8118        'type': {'key': 'type', 'type': 'str'},
8119        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue}'},
8120    }
8121
8122    def __init__(
8123        self,
8124        *,
8125        type: Optional[Union[str, "ResourceIdentityType"]] = None,
8126        user_assigned_identities: Optional[Dict[str, "VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue"]] = None,
8127        **kwargs
8128    ):
8129        super(VirtualMachineScaleSetIdentity, self).__init__(**kwargs)
8130        self.principal_id = None
8131        self.tenant_id = None
8132        self.type = type
8133        self.user_assigned_identities = user_assigned_identities
8134
8135
8136class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(msrest.serialization.Model):
8137    """VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue.
8138
8139    Variables are only populated by the server, and will be ignored when sending a request.
8140
8141    :ivar principal_id: The principal id of user assigned identity.
8142    :vartype principal_id: str
8143    :ivar client_id: The client id of user assigned identity.
8144    :vartype client_id: str
8145    """
8146
8147    _validation = {
8148        'principal_id': {'readonly': True},
8149        'client_id': {'readonly': True},
8150    }
8151
8152    _attribute_map = {
8153        'principal_id': {'key': 'principalId', 'type': 'str'},
8154        'client_id': {'key': 'clientId', 'type': 'str'},
8155    }
8156
8157    def __init__(
8158        self,
8159        **kwargs
8160    ):
8161        super(VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue, self).__init__(**kwargs)
8162        self.principal_id = None
8163        self.client_id = None
8164
8165
8166class VirtualMachineScaleSetInstanceView(msrest.serialization.Model):
8167    """The instance view of a virtual machine scale set.
8168
8169    Variables are only populated by the server, and will be ignored when sending a request.
8170
8171    :ivar virtual_machine: The instance view status summary for the virtual machine scale set.
8172    :vartype virtual_machine:
8173     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetInstanceViewStatusesSummary
8174    :ivar extensions: The extensions information.
8175    :vartype extensions:
8176     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVMExtensionsSummary]
8177    :param statuses: The resource status information.
8178    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
8179    """
8180
8181    _validation = {
8182        'virtual_machine': {'readonly': True},
8183        'extensions': {'readonly': True},
8184    }
8185
8186    _attribute_map = {
8187        'virtual_machine': {'key': 'virtualMachine', 'type': 'VirtualMachineScaleSetInstanceViewStatusesSummary'},
8188        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetVMExtensionsSummary]'},
8189        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
8190    }
8191
8192    def __init__(
8193        self,
8194        *,
8195        statuses: Optional[List["InstanceViewStatus"]] = None,
8196        **kwargs
8197    ):
8198        super(VirtualMachineScaleSetInstanceView, self).__init__(**kwargs)
8199        self.virtual_machine = None
8200        self.extensions = None
8201        self.statuses = statuses
8202
8203
8204class VirtualMachineScaleSetInstanceViewStatusesSummary(msrest.serialization.Model):
8205    """Instance view statuses summary for virtual machines of a virtual machine scale set.
8206
8207    Variables are only populated by the server, and will be ignored when sending a request.
8208
8209    :ivar statuses_summary: The extensions information.
8210    :vartype statuses_summary:
8211     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineStatusCodeCount]
8212    """
8213
8214    _validation = {
8215        'statuses_summary': {'readonly': True},
8216    }
8217
8218    _attribute_map = {
8219        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
8220    }
8221
8222    def __init__(
8223        self,
8224        **kwargs
8225    ):
8226        super(VirtualMachineScaleSetInstanceViewStatusesSummary, self).__init__(**kwargs)
8227        self.statuses_summary = None
8228
8229
8230class VirtualMachineScaleSetIPConfiguration(SubResource):
8231    """Describes a virtual machine scale set network profile's IP configuration.
8232
8233    All required parameters must be populated in order to send to Azure.
8234
8235    :param id: Resource Id.
8236    :type id: str
8237    :param name: Required. The IP configuration name.
8238    :type name: str
8239    :param subnet: Specifies the identifier of the subnet.
8240    :type subnet: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference
8241    :param primary: Specifies the primary network interface in case the virtual machine has more
8242     than 1 network interface.
8243    :type primary: bool
8244    :param public_ip_address_configuration: The publicIPAddressConfiguration.
8245    :type public_ip_address_configuration:
8246     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration
8247    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
8248     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
8249     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
8250    :type private_ip_address_version: str or ~azure.mgmt.compute.v2019_07_01.models.IPVersion
8251    :param application_gateway_backend_address_pools: Specifies an array of references to backend
8252     address pools of application gateways. A scale set can reference backend address pools of
8253     multiple application gateways. Multiple scale sets cannot use the same application gateway.
8254    :type application_gateway_backend_address_pools:
8255     list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
8256    :param application_security_groups: Specifies an array of references to application security
8257     group.
8258    :type application_security_groups: list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
8259    :param load_balancer_backend_address_pools: Specifies an array of references to backend address
8260     pools of load balancers. A scale set can reference backend address pools of one public and one
8261     internal load balancer. Multiple scale sets cannot use the same load balancer.
8262    :type load_balancer_backend_address_pools:
8263     list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
8264    :param load_balancer_inbound_nat_pools: Specifies an array of references to inbound Nat pools
8265     of the load balancers. A scale set can reference inbound nat pools of one public and one
8266     internal load balancer. Multiple scale sets cannot use the same load balancer.
8267    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
8268    """
8269
8270    _validation = {
8271        'name': {'required': True},
8272    }
8273
8274    _attribute_map = {
8275        'id': {'key': 'id', 'type': 'str'},
8276        'name': {'key': 'name', 'type': 'str'},
8277        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
8278        'primary': {'key': 'properties.primary', 'type': 'bool'},
8279        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetPublicIPAddressConfiguration'},
8280        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
8281        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
8282        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
8283        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
8284        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
8285    }
8286
8287    def __init__(
8288        self,
8289        *,
8290        name: str,
8291        id: Optional[str] = None,
8292        subnet: Optional["ApiEntityReference"] = None,
8293        primary: Optional[bool] = None,
8294        public_ip_address_configuration: Optional["VirtualMachineScaleSetPublicIPAddressConfiguration"] = None,
8295        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
8296        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
8297        application_security_groups: Optional[List["SubResource"]] = None,
8298        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
8299        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
8300        **kwargs
8301    ):
8302        super(VirtualMachineScaleSetIPConfiguration, self).__init__(id=id, **kwargs)
8303        self.name = name
8304        self.subnet = subnet
8305        self.primary = primary
8306        self.public_ip_address_configuration = public_ip_address_configuration
8307        self.private_ip_address_version = private_ip_address_version
8308        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
8309        self.application_security_groups = application_security_groups
8310        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
8311        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
8312
8313
8314class VirtualMachineScaleSetIpTag(msrest.serialization.Model):
8315    """Contains the IP tag associated with the public IP address.
8316
8317    :param ip_tag_type: IP tag type. Example: FirstPartyUsage.
8318    :type ip_tag_type: str
8319    :param tag: IP tag associated with the public IP. Example: SQL, Storage etc.
8320    :type tag: str
8321    """
8322
8323    _attribute_map = {
8324        'ip_tag_type': {'key': 'ipTagType', 'type': 'str'},
8325        'tag': {'key': 'tag', 'type': 'str'},
8326    }
8327
8328    def __init__(
8329        self,
8330        *,
8331        ip_tag_type: Optional[str] = None,
8332        tag: Optional[str] = None,
8333        **kwargs
8334    ):
8335        super(VirtualMachineScaleSetIpTag, self).__init__(**kwargs)
8336        self.ip_tag_type = ip_tag_type
8337        self.tag = tag
8338
8339
8340class VirtualMachineScaleSetListOSUpgradeHistory(msrest.serialization.Model):
8341    """List of Virtual Machine Scale Set OS Upgrade History operation response.
8342
8343    All required parameters must be populated in order to send to Azure.
8344
8345    :param value: Required. The list of OS upgrades performed on the virtual machine scale set.
8346    :type value: list[~azure.mgmt.compute.v2019_07_01.models.UpgradeOperationHistoricalStatusInfo]
8347    :param next_link: The uri to fetch the next page of OS Upgrade History. Call ListNext() with
8348     this to fetch the next page of history of upgrades.
8349    :type next_link: str
8350    """
8351
8352    _validation = {
8353        'value': {'required': True},
8354    }
8355
8356    _attribute_map = {
8357        'value': {'key': 'value', 'type': '[UpgradeOperationHistoricalStatusInfo]'},
8358        'next_link': {'key': 'nextLink', 'type': 'str'},
8359    }
8360
8361    def __init__(
8362        self,
8363        *,
8364        value: List["UpgradeOperationHistoricalStatusInfo"],
8365        next_link: Optional[str] = None,
8366        **kwargs
8367    ):
8368        super(VirtualMachineScaleSetListOSUpgradeHistory, self).__init__(**kwargs)
8369        self.value = value
8370        self.next_link = next_link
8371
8372
8373class VirtualMachineScaleSetListResult(msrest.serialization.Model):
8374    """The List Virtual Machine operation response.
8375
8376    All required parameters must be populated in order to send to Azure.
8377
8378    :param value: Required. The list of virtual machine scale sets.
8379    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSet]
8380    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
8381     with this to fetch the next page of VMSS.
8382    :type next_link: str
8383    """
8384
8385    _validation = {
8386        'value': {'required': True},
8387    }
8388
8389    _attribute_map = {
8390        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
8391        'next_link': {'key': 'nextLink', 'type': 'str'},
8392    }
8393
8394    def __init__(
8395        self,
8396        *,
8397        value: List["VirtualMachineScaleSet"],
8398        next_link: Optional[str] = None,
8399        **kwargs
8400    ):
8401        super(VirtualMachineScaleSetListResult, self).__init__(**kwargs)
8402        self.value = value
8403        self.next_link = next_link
8404
8405
8406class VirtualMachineScaleSetListSkusResult(msrest.serialization.Model):
8407    """The Virtual Machine Scale Set List Skus operation response.
8408
8409    All required parameters must be populated in order to send to Azure.
8410
8411    :param value: Required. The list of skus available for the virtual machine scale set.
8412    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetSku]
8413    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set Skus. Call
8414     ListNext() with this to fetch the next page of VMSS Skus.
8415    :type next_link: str
8416    """
8417
8418    _validation = {
8419        'value': {'required': True},
8420    }
8421
8422    _attribute_map = {
8423        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetSku]'},
8424        'next_link': {'key': 'nextLink', 'type': 'str'},
8425    }
8426
8427    def __init__(
8428        self,
8429        *,
8430        value: List["VirtualMachineScaleSetSku"],
8431        next_link: Optional[str] = None,
8432        **kwargs
8433    ):
8434        super(VirtualMachineScaleSetListSkusResult, self).__init__(**kwargs)
8435        self.value = value
8436        self.next_link = next_link
8437
8438
8439class VirtualMachineScaleSetListWithLinkResult(msrest.serialization.Model):
8440    """The List Virtual Machine operation response.
8441
8442    All required parameters must be populated in order to send to Azure.
8443
8444    :param value: Required. The list of virtual machine scale sets.
8445    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSet]
8446    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
8447     with this to fetch the next page of Virtual Machine Scale Sets.
8448    :type next_link: str
8449    """
8450
8451    _validation = {
8452        'value': {'required': True},
8453    }
8454
8455    _attribute_map = {
8456        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
8457        'next_link': {'key': 'nextLink', 'type': 'str'},
8458    }
8459
8460    def __init__(
8461        self,
8462        *,
8463        value: List["VirtualMachineScaleSet"],
8464        next_link: Optional[str] = None,
8465        **kwargs
8466    ):
8467        super(VirtualMachineScaleSetListWithLinkResult, self).__init__(**kwargs)
8468        self.value = value
8469        self.next_link = next_link
8470
8471
8472class VirtualMachineScaleSetManagedDiskParameters(msrest.serialization.Model):
8473    """Describes the parameters of a ScaleSet managed disk.
8474
8475    :param storage_account_type: Specifies the storage account type for the managed disk. Managed
8476     OS disk storage account type can only be set when you create the scale set. NOTE: UltraSSD_LRS
8477     can only be used with data disks, it cannot be used with OS Disk. Possible values include:
8478     "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
8479    :type storage_account_type: str or ~azure.mgmt.compute.v2019_07_01.models.StorageAccountTypes
8480    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
8481     the managed disk.
8482    :type disk_encryption_set: ~azure.mgmt.compute.v2019_07_01.models.DiskEncryptionSetParameters
8483    """
8484
8485    _attribute_map = {
8486        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
8487        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
8488    }
8489
8490    def __init__(
8491        self,
8492        *,
8493        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
8494        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
8495        **kwargs
8496    ):
8497        super(VirtualMachineScaleSetManagedDiskParameters, self).__init__(**kwargs)
8498        self.storage_account_type = storage_account_type
8499        self.disk_encryption_set = disk_encryption_set
8500
8501
8502class VirtualMachineScaleSetNetworkConfiguration(SubResource):
8503    """Describes a virtual machine scale set network profile's network configurations.
8504
8505    All required parameters must be populated in order to send to Azure.
8506
8507    :param id: Resource Id.
8508    :type id: str
8509    :param name: Required. The network configuration name.
8510    :type name: str
8511    :param primary: Specifies the primary network interface in case the virtual machine has more
8512     than 1 network interface.
8513    :type primary: bool
8514    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
8515     networking-enabled.
8516    :type enable_accelerated_networking: bool
8517    :param network_security_group: The network security group.
8518    :type network_security_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
8519    :param dns_settings: The dns settings to be applied on the network interfaces.
8520    :type dns_settings:
8521     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
8522    :param ip_configurations: Specifies the IP configurations of the network interface.
8523    :type ip_configurations:
8524     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIPConfiguration]
8525    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
8526    :type enable_ip_forwarding: bool
8527    """
8528
8529    _validation = {
8530        'name': {'required': True},
8531    }
8532
8533    _attribute_map = {
8534        'id': {'key': 'id', 'type': 'str'},
8535        'name': {'key': 'name', 'type': 'str'},
8536        'primary': {'key': 'properties.primary', 'type': 'bool'},
8537        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
8538        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
8539        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
8540        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetIPConfiguration]'},
8541        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
8542    }
8543
8544    def __init__(
8545        self,
8546        *,
8547        name: str,
8548        id: Optional[str] = None,
8549        primary: Optional[bool] = None,
8550        enable_accelerated_networking: Optional[bool] = None,
8551        network_security_group: Optional["SubResource"] = None,
8552        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
8553        ip_configurations: Optional[List["VirtualMachineScaleSetIPConfiguration"]] = None,
8554        enable_ip_forwarding: Optional[bool] = None,
8555        **kwargs
8556    ):
8557        super(VirtualMachineScaleSetNetworkConfiguration, self).__init__(id=id, **kwargs)
8558        self.name = name
8559        self.primary = primary
8560        self.enable_accelerated_networking = enable_accelerated_networking
8561        self.network_security_group = network_security_group
8562        self.dns_settings = dns_settings
8563        self.ip_configurations = ip_configurations
8564        self.enable_ip_forwarding = enable_ip_forwarding
8565
8566
8567class VirtualMachineScaleSetNetworkConfigurationDnsSettings(msrest.serialization.Model):
8568    """Describes a virtual machines scale sets network configuration's DNS settings.
8569
8570    :param dns_servers: List of DNS servers IP addresses.
8571    :type dns_servers: list[str]
8572    """
8573
8574    _attribute_map = {
8575        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
8576    }
8577
8578    def __init__(
8579        self,
8580        *,
8581        dns_servers: Optional[List[str]] = None,
8582        **kwargs
8583    ):
8584        super(VirtualMachineScaleSetNetworkConfigurationDnsSettings, self).__init__(**kwargs)
8585        self.dns_servers = dns_servers
8586
8587
8588class VirtualMachineScaleSetNetworkProfile(msrest.serialization.Model):
8589    """Describes a virtual machine scale set network profile.
8590
8591    :param health_probe: A reference to a load balancer probe used to determine the health of an
8592     instance in the virtual machine scale set. The reference will be in the form:
8593     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
8594    :type health_probe: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference
8595    :param network_interface_configurations: The list of network configurations.
8596    :type network_interface_configurations:
8597     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetNetworkConfiguration]
8598    """
8599
8600    _attribute_map = {
8601        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
8602        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
8603    }
8604
8605    def __init__(
8606        self,
8607        *,
8608        health_probe: Optional["ApiEntityReference"] = None,
8609        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
8610        **kwargs
8611    ):
8612        super(VirtualMachineScaleSetNetworkProfile, self).__init__(**kwargs)
8613        self.health_probe = health_probe
8614        self.network_interface_configurations = network_interface_configurations
8615
8616
8617class VirtualMachineScaleSetOSDisk(msrest.serialization.Model):
8618    """Describes a virtual machine scale set operating system disk.
8619
8620    All required parameters must be populated in order to send to Azure.
8621
8622    :param name: The disk name.
8623    :type name: str
8624    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
8625     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
8626     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
8627     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
8628     "ReadWrite".
8629    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
8630    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
8631     disabled on the disk.
8632    :type write_accelerator_enabled: bool
8633    :param create_option: Required. Specifies how the virtual machines in the scale set should be
8634     created.:code:`<br>`:code:`<br>` The only allowed value is: **FromImage** \u2013 This value is
8635     used when you are using an image to create the virtual machine. If you are using a platform
8636     image, you also use the imageReference element described above. If you are using a marketplace
8637     image, you  also use the plan element previously described. Possible values include:
8638     "FromImage", "Empty", "Attach".
8639    :type create_option: str or ~azure.mgmt.compute.v2019_07_01.models.DiskCreateOptionTypes
8640    :param diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk
8641     used by the virtual machine scale set.
8642    :type diff_disk_settings: ~azure.mgmt.compute.v2019_07_01.models.DiffDiskSettings
8643    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
8644     can be used to overwrite the size of the disk in a virtual machine image.
8645     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
8646    :type disk_size_gb: int
8647    :param os_type: This property allows you to specify the type of the OS that is included in the
8648     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
8649     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
8650     values include: "Windows", "Linux".
8651    :type os_type: str or ~azure.mgmt.compute.v2019_07_01.models.OperatingSystemTypes
8652    :param image: Specifies information about the unmanaged user image to base the scale set on.
8653    :type image: ~azure.mgmt.compute.v2019_07_01.models.VirtualHardDisk
8654    :param vhd_containers: Specifies the container urls that are used to store operating system
8655     disks for the scale set.
8656    :type vhd_containers: list[str]
8657    :param managed_disk: The managed disk parameters.
8658    :type managed_disk:
8659     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetManagedDiskParameters
8660    """
8661
8662    _validation = {
8663        'create_option': {'required': True},
8664    }
8665
8666    _attribute_map = {
8667        'name': {'key': 'name', 'type': 'str'},
8668        'caching': {'key': 'caching', 'type': 'str'},
8669        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
8670        'create_option': {'key': 'createOption', 'type': 'str'},
8671        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
8672        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
8673        'os_type': {'key': 'osType', 'type': 'str'},
8674        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
8675        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
8676        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
8677    }
8678
8679    def __init__(
8680        self,
8681        *,
8682        create_option: Union[str, "DiskCreateOptionTypes"],
8683        name: Optional[str] = None,
8684        caching: Optional[Union[str, "CachingTypes"]] = None,
8685        write_accelerator_enabled: Optional[bool] = None,
8686        diff_disk_settings: Optional["DiffDiskSettings"] = None,
8687        disk_size_gb: Optional[int] = None,
8688        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
8689        image: Optional["VirtualHardDisk"] = None,
8690        vhd_containers: Optional[List[str]] = None,
8691        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
8692        **kwargs
8693    ):
8694        super(VirtualMachineScaleSetOSDisk, self).__init__(**kwargs)
8695        self.name = name
8696        self.caching = caching
8697        self.write_accelerator_enabled = write_accelerator_enabled
8698        self.create_option = create_option
8699        self.diff_disk_settings = diff_disk_settings
8700        self.disk_size_gb = disk_size_gb
8701        self.os_type = os_type
8702        self.image = image
8703        self.vhd_containers = vhd_containers
8704        self.managed_disk = managed_disk
8705
8706
8707class VirtualMachineScaleSetOSProfile(msrest.serialization.Model):
8708    """Describes a virtual machine scale set OS profile.
8709
8710    :param computer_name_prefix: Specifies the computer name prefix for all of the virtual machines
8711     in the scale set. Computer name prefixes must be 1 to 15 characters long.
8712    :type computer_name_prefix: str
8713    :param admin_username: Specifies the name of the administrator account.
8714     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
8715     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
8716     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
8717     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
8718     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
8719     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
8720     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
8721     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
8722     root privileges on Linux virtual machines in Azure
8723     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
8724     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
8725     in this field, see `Selecting User Names for Linux on Azure
8726     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
8727    :type admin_username: str
8728    :param admin_password: Specifies the password of the administrator account.
8729     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
8730     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
8731     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
8732     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
8733     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
8734     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
8735     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
8736     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
8737     resetting the password, see `How to reset the Remote Desktop service or its login password in a
8738     Windows VM
8739     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
8740     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
8741     repair disks on Azure Linux VMs using the VMAccess Extension
8742     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
8743    :type admin_password: str
8744    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
8745     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
8746     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` For using cloud-init for
8747     your VM, see `Using cloud-init to customize a Linux VM during creation
8748     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
8749    :type custom_data: str
8750    :param windows_configuration: Specifies Windows operating system settings on the virtual
8751     machine.
8752    :type windows_configuration: ~azure.mgmt.compute.v2019_07_01.models.WindowsConfiguration
8753    :param linux_configuration: Specifies the Linux operating system settings on the virtual
8754     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
8755     Azure-Endorsed Distributions
8756     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
8757     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
8758     Non-Endorsed Distributions
8759     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
8760    :type linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration
8761    :param secrets: Specifies set of certificates that should be installed onto the virtual
8762     machines in the scale set.
8763    :type secrets: list[~azure.mgmt.compute.v2019_07_01.models.VaultSecretGroup]
8764    """
8765
8766    _attribute_map = {
8767        'computer_name_prefix': {'key': 'computerNamePrefix', 'type': 'str'},
8768        'admin_username': {'key': 'adminUsername', 'type': 'str'},
8769        'admin_password': {'key': 'adminPassword', 'type': 'str'},
8770        'custom_data': {'key': 'customData', 'type': 'str'},
8771        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
8772        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
8773        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
8774    }
8775
8776    def __init__(
8777        self,
8778        *,
8779        computer_name_prefix: Optional[str] = None,
8780        admin_username: Optional[str] = None,
8781        admin_password: Optional[str] = None,
8782        custom_data: Optional[str] = None,
8783        windows_configuration: Optional["WindowsConfiguration"] = None,
8784        linux_configuration: Optional["LinuxConfiguration"] = None,
8785        secrets: Optional[List["VaultSecretGroup"]] = None,
8786        **kwargs
8787    ):
8788        super(VirtualMachineScaleSetOSProfile, self).__init__(**kwargs)
8789        self.computer_name_prefix = computer_name_prefix
8790        self.admin_username = admin_username
8791        self.admin_password = admin_password
8792        self.custom_data = custom_data
8793        self.windows_configuration = windows_configuration
8794        self.linux_configuration = linux_configuration
8795        self.secrets = secrets
8796
8797
8798class VirtualMachineScaleSetPublicIPAddressConfiguration(msrest.serialization.Model):
8799    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
8800
8801    All required parameters must be populated in order to send to Azure.
8802
8803    :param name: Required. The publicIP address configuration name.
8804    :type name: str
8805    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
8806    :type idle_timeout_in_minutes: int
8807    :param dns_settings: The dns settings to be applied on the publicIP addresses .
8808    :type dns_settings:
8809     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
8810    :param ip_tags: The list of IP tags associated with the public IP address.
8811    :type ip_tags: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIpTag]
8812    :param public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses.
8813    :type public_ip_prefix: ~azure.mgmt.compute.v2019_07_01.models.SubResource
8814    :param public_ip_address_version: Available from Api-Version 2019-07-01 onwards, it represents
8815     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values
8816     are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
8817    :type public_ip_address_version: str or ~azure.mgmt.compute.v2019_07_01.models.IPVersion
8818    """
8819
8820    _validation = {
8821        'name': {'required': True},
8822    }
8823
8824    _attribute_map = {
8825        'name': {'key': 'name', 'type': 'str'},
8826        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
8827        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
8828        'ip_tags': {'key': 'properties.ipTags', 'type': '[VirtualMachineScaleSetIpTag]'},
8829        'public_ip_prefix': {'key': 'properties.publicIPPrefix', 'type': 'SubResource'},
8830        'public_ip_address_version': {'key': 'properties.publicIPAddressVersion', 'type': 'str'},
8831    }
8832
8833    def __init__(
8834        self,
8835        *,
8836        name: str,
8837        idle_timeout_in_minutes: Optional[int] = None,
8838        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
8839        ip_tags: Optional[List["VirtualMachineScaleSetIpTag"]] = None,
8840        public_ip_prefix: Optional["SubResource"] = None,
8841        public_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
8842        **kwargs
8843    ):
8844        super(VirtualMachineScaleSetPublicIPAddressConfiguration, self).__init__(**kwargs)
8845        self.name = name
8846        self.idle_timeout_in_minutes = idle_timeout_in_minutes
8847        self.dns_settings = dns_settings
8848        self.ip_tags = ip_tags
8849        self.public_ip_prefix = public_ip_prefix
8850        self.public_ip_address_version = public_ip_address_version
8851
8852
8853class VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings(msrest.serialization.Model):
8854    """Describes a virtual machines scale sets network configuration's DNS settings.
8855
8856    All required parameters must be populated in order to send to Azure.
8857
8858    :param domain_name_label: Required. The Domain name label.The concatenation of the domain name
8859     label and vm index will be the domain name labels of the PublicIPAddress resources that will be
8860     created.
8861    :type domain_name_label: str
8862    """
8863
8864    _validation = {
8865        'domain_name_label': {'required': True},
8866    }
8867
8868    _attribute_map = {
8869        'domain_name_label': {'key': 'domainNameLabel', 'type': 'str'},
8870    }
8871
8872    def __init__(
8873        self,
8874        *,
8875        domain_name_label: str,
8876        **kwargs
8877    ):
8878        super(VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings, self).__init__(**kwargs)
8879        self.domain_name_label = domain_name_label
8880
8881
8882class VirtualMachineScaleSetVMReimageParameters(VirtualMachineReimageParameters):
8883    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
8884
8885    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
8886     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
8887    :type temp_disk: bool
8888    """
8889
8890    _attribute_map = {
8891        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
8892    }
8893
8894    def __init__(
8895        self,
8896        *,
8897        temp_disk: Optional[bool] = None,
8898        **kwargs
8899    ):
8900        super(VirtualMachineScaleSetVMReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
8901
8902
8903class VirtualMachineScaleSetReimageParameters(VirtualMachineScaleSetVMReimageParameters):
8904    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
8905
8906    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
8907     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
8908    :type temp_disk: bool
8909    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
8910     scale set instance ids will result in the operation being performed on all virtual machines in
8911     the virtual machine scale set.
8912    :type instance_ids: list[str]
8913    """
8914
8915    _attribute_map = {
8916        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
8917        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
8918    }
8919
8920    def __init__(
8921        self,
8922        *,
8923        temp_disk: Optional[bool] = None,
8924        instance_ids: Optional[List[str]] = None,
8925        **kwargs
8926    ):
8927        super(VirtualMachineScaleSetReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
8928        self.instance_ids = instance_ids
8929
8930
8931class VirtualMachineScaleSetSku(msrest.serialization.Model):
8932    """Describes an available virtual machine scale set sku.
8933
8934    Variables are only populated by the server, and will be ignored when sending a request.
8935
8936    :ivar resource_type: The type of resource the sku applies to.
8937    :vartype resource_type: str
8938    :ivar sku: The Sku.
8939    :vartype sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
8940    :ivar capacity: Specifies the number of virtual machines in the scale set.
8941    :vartype capacity: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetSkuCapacity
8942    """
8943
8944    _validation = {
8945        'resource_type': {'readonly': True},
8946        'sku': {'readonly': True},
8947        'capacity': {'readonly': True},
8948    }
8949
8950    _attribute_map = {
8951        'resource_type': {'key': 'resourceType', 'type': 'str'},
8952        'sku': {'key': 'sku', 'type': 'Sku'},
8953        'capacity': {'key': 'capacity', 'type': 'VirtualMachineScaleSetSkuCapacity'},
8954    }
8955
8956    def __init__(
8957        self,
8958        **kwargs
8959    ):
8960        super(VirtualMachineScaleSetSku, self).__init__(**kwargs)
8961        self.resource_type = None
8962        self.sku = None
8963        self.capacity = None
8964
8965
8966class VirtualMachineScaleSetSkuCapacity(msrest.serialization.Model):
8967    """Describes scaling information of a sku.
8968
8969    Variables are only populated by the server, and will be ignored when sending a request.
8970
8971    :ivar minimum: The minimum capacity.
8972    :vartype minimum: long
8973    :ivar maximum: The maximum capacity that can be set.
8974    :vartype maximum: long
8975    :ivar default_capacity: The default capacity.
8976    :vartype default_capacity: long
8977    :ivar scale_type: The scale type applicable to the sku. Possible values include: "Automatic",
8978     "None".
8979    :vartype scale_type: str or
8980     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetSkuScaleType
8981    """
8982
8983    _validation = {
8984        'minimum': {'readonly': True},
8985        'maximum': {'readonly': True},
8986        'default_capacity': {'readonly': True},
8987        'scale_type': {'readonly': True},
8988    }
8989
8990    _attribute_map = {
8991        'minimum': {'key': 'minimum', 'type': 'long'},
8992        'maximum': {'key': 'maximum', 'type': 'long'},
8993        'default_capacity': {'key': 'defaultCapacity', 'type': 'long'},
8994        'scale_type': {'key': 'scaleType', 'type': 'str'},
8995    }
8996
8997    def __init__(
8998        self,
8999        **kwargs
9000    ):
9001        super(VirtualMachineScaleSetSkuCapacity, self).__init__(**kwargs)
9002        self.minimum = None
9003        self.maximum = None
9004        self.default_capacity = None
9005        self.scale_type = None
9006
9007
9008class VirtualMachineScaleSetStorageProfile(msrest.serialization.Model):
9009    """Describes a virtual machine scale set storage profile.
9010
9011    :param image_reference: Specifies information about the image to use. You can specify
9012     information about platform images, marketplace images, or virtual machine images. This element
9013     is required when you want to use a platform image, marketplace image, or virtual machine image,
9014     but is not used in other creation operations.
9015    :type image_reference: ~azure.mgmt.compute.v2019_07_01.models.ImageReference
9016    :param os_disk: Specifies information about the operating system disk used by the virtual
9017     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
9018     `About disks and VHDs for Azure virtual machines
9019     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
9020    :type os_disk: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetOSDisk
9021    :param data_disks: Specifies the parameters that are used to add data disks to the virtual
9022     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
9023     `About disks and VHDs for Azure virtual machines
9024     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
9025    :type data_disks: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetDataDisk]
9026    """
9027
9028    _attribute_map = {
9029        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
9030        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetOSDisk'},
9031        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
9032    }
9033
9034    def __init__(
9035        self,
9036        *,
9037        image_reference: Optional["ImageReference"] = None,
9038        os_disk: Optional["VirtualMachineScaleSetOSDisk"] = None,
9039        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
9040        **kwargs
9041    ):
9042        super(VirtualMachineScaleSetStorageProfile, self).__init__(**kwargs)
9043        self.image_reference = image_reference
9044        self.os_disk = os_disk
9045        self.data_disks = data_disks
9046
9047
9048class VirtualMachineScaleSetUpdate(UpdateResource):
9049    """Describes a Virtual Machine Scale Set.
9050
9051    :param tags: A set of tags. Resource tags.
9052    :type tags: dict[str, str]
9053    :param sku: The virtual machine scale set sku.
9054    :type sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
9055    :param plan: The purchase plan when deploying a virtual machine scale set from VM Marketplace
9056     images.
9057    :type plan: ~azure.mgmt.compute.v2019_07_01.models.Plan
9058    :param identity: The identity of the virtual machine scale set, if configured.
9059    :type identity: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetIdentity
9060    :param upgrade_policy: The upgrade policy.
9061    :type upgrade_policy: ~azure.mgmt.compute.v2019_07_01.models.UpgradePolicy
9062    :param automatic_repairs_policy: Policy for automatic repairs.
9063    :type automatic_repairs_policy: ~azure.mgmt.compute.v2019_07_01.models.AutomaticRepairsPolicy
9064    :param virtual_machine_profile: The virtual machine profile.
9065    :type virtual_machine_profile:
9066     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateVMProfile
9067    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
9068     overprovisioned.
9069    :type overprovision: bool
9070    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
9071     are launched only on the requested number of VMs which are finally kept. This property will
9072     hence ensure that the extensions do not run on the extra overprovisioned VMs.
9073    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
9074    :param single_placement_group: When true this limits the scale set to a single placement group,
9075     of max size 100 virtual machines.NOTE: If singlePlacementGroup is true, it may be modified to
9076     false. However, if singlePlacementGroup is false, it may not be modified to true.
9077    :type single_placement_group: bool
9078    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
9079     Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines
9080     have the capability to support attaching managed data disks with UltraSSD_LRS storage account
9081     type.
9082    :type additional_capabilities: ~azure.mgmt.compute.v2019_07_01.models.AdditionalCapabilities
9083    :param scale_in_policy: Specifies the scale-in policy that decides which virtual machines are
9084     chosen for removal when a Virtual Machine Scale Set is scaled-in.
9085    :type scale_in_policy: ~azure.mgmt.compute.v2019_07_01.models.ScaleInPolicy
9086    :param proximity_placement_group: Specifies information about the proximity placement group
9087     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
9088     api-version: 2018-04-01.
9089    :type proximity_placement_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
9090    """
9091
9092    _attribute_map = {
9093        'tags': {'key': 'tags', 'type': '{str}'},
9094        'sku': {'key': 'sku', 'type': 'Sku'},
9095        'plan': {'key': 'plan', 'type': 'Plan'},
9096        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
9097        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
9098        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
9099        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetUpdateVMProfile'},
9100        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
9101        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
9102        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
9103        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
9104        'scale_in_policy': {'key': 'properties.scaleInPolicy', 'type': 'ScaleInPolicy'},
9105        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
9106    }
9107
9108    def __init__(
9109        self,
9110        *,
9111        tags: Optional[Dict[str, str]] = None,
9112        sku: Optional["Sku"] = None,
9113        plan: Optional["Plan"] = None,
9114        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
9115        upgrade_policy: Optional["UpgradePolicy"] = None,
9116        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
9117        virtual_machine_profile: Optional["VirtualMachineScaleSetUpdateVMProfile"] = None,
9118        overprovision: Optional[bool] = None,
9119        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
9120        single_placement_group: Optional[bool] = None,
9121        additional_capabilities: Optional["AdditionalCapabilities"] = None,
9122        scale_in_policy: Optional["ScaleInPolicy"] = None,
9123        proximity_placement_group: Optional["SubResource"] = None,
9124        **kwargs
9125    ):
9126        super(VirtualMachineScaleSetUpdate, self).__init__(tags=tags, **kwargs)
9127        self.sku = sku
9128        self.plan = plan
9129        self.identity = identity
9130        self.upgrade_policy = upgrade_policy
9131        self.automatic_repairs_policy = automatic_repairs_policy
9132        self.virtual_machine_profile = virtual_machine_profile
9133        self.overprovision = overprovision
9134        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
9135        self.single_placement_group = single_placement_group
9136        self.additional_capabilities = additional_capabilities
9137        self.scale_in_policy = scale_in_policy
9138        self.proximity_placement_group = proximity_placement_group
9139
9140
9141class VirtualMachineScaleSetUpdateIPConfiguration(SubResource):
9142    """Describes a virtual machine scale set network profile's IP configuration.
9143
9144    :param id: Resource Id.
9145    :type id: str
9146    :param name: The IP configuration name.
9147    :type name: str
9148    :param subnet: The subnet.
9149    :type subnet: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference
9150    :param primary: Specifies the primary IP Configuration in case the network interface has more
9151     than one IP Configuration.
9152    :type primary: bool
9153    :param public_ip_address_configuration: The publicIPAddressConfiguration.
9154    :type public_ip_address_configuration:
9155     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration
9156    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
9157     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
9158     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
9159    :type private_ip_address_version: str or ~azure.mgmt.compute.v2019_07_01.models.IPVersion
9160    :param application_gateway_backend_address_pools: The application gateway backend address
9161     pools.
9162    :type application_gateway_backend_address_pools:
9163     list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
9164    :param application_security_groups: Specifies an array of references to application security
9165     group.
9166    :type application_security_groups: list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
9167    :param load_balancer_backend_address_pools: The load balancer backend address pools.
9168    :type load_balancer_backend_address_pools:
9169     list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
9170    :param load_balancer_inbound_nat_pools: The load balancer inbound nat pools.
9171    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2019_07_01.models.SubResource]
9172    """
9173
9174    _attribute_map = {
9175        'id': {'key': 'id', 'type': 'str'},
9176        'name': {'key': 'name', 'type': 'str'},
9177        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
9178        'primary': {'key': 'properties.primary', 'type': 'bool'},
9179        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetUpdatePublicIPAddressConfiguration'},
9180        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
9181        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
9182        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
9183        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
9184        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
9185    }
9186
9187    def __init__(
9188        self,
9189        *,
9190        id: Optional[str] = None,
9191        name: Optional[str] = None,
9192        subnet: Optional["ApiEntityReference"] = None,
9193        primary: Optional[bool] = None,
9194        public_ip_address_configuration: Optional["VirtualMachineScaleSetUpdatePublicIPAddressConfiguration"] = None,
9195        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
9196        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
9197        application_security_groups: Optional[List["SubResource"]] = None,
9198        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
9199        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
9200        **kwargs
9201    ):
9202        super(VirtualMachineScaleSetUpdateIPConfiguration, self).__init__(id=id, **kwargs)
9203        self.name = name
9204        self.subnet = subnet
9205        self.primary = primary
9206        self.public_ip_address_configuration = public_ip_address_configuration
9207        self.private_ip_address_version = private_ip_address_version
9208        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
9209        self.application_security_groups = application_security_groups
9210        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
9211        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
9212
9213
9214class VirtualMachineScaleSetUpdateNetworkConfiguration(SubResource):
9215    """Describes a virtual machine scale set network profile's network configurations.
9216
9217    :param id: Resource Id.
9218    :type id: str
9219    :param name: The network configuration name.
9220    :type name: str
9221    :param primary: Whether this is a primary NIC on a virtual machine.
9222    :type primary: bool
9223    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
9224     networking-enabled.
9225    :type enable_accelerated_networking: bool
9226    :param network_security_group: The network security group.
9227    :type network_security_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
9228    :param dns_settings: The dns settings to be applied on the network interfaces.
9229    :type dns_settings:
9230     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
9231    :param ip_configurations: The virtual machine scale set IP Configuration.
9232    :type ip_configurations:
9233     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateIPConfiguration]
9234    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
9235    :type enable_ip_forwarding: bool
9236    """
9237
9238    _attribute_map = {
9239        'id': {'key': 'id', 'type': 'str'},
9240        'name': {'key': 'name', 'type': 'str'},
9241        'primary': {'key': 'properties.primary', 'type': 'bool'},
9242        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
9243        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
9244        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
9245        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetUpdateIPConfiguration]'},
9246        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
9247    }
9248
9249    def __init__(
9250        self,
9251        *,
9252        id: Optional[str] = None,
9253        name: Optional[str] = None,
9254        primary: Optional[bool] = None,
9255        enable_accelerated_networking: Optional[bool] = None,
9256        network_security_group: Optional["SubResource"] = None,
9257        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
9258        ip_configurations: Optional[List["VirtualMachineScaleSetUpdateIPConfiguration"]] = None,
9259        enable_ip_forwarding: Optional[bool] = None,
9260        **kwargs
9261    ):
9262        super(VirtualMachineScaleSetUpdateNetworkConfiguration, self).__init__(id=id, **kwargs)
9263        self.name = name
9264        self.primary = primary
9265        self.enable_accelerated_networking = enable_accelerated_networking
9266        self.network_security_group = network_security_group
9267        self.dns_settings = dns_settings
9268        self.ip_configurations = ip_configurations
9269        self.enable_ip_forwarding = enable_ip_forwarding
9270
9271
9272class VirtualMachineScaleSetUpdateNetworkProfile(msrest.serialization.Model):
9273    """Describes a virtual machine scale set network profile.
9274
9275    :param health_probe: A reference to a load balancer probe used to determine the health of an
9276     instance in the virtual machine scale set. The reference will be in the form:
9277     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
9278    :type health_probe: ~azure.mgmt.compute.v2019_07_01.models.ApiEntityReference
9279    :param network_interface_configurations: The list of network configurations.
9280    :type network_interface_configurations:
9281     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration]
9282    """
9283
9284    _attribute_map = {
9285        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
9286        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetUpdateNetworkConfiguration]'},
9287    }
9288
9289    def __init__(
9290        self,
9291        *,
9292        health_probe: Optional["ApiEntityReference"] = None,
9293        network_interface_configurations: Optional[List["VirtualMachineScaleSetUpdateNetworkConfiguration"]] = None,
9294        **kwargs
9295    ):
9296        super(VirtualMachineScaleSetUpdateNetworkProfile, self).__init__(**kwargs)
9297        self.health_probe = health_probe
9298        self.network_interface_configurations = network_interface_configurations
9299
9300
9301class VirtualMachineScaleSetUpdateOSDisk(msrest.serialization.Model):
9302    """Describes virtual machine scale set operating system disk Update Object. This should be used for Updating VMSS OS Disk.
9303
9304    :param caching: The caching type. Possible values include: "None", "ReadOnly", "ReadWrite".
9305    :type caching: str or ~azure.mgmt.compute.v2019_07_01.models.CachingTypes
9306    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
9307     disabled on the disk.
9308    :type write_accelerator_enabled: bool
9309    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
9310     can be used to overwrite the size of the disk in a virtual machine image.
9311     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
9312    :type disk_size_gb: int
9313    :param image: The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before
9314     using it to attach to the Virtual Machine. If SourceImage is provided, the destination
9315     VirtualHardDisk should not exist.
9316    :type image: ~azure.mgmt.compute.v2019_07_01.models.VirtualHardDisk
9317    :param vhd_containers: The list of virtual hard disk container uris.
9318    :type vhd_containers: list[str]
9319    :param managed_disk: The managed disk parameters.
9320    :type managed_disk:
9321     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetManagedDiskParameters
9322    """
9323
9324    _attribute_map = {
9325        'caching': {'key': 'caching', 'type': 'str'},
9326        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
9327        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
9328        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
9329        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
9330        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
9331    }
9332
9333    def __init__(
9334        self,
9335        *,
9336        caching: Optional[Union[str, "CachingTypes"]] = None,
9337        write_accelerator_enabled: Optional[bool] = None,
9338        disk_size_gb: Optional[int] = None,
9339        image: Optional["VirtualHardDisk"] = None,
9340        vhd_containers: Optional[List[str]] = None,
9341        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
9342        **kwargs
9343    ):
9344        super(VirtualMachineScaleSetUpdateOSDisk, self).__init__(**kwargs)
9345        self.caching = caching
9346        self.write_accelerator_enabled = write_accelerator_enabled
9347        self.disk_size_gb = disk_size_gb
9348        self.image = image
9349        self.vhd_containers = vhd_containers
9350        self.managed_disk = managed_disk
9351
9352
9353class VirtualMachineScaleSetUpdateOSProfile(msrest.serialization.Model):
9354    """Describes a virtual machine scale set OS profile.
9355
9356    :param custom_data: A base-64 encoded string of custom data.
9357    :type custom_data: str
9358    :param windows_configuration: The Windows Configuration of the OS profile.
9359    :type windows_configuration: ~azure.mgmt.compute.v2019_07_01.models.WindowsConfiguration
9360    :param linux_configuration: The Linux Configuration of the OS profile.
9361    :type linux_configuration: ~azure.mgmt.compute.v2019_07_01.models.LinuxConfiguration
9362    :param secrets: The List of certificates for addition to the VM.
9363    :type secrets: list[~azure.mgmt.compute.v2019_07_01.models.VaultSecretGroup]
9364    """
9365
9366    _attribute_map = {
9367        'custom_data': {'key': 'customData', 'type': 'str'},
9368        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
9369        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
9370        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
9371    }
9372
9373    def __init__(
9374        self,
9375        *,
9376        custom_data: Optional[str] = None,
9377        windows_configuration: Optional["WindowsConfiguration"] = None,
9378        linux_configuration: Optional["LinuxConfiguration"] = None,
9379        secrets: Optional[List["VaultSecretGroup"]] = None,
9380        **kwargs
9381    ):
9382        super(VirtualMachineScaleSetUpdateOSProfile, self).__init__(**kwargs)
9383        self.custom_data = custom_data
9384        self.windows_configuration = windows_configuration
9385        self.linux_configuration = linux_configuration
9386        self.secrets = secrets
9387
9388
9389class VirtualMachineScaleSetUpdatePublicIPAddressConfiguration(msrest.serialization.Model):
9390    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
9391
9392    :param name: The publicIP address configuration name.
9393    :type name: str
9394    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
9395    :type idle_timeout_in_minutes: int
9396    :param dns_settings: The dns settings to be applied on the publicIP addresses .
9397    :type dns_settings:
9398     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
9399    """
9400
9401    _attribute_map = {
9402        'name': {'key': 'name', 'type': 'str'},
9403        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
9404        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
9405    }
9406
9407    def __init__(
9408        self,
9409        *,
9410        name: Optional[str] = None,
9411        idle_timeout_in_minutes: Optional[int] = None,
9412        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
9413        **kwargs
9414    ):
9415        super(VirtualMachineScaleSetUpdatePublicIPAddressConfiguration, self).__init__(**kwargs)
9416        self.name = name
9417        self.idle_timeout_in_minutes = idle_timeout_in_minutes
9418        self.dns_settings = dns_settings
9419
9420
9421class VirtualMachineScaleSetUpdateStorageProfile(msrest.serialization.Model):
9422    """Describes a virtual machine scale set storage profile.
9423
9424    :param image_reference: The image reference.
9425    :type image_reference: ~azure.mgmt.compute.v2019_07_01.models.ImageReference
9426    :param os_disk: The OS disk.
9427    :type os_disk: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateOSDisk
9428    :param data_disks: The data disks.
9429    :type data_disks: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetDataDisk]
9430    """
9431
9432    _attribute_map = {
9433        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
9434        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetUpdateOSDisk'},
9435        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
9436    }
9437
9438    def __init__(
9439        self,
9440        *,
9441        image_reference: Optional["ImageReference"] = None,
9442        os_disk: Optional["VirtualMachineScaleSetUpdateOSDisk"] = None,
9443        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
9444        **kwargs
9445    ):
9446        super(VirtualMachineScaleSetUpdateStorageProfile, self).__init__(**kwargs)
9447        self.image_reference = image_reference
9448        self.os_disk = os_disk
9449        self.data_disks = data_disks
9450
9451
9452class VirtualMachineScaleSetUpdateVMProfile(msrest.serialization.Model):
9453    """Describes a virtual machine scale set virtual machine profile.
9454
9455    :param os_profile: The virtual machine scale set OS profile.
9456    :type os_profile: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateOSProfile
9457    :param storage_profile: The virtual machine scale set storage profile.
9458    :type storage_profile:
9459     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateStorageProfile
9460    :param network_profile: The virtual machine scale set network profile.
9461    :type network_profile:
9462     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetUpdateNetworkProfile
9463    :param diagnostics_profile: The virtual machine scale set diagnostics profile.
9464    :type diagnostics_profile: ~azure.mgmt.compute.v2019_07_01.models.DiagnosticsProfile
9465    :param extension_profile: The virtual machine scale set extension profile.
9466    :type extension_profile:
9467     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetExtensionProfile
9468    :param license_type: The license type, which is for bring your own license scenario.
9469    :type license_type: str
9470    :param billing_profile: Specifies the billing related details of a Azure Spot VMSS.
9471     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
9472    :type billing_profile: ~azure.mgmt.compute.v2019_07_01.models.BillingProfile
9473    :param scheduled_events_profile: Specifies Scheduled Event related configurations.
9474    :type scheduled_events_profile: ~azure.mgmt.compute.v2019_07_01.models.ScheduledEventsProfile
9475    """
9476
9477    _attribute_map = {
9478        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetUpdateOSProfile'},
9479        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetUpdateStorageProfile'},
9480        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetUpdateNetworkProfile'},
9481        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
9482        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
9483        'license_type': {'key': 'licenseType', 'type': 'str'},
9484        'billing_profile': {'key': 'billingProfile', 'type': 'BillingProfile'},
9485        'scheduled_events_profile': {'key': 'scheduledEventsProfile', 'type': 'ScheduledEventsProfile'},
9486    }
9487
9488    def __init__(
9489        self,
9490        *,
9491        os_profile: Optional["VirtualMachineScaleSetUpdateOSProfile"] = None,
9492        storage_profile: Optional["VirtualMachineScaleSetUpdateStorageProfile"] = None,
9493        network_profile: Optional["VirtualMachineScaleSetUpdateNetworkProfile"] = None,
9494        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
9495        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
9496        license_type: Optional[str] = None,
9497        billing_profile: Optional["BillingProfile"] = None,
9498        scheduled_events_profile: Optional["ScheduledEventsProfile"] = None,
9499        **kwargs
9500    ):
9501        super(VirtualMachineScaleSetUpdateVMProfile, self).__init__(**kwargs)
9502        self.os_profile = os_profile
9503        self.storage_profile = storage_profile
9504        self.network_profile = network_profile
9505        self.diagnostics_profile = diagnostics_profile
9506        self.extension_profile = extension_profile
9507        self.license_type = license_type
9508        self.billing_profile = billing_profile
9509        self.scheduled_events_profile = scheduled_events_profile
9510
9511
9512class VirtualMachineScaleSetVM(Resource):
9513    """Describes a virtual machine scale set virtual machine.
9514
9515    Variables are only populated by the server, and will be ignored when sending a request.
9516
9517    All required parameters must be populated in order to send to Azure.
9518
9519    :ivar id: Resource Id.
9520    :vartype id: str
9521    :ivar name: Resource name.
9522    :vartype name: str
9523    :ivar type: Resource type.
9524    :vartype type: str
9525    :param location: Required. Resource location.
9526    :type location: str
9527    :param tags: A set of tags. Resource tags.
9528    :type tags: dict[str, str]
9529    :ivar instance_id: The virtual machine instance ID.
9530    :vartype instance_id: str
9531    :ivar sku: The virtual machine SKU.
9532    :vartype sku: ~azure.mgmt.compute.v2019_07_01.models.Sku
9533    :param plan: Specifies information about the marketplace image used to create the virtual
9534     machine. This element is only used for marketplace images. Before you can use a marketplace
9535     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
9536     the marketplace image that you want to use and then click **Want to deploy programmatically,
9537     Get Started ->**. Enter any required information and then click **Save**.
9538    :type plan: ~azure.mgmt.compute.v2019_07_01.models.Plan
9539    :ivar resources: The virtual machine child extension resources.
9540    :vartype resources: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtension]
9541    :ivar zones: The virtual machine zones.
9542    :vartype zones: list[str]
9543    :ivar latest_model_applied: Specifies whether the latest model has been applied to the virtual
9544     machine.
9545    :vartype latest_model_applied: bool
9546    :ivar vm_id: Azure VM unique ID.
9547    :vartype vm_id: str
9548    :ivar instance_view: The virtual machine instance view.
9549    :vartype instance_view:
9550     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVMInstanceView
9551    :param hardware_profile: Specifies the hardware settings for the virtual machine.
9552    :type hardware_profile: ~azure.mgmt.compute.v2019_07_01.models.HardwareProfile
9553    :param storage_profile: Specifies the storage settings for the virtual machine disks.
9554    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.StorageProfile
9555    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
9556     virtual machine in the scale set. For instance: whether the virtual machine has the capability
9557     to support attaching managed data disks with UltraSSD_LRS storage account type.
9558    :type additional_capabilities: ~azure.mgmt.compute.v2019_07_01.models.AdditionalCapabilities
9559    :param os_profile: Specifies the operating system settings for the virtual machine.
9560    :type os_profile: ~azure.mgmt.compute.v2019_07_01.models.OSProfile
9561    :param network_profile: Specifies the network interfaces of the virtual machine.
9562    :type network_profile: ~azure.mgmt.compute.v2019_07_01.models.NetworkProfile
9563    :param network_profile_configuration: Specifies the network profile configuration of the
9564     virtual machine.
9565    :type network_profile_configuration:
9566     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration
9567    :param diagnostics_profile: Specifies the boot diagnostic settings state.
9568     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
9569    :type diagnostics_profile: ~azure.mgmt.compute.v2019_07_01.models.DiagnosticsProfile
9570    :param availability_set: Specifies information about the availability set that the virtual
9571     machine should be assigned to. Virtual machines specified in the same availability set are
9572     allocated to different nodes to maximize availability. For more information about availability
9573     sets, see `Manage the availability of virtual machines
9574     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
9575     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
9576     maintenance for virtual machines in Azure
9577     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9578     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
9579     time. An existing VM cannot be added to an availability set.
9580    :type availability_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource
9581    :ivar provisioning_state: The provisioning state, which only appears in the response.
9582    :vartype provisioning_state: str
9583    :param license_type: Specifies that the image or disk that is being used was licensed
9584     on-premises. This element is only used for images that contain the Windows Server operating
9585     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
9586     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
9587     a request for an update, the value must match the initial value. This value cannot be updated.
9588     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
9589     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9590     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
9591    :type license_type: str
9592    :ivar model_definition_applied: Specifies whether the model applied to the virtual machine is
9593     the model of the virtual machine scale set or the customized model for the virtual machine.
9594    :vartype model_definition_applied: str
9595    :param protection_policy: Specifies the protection policy of the virtual machine.
9596    :type protection_policy:
9597     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVMProtectionPolicy
9598    """
9599
9600    _validation = {
9601        'id': {'readonly': True},
9602        'name': {'readonly': True},
9603        'type': {'readonly': True},
9604        'location': {'required': True},
9605        'instance_id': {'readonly': True},
9606        'sku': {'readonly': True},
9607        'resources': {'readonly': True},
9608        'zones': {'readonly': True},
9609        'latest_model_applied': {'readonly': True},
9610        'vm_id': {'readonly': True},
9611        'instance_view': {'readonly': True},
9612        'provisioning_state': {'readonly': True},
9613        'model_definition_applied': {'readonly': True},
9614    }
9615
9616    _attribute_map = {
9617        'id': {'key': 'id', 'type': 'str'},
9618        'name': {'key': 'name', 'type': 'str'},
9619        'type': {'key': 'type', 'type': 'str'},
9620        'location': {'key': 'location', 'type': 'str'},
9621        'tags': {'key': 'tags', 'type': '{str}'},
9622        'instance_id': {'key': 'instanceId', 'type': 'str'},
9623        'sku': {'key': 'sku', 'type': 'Sku'},
9624        'plan': {'key': 'plan', 'type': 'Plan'},
9625        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
9626        'zones': {'key': 'zones', 'type': '[str]'},
9627        'latest_model_applied': {'key': 'properties.latestModelApplied', 'type': 'bool'},
9628        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
9629        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineScaleSetVMInstanceView'},
9630        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
9631        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
9632        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
9633        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
9634        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
9635        'network_profile_configuration': {'key': 'properties.networkProfileConfiguration', 'type': 'VirtualMachineScaleSetVMNetworkProfileConfiguration'},
9636        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
9637        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
9638        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
9639        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
9640        'model_definition_applied': {'key': 'properties.modelDefinitionApplied', 'type': 'str'},
9641        'protection_policy': {'key': 'properties.protectionPolicy', 'type': 'VirtualMachineScaleSetVMProtectionPolicy'},
9642    }
9643
9644    def __init__(
9645        self,
9646        *,
9647        location: str,
9648        tags: Optional[Dict[str, str]] = None,
9649        plan: Optional["Plan"] = None,
9650        hardware_profile: Optional["HardwareProfile"] = None,
9651        storage_profile: Optional["StorageProfile"] = None,
9652        additional_capabilities: Optional["AdditionalCapabilities"] = None,
9653        os_profile: Optional["OSProfile"] = None,
9654        network_profile: Optional["NetworkProfile"] = None,
9655        network_profile_configuration: Optional["VirtualMachineScaleSetVMNetworkProfileConfiguration"] = None,
9656        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
9657        availability_set: Optional["SubResource"] = None,
9658        license_type: Optional[str] = None,
9659        protection_policy: Optional["VirtualMachineScaleSetVMProtectionPolicy"] = None,
9660        **kwargs
9661    ):
9662        super(VirtualMachineScaleSetVM, self).__init__(location=location, tags=tags, **kwargs)
9663        self.instance_id = None
9664        self.sku = None
9665        self.plan = plan
9666        self.resources = None
9667        self.zones = None
9668        self.latest_model_applied = None
9669        self.vm_id = None
9670        self.instance_view = None
9671        self.hardware_profile = hardware_profile
9672        self.storage_profile = storage_profile
9673        self.additional_capabilities = additional_capabilities
9674        self.os_profile = os_profile
9675        self.network_profile = network_profile
9676        self.network_profile_configuration = network_profile_configuration
9677        self.diagnostics_profile = diagnostics_profile
9678        self.availability_set = availability_set
9679        self.provisioning_state = None
9680        self.license_type = license_type
9681        self.model_definition_applied = None
9682        self.protection_policy = protection_policy
9683
9684
9685class VirtualMachineScaleSetVMExtensionsSummary(msrest.serialization.Model):
9686    """Extensions summary for virtual machines of a virtual machine scale set.
9687
9688    Variables are only populated by the server, and will be ignored when sending a request.
9689
9690    :ivar name: The extension name.
9691    :vartype name: str
9692    :ivar statuses_summary: The extensions information.
9693    :vartype statuses_summary:
9694     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineStatusCodeCount]
9695    """
9696
9697    _validation = {
9698        'name': {'readonly': True},
9699        'statuses_summary': {'readonly': True},
9700    }
9701
9702    _attribute_map = {
9703        'name': {'key': 'name', 'type': 'str'},
9704        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
9705    }
9706
9707    def __init__(
9708        self,
9709        **kwargs
9710    ):
9711        super(VirtualMachineScaleSetVMExtensionsSummary, self).__init__(**kwargs)
9712        self.name = None
9713        self.statuses_summary = None
9714
9715
9716class VirtualMachineScaleSetVMInstanceIDs(msrest.serialization.Model):
9717    """Specifies a list of virtual machine instance IDs from the VM scale set.
9718
9719    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
9720     scale set instance ids will result in the operation being performed on all virtual machines in
9721     the virtual machine scale set.
9722    :type instance_ids: list[str]
9723    """
9724
9725    _attribute_map = {
9726        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
9727    }
9728
9729    def __init__(
9730        self,
9731        *,
9732        instance_ids: Optional[List[str]] = None,
9733        **kwargs
9734    ):
9735        super(VirtualMachineScaleSetVMInstanceIDs, self).__init__(**kwargs)
9736        self.instance_ids = instance_ids
9737
9738
9739class VirtualMachineScaleSetVMInstanceRequiredIDs(msrest.serialization.Model):
9740    """Specifies a list of virtual machine instance IDs from the VM scale set.
9741
9742    All required parameters must be populated in order to send to Azure.
9743
9744    :param instance_ids: Required. The virtual machine scale set instance ids.
9745    :type instance_ids: list[str]
9746    """
9747
9748    _validation = {
9749        'instance_ids': {'required': True},
9750    }
9751
9752    _attribute_map = {
9753        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
9754    }
9755
9756    def __init__(
9757        self,
9758        *,
9759        instance_ids: List[str],
9760        **kwargs
9761    ):
9762        super(VirtualMachineScaleSetVMInstanceRequiredIDs, self).__init__(**kwargs)
9763        self.instance_ids = instance_ids
9764
9765
9766class VirtualMachineScaleSetVMInstanceView(msrest.serialization.Model):
9767    """The instance view of a virtual machine scale set VM.
9768
9769    Variables are only populated by the server, and will be ignored when sending a request.
9770
9771    :param platform_update_domain: The Update Domain count.
9772    :type platform_update_domain: int
9773    :param platform_fault_domain: The Fault Domain count.
9774    :type platform_fault_domain: int
9775    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
9776    :type rdp_thumb_print: str
9777    :param vm_agent: The VM Agent running on the virtual machine.
9778    :type vm_agent: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineAgentInstanceView
9779    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
9780    :type maintenance_redeploy_status:
9781     ~azure.mgmt.compute.v2019_07_01.models.MaintenanceRedeployStatus
9782    :param disks: The disks information.
9783    :type disks: list[~azure.mgmt.compute.v2019_07_01.models.DiskInstanceView]
9784    :param extensions: The extensions information.
9785    :type extensions:
9786     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineExtensionInstanceView]
9787    :ivar vm_health: The health status for the VM.
9788    :vartype vm_health: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineHealthStatus
9789    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
9790     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
9791     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
9792     screenshot of the VM from the hypervisor.
9793    :type boot_diagnostics: ~azure.mgmt.compute.v2019_07_01.models.BootDiagnosticsInstanceView
9794    :param statuses: The resource status information.
9795    :type statuses: list[~azure.mgmt.compute.v2019_07_01.models.InstanceViewStatus]
9796    :param placement_group_id: The placement group in which the VM is running. If the VM is
9797     deallocated it will not have a placementGroupId.
9798    :type placement_group_id: str
9799    """
9800
9801    _validation = {
9802        'vm_health': {'readonly': True},
9803    }
9804
9805    _attribute_map = {
9806        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
9807        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
9808        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
9809        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
9810        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
9811        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
9812        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
9813        'vm_health': {'key': 'vmHealth', 'type': 'VirtualMachineHealthStatus'},
9814        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
9815        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
9816        'placement_group_id': {'key': 'placementGroupId', 'type': 'str'},
9817    }
9818
9819    def __init__(
9820        self,
9821        *,
9822        platform_update_domain: Optional[int] = None,
9823        platform_fault_domain: Optional[int] = None,
9824        rdp_thumb_print: Optional[str] = None,
9825        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
9826        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
9827        disks: Optional[List["DiskInstanceView"]] = None,
9828        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
9829        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
9830        statuses: Optional[List["InstanceViewStatus"]] = None,
9831        placement_group_id: Optional[str] = None,
9832        **kwargs
9833    ):
9834        super(VirtualMachineScaleSetVMInstanceView, self).__init__(**kwargs)
9835        self.platform_update_domain = platform_update_domain
9836        self.platform_fault_domain = platform_fault_domain
9837        self.rdp_thumb_print = rdp_thumb_print
9838        self.vm_agent = vm_agent
9839        self.maintenance_redeploy_status = maintenance_redeploy_status
9840        self.disks = disks
9841        self.extensions = extensions
9842        self.vm_health = None
9843        self.boot_diagnostics = boot_diagnostics
9844        self.statuses = statuses
9845        self.placement_group_id = placement_group_id
9846
9847
9848class VirtualMachineScaleSetVMListResult(msrest.serialization.Model):
9849    """The List Virtual Machine Scale Set VMs operation response.
9850
9851    All required parameters must be populated in order to send to Azure.
9852
9853    :param value: Required. The list of virtual machine scale sets VMs.
9854    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetVM]
9855    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set VMs. Call
9856     ListNext() with this to fetch the next page of VMSS VMs.
9857    :type next_link: str
9858    """
9859
9860    _validation = {
9861        'value': {'required': True},
9862    }
9863
9864    _attribute_map = {
9865        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetVM]'},
9866        'next_link': {'key': 'nextLink', 'type': 'str'},
9867    }
9868
9869    def __init__(
9870        self,
9871        *,
9872        value: List["VirtualMachineScaleSetVM"],
9873        next_link: Optional[str] = None,
9874        **kwargs
9875    ):
9876        super(VirtualMachineScaleSetVMListResult, self).__init__(**kwargs)
9877        self.value = value
9878        self.next_link = next_link
9879
9880
9881class VirtualMachineScaleSetVMNetworkProfileConfiguration(msrest.serialization.Model):
9882    """Describes a virtual machine scale set VM network profile.
9883
9884    :param network_interface_configurations: The list of network configurations.
9885    :type network_interface_configurations:
9886     list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetNetworkConfiguration]
9887    """
9888
9889    _attribute_map = {
9890        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
9891    }
9892
9893    def __init__(
9894        self,
9895        *,
9896        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
9897        **kwargs
9898    ):
9899        super(VirtualMachineScaleSetVMNetworkProfileConfiguration, self).__init__(**kwargs)
9900        self.network_interface_configurations = network_interface_configurations
9901
9902
9903class VirtualMachineScaleSetVMProfile(msrest.serialization.Model):
9904    """Describes a virtual machine scale set virtual machine profile.
9905
9906    :param os_profile: Specifies the operating system settings for the virtual machines in the
9907     scale set.
9908    :type os_profile: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetOSProfile
9909    :param storage_profile: Specifies the storage settings for the virtual machine disks.
9910    :type storage_profile:
9911     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetStorageProfile
9912    :param network_profile: Specifies properties of the network interfaces of the virtual machines
9913     in the scale set.
9914    :type network_profile:
9915     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetNetworkProfile
9916    :param diagnostics_profile: Specifies the boot diagnostic settings state.
9917     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
9918    :type diagnostics_profile: ~azure.mgmt.compute.v2019_07_01.models.DiagnosticsProfile
9919    :param extension_profile: Specifies a collection of settings for extensions installed on
9920     virtual machines in the scale set.
9921    :type extension_profile:
9922     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineScaleSetExtensionProfile
9923    :param license_type: Specifies that the image or disk that is being used was licensed
9924     on-premises. This element is only used for images that contain the Windows Server operating
9925     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
9926     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
9927     a request for an update, the value must match the initial value. This value cannot be updated.
9928     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
9929     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9930     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
9931    :type license_type: str
9932    :param priority: Specifies the priority for the virtual machines in the scale set.
9933     :code:`<br>`:code:`<br>`Minimum api-version: 2017-10-30-preview. Possible values include:
9934     "Regular", "Low", "Spot".
9935    :type priority: str or ~azure.mgmt.compute.v2019_07_01.models.VirtualMachinePriorityTypes
9936    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and
9937     Azure Spot scale set. :code:`<br>`:code:`<br>`For Azure Spot virtual machines, the only
9938     supported value is 'Deallocate' and the minimum api-version is 2019-03-01.
9939     :code:`<br>`:code:`<br>`For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported
9940     and the minimum api-version is 2017-10-30-preview. Possible values include: "Deallocate",
9941     "Delete".
9942    :type eviction_policy: str or
9943     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineEvictionPolicyTypes
9944    :param billing_profile: Specifies the billing related details of a Azure Spot VMSS.
9945     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
9946    :type billing_profile: ~azure.mgmt.compute.v2019_07_01.models.BillingProfile
9947    :param scheduled_events_profile: Specifies Scheduled Event related configurations.
9948    :type scheduled_events_profile: ~azure.mgmt.compute.v2019_07_01.models.ScheduledEventsProfile
9949    """
9950
9951    _attribute_map = {
9952        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetOSProfile'},
9953        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetStorageProfile'},
9954        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetNetworkProfile'},
9955        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
9956        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
9957        'license_type': {'key': 'licenseType', 'type': 'str'},
9958        'priority': {'key': 'priority', 'type': 'str'},
9959        'eviction_policy': {'key': 'evictionPolicy', 'type': 'str'},
9960        'billing_profile': {'key': 'billingProfile', 'type': 'BillingProfile'},
9961        'scheduled_events_profile': {'key': 'scheduledEventsProfile', 'type': 'ScheduledEventsProfile'},
9962    }
9963
9964    def __init__(
9965        self,
9966        *,
9967        os_profile: Optional["VirtualMachineScaleSetOSProfile"] = None,
9968        storage_profile: Optional["VirtualMachineScaleSetStorageProfile"] = None,
9969        network_profile: Optional["VirtualMachineScaleSetNetworkProfile"] = None,
9970        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
9971        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
9972        license_type: Optional[str] = None,
9973        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
9974        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
9975        billing_profile: Optional["BillingProfile"] = None,
9976        scheduled_events_profile: Optional["ScheduledEventsProfile"] = None,
9977        **kwargs
9978    ):
9979        super(VirtualMachineScaleSetVMProfile, self).__init__(**kwargs)
9980        self.os_profile = os_profile
9981        self.storage_profile = storage_profile
9982        self.network_profile = network_profile
9983        self.diagnostics_profile = diagnostics_profile
9984        self.extension_profile = extension_profile
9985        self.license_type = license_type
9986        self.priority = priority
9987        self.eviction_policy = eviction_policy
9988        self.billing_profile = billing_profile
9989        self.scheduled_events_profile = scheduled_events_profile
9990
9991
9992class VirtualMachineScaleSetVMProtectionPolicy(msrest.serialization.Model):
9993    """The protection policy of a virtual machine scale set VM.
9994
9995    :param protect_from_scale_in: Indicates that the virtual machine scale set VM shouldn't be
9996     considered for deletion during a scale-in operation.
9997    :type protect_from_scale_in: bool
9998    :param protect_from_scale_set_actions: Indicates that model updates or actions (including
9999     scale-in) initiated on the virtual machine scale set should not be applied to the virtual
10000     machine scale set VM.
10001    :type protect_from_scale_set_actions: bool
10002    """
10003
10004    _attribute_map = {
10005        'protect_from_scale_in': {'key': 'protectFromScaleIn', 'type': 'bool'},
10006        'protect_from_scale_set_actions': {'key': 'protectFromScaleSetActions', 'type': 'bool'},
10007    }
10008
10009    def __init__(
10010        self,
10011        *,
10012        protect_from_scale_in: Optional[bool] = None,
10013        protect_from_scale_set_actions: Optional[bool] = None,
10014        **kwargs
10015    ):
10016        super(VirtualMachineScaleSetVMProtectionPolicy, self).__init__(**kwargs)
10017        self.protect_from_scale_in = protect_from_scale_in
10018        self.protect_from_scale_set_actions = protect_from_scale_set_actions
10019
10020
10021class VirtualMachineSize(msrest.serialization.Model):
10022    """Describes the properties of a VM size.
10023
10024    :param name: The name of the virtual machine size.
10025    :type name: str
10026    :param number_of_cores: The number of cores supported by the virtual machine size.
10027    :type number_of_cores: int
10028    :param os_disk_size_in_mb: The OS disk size, in MB, allowed by the virtual machine size.
10029    :type os_disk_size_in_mb: int
10030    :param resource_disk_size_in_mb: The resource disk size, in MB, allowed by the virtual machine
10031     size.
10032    :type resource_disk_size_in_mb: int
10033    :param memory_in_mb: The amount of memory, in MB, supported by the virtual machine size.
10034    :type memory_in_mb: int
10035    :param max_data_disk_count: The maximum number of data disks that can be attached to the
10036     virtual machine size.
10037    :type max_data_disk_count: int
10038    """
10039
10040    _attribute_map = {
10041        'name': {'key': 'name', 'type': 'str'},
10042        'number_of_cores': {'key': 'numberOfCores', 'type': 'int'},
10043        'os_disk_size_in_mb': {'key': 'osDiskSizeInMB', 'type': 'int'},
10044        'resource_disk_size_in_mb': {'key': 'resourceDiskSizeInMB', 'type': 'int'},
10045        'memory_in_mb': {'key': 'memoryInMB', 'type': 'int'},
10046        'max_data_disk_count': {'key': 'maxDataDiskCount', 'type': 'int'},
10047    }
10048
10049    def __init__(
10050        self,
10051        *,
10052        name: Optional[str] = None,
10053        number_of_cores: Optional[int] = None,
10054        os_disk_size_in_mb: Optional[int] = None,
10055        resource_disk_size_in_mb: Optional[int] = None,
10056        memory_in_mb: Optional[int] = None,
10057        max_data_disk_count: Optional[int] = None,
10058        **kwargs
10059    ):
10060        super(VirtualMachineSize, self).__init__(**kwargs)
10061        self.name = name
10062        self.number_of_cores = number_of_cores
10063        self.os_disk_size_in_mb = os_disk_size_in_mb
10064        self.resource_disk_size_in_mb = resource_disk_size_in_mb
10065        self.memory_in_mb = memory_in_mb
10066        self.max_data_disk_count = max_data_disk_count
10067
10068
10069class VirtualMachineSizeListResult(msrest.serialization.Model):
10070    """The List Virtual Machine operation response.
10071
10072    :param value: The list of virtual machine sizes.
10073    :type value: list[~azure.mgmt.compute.v2019_07_01.models.VirtualMachineSize]
10074    """
10075
10076    _attribute_map = {
10077        'value': {'key': 'value', 'type': '[VirtualMachineSize]'},
10078    }
10079
10080    def __init__(
10081        self,
10082        *,
10083        value: Optional[List["VirtualMachineSize"]] = None,
10084        **kwargs
10085    ):
10086        super(VirtualMachineSizeListResult, self).__init__(**kwargs)
10087        self.value = value
10088
10089
10090class VirtualMachineStatusCodeCount(msrest.serialization.Model):
10091    """The status code and count of the virtual machine scale set instance view status summary.
10092
10093    Variables are only populated by the server, and will be ignored when sending a request.
10094
10095    :ivar code: The instance view status code.
10096    :vartype code: str
10097    :ivar count: The number of instances having a particular status code.
10098    :vartype count: int
10099    """
10100
10101    _validation = {
10102        'code': {'readonly': True},
10103        'count': {'readonly': True},
10104    }
10105
10106    _attribute_map = {
10107        'code': {'key': 'code', 'type': 'str'},
10108        'count': {'key': 'count', 'type': 'int'},
10109    }
10110
10111    def __init__(
10112        self,
10113        **kwargs
10114    ):
10115        super(VirtualMachineStatusCodeCount, self).__init__(**kwargs)
10116        self.code = None
10117        self.count = None
10118
10119
10120class VirtualMachineUpdate(UpdateResource):
10121    """Describes a Virtual Machine Update.
10122
10123    Variables are only populated by the server, and will be ignored when sending a request.
10124
10125    :param tags: A set of tags. Resource tags.
10126    :type tags: dict[str, str]
10127    :param plan: Specifies information about the marketplace image used to create the virtual
10128     machine. This element is only used for marketplace images. Before you can use a marketplace
10129     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
10130     the marketplace image that you want to use and then click **Want to deploy programmatically,
10131     Get Started ->**. Enter any required information and then click **Save**.
10132    :type plan: ~azure.mgmt.compute.v2019_07_01.models.Plan
10133    :param identity: The identity of the virtual machine, if configured.
10134    :type identity: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineIdentity
10135    :param zones: The virtual machine zones.
10136    :type zones: list[str]
10137    :param hardware_profile: Specifies the hardware settings for the virtual machine.
10138    :type hardware_profile: ~azure.mgmt.compute.v2019_07_01.models.HardwareProfile
10139    :param storage_profile: Specifies the storage settings for the virtual machine disks.
10140    :type storage_profile: ~azure.mgmt.compute.v2019_07_01.models.StorageProfile
10141    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
10142     virtual machine.
10143    :type additional_capabilities: ~azure.mgmt.compute.v2019_07_01.models.AdditionalCapabilities
10144    :param os_profile: Specifies the operating system settings used while creating the virtual
10145     machine. Some of the settings cannot be changed once VM is provisioned.
10146    :type os_profile: ~azure.mgmt.compute.v2019_07_01.models.OSProfile
10147    :param network_profile: Specifies the network interfaces of the virtual machine.
10148    :type network_profile: ~azure.mgmt.compute.v2019_07_01.models.NetworkProfile
10149    :param diagnostics_profile: Specifies the boot diagnostic settings state.
10150     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
10151    :type diagnostics_profile: ~azure.mgmt.compute.v2019_07_01.models.DiagnosticsProfile
10152    :param availability_set: Specifies information about the availability set that the virtual
10153     machine should be assigned to. Virtual machines specified in the same availability set are
10154     allocated to different nodes to maximize availability. For more information about availability
10155     sets, see `Manage the availability of virtual machines
10156     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
10157     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
10158     maintenance for virtual machines in Azure
10159     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
10160     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
10161     time. The availability set to which the VM is being added should be under the same resource
10162     group as the availability set resource. An existing VM cannot be added to an availability set.
10163     :code:`<br>`:code:`<br>`This property cannot exist along with a non-null
10164     properties.virtualMachineScaleSet reference.
10165    :type availability_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource
10166    :param virtual_machine_scale_set: Specifies information about the virtual machine scale set
10167     that the virtual machine should be assigned to. Virtual machines specified in the same virtual
10168     machine scale set are allocated to different nodes to maximize availability. Currently, a VM
10169     can only be added to virtual machine scale set at creation time. An existing VM cannot be added
10170     to a virtual machine scale set. :code:`<br>`:code:`<br>`This property cannot exist along with a
10171     non-null properties.availabilitySet reference. :code:`<br>`:code:`<br>`Minimum api‐version:
10172     2019‐03‐01.
10173    :type virtual_machine_scale_set: ~azure.mgmt.compute.v2019_07_01.models.SubResource
10174    :param proximity_placement_group: Specifies information about the proximity placement group
10175     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
10176     2018-04-01.
10177    :type proximity_placement_group: ~azure.mgmt.compute.v2019_07_01.models.SubResource
10178    :param priority: Specifies the priority for the virtual machine.
10179     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01. Possible values include: "Regular",
10180     "Low", "Spot".
10181    :type priority: str or ~azure.mgmt.compute.v2019_07_01.models.VirtualMachinePriorityTypes
10182    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and
10183     Azure Spot scale set. :code:`<br>`:code:`<br>`For Azure Spot virtual machines, the only
10184     supported value is 'Deallocate' and the minimum api-version is 2019-03-01.
10185     :code:`<br>`:code:`<br>`For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported
10186     and the minimum api-version is 2017-10-30-preview. Possible values include: "Deallocate",
10187     "Delete".
10188    :type eviction_policy: str or
10189     ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineEvictionPolicyTypes
10190    :param billing_profile: Specifies the billing related details of a Azure Spot virtual machine.
10191     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
10192    :type billing_profile: ~azure.mgmt.compute.v2019_07_01.models.BillingProfile
10193    :param host: Specifies information about the dedicated host that the virtual machine resides
10194     in. :code:`<br>`:code:`<br>`Minimum api-version: 2018-10-01.
10195    :type host: ~azure.mgmt.compute.v2019_07_01.models.SubResource
10196    :ivar provisioning_state: The provisioning state, which only appears in the response.
10197    :vartype provisioning_state: str
10198    :ivar instance_view: The virtual machine instance view.
10199    :vartype instance_view: ~azure.mgmt.compute.v2019_07_01.models.VirtualMachineInstanceView
10200    :param license_type: Specifies that the image or disk that is being used was licensed
10201     on-premises. This element is only used for images that contain the Windows Server operating
10202     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
10203     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
10204     a request for an update, the value must match the initial value. This value cannot be updated.
10205     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
10206     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
10207     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
10208    :type license_type: str
10209    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
10210     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
10211    :vartype vm_id: str
10212    """
10213
10214    _validation = {
10215        'provisioning_state': {'readonly': True},
10216        'instance_view': {'readonly': True},
10217        'vm_id': {'readonly': True},
10218    }
10219
10220    _attribute_map = {
10221        'tags': {'key': 'tags', 'type': '{str}'},
10222        'plan': {'key': 'plan', 'type': 'Plan'},
10223        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
10224        'zones': {'key': 'zones', 'type': '[str]'},
10225        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
10226        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
10227        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
10228        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
10229        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
10230        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
10231        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
10232        'virtual_machine_scale_set': {'key': 'properties.virtualMachineScaleSet', 'type': 'SubResource'},
10233        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
10234        'priority': {'key': 'properties.priority', 'type': 'str'},
10235        'eviction_policy': {'key': 'properties.evictionPolicy', 'type': 'str'},
10236        'billing_profile': {'key': 'properties.billingProfile', 'type': 'BillingProfile'},
10237        'host': {'key': 'properties.host', 'type': 'SubResource'},
10238        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
10239        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
10240        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
10241        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
10242    }
10243
10244    def __init__(
10245        self,
10246        *,
10247        tags: Optional[Dict[str, str]] = None,
10248        plan: Optional["Plan"] = None,
10249        identity: Optional["VirtualMachineIdentity"] = None,
10250        zones: Optional[List[str]] = None,
10251        hardware_profile: Optional["HardwareProfile"] = None,
10252        storage_profile: Optional["StorageProfile"] = None,
10253        additional_capabilities: Optional["AdditionalCapabilities"] = None,
10254        os_profile: Optional["OSProfile"] = None,
10255        network_profile: Optional["NetworkProfile"] = None,
10256        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
10257        availability_set: Optional["SubResource"] = None,
10258        virtual_machine_scale_set: Optional["SubResource"] = None,
10259        proximity_placement_group: Optional["SubResource"] = None,
10260        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
10261        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
10262        billing_profile: Optional["BillingProfile"] = None,
10263        host: Optional["SubResource"] = None,
10264        license_type: Optional[str] = None,
10265        **kwargs
10266    ):
10267        super(VirtualMachineUpdate, self).__init__(tags=tags, **kwargs)
10268        self.plan = plan
10269        self.identity = identity
10270        self.zones = zones
10271        self.hardware_profile = hardware_profile
10272        self.storage_profile = storage_profile
10273        self.additional_capabilities = additional_capabilities
10274        self.os_profile = os_profile
10275        self.network_profile = network_profile
10276        self.diagnostics_profile = diagnostics_profile
10277        self.availability_set = availability_set
10278        self.virtual_machine_scale_set = virtual_machine_scale_set
10279        self.proximity_placement_group = proximity_placement_group
10280        self.priority = priority
10281        self.eviction_policy = eviction_policy
10282        self.billing_profile = billing_profile
10283        self.host = host
10284        self.provisioning_state = None
10285        self.instance_view = None
10286        self.license_type = license_type
10287        self.vm_id = None
10288
10289
10290class VMScaleSetConvertToSinglePlacementGroupInput(msrest.serialization.Model):
10291    """VMScaleSetConvertToSinglePlacementGroupInput.
10292
10293    :param active_placement_group_id: Id of the placement group in which you want future virtual
10294     machine instances to be placed. To query placement group Id, please use Virtual Machine Scale
10295     Set VMs - Get API. If not provided, the platform will choose one with maximum number of virtual
10296     machine instances.
10297    :type active_placement_group_id: str
10298    """
10299
10300    _attribute_map = {
10301        'active_placement_group_id': {'key': 'activePlacementGroupId', 'type': 'str'},
10302    }
10303
10304    def __init__(
10305        self,
10306        *,
10307        active_placement_group_id: Optional[str] = None,
10308        **kwargs
10309    ):
10310        super(VMScaleSetConvertToSinglePlacementGroupInput, self).__init__(**kwargs)
10311        self.active_placement_group_id = active_placement_group_id
10312
10313
10314class WindowsConfiguration(msrest.serialization.Model):
10315    """Specifies Windows operating system settings on the virtual machine.
10316
10317    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
10318     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
10319     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
10320     the VM so that extensions can be added to the VM later.
10321    :type provision_vm_agent: bool
10322    :param enable_automatic_updates: Indicates whether Automatic Updates is enabled for the Windows
10323     virtual machine. Default value is true. :code:`<br>`:code:`<br>` For virtual machine scale
10324     sets, this property can be updated and updates will take effect on OS reprovisioning.
10325    :type enable_automatic_updates: bool
10326    :param time_zone: Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".
10327     :code:`<br>`:code:`<br>` Possible values can be `TimeZoneInfo.Id
10328     <https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.id?#System_TimeZoneInfo_Id>`_
10329     value from time zones returned by `TimeZoneInfo.GetSystemTimeZones
10330     <https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.getsystemtimezones>`_.
10331    :type time_zone: str
10332    :param additional_unattend_content: Specifies additional base-64 encoded XML formatted
10333     information that can be included in the Unattend.xml file, which is used by Windows Setup.
10334    :type additional_unattend_content:
10335     list[~azure.mgmt.compute.v2019_07_01.models.AdditionalUnattendContent]
10336    :param win_rm: Specifies the Windows Remote Management listeners. This enables remote Windows
10337     PowerShell.
10338    :type win_rm: ~azure.mgmt.compute.v2019_07_01.models.WinRMConfiguration
10339    """
10340
10341    _attribute_map = {
10342        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
10343        'enable_automatic_updates': {'key': 'enableAutomaticUpdates', 'type': 'bool'},
10344        'time_zone': {'key': 'timeZone', 'type': 'str'},
10345        'additional_unattend_content': {'key': 'additionalUnattendContent', 'type': '[AdditionalUnattendContent]'},
10346        'win_rm': {'key': 'winRM', 'type': 'WinRMConfiguration'},
10347    }
10348
10349    def __init__(
10350        self,
10351        *,
10352        provision_vm_agent: Optional[bool] = None,
10353        enable_automatic_updates: Optional[bool] = None,
10354        time_zone: Optional[str] = None,
10355        additional_unattend_content: Optional[List["AdditionalUnattendContent"]] = None,
10356        win_rm: Optional["WinRMConfiguration"] = None,
10357        **kwargs
10358    ):
10359        super(WindowsConfiguration, self).__init__(**kwargs)
10360        self.provision_vm_agent = provision_vm_agent
10361        self.enable_automatic_updates = enable_automatic_updates
10362        self.time_zone = time_zone
10363        self.additional_unattend_content = additional_unattend_content
10364        self.win_rm = win_rm
10365
10366
10367class WinRMConfiguration(msrest.serialization.Model):
10368    """Describes Windows Remote Management configuration of the VM.
10369
10370    :param listeners: The list of Windows Remote Management listeners.
10371    :type listeners: list[~azure.mgmt.compute.v2019_07_01.models.WinRMListener]
10372    """
10373
10374    _attribute_map = {
10375        'listeners': {'key': 'listeners', 'type': '[WinRMListener]'},
10376    }
10377
10378    def __init__(
10379        self,
10380        *,
10381        listeners: Optional[List["WinRMListener"]] = None,
10382        **kwargs
10383    ):
10384        super(WinRMConfiguration, self).__init__(**kwargs)
10385        self.listeners = listeners
10386
10387
10388class WinRMListener(msrest.serialization.Model):
10389    """Describes Protocol and thumbprint of Windows Remote Management listener.
10390
10391    :param protocol: Specifies the protocol of WinRM listener. :code:`<br>`:code:`<br>` Possible
10392     values are: :code:`<br>`\ **http** :code:`<br>`:code:`<br>` **https**. Possible values include:
10393     "Http", "Https".
10394    :type protocol: str or ~azure.mgmt.compute.v2019_07_01.models.ProtocolTypes
10395    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
10396     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
10397     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
10398     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
10399     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
10400     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
10401     "password":":code:`<pfx-file-password>`":code:`<br>`}.
10402    :type certificate_url: str
10403    """
10404
10405    _attribute_map = {
10406        'protocol': {'key': 'protocol', 'type': 'str'},
10407        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
10408    }
10409
10410    def __init__(
10411        self,
10412        *,
10413        protocol: Optional[Union[str, "ProtocolTypes"]] = None,
10414        certificate_url: Optional[str] = None,
10415        **kwargs
10416    ):
10417        super(WinRMListener, self).__init__(**kwargs)
10418        self.protocol = protocol
10419        self.certificate_url = certificate_url
10420