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.v2020_12_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.v2020_12_01.models.ApiErrorBase]
136    :param innererror: The Api inner error.
137    :type innererror: ~azure.mgmt.compute.v2020_12_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.v2020_12_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.v2020_12_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.v2020_12_01.models.SubResource
375    :ivar statuses: The resource status information.
376    :vartype statuses: list[~azure.mgmt.compute.v2020_12_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.v2020_12_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.v2020_12_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.v2020_12_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.v2020_12_01.models.SubResource
495    :ivar statuses: The resource status information.
496    :vartype statuses: list[~azure.mgmt.compute.v2020_12_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 AvailablePatchSummary(msrest.serialization.Model):
534    """Describes the properties of an virtual machine instance view for available patch summary.
535
536    Variables are only populated by the server, and will be ignored when sending a request.
537
538    :ivar status: The overall success or failure status of the operation. It remains "InProgress"
539     until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded",
540     or "CompletedWithWarnings.". Possible values include: "Unknown", "InProgress", "Failed",
541     "Succeeded", "CompletedWithWarnings".
542    :vartype status: str or ~azure.mgmt.compute.v2020_12_01.models.PatchOperationStatus
543    :ivar assessment_activity_id: The activity ID of the operation that produced this result. It is
544     used to correlate across CRP and extension logs.
545    :vartype assessment_activity_id: str
546    :ivar reboot_pending: The overall reboot status of the VM. It will be true when partially
547     installed patches require a reboot to complete installation but the reboot has not yet
548     occurred.
549    :vartype reboot_pending: bool
550    :ivar critical_and_security_patch_count: The number of critical or security patches that have
551     been detected as available and not yet installed.
552    :vartype critical_and_security_patch_count: int
553    :ivar other_patch_count: The number of all available patches excluding critical and security.
554    :vartype other_patch_count: int
555    :ivar start_time: The UTC timestamp when the operation began.
556    :vartype start_time: ~datetime.datetime
557    :ivar last_modified_time: The UTC timestamp when the operation began.
558    :vartype last_modified_time: ~datetime.datetime
559    :ivar error: The errors that were encountered during execution of the operation. The details
560     array contains the list of them.
561    :vartype error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
562    """
563
564    _validation = {
565        'status': {'readonly': True},
566        'assessment_activity_id': {'readonly': True},
567        'reboot_pending': {'readonly': True},
568        'critical_and_security_patch_count': {'readonly': True},
569        'other_patch_count': {'readonly': True},
570        'start_time': {'readonly': True},
571        'last_modified_time': {'readonly': True},
572        'error': {'readonly': True},
573    }
574
575    _attribute_map = {
576        'status': {'key': 'status', 'type': 'str'},
577        'assessment_activity_id': {'key': 'assessmentActivityId', 'type': 'str'},
578        'reboot_pending': {'key': 'rebootPending', 'type': 'bool'},
579        'critical_and_security_patch_count': {'key': 'criticalAndSecurityPatchCount', 'type': 'int'},
580        'other_patch_count': {'key': 'otherPatchCount', 'type': 'int'},
581        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
582        'last_modified_time': {'key': 'lastModifiedTime', 'type': 'iso-8601'},
583        'error': {'key': 'error', 'type': 'ApiError'},
584    }
585
586    def __init__(
587        self,
588        **kwargs
589    ):
590        super(AvailablePatchSummary, self).__init__(**kwargs)
591        self.status = None
592        self.assessment_activity_id = None
593        self.reboot_pending = None
594        self.critical_and_security_patch_count = None
595        self.other_patch_count = None
596        self.start_time = None
597        self.last_modified_time = None
598        self.error = None
599
600
601class BillingProfile(msrest.serialization.Model):
602    """Specifies the billing related details of a Azure Spot VM or VMSS. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
603
604    :param max_price: Specifies the maximum price you are willing to pay for a Azure Spot VM/VMSS.
605     This price is in US Dollars. :code:`<br>`:code:`<br>` This price will be compared with the
606     current Azure Spot price for the VM size. Also, the prices are compared at the time of
607     create/update of Azure Spot VM/VMSS and the operation will only succeed if  the maxPrice is
608     greater than the current Azure Spot price. :code:`<br>`:code:`<br>` The maxPrice will also be
609     used for evicting a Azure Spot VM/VMSS if the current Azure Spot price goes beyond the maxPrice
610     after creation of VM/VMSS. :code:`<br>`:code:`<br>` Possible values are:
611     :code:`<br>`:code:`<br>` - Any decimal value greater than zero. Example: 0.01538
612     :code:`<br>`:code:`<br>` -1 – indicates default price to be up-to on-demand.
613     :code:`<br>`:code:`<br>` You can set the maxPrice to -1 to indicate that the Azure Spot VM/VMSS
614     should not be evicted for price reasons. Also, the default max price is -1 if it is not
615     provided by you. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
616    :type max_price: float
617    """
618
619    _attribute_map = {
620        'max_price': {'key': 'maxPrice', 'type': 'float'},
621    }
622
623    def __init__(
624        self,
625        *,
626        max_price: Optional[float] = None,
627        **kwargs
628    ):
629        super(BillingProfile, self).__init__(**kwargs)
630        self.max_price = max_price
631
632
633class BootDiagnostics(msrest.serialization.Model):
634    """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.
635
636    :param enabled: Whether boot diagnostics should be enabled on the Virtual Machine.
637    :type enabled: bool
638    :param storage_uri: Uri of the storage account to use for placing the console output and
639     screenshot. :code:`<br>`:code:`<br>`If storageUri is not specified while enabling boot
640     diagnostics, managed storage will be used.
641    :type storage_uri: str
642    """
643
644    _attribute_map = {
645        'enabled': {'key': 'enabled', 'type': 'bool'},
646        'storage_uri': {'key': 'storageUri', 'type': 'str'},
647    }
648
649    def __init__(
650        self,
651        *,
652        enabled: Optional[bool] = None,
653        storage_uri: Optional[str] = None,
654        **kwargs
655    ):
656        super(BootDiagnostics, self).__init__(**kwargs)
657        self.enabled = enabled
658        self.storage_uri = storage_uri
659
660
661class BootDiagnosticsInstanceView(msrest.serialization.Model):
662    """The instance view of a virtual machine boot diagnostics.
663
664    Variables are only populated by the server, and will be ignored when sending a request.
665
666    :ivar console_screenshot_blob_uri: The console screenshot blob URI.
667     :code:`<br>`:code:`<br>`NOTE: This will **not** be set if boot diagnostics is currently enabled
668     with managed storage.
669    :vartype console_screenshot_blob_uri: str
670    :ivar serial_console_log_blob_uri: The serial console log blob Uri.
671     :code:`<br>`:code:`<br>`NOTE: This will **not** be set if boot diagnostics is currently enabled
672     with managed storage.
673    :vartype serial_console_log_blob_uri: str
674    :ivar status: The boot diagnostics status information for the VM. :code:`<br>`:code:`<br>`
675     NOTE: It will be set only if there are errors encountered in enabling boot diagnostics.
676    :vartype status: ~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus
677    """
678
679    _validation = {
680        'console_screenshot_blob_uri': {'readonly': True},
681        'serial_console_log_blob_uri': {'readonly': True},
682        'status': {'readonly': True},
683    }
684
685    _attribute_map = {
686        'console_screenshot_blob_uri': {'key': 'consoleScreenshotBlobUri', 'type': 'str'},
687        'serial_console_log_blob_uri': {'key': 'serialConsoleLogBlobUri', 'type': 'str'},
688        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
689    }
690
691    def __init__(
692        self,
693        **kwargs
694    ):
695        super(BootDiagnosticsInstanceView, self).__init__(**kwargs)
696        self.console_screenshot_blob_uri = None
697        self.serial_console_log_blob_uri = None
698        self.status = None
699
700
701class ComputeOperationListResult(msrest.serialization.Model):
702    """The List Compute Operation operation response.
703
704    Variables are only populated by the server, and will be ignored when sending a request.
705
706    :ivar value: The list of compute operations.
707    :vartype value: list[~azure.mgmt.compute.v2020_12_01.models.ComputeOperationValue]
708    """
709
710    _validation = {
711        'value': {'readonly': True},
712    }
713
714    _attribute_map = {
715        'value': {'key': 'value', 'type': '[ComputeOperationValue]'},
716    }
717
718    def __init__(
719        self,
720        **kwargs
721    ):
722        super(ComputeOperationListResult, self).__init__(**kwargs)
723        self.value = None
724
725
726class ComputeOperationValue(msrest.serialization.Model):
727    """Describes the properties of a Compute Operation value.
728
729    Variables are only populated by the server, and will be ignored when sending a request.
730
731    :ivar origin: The origin of the compute operation.
732    :vartype origin: str
733    :ivar name: The name of the compute operation.
734    :vartype name: str
735    :ivar operation: The display name of the compute operation.
736    :vartype operation: str
737    :ivar resource: The display name of the resource the operation applies to.
738    :vartype resource: str
739    :ivar description: The description of the operation.
740    :vartype description: str
741    :ivar provider: The resource provider for the operation.
742    :vartype provider: str
743    """
744
745    _validation = {
746        'origin': {'readonly': True},
747        'name': {'readonly': True},
748        'operation': {'readonly': True},
749        'resource': {'readonly': True},
750        'description': {'readonly': True},
751        'provider': {'readonly': True},
752    }
753
754    _attribute_map = {
755        'origin': {'key': 'origin', 'type': 'str'},
756        'name': {'key': 'name', 'type': 'str'},
757        'operation': {'key': 'display.operation', 'type': 'str'},
758        'resource': {'key': 'display.resource', 'type': 'str'},
759        'description': {'key': 'display.description', 'type': 'str'},
760        'provider': {'key': 'display.provider', 'type': 'str'},
761    }
762
763    def __init__(
764        self,
765        **kwargs
766    ):
767        super(ComputeOperationValue, self).__init__(**kwargs)
768        self.origin = None
769        self.name = None
770        self.operation = None
771        self.resource = None
772        self.description = None
773        self.provider = None
774
775
776class CreationData(msrest.serialization.Model):
777    """Data used when creating a disk.
778
779    Variables are only populated by the server, and will be ignored when sending a request.
780
781    All required parameters must be populated in order to send to Azure.
782
783    :param create_option: Required. This enumerates the possible sources of a disk's creation.
784     Possible values include: "Empty", "Attach", "FromImage", "Import", "Copy", "Restore", "Upload".
785    :type create_option: str or ~azure.mgmt.compute.v2020_12_01.models.DiskCreateOption
786    :param storage_account_id: Required if createOption is Import. The Azure Resource Manager
787     identifier of the storage account containing the blob to import as a disk.
788    :type storage_account_id: str
789    :param image_reference: Disk source information.
790    :type image_reference: ~azure.mgmt.compute.v2020_12_01.models.ImageDiskReference
791    :param gallery_image_reference: Required if creating from a Gallery Image. The id of the
792     ImageDiskReference will be the ARM id of the shared galley image version from which to create a
793     disk.
794    :type gallery_image_reference: ~azure.mgmt.compute.v2020_12_01.models.ImageDiskReference
795    :param source_uri: If createOption is Import, this is the URI of a blob to be imported into a
796     managed disk.
797    :type source_uri: str
798    :param source_resource_id: If createOption is Copy, this is the ARM id of the source snapshot
799     or disk.
800    :type source_resource_id: str
801    :ivar source_unique_id: If this field is set, this is the unique id identifying the source of
802     this resource.
803    :vartype source_unique_id: str
804    :param upload_size_bytes: If createOption is Upload, this is the size of the contents of the
805     upload including the VHD footer. This value should be between 20972032 (20 MiB + 512 bytes for
806     the VHD footer) and 35183298347520 bytes (32 TiB + 512 bytes for the VHD footer).
807    :type upload_size_bytes: long
808    :param logical_sector_size: Logical sector size in bytes for Ultra disks. Supported values are
809     512 ad 4096. 4096 is the default.
810    :type logical_sector_size: int
811    """
812
813    _validation = {
814        'create_option': {'required': True},
815        'source_unique_id': {'readonly': True},
816    }
817
818    _attribute_map = {
819        'create_option': {'key': 'createOption', 'type': 'str'},
820        'storage_account_id': {'key': 'storageAccountId', 'type': 'str'},
821        'image_reference': {'key': 'imageReference', 'type': 'ImageDiskReference'},
822        'gallery_image_reference': {'key': 'galleryImageReference', 'type': 'ImageDiskReference'},
823        'source_uri': {'key': 'sourceUri', 'type': 'str'},
824        'source_resource_id': {'key': 'sourceResourceId', 'type': 'str'},
825        'source_unique_id': {'key': 'sourceUniqueId', 'type': 'str'},
826        'upload_size_bytes': {'key': 'uploadSizeBytes', 'type': 'long'},
827        'logical_sector_size': {'key': 'logicalSectorSize', 'type': 'int'},
828    }
829
830    def __init__(
831        self,
832        *,
833        create_option: Union[str, "DiskCreateOption"],
834        storage_account_id: Optional[str] = None,
835        image_reference: Optional["ImageDiskReference"] = None,
836        gallery_image_reference: Optional["ImageDiskReference"] = None,
837        source_uri: Optional[str] = None,
838        source_resource_id: Optional[str] = None,
839        upload_size_bytes: Optional[int] = None,
840        logical_sector_size: Optional[int] = None,
841        **kwargs
842    ):
843        super(CreationData, self).__init__(**kwargs)
844        self.create_option = create_option
845        self.storage_account_id = storage_account_id
846        self.image_reference = image_reference
847        self.gallery_image_reference = gallery_image_reference
848        self.source_uri = source_uri
849        self.source_resource_id = source_resource_id
850        self.source_unique_id = None
851        self.upload_size_bytes = upload_size_bytes
852        self.logical_sector_size = logical_sector_size
853
854
855class DataDisk(msrest.serialization.Model):
856    """Describes a data disk.
857
858    Variables are only populated by the server, and will be ignored when sending a request.
859
860    All required parameters must be populated in order to send to Azure.
861
862    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
863     identify data disks within the VM and therefore must be unique for each data disk attached to a
864     VM.
865    :type lun: int
866    :param name: The disk name.
867    :type name: str
868    :param vhd: The virtual hard disk.
869    :type vhd: ~azure.mgmt.compute.v2020_12_01.models.VirtualHardDisk
870    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
871     before being attached to the virtual machine. If SourceImage is provided, the destination
872     virtual hard drive must not exist.
873    :type image: ~azure.mgmt.compute.v2020_12_01.models.VirtualHardDisk
874    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
875     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
876     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
877     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
878     "ReadWrite".
879    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
880    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
881     disabled on the disk.
882    :type write_accelerator_enabled: bool
883    :param create_option: Required. Specifies how the virtual machine should be
884     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
885     This value is used when you are using a specialized disk to create the virtual
886     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
887     image to create the virtual machine. If you are using a platform image, you also use the
888     imageReference element described above. If you are using a marketplace image, you  also use the
889     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
890    :type create_option: str or ~azure.mgmt.compute.v2020_12_01.models.DiskCreateOptionTypes
891    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
892     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
893     This value cannot be larger than 1023 GB.
894    :type disk_size_gb: int
895    :param managed_disk: The managed disk parameters.
896    :type managed_disk: ~azure.mgmt.compute.v2020_12_01.models.ManagedDiskParameters
897    :param to_be_detached: Specifies whether the data disk is in process of detachment from the
898     VirtualMachine/VirtualMachineScaleset.
899    :type to_be_detached: bool
900    :ivar disk_iops_read_write: Specifies the Read-Write IOPS for the managed disk when
901     StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be
902     updated only via updates to the VirtualMachine Scale Set.
903    :vartype disk_iops_read_write: long
904    :ivar disk_m_bps_read_write: Specifies the bandwidth in MB per second for the managed disk when
905     StorageAccountType is UltraSSD_LRS. Returned only for VirtualMachine ScaleSet VM disks. Can be
906     updated only via updates to the VirtualMachine Scale Set.
907    :vartype disk_m_bps_read_write: long
908    :param detach_option: Specifies the detach behavior to be used while detaching a disk or which
909     is already in the process of detachment from the virtual machine. Supported values:
910     **ForceDetach**. :code:`<br>`:code:`<br>` detachOption: **ForceDetach** is applicable only for
911     managed data disks. If a previous detachment attempt of the data disk did not complete due to
912     an unexpected failure from the virtual machine and the disk is still not released then use
913     force-detach as a last resort option to detach the disk forcibly from the VM. All writes might
914     not have been flushed when using this detach behavior. :code:`<br>`:code:`<br>` This feature is
915     still in preview mode and is not supported for VirtualMachineScaleSet. To force-detach a data
916     disk update toBeDetached to 'true' along with setting detachOption: 'ForceDetach'. Possible
917     values include: "ForceDetach".
918    :type detach_option: str or ~azure.mgmt.compute.v2020_12_01.models.DiskDetachOptionTypes
919    """
920
921    _validation = {
922        'lun': {'required': True},
923        'create_option': {'required': True},
924        'disk_iops_read_write': {'readonly': True},
925        'disk_m_bps_read_write': {'readonly': True},
926    }
927
928    _attribute_map = {
929        'lun': {'key': 'lun', 'type': 'int'},
930        'name': {'key': 'name', 'type': 'str'},
931        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
932        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
933        'caching': {'key': 'caching', 'type': 'str'},
934        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
935        'create_option': {'key': 'createOption', 'type': 'str'},
936        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
937        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
938        'to_be_detached': {'key': 'toBeDetached', 'type': 'bool'},
939        'disk_iops_read_write': {'key': 'diskIOPSReadWrite', 'type': 'long'},
940        'disk_m_bps_read_write': {'key': 'diskMBpsReadWrite', 'type': 'long'},
941        'detach_option': {'key': 'detachOption', 'type': 'str'},
942    }
943
944    def __init__(
945        self,
946        *,
947        lun: int,
948        create_option: Union[str, "DiskCreateOptionTypes"],
949        name: Optional[str] = None,
950        vhd: Optional["VirtualHardDisk"] = None,
951        image: Optional["VirtualHardDisk"] = None,
952        caching: Optional[Union[str, "CachingTypes"]] = None,
953        write_accelerator_enabled: Optional[bool] = None,
954        disk_size_gb: Optional[int] = None,
955        managed_disk: Optional["ManagedDiskParameters"] = None,
956        to_be_detached: Optional[bool] = None,
957        detach_option: Optional[Union[str, "DiskDetachOptionTypes"]] = None,
958        **kwargs
959    ):
960        super(DataDisk, self).__init__(**kwargs)
961        self.lun = lun
962        self.name = name
963        self.vhd = vhd
964        self.image = image
965        self.caching = caching
966        self.write_accelerator_enabled = write_accelerator_enabled
967        self.create_option = create_option
968        self.disk_size_gb = disk_size_gb
969        self.managed_disk = managed_disk
970        self.to_be_detached = to_be_detached
971        self.disk_iops_read_write = None
972        self.disk_m_bps_read_write = None
973        self.detach_option = detach_option
974
975
976class DataDiskImage(msrest.serialization.Model):
977    """Contains the data disk images information.
978
979    Variables are only populated by the server, and will be ignored when sending a request.
980
981    :ivar lun: Specifies the logical unit number of the data disk. This value is used to identify
982     data disks within the VM and therefore must be unique for each data disk attached to a VM.
983    :vartype lun: int
984    """
985
986    _validation = {
987        'lun': {'readonly': True},
988    }
989
990    _attribute_map = {
991        'lun': {'key': 'lun', 'type': 'int'},
992    }
993
994    def __init__(
995        self,
996        **kwargs
997    ):
998        super(DataDiskImage, self).__init__(**kwargs)
999        self.lun = None
1000
1001
1002class DedicatedHost(Resource):
1003    """Specifies information about the Dedicated host.
1004
1005    Variables are only populated by the server, and will be ignored when sending a request.
1006
1007    All required parameters must be populated in order to send to Azure.
1008
1009    :ivar id: Resource Id.
1010    :vartype id: str
1011    :ivar name: Resource name.
1012    :vartype name: str
1013    :ivar type: Resource type.
1014    :vartype type: str
1015    :param location: Required. Resource location.
1016    :type location: str
1017    :param tags: A set of tags. Resource tags.
1018    :type tags: dict[str, str]
1019    :param sku: Required. SKU of the dedicated host for Hardware Generation and VM family. Only
1020     name is required to be set. List Microsoft.Compute SKUs for a list of possible values.
1021    :type sku: ~azure.mgmt.compute.v2020_12_01.models.Sku
1022    :param platform_fault_domain: Fault domain of the dedicated host within a dedicated host group.
1023    :type platform_fault_domain: int
1024    :param auto_replace_on_failure: Specifies whether the dedicated host should be replaced
1025     automatically in case of a failure. The value is defaulted to 'true' when not provided.
1026    :type auto_replace_on_failure: bool
1027    :ivar host_id: A unique id generated and assigned to the dedicated host by the platform.
1028     :code:`<br>`:code:`<br>` Does not change throughout the lifetime of the host.
1029    :vartype host_id: str
1030    :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host.
1031    :vartype virtual_machines: list[~azure.mgmt.compute.v2020_12_01.models.SubResourceReadOnly]
1032    :param license_type: Specifies the software license type that will be applied to the VMs
1033     deployed on the dedicated host. :code:`<br>`:code:`<br>` Possible values are:
1034     :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **Windows_Server_Hybrid**
1035     :code:`<br>`:code:`<br>` **Windows_Server_Perpetual** :code:`<br>`:code:`<br>` Default:
1036     **None**. Possible values include: "None", "Windows_Server_Hybrid", "Windows_Server_Perpetual".
1037    :type license_type: str or ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostLicenseTypes
1038    :ivar provisioning_time: The date when the host was first provisioned.
1039    :vartype provisioning_time: ~datetime.datetime
1040    :ivar provisioning_state: The provisioning state, which only appears in the response.
1041    :vartype provisioning_state: str
1042    :ivar instance_view: The dedicated host instance view.
1043    :vartype instance_view: ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostInstanceView
1044    """
1045
1046    _validation = {
1047        'id': {'readonly': True},
1048        'name': {'readonly': True},
1049        'type': {'readonly': True},
1050        'location': {'required': True},
1051        'sku': {'required': True},
1052        'platform_fault_domain': {'minimum': 0},
1053        'host_id': {'readonly': True},
1054        'virtual_machines': {'readonly': True},
1055        'provisioning_time': {'readonly': True},
1056        'provisioning_state': {'readonly': True},
1057        'instance_view': {'readonly': True},
1058    }
1059
1060    _attribute_map = {
1061        'id': {'key': 'id', 'type': 'str'},
1062        'name': {'key': 'name', 'type': 'str'},
1063        'type': {'key': 'type', 'type': 'str'},
1064        'location': {'key': 'location', 'type': 'str'},
1065        'tags': {'key': 'tags', 'type': '{str}'},
1066        'sku': {'key': 'sku', 'type': 'Sku'},
1067        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
1068        'auto_replace_on_failure': {'key': 'properties.autoReplaceOnFailure', 'type': 'bool'},
1069        'host_id': {'key': 'properties.hostId', 'type': 'str'},
1070        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceReadOnly]'},
1071        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
1072        'provisioning_time': {'key': 'properties.provisioningTime', 'type': 'iso-8601'},
1073        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1074        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostInstanceView'},
1075    }
1076
1077    def __init__(
1078        self,
1079        *,
1080        location: str,
1081        sku: "Sku",
1082        tags: Optional[Dict[str, str]] = None,
1083        platform_fault_domain: Optional[int] = None,
1084        auto_replace_on_failure: Optional[bool] = None,
1085        license_type: Optional[Union[str, "DedicatedHostLicenseTypes"]] = None,
1086        **kwargs
1087    ):
1088        super(DedicatedHost, self).__init__(location=location, tags=tags, **kwargs)
1089        self.sku = sku
1090        self.platform_fault_domain = platform_fault_domain
1091        self.auto_replace_on_failure = auto_replace_on_failure
1092        self.host_id = None
1093        self.virtual_machines = None
1094        self.license_type = license_type
1095        self.provisioning_time = None
1096        self.provisioning_state = None
1097        self.instance_view = None
1098
1099
1100class DedicatedHostAllocatableVM(msrest.serialization.Model):
1101    """Represents the dedicated host unutilized capacity in terms of a specific VM size.
1102
1103    :param vm_size: VM size in terms of which the unutilized capacity is represented.
1104    :type vm_size: str
1105    :param count: Maximum number of VMs of size vmSize that can fit in the dedicated host's
1106     remaining capacity.
1107    :type count: float
1108    """
1109
1110    _attribute_map = {
1111        'vm_size': {'key': 'vmSize', 'type': 'str'},
1112        'count': {'key': 'count', 'type': 'float'},
1113    }
1114
1115    def __init__(
1116        self,
1117        *,
1118        vm_size: Optional[str] = None,
1119        count: Optional[float] = None,
1120        **kwargs
1121    ):
1122        super(DedicatedHostAllocatableVM, self).__init__(**kwargs)
1123        self.vm_size = vm_size
1124        self.count = count
1125
1126
1127class DedicatedHostAvailableCapacity(msrest.serialization.Model):
1128    """Dedicated host unutilized capacity.
1129
1130    :param allocatable_v_ms: The unutilized capacity of the dedicated host represented in terms of
1131     each VM size that is allowed to be deployed to the dedicated host.
1132    :type allocatable_v_ms: list[~azure.mgmt.compute.v2020_12_01.models.DedicatedHostAllocatableVM]
1133    """
1134
1135    _attribute_map = {
1136        'allocatable_v_ms': {'key': 'allocatableVMs', 'type': '[DedicatedHostAllocatableVM]'},
1137    }
1138
1139    def __init__(
1140        self,
1141        *,
1142        allocatable_v_ms: Optional[List["DedicatedHostAllocatableVM"]] = None,
1143        **kwargs
1144    ):
1145        super(DedicatedHostAvailableCapacity, self).__init__(**kwargs)
1146        self.allocatable_v_ms = allocatable_v_ms
1147
1148
1149class DedicatedHostGroup(Resource):
1150    """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.
1151
1152    Variables are only populated by the server, and will be ignored when sending a request.
1153
1154    All required parameters must be populated in order to send to Azure.
1155
1156    :ivar id: Resource Id.
1157    :vartype id: str
1158    :ivar name: Resource name.
1159    :vartype name: str
1160    :ivar type: Resource type.
1161    :vartype type: str
1162    :param location: Required. Resource location.
1163    :type location: str
1164    :param tags: A set of tags. Resource tags.
1165    :type tags: dict[str, str]
1166    :param zones: Availability Zone to use for this host group. Only single zone is supported. The
1167     zone can be assigned only during creation. If not provided, the group supports all zones in the
1168     region. If provided, enforces each host in the group to be in the same zone.
1169    :type zones: list[str]
1170    :param platform_fault_domain_count: Number of fault domains that the host group can span.
1171    :type platform_fault_domain_count: int
1172    :ivar hosts: A list of references to all dedicated hosts in the dedicated host group.
1173    :vartype hosts: list[~azure.mgmt.compute.v2020_12_01.models.SubResourceReadOnly]
1174    :ivar instance_view: The dedicated host group instance view, which has the list of instance
1175     view of the dedicated hosts under the dedicated host group.
1176    :vartype instance_view: ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostGroupInstanceView
1177    :param support_automatic_placement: Specifies whether virtual machines or virtual machine scale
1178     sets can be placed automatically on the dedicated host group. Automatic placement means
1179     resources are allocated on dedicated hosts, that are chosen by Azure, under the dedicated host
1180     group. The value is defaulted to 'false' when not provided. :code:`<br>`:code:`<br>`Minimum
1181     api-version: 2020-06-01.
1182    :type support_automatic_placement: bool
1183    """
1184
1185    _validation = {
1186        'id': {'readonly': True},
1187        'name': {'readonly': True},
1188        'type': {'readonly': True},
1189        'location': {'required': True},
1190        'platform_fault_domain_count': {'minimum': 1},
1191        'hosts': {'readonly': True},
1192        'instance_view': {'readonly': True},
1193    }
1194
1195    _attribute_map = {
1196        'id': {'key': 'id', 'type': 'str'},
1197        'name': {'key': 'name', 'type': 'str'},
1198        'type': {'key': 'type', 'type': 'str'},
1199        'location': {'key': 'location', 'type': 'str'},
1200        'tags': {'key': 'tags', 'type': '{str}'},
1201        'zones': {'key': 'zones', 'type': '[str]'},
1202        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
1203        'hosts': {'key': 'properties.hosts', 'type': '[SubResourceReadOnly]'},
1204        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostGroupInstanceView'},
1205        'support_automatic_placement': {'key': 'properties.supportAutomaticPlacement', 'type': 'bool'},
1206    }
1207
1208    def __init__(
1209        self,
1210        *,
1211        location: str,
1212        tags: Optional[Dict[str, str]] = None,
1213        zones: Optional[List[str]] = None,
1214        platform_fault_domain_count: Optional[int] = None,
1215        support_automatic_placement: Optional[bool] = None,
1216        **kwargs
1217    ):
1218        super(DedicatedHostGroup, self).__init__(location=location, tags=tags, **kwargs)
1219        self.zones = zones
1220        self.platform_fault_domain_count = platform_fault_domain_count
1221        self.hosts = None
1222        self.instance_view = None
1223        self.support_automatic_placement = support_automatic_placement
1224
1225
1226class DedicatedHostGroupInstanceView(msrest.serialization.Model):
1227    """DedicatedHostGroupInstanceView.
1228
1229    :param hosts: List of instance view of the dedicated hosts under the dedicated host group.
1230    :type hosts: list[~azure.mgmt.compute.v2020_12_01.models.DedicatedHostInstanceViewWithName]
1231    """
1232
1233    _attribute_map = {
1234        'hosts': {'key': 'hosts', 'type': '[DedicatedHostInstanceViewWithName]'},
1235    }
1236
1237    def __init__(
1238        self,
1239        *,
1240        hosts: Optional[List["DedicatedHostInstanceViewWithName"]] = None,
1241        **kwargs
1242    ):
1243        super(DedicatedHostGroupInstanceView, self).__init__(**kwargs)
1244        self.hosts = hosts
1245
1246
1247class DedicatedHostGroupListResult(msrest.serialization.Model):
1248    """The List Dedicated Host Group with resource group response.
1249
1250    All required parameters must be populated in order to send to Azure.
1251
1252    :param value: Required. The list of dedicated host groups.
1253    :type value: list[~azure.mgmt.compute.v2020_12_01.models.DedicatedHostGroup]
1254    :param next_link: The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with
1255     this URI to fetch the next page of Dedicated Host Groups.
1256    :type next_link: str
1257    """
1258
1259    _validation = {
1260        'value': {'required': True},
1261    }
1262
1263    _attribute_map = {
1264        'value': {'key': 'value', 'type': '[DedicatedHostGroup]'},
1265        'next_link': {'key': 'nextLink', 'type': 'str'},
1266    }
1267
1268    def __init__(
1269        self,
1270        *,
1271        value: List["DedicatedHostGroup"],
1272        next_link: Optional[str] = None,
1273        **kwargs
1274    ):
1275        super(DedicatedHostGroupListResult, self).__init__(**kwargs)
1276        self.value = value
1277        self.next_link = next_link
1278
1279
1280class DedicatedHostGroupUpdate(UpdateResource):
1281    """Specifies information about the dedicated host group that the dedicated host should be assigned to. Only tags may be updated.
1282
1283    Variables are only populated by the server, and will be ignored when sending a request.
1284
1285    :param tags: A set of tags. Resource tags.
1286    :type tags: dict[str, str]
1287    :param zones: Availability Zone to use for this host group. Only single zone is supported. The
1288     zone can be assigned only during creation. If not provided, the group supports all zones in the
1289     region. If provided, enforces each host in the group to be in the same zone.
1290    :type zones: list[str]
1291    :param platform_fault_domain_count: Number of fault domains that the host group can span.
1292    :type platform_fault_domain_count: int
1293    :ivar hosts: A list of references to all dedicated hosts in the dedicated host group.
1294    :vartype hosts: list[~azure.mgmt.compute.v2020_12_01.models.SubResourceReadOnly]
1295    :ivar instance_view: The dedicated host group instance view, which has the list of instance
1296     view of the dedicated hosts under the dedicated host group.
1297    :vartype instance_view: ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostGroupInstanceView
1298    :param support_automatic_placement: Specifies whether virtual machines or virtual machine scale
1299     sets can be placed automatically on the dedicated host group. Automatic placement means
1300     resources are allocated on dedicated hosts, that are chosen by Azure, under the dedicated host
1301     group. The value is defaulted to 'false' when not provided. :code:`<br>`:code:`<br>`Minimum
1302     api-version: 2020-06-01.
1303    :type support_automatic_placement: bool
1304    """
1305
1306    _validation = {
1307        'platform_fault_domain_count': {'minimum': 1},
1308        'hosts': {'readonly': True},
1309        'instance_view': {'readonly': True},
1310    }
1311
1312    _attribute_map = {
1313        'tags': {'key': 'tags', 'type': '{str}'},
1314        'zones': {'key': 'zones', 'type': '[str]'},
1315        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
1316        'hosts': {'key': 'properties.hosts', 'type': '[SubResourceReadOnly]'},
1317        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostGroupInstanceView'},
1318        'support_automatic_placement': {'key': 'properties.supportAutomaticPlacement', 'type': 'bool'},
1319    }
1320
1321    def __init__(
1322        self,
1323        *,
1324        tags: Optional[Dict[str, str]] = None,
1325        zones: Optional[List[str]] = None,
1326        platform_fault_domain_count: Optional[int] = None,
1327        support_automatic_placement: Optional[bool] = None,
1328        **kwargs
1329    ):
1330        super(DedicatedHostGroupUpdate, self).__init__(tags=tags, **kwargs)
1331        self.zones = zones
1332        self.platform_fault_domain_count = platform_fault_domain_count
1333        self.hosts = None
1334        self.instance_view = None
1335        self.support_automatic_placement = support_automatic_placement
1336
1337
1338class DedicatedHostInstanceView(msrest.serialization.Model):
1339    """The instance view of a dedicated host.
1340
1341    Variables are only populated by the server, and will be ignored when sending a request.
1342
1343    :ivar asset_id: Specifies the unique id of the dedicated physical machine on which the
1344     dedicated host resides.
1345    :vartype asset_id: str
1346    :param available_capacity: Unutilized capacity of the dedicated host.
1347    :type available_capacity: ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostAvailableCapacity
1348    :param statuses: The resource status information.
1349    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
1350    """
1351
1352    _validation = {
1353        'asset_id': {'readonly': True},
1354    }
1355
1356    _attribute_map = {
1357        'asset_id': {'key': 'assetId', 'type': 'str'},
1358        'available_capacity': {'key': 'availableCapacity', 'type': 'DedicatedHostAvailableCapacity'},
1359        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
1360    }
1361
1362    def __init__(
1363        self,
1364        *,
1365        available_capacity: Optional["DedicatedHostAvailableCapacity"] = None,
1366        statuses: Optional[List["InstanceViewStatus"]] = None,
1367        **kwargs
1368    ):
1369        super(DedicatedHostInstanceView, self).__init__(**kwargs)
1370        self.asset_id = None
1371        self.available_capacity = available_capacity
1372        self.statuses = statuses
1373
1374
1375class DedicatedHostInstanceViewWithName(DedicatedHostInstanceView):
1376    """The instance view of a dedicated host that includes the name of the dedicated host. It is used for the response to the instance view of a dedicated host group.
1377
1378    Variables are only populated by the server, and will be ignored when sending a request.
1379
1380    :ivar asset_id: Specifies the unique id of the dedicated physical machine on which the
1381     dedicated host resides.
1382    :vartype asset_id: str
1383    :param available_capacity: Unutilized capacity of the dedicated host.
1384    :type available_capacity: ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostAvailableCapacity
1385    :param statuses: The resource status information.
1386    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
1387    :ivar name: The name of the dedicated host.
1388    :vartype name: str
1389    """
1390
1391    _validation = {
1392        'asset_id': {'readonly': True},
1393        'name': {'readonly': True},
1394    }
1395
1396    _attribute_map = {
1397        'asset_id': {'key': 'assetId', 'type': 'str'},
1398        'available_capacity': {'key': 'availableCapacity', 'type': 'DedicatedHostAvailableCapacity'},
1399        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
1400        'name': {'key': 'name', 'type': 'str'},
1401    }
1402
1403    def __init__(
1404        self,
1405        *,
1406        available_capacity: Optional["DedicatedHostAvailableCapacity"] = None,
1407        statuses: Optional[List["InstanceViewStatus"]] = None,
1408        **kwargs
1409    ):
1410        super(DedicatedHostInstanceViewWithName, self).__init__(available_capacity=available_capacity, statuses=statuses, **kwargs)
1411        self.name = None
1412
1413
1414class DedicatedHostListResult(msrest.serialization.Model):
1415    """The list dedicated host operation response.
1416
1417    All required parameters must be populated in order to send to Azure.
1418
1419    :param value: Required. The list of dedicated hosts.
1420    :type value: list[~azure.mgmt.compute.v2020_12_01.models.DedicatedHost]
1421    :param next_link: The URI to fetch the next page of dedicated hosts. Call ListNext() with this
1422     URI to fetch the next page of dedicated hosts.
1423    :type next_link: str
1424    """
1425
1426    _validation = {
1427        'value': {'required': True},
1428    }
1429
1430    _attribute_map = {
1431        'value': {'key': 'value', 'type': '[DedicatedHost]'},
1432        'next_link': {'key': 'nextLink', 'type': 'str'},
1433    }
1434
1435    def __init__(
1436        self,
1437        *,
1438        value: List["DedicatedHost"],
1439        next_link: Optional[str] = None,
1440        **kwargs
1441    ):
1442        super(DedicatedHostListResult, self).__init__(**kwargs)
1443        self.value = value
1444        self.next_link = next_link
1445
1446
1447class DedicatedHostUpdate(UpdateResource):
1448    """Specifies information about the dedicated host. Only tags, autoReplaceOnFailure and licenseType may be updated.
1449
1450    Variables are only populated by the server, and will be ignored when sending a request.
1451
1452    :param tags: A set of tags. Resource tags.
1453    :type tags: dict[str, str]
1454    :param platform_fault_domain: Fault domain of the dedicated host within a dedicated host group.
1455    :type platform_fault_domain: int
1456    :param auto_replace_on_failure: Specifies whether the dedicated host should be replaced
1457     automatically in case of a failure. The value is defaulted to 'true' when not provided.
1458    :type auto_replace_on_failure: bool
1459    :ivar host_id: A unique id generated and assigned to the dedicated host by the platform.
1460     :code:`<br>`:code:`<br>` Does not change throughout the lifetime of the host.
1461    :vartype host_id: str
1462    :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host.
1463    :vartype virtual_machines: list[~azure.mgmt.compute.v2020_12_01.models.SubResourceReadOnly]
1464    :param license_type: Specifies the software license type that will be applied to the VMs
1465     deployed on the dedicated host. :code:`<br>`:code:`<br>` Possible values are:
1466     :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **Windows_Server_Hybrid**
1467     :code:`<br>`:code:`<br>` **Windows_Server_Perpetual** :code:`<br>`:code:`<br>` Default:
1468     **None**. Possible values include: "None", "Windows_Server_Hybrid", "Windows_Server_Perpetual".
1469    :type license_type: str or ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostLicenseTypes
1470    :ivar provisioning_time: The date when the host was first provisioned.
1471    :vartype provisioning_time: ~datetime.datetime
1472    :ivar provisioning_state: The provisioning state, which only appears in the response.
1473    :vartype provisioning_state: str
1474    :ivar instance_view: The dedicated host instance view.
1475    :vartype instance_view: ~azure.mgmt.compute.v2020_12_01.models.DedicatedHostInstanceView
1476    """
1477
1478    _validation = {
1479        'platform_fault_domain': {'minimum': 0},
1480        'host_id': {'readonly': True},
1481        'virtual_machines': {'readonly': True},
1482        'provisioning_time': {'readonly': True},
1483        'provisioning_state': {'readonly': True},
1484        'instance_view': {'readonly': True},
1485    }
1486
1487    _attribute_map = {
1488        'tags': {'key': 'tags', 'type': '{str}'},
1489        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
1490        'auto_replace_on_failure': {'key': 'properties.autoReplaceOnFailure', 'type': 'bool'},
1491        'host_id': {'key': 'properties.hostId', 'type': 'str'},
1492        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceReadOnly]'},
1493        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
1494        'provisioning_time': {'key': 'properties.provisioningTime', 'type': 'iso-8601'},
1495        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1496        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostInstanceView'},
1497    }
1498
1499    def __init__(
1500        self,
1501        *,
1502        tags: Optional[Dict[str, str]] = None,
1503        platform_fault_domain: Optional[int] = None,
1504        auto_replace_on_failure: Optional[bool] = None,
1505        license_type: Optional[Union[str, "DedicatedHostLicenseTypes"]] = None,
1506        **kwargs
1507    ):
1508        super(DedicatedHostUpdate, self).__init__(tags=tags, **kwargs)
1509        self.platform_fault_domain = platform_fault_domain
1510        self.auto_replace_on_failure = auto_replace_on_failure
1511        self.host_id = None
1512        self.virtual_machines = None
1513        self.license_type = license_type
1514        self.provisioning_time = None
1515        self.provisioning_state = None
1516        self.instance_view = None
1517
1518
1519class DiagnosticsProfile(msrest.serialization.Model):
1520    """Specifies the boot diagnostic settings state. :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
1521
1522    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
1523     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
1524     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
1525     screenshot of the VM from the hypervisor.
1526    :type boot_diagnostics: ~azure.mgmt.compute.v2020_12_01.models.BootDiagnostics
1527    """
1528
1529    _attribute_map = {
1530        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnostics'},
1531    }
1532
1533    def __init__(
1534        self,
1535        *,
1536        boot_diagnostics: Optional["BootDiagnostics"] = None,
1537        **kwargs
1538    ):
1539        super(DiagnosticsProfile, self).__init__(**kwargs)
1540        self.boot_diagnostics = boot_diagnostics
1541
1542
1543class DiffDiskSettings(msrest.serialization.Model):
1544    """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.
1545
1546    :param option: Specifies the ephemeral disk settings for operating system disk. Possible values
1547     include: "Local".
1548    :type option: str or ~azure.mgmt.compute.v2020_12_01.models.DiffDiskOptions
1549    :param placement: Specifies the ephemeral disk placement for operating system
1550     disk.:code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **CacheDisk**
1551     :code:`<br>`:code:`<br>` **ResourceDisk** :code:`<br>`:code:`<br>` Default: **CacheDisk** if
1552     one is configured for the VM size otherwise **ResourceDisk** is used.:code:`<br>`:code:`<br>`
1553     Refer to VM size documentation for Windows VM at
1554     https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes and Linux VM at
1555     https://docs.microsoft.com/en-us/azure/virtual-machines/linux/sizes to check which VM sizes
1556     exposes a cache disk. Possible values include: "CacheDisk", "ResourceDisk".
1557    :type placement: str or ~azure.mgmt.compute.v2020_12_01.models.DiffDiskPlacement
1558    """
1559
1560    _attribute_map = {
1561        'option': {'key': 'option', 'type': 'str'},
1562        'placement': {'key': 'placement', 'type': 'str'},
1563    }
1564
1565    def __init__(
1566        self,
1567        *,
1568        option: Optional[Union[str, "DiffDiskOptions"]] = None,
1569        placement: Optional[Union[str, "DiffDiskPlacement"]] = None,
1570        **kwargs
1571    ):
1572        super(DiffDiskSettings, self).__init__(**kwargs)
1573        self.option = option
1574        self.placement = placement
1575
1576
1577class DisallowedConfiguration(msrest.serialization.Model):
1578    """Specifies the disallowed configuration for a virtual machine image.
1579
1580    :param vm_disk_type: VM disk types which are disallowed. Possible values include: "None",
1581     "Unmanaged".
1582    :type vm_disk_type: str or ~azure.mgmt.compute.v2020_12_01.models.VmDiskTypes
1583    """
1584
1585    _attribute_map = {
1586        'vm_disk_type': {'key': 'vmDiskType', 'type': 'str'},
1587    }
1588
1589    def __init__(
1590        self,
1591        *,
1592        vm_disk_type: Optional[Union[str, "VmDiskTypes"]] = None,
1593        **kwargs
1594    ):
1595        super(DisallowedConfiguration, self).__init__(**kwargs)
1596        self.vm_disk_type = vm_disk_type
1597
1598
1599class Disk(Resource):
1600    """Disk resource.
1601
1602    Variables are only populated by the server, and will be ignored when sending a request.
1603
1604    All required parameters must be populated in order to send to Azure.
1605
1606    :ivar id: Resource Id.
1607    :vartype id: str
1608    :ivar name: Resource name.
1609    :vartype name: str
1610    :ivar type: Resource type.
1611    :vartype type: str
1612    :param location: Required. Resource location.
1613    :type location: str
1614    :param tags: A set of tags. Resource tags.
1615    :type tags: dict[str, str]
1616    :ivar managed_by: A relative URI containing the ID of the VM that has the disk attached.
1617    :vartype managed_by: str
1618    :ivar managed_by_extended: List of relative URIs containing the IDs of the VMs that have the
1619     disk attached. maxShares should be set to a value greater than one for disks to allow attaching
1620     them to multiple VMs.
1621    :vartype managed_by_extended: list[str]
1622    :param sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS,
1623     UltraSSD_LRS, Premium_ZRS, or StandardSSD_ZRS.
1624    :type sku: ~azure.mgmt.compute.v2020_12_01.models.DiskSku
1625    :param zones: The Logical zone list for Disk.
1626    :type zones: list[str]
1627    :param extended_location: The extended location where the disk will be created. Extended
1628     location cannot be changed.
1629    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
1630    :ivar time_created: The time when the disk was created.
1631    :vartype time_created: ~datetime.datetime
1632    :param os_type: The Operating System type. Possible values include: "Windows", "Linux".
1633    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
1634    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
1635     disks only. Possible values include: "V1", "V2".
1636    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGeneration
1637    :param purchase_plan: Purchase plan information for the the image from which the OS disk was
1638     created. E.g. - {name: 2019-Datacenter, publisher: MicrosoftWindowsServer, product:
1639     WindowsServer}.
1640    :type purchase_plan: ~azure.mgmt.compute.v2020_12_01.models.PurchasePlan
1641    :param creation_data: Disk source information. CreationData information cannot be changed after
1642     the disk has been created.
1643    :type creation_data: ~azure.mgmt.compute.v2020_12_01.models.CreationData
1644    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
1645     indicates the size of the disk to create. If this field is present for updates or creation with
1646     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
1647     running VM, and can only increase the disk's size.
1648    :type disk_size_gb: int
1649    :ivar disk_size_bytes: The size of the disk in bytes. This field is read only.
1650    :vartype disk_size_bytes: long
1651    :ivar unique_id: Unique Guid identifying the resource.
1652    :vartype unique_id: str
1653    :param encryption_settings_collection: Encryption settings collection used for Azure Disk
1654     Encryption, can contain multiple encryption settings per disk or snapshot.
1655    :type encryption_settings_collection:
1656     ~azure.mgmt.compute.v2020_12_01.models.EncryptionSettingsCollection
1657    :ivar provisioning_state: The disk provisioning state.
1658    :vartype provisioning_state: str
1659    :param disk_iops_read_write: The number of IOPS allowed for this disk; only settable for
1660     UltraSSD disks. One operation can transfer between 4k and 256k bytes.
1661    :type disk_iops_read_write: long
1662    :param disk_m_bps_read_write: The bandwidth allowed for this disk; only settable for UltraSSD
1663     disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of
1664     10.
1665    :type disk_m_bps_read_write: long
1666    :param disk_iops_read_only: The total number of IOPS that will be allowed across all VMs
1667     mounting the shared disk as ReadOnly. One operation can transfer between 4k and 256k bytes.
1668    :type disk_iops_read_only: long
1669    :param disk_m_bps_read_only: The total throughput (MBps) that will be allowed across all VMs
1670     mounting the shared disk as ReadOnly. MBps means millions of bytes per second - MB here uses
1671     the ISO notation, of powers of 10.
1672    :type disk_m_bps_read_only: long
1673    :ivar disk_state: The state of the disk. Possible values include: "Unattached", "Attached",
1674     "Reserved", "ActiveSAS", "ReadyToUpload", "ActiveUpload".
1675    :vartype disk_state: str or ~azure.mgmt.compute.v2020_12_01.models.DiskState
1676    :param encryption: Encryption property can be used to encrypt data at rest with customer
1677     managed keys or platform managed keys.
1678    :type encryption: ~azure.mgmt.compute.v2020_12_01.models.Encryption
1679    :param max_shares: The maximum number of VMs that can attach to the disk at the same time.
1680     Value greater than one indicates a disk that can be mounted on multiple VMs at the same time.
1681    :type max_shares: int
1682    :ivar share_info: Details of the list of all VMs that have the disk attached. maxShares should
1683     be set to a value greater than one for disks to allow attaching them to multiple VMs.
1684    :vartype share_info: list[~azure.mgmt.compute.v2020_12_01.models.ShareInfoElement]
1685    :param network_access_policy: Policy for accessing the disk via network. Possible values
1686     include: "AllowAll", "AllowPrivate", "DenyAll".
1687    :type network_access_policy: str or ~azure.mgmt.compute.v2020_12_01.models.NetworkAccessPolicy
1688    :param disk_access_id: ARM id of the DiskAccess resource for using private endpoints on disks.
1689    :type disk_access_id: str
1690    :param tier: Performance tier of the disk (e.g, P4, S10) as described here:
1691     https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra
1692     disks.
1693    :type tier: str
1694    :param bursting_enabled: Set to true to enable bursting beyond the provisioned performance
1695     target of the disk. Bursting is disabled by default. Does not apply to Ultra disks.
1696    :type bursting_enabled: bool
1697    :ivar property_updates_in_progress: Properties of the disk for which update is pending.
1698    :vartype property_updates_in_progress:
1699     ~azure.mgmt.compute.v2020_12_01.models.PropertyUpdatesInProgress
1700    :param supports_hibernation: Indicates the OS on a disk supports hibernation.
1701    :type supports_hibernation: bool
1702    :param security_profile: Contains the security related information for the resource.
1703    :type security_profile: ~azure.mgmt.compute.v2020_12_01.models.DiskSecurityProfile
1704    """
1705
1706    _validation = {
1707        'id': {'readonly': True},
1708        'name': {'readonly': True},
1709        'type': {'readonly': True},
1710        'location': {'required': True},
1711        'managed_by': {'readonly': True},
1712        'managed_by_extended': {'readonly': True},
1713        'time_created': {'readonly': True},
1714        'disk_size_bytes': {'readonly': True},
1715        'unique_id': {'readonly': True},
1716        'provisioning_state': {'readonly': True},
1717        'disk_state': {'readonly': True},
1718        'share_info': {'readonly': True},
1719        'property_updates_in_progress': {'readonly': True},
1720    }
1721
1722    _attribute_map = {
1723        'id': {'key': 'id', 'type': 'str'},
1724        'name': {'key': 'name', 'type': 'str'},
1725        'type': {'key': 'type', 'type': 'str'},
1726        'location': {'key': 'location', 'type': 'str'},
1727        'tags': {'key': 'tags', 'type': '{str}'},
1728        'managed_by': {'key': 'managedBy', 'type': 'str'},
1729        'managed_by_extended': {'key': 'managedByExtended', 'type': '[str]'},
1730        'sku': {'key': 'sku', 'type': 'DiskSku'},
1731        'zones': {'key': 'zones', 'type': '[str]'},
1732        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
1733        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
1734        'os_type': {'key': 'properties.osType', 'type': 'str'},
1735        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
1736        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'PurchasePlan'},
1737        'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'},
1738        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
1739        'disk_size_bytes': {'key': 'properties.diskSizeBytes', 'type': 'long'},
1740        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
1741        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
1742        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1743        'disk_iops_read_write': {'key': 'properties.diskIOPSReadWrite', 'type': 'long'},
1744        'disk_m_bps_read_write': {'key': 'properties.diskMBpsReadWrite', 'type': 'long'},
1745        'disk_iops_read_only': {'key': 'properties.diskIOPSReadOnly', 'type': 'long'},
1746        'disk_m_bps_read_only': {'key': 'properties.diskMBpsReadOnly', 'type': 'long'},
1747        'disk_state': {'key': 'properties.diskState', 'type': 'str'},
1748        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
1749        'max_shares': {'key': 'properties.maxShares', 'type': 'int'},
1750        'share_info': {'key': 'properties.shareInfo', 'type': '[ShareInfoElement]'},
1751        'network_access_policy': {'key': 'properties.networkAccessPolicy', 'type': 'str'},
1752        'disk_access_id': {'key': 'properties.diskAccessId', 'type': 'str'},
1753        'tier': {'key': 'properties.tier', 'type': 'str'},
1754        'bursting_enabled': {'key': 'properties.burstingEnabled', 'type': 'bool'},
1755        'property_updates_in_progress': {'key': 'properties.propertyUpdatesInProgress', 'type': 'PropertyUpdatesInProgress'},
1756        'supports_hibernation': {'key': 'properties.supportsHibernation', 'type': 'bool'},
1757        'security_profile': {'key': 'properties.securityProfile', 'type': 'DiskSecurityProfile'},
1758    }
1759
1760    def __init__(
1761        self,
1762        *,
1763        location: str,
1764        tags: Optional[Dict[str, str]] = None,
1765        sku: Optional["DiskSku"] = None,
1766        zones: Optional[List[str]] = None,
1767        extended_location: Optional["ExtendedLocation"] = None,
1768        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1769        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
1770        purchase_plan: Optional["PurchasePlan"] = None,
1771        creation_data: Optional["CreationData"] = None,
1772        disk_size_gb: Optional[int] = None,
1773        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
1774        disk_iops_read_write: Optional[int] = None,
1775        disk_m_bps_read_write: Optional[int] = None,
1776        disk_iops_read_only: Optional[int] = None,
1777        disk_m_bps_read_only: Optional[int] = None,
1778        encryption: Optional["Encryption"] = None,
1779        max_shares: Optional[int] = None,
1780        network_access_policy: Optional[Union[str, "NetworkAccessPolicy"]] = None,
1781        disk_access_id: Optional[str] = None,
1782        tier: Optional[str] = None,
1783        bursting_enabled: Optional[bool] = None,
1784        supports_hibernation: Optional[bool] = None,
1785        security_profile: Optional["DiskSecurityProfile"] = None,
1786        **kwargs
1787    ):
1788        super(Disk, self).__init__(location=location, tags=tags, **kwargs)
1789        self.managed_by = None
1790        self.managed_by_extended = None
1791        self.sku = sku
1792        self.zones = zones
1793        self.extended_location = extended_location
1794        self.time_created = None
1795        self.os_type = os_type
1796        self.hyper_v_generation = hyper_v_generation
1797        self.purchase_plan = purchase_plan
1798        self.creation_data = creation_data
1799        self.disk_size_gb = disk_size_gb
1800        self.disk_size_bytes = None
1801        self.unique_id = None
1802        self.encryption_settings_collection = encryption_settings_collection
1803        self.provisioning_state = None
1804        self.disk_iops_read_write = disk_iops_read_write
1805        self.disk_m_bps_read_write = disk_m_bps_read_write
1806        self.disk_iops_read_only = disk_iops_read_only
1807        self.disk_m_bps_read_only = disk_m_bps_read_only
1808        self.disk_state = None
1809        self.encryption = encryption
1810        self.max_shares = max_shares
1811        self.share_info = None
1812        self.network_access_policy = network_access_policy
1813        self.disk_access_id = disk_access_id
1814        self.tier = tier
1815        self.bursting_enabled = bursting_enabled
1816        self.property_updates_in_progress = None
1817        self.supports_hibernation = supports_hibernation
1818        self.security_profile = security_profile
1819
1820
1821class DiskAccess(Resource):
1822    """disk access resource.
1823
1824    Variables are only populated by the server, and will be ignored when sending a request.
1825
1826    All required parameters must be populated in order to send to Azure.
1827
1828    :ivar id: Resource Id.
1829    :vartype id: str
1830    :ivar name: Resource name.
1831    :vartype name: str
1832    :ivar type: Resource type.
1833    :vartype type: str
1834    :param location: Required. Resource location.
1835    :type location: str
1836    :param tags: A set of tags. Resource tags.
1837    :type tags: dict[str, str]
1838    :ivar private_endpoint_connections: A readonly collection of private endpoint connections
1839     created on the disk. Currently only one endpoint connection is supported.
1840    :vartype private_endpoint_connections:
1841     list[~azure.mgmt.compute.v2020_12_01.models.PrivateEndpointConnection]
1842    :ivar provisioning_state: The disk access resource provisioning state.
1843    :vartype provisioning_state: str
1844    :ivar time_created: The time when the disk access was created.
1845    :vartype time_created: ~datetime.datetime
1846    """
1847
1848    _validation = {
1849        'id': {'readonly': True},
1850        'name': {'readonly': True},
1851        'type': {'readonly': True},
1852        'location': {'required': True},
1853        'private_endpoint_connections': {'readonly': True},
1854        'provisioning_state': {'readonly': True},
1855        'time_created': {'readonly': True},
1856    }
1857
1858    _attribute_map = {
1859        'id': {'key': 'id', 'type': 'str'},
1860        'name': {'key': 'name', 'type': 'str'},
1861        'type': {'key': 'type', 'type': 'str'},
1862        'location': {'key': 'location', 'type': 'str'},
1863        'tags': {'key': 'tags', 'type': '{str}'},
1864        'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'},
1865        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1866        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
1867    }
1868
1869    def __init__(
1870        self,
1871        *,
1872        location: str,
1873        tags: Optional[Dict[str, str]] = None,
1874        **kwargs
1875    ):
1876        super(DiskAccess, self).__init__(location=location, tags=tags, **kwargs)
1877        self.private_endpoint_connections = None
1878        self.provisioning_state = None
1879        self.time_created = None
1880
1881
1882class DiskAccessList(msrest.serialization.Model):
1883    """The List disk access operation response.
1884
1885    All required parameters must be populated in order to send to Azure.
1886
1887    :param value: Required. A list of disk access resources.
1888    :type value: list[~azure.mgmt.compute.v2020_12_01.models.DiskAccess]
1889    :param next_link: The uri to fetch the next page of disk access resources. Call ListNext() with
1890     this to fetch the next page of disk access resources.
1891    :type next_link: str
1892    """
1893
1894    _validation = {
1895        'value': {'required': True},
1896    }
1897
1898    _attribute_map = {
1899        'value': {'key': 'value', 'type': '[DiskAccess]'},
1900        'next_link': {'key': 'nextLink', 'type': 'str'},
1901    }
1902
1903    def __init__(
1904        self,
1905        *,
1906        value: List["DiskAccess"],
1907        next_link: Optional[str] = None,
1908        **kwargs
1909    ):
1910        super(DiskAccessList, self).__init__(**kwargs)
1911        self.value = value
1912        self.next_link = next_link
1913
1914
1915class DiskAccessUpdate(msrest.serialization.Model):
1916    """Used for updating a disk access resource.
1917
1918    :param tags: A set of tags. Resource tags.
1919    :type tags: dict[str, str]
1920    """
1921
1922    _attribute_map = {
1923        'tags': {'key': 'tags', 'type': '{str}'},
1924    }
1925
1926    def __init__(
1927        self,
1928        *,
1929        tags: Optional[Dict[str, str]] = None,
1930        **kwargs
1931    ):
1932        super(DiskAccessUpdate, self).__init__(**kwargs)
1933        self.tags = tags
1934
1935
1936class DiskEncryptionSet(Resource):
1937    """disk encryption set resource.
1938
1939    Variables are only populated by the server, and will be ignored when sending a request.
1940
1941    All required parameters must be populated in order to send to Azure.
1942
1943    :ivar id: Resource Id.
1944    :vartype id: str
1945    :ivar name: Resource name.
1946    :vartype name: str
1947    :ivar type: Resource type.
1948    :vartype type: str
1949    :param location: Required. Resource location.
1950    :type location: str
1951    :param tags: A set of tags. Resource tags.
1952    :type tags: dict[str, str]
1953    :param identity: The managed identity for the disk encryption set. It should be given
1954     permission on the key vault before it can be used to encrypt disks.
1955    :type identity: ~azure.mgmt.compute.v2020_12_01.models.EncryptionSetIdentity
1956    :param encryption_type: The type of key used to encrypt the data of the disk. Possible values
1957     include: "EncryptionAtRestWithCustomerKey", "EncryptionAtRestWithPlatformAndCustomerKeys".
1958    :type encryption_type: str or ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetType
1959    :param active_key: The key vault key which is currently used by this disk encryption set.
1960    :type active_key: ~azure.mgmt.compute.v2020_12_01.models.KeyForDiskEncryptionSet
1961    :ivar previous_keys: A readonly collection of key vault keys previously used by this disk
1962     encryption set while a key rotation is in progress. It will be empty if there is no ongoing key
1963     rotation.
1964    :vartype previous_keys: list[~azure.mgmt.compute.v2020_12_01.models.KeyForDiskEncryptionSet]
1965    :ivar provisioning_state: The disk encryption set provisioning state.
1966    :vartype provisioning_state: str
1967    :param rotation_to_latest_key_version_enabled: Set this flag to true to enable auto-updating of
1968     this disk encryption set to the latest key version.
1969    :type rotation_to_latest_key_version_enabled: bool
1970    :ivar last_key_rotation_timestamp: The time when the active key of this disk encryption set was
1971     updated.
1972    :vartype last_key_rotation_timestamp: ~datetime.datetime
1973    """
1974
1975    _validation = {
1976        'id': {'readonly': True},
1977        'name': {'readonly': True},
1978        'type': {'readonly': True},
1979        'location': {'required': True},
1980        'previous_keys': {'readonly': True},
1981        'provisioning_state': {'readonly': True},
1982        'last_key_rotation_timestamp': {'readonly': True},
1983    }
1984
1985    _attribute_map = {
1986        'id': {'key': 'id', 'type': 'str'},
1987        'name': {'key': 'name', 'type': 'str'},
1988        'type': {'key': 'type', 'type': 'str'},
1989        'location': {'key': 'location', 'type': 'str'},
1990        'tags': {'key': 'tags', 'type': '{str}'},
1991        'identity': {'key': 'identity', 'type': 'EncryptionSetIdentity'},
1992        'encryption_type': {'key': 'properties.encryptionType', 'type': 'str'},
1993        'active_key': {'key': 'properties.activeKey', 'type': 'KeyForDiskEncryptionSet'},
1994        'previous_keys': {'key': 'properties.previousKeys', 'type': '[KeyForDiskEncryptionSet]'},
1995        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1996        'rotation_to_latest_key_version_enabled': {'key': 'properties.rotationToLatestKeyVersionEnabled', 'type': 'bool'},
1997        'last_key_rotation_timestamp': {'key': 'properties.lastKeyRotationTimestamp', 'type': 'iso-8601'},
1998    }
1999
2000    def __init__(
2001        self,
2002        *,
2003        location: str,
2004        tags: Optional[Dict[str, str]] = None,
2005        identity: Optional["EncryptionSetIdentity"] = None,
2006        encryption_type: Optional[Union[str, "DiskEncryptionSetType"]] = None,
2007        active_key: Optional["KeyForDiskEncryptionSet"] = None,
2008        rotation_to_latest_key_version_enabled: Optional[bool] = None,
2009        **kwargs
2010    ):
2011        super(DiskEncryptionSet, self).__init__(location=location, tags=tags, **kwargs)
2012        self.identity = identity
2013        self.encryption_type = encryption_type
2014        self.active_key = active_key
2015        self.previous_keys = None
2016        self.provisioning_state = None
2017        self.rotation_to_latest_key_version_enabled = rotation_to_latest_key_version_enabled
2018        self.last_key_rotation_timestamp = None
2019
2020
2021class DiskEncryptionSetList(msrest.serialization.Model):
2022    """The List disk encryption set operation response.
2023
2024    All required parameters must be populated in order to send to Azure.
2025
2026    :param value: Required. A list of disk encryption sets.
2027    :type value: list[~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSet]
2028    :param next_link: The uri to fetch the next page of disk encryption sets. Call ListNext() with
2029     this to fetch the next page of disk encryption sets.
2030    :type next_link: str
2031    """
2032
2033    _validation = {
2034        'value': {'required': True},
2035    }
2036
2037    _attribute_map = {
2038        'value': {'key': 'value', 'type': '[DiskEncryptionSet]'},
2039        'next_link': {'key': 'nextLink', 'type': 'str'},
2040    }
2041
2042    def __init__(
2043        self,
2044        *,
2045        value: List["DiskEncryptionSet"],
2046        next_link: Optional[str] = None,
2047        **kwargs
2048    ):
2049        super(DiskEncryptionSetList, self).__init__(**kwargs)
2050        self.value = value
2051        self.next_link = next_link
2052
2053
2054class SubResource(msrest.serialization.Model):
2055    """SubResource.
2056
2057    :param id: Resource Id.
2058    :type id: str
2059    """
2060
2061    _attribute_map = {
2062        'id': {'key': 'id', 'type': 'str'},
2063    }
2064
2065    def __init__(
2066        self,
2067        *,
2068        id: Optional[str] = None,
2069        **kwargs
2070    ):
2071        super(SubResource, self).__init__(**kwargs)
2072        self.id = id
2073
2074
2075class DiskEncryptionSetParameters(SubResource):
2076    """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.
2077
2078    :param id: Resource Id.
2079    :type id: str
2080    """
2081
2082    _attribute_map = {
2083        'id': {'key': 'id', 'type': 'str'},
2084    }
2085
2086    def __init__(
2087        self,
2088        *,
2089        id: Optional[str] = None,
2090        **kwargs
2091    ):
2092        super(DiskEncryptionSetParameters, self).__init__(id=id, **kwargs)
2093
2094
2095class DiskEncryptionSettings(msrest.serialization.Model):
2096    """Describes a Encryption Settings for a Disk.
2097
2098    :param disk_encryption_key: Specifies the location of the disk encryption key, which is a Key
2099     Vault Secret.
2100    :type disk_encryption_key: ~azure.mgmt.compute.v2020_12_01.models.KeyVaultSecretReference
2101    :param key_encryption_key: Specifies the location of the key encryption key in Key Vault.
2102    :type key_encryption_key: ~azure.mgmt.compute.v2020_12_01.models.KeyVaultKeyReference
2103    :param enabled: Specifies whether disk encryption should be enabled on the virtual machine.
2104    :type enabled: bool
2105    """
2106
2107    _attribute_map = {
2108        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultSecretReference'},
2109        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultKeyReference'},
2110        'enabled': {'key': 'enabled', 'type': 'bool'},
2111    }
2112
2113    def __init__(
2114        self,
2115        *,
2116        disk_encryption_key: Optional["KeyVaultSecretReference"] = None,
2117        key_encryption_key: Optional["KeyVaultKeyReference"] = None,
2118        enabled: Optional[bool] = None,
2119        **kwargs
2120    ):
2121        super(DiskEncryptionSettings, self).__init__(**kwargs)
2122        self.disk_encryption_key = disk_encryption_key
2123        self.key_encryption_key = key_encryption_key
2124        self.enabled = enabled
2125
2126
2127class DiskEncryptionSetUpdate(msrest.serialization.Model):
2128    """disk encryption set update resource.
2129
2130    :param tags: A set of tags. Resource tags.
2131    :type tags: dict[str, str]
2132    :param identity: The managed identity for the disk encryption set. It should be given
2133     permission on the key vault before it can be used to encrypt disks.
2134    :type identity: ~azure.mgmt.compute.v2020_12_01.models.EncryptionSetIdentity
2135    :param encryption_type: The type of key used to encrypt the data of the disk. Possible values
2136     include: "EncryptionAtRestWithCustomerKey", "EncryptionAtRestWithPlatformAndCustomerKeys".
2137    :type encryption_type: str or ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetType
2138    :param active_key: Key Vault Key Url to be used for server side encryption of Managed Disks and
2139     Snapshots.
2140    :type active_key: ~azure.mgmt.compute.v2020_12_01.models.KeyForDiskEncryptionSet
2141    :param rotation_to_latest_key_version_enabled: Set this flag to true to enable auto-updating of
2142     this disk encryption set to the latest key version.
2143    :type rotation_to_latest_key_version_enabled: bool
2144    """
2145
2146    _attribute_map = {
2147        'tags': {'key': 'tags', 'type': '{str}'},
2148        'identity': {'key': 'identity', 'type': 'EncryptionSetIdentity'},
2149        'encryption_type': {'key': 'properties.encryptionType', 'type': 'str'},
2150        'active_key': {'key': 'properties.activeKey', 'type': 'KeyForDiskEncryptionSet'},
2151        'rotation_to_latest_key_version_enabled': {'key': 'properties.rotationToLatestKeyVersionEnabled', 'type': 'bool'},
2152    }
2153
2154    def __init__(
2155        self,
2156        *,
2157        tags: Optional[Dict[str, str]] = None,
2158        identity: Optional["EncryptionSetIdentity"] = None,
2159        encryption_type: Optional[Union[str, "DiskEncryptionSetType"]] = None,
2160        active_key: Optional["KeyForDiskEncryptionSet"] = None,
2161        rotation_to_latest_key_version_enabled: Optional[bool] = None,
2162        **kwargs
2163    ):
2164        super(DiskEncryptionSetUpdate, self).__init__(**kwargs)
2165        self.tags = tags
2166        self.identity = identity
2167        self.encryption_type = encryption_type
2168        self.active_key = active_key
2169        self.rotation_to_latest_key_version_enabled = rotation_to_latest_key_version_enabled
2170
2171
2172class DiskInstanceView(msrest.serialization.Model):
2173    """The instance view of the disk.
2174
2175    :param name: The disk name.
2176    :type name: str
2177    :param encryption_settings: Specifies the encryption settings for the OS Disk.
2178     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
2179    :type encryption_settings: list[~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSettings]
2180    :param statuses: The resource status information.
2181    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
2182    """
2183
2184    _attribute_map = {
2185        'name': {'key': 'name', 'type': 'str'},
2186        'encryption_settings': {'key': 'encryptionSettings', 'type': '[DiskEncryptionSettings]'},
2187        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
2188    }
2189
2190    def __init__(
2191        self,
2192        *,
2193        name: Optional[str] = None,
2194        encryption_settings: Optional[List["DiskEncryptionSettings"]] = None,
2195        statuses: Optional[List["InstanceViewStatus"]] = None,
2196        **kwargs
2197    ):
2198        super(DiskInstanceView, self).__init__(**kwargs)
2199        self.name = name
2200        self.encryption_settings = encryption_settings
2201        self.statuses = statuses
2202
2203
2204class DiskList(msrest.serialization.Model):
2205    """The List Disks operation response.
2206
2207    All required parameters must be populated in order to send to Azure.
2208
2209    :param value: Required. A list of disks.
2210    :type value: list[~azure.mgmt.compute.v2020_12_01.models.Disk]
2211    :param next_link: The uri to fetch the next page of disks. Call ListNext() with this to fetch
2212     the next page of disks.
2213    :type next_link: str
2214    """
2215
2216    _validation = {
2217        'value': {'required': True},
2218    }
2219
2220    _attribute_map = {
2221        'value': {'key': 'value', 'type': '[Disk]'},
2222        'next_link': {'key': 'nextLink', 'type': 'str'},
2223    }
2224
2225    def __init__(
2226        self,
2227        *,
2228        value: List["Disk"],
2229        next_link: Optional[str] = None,
2230        **kwargs
2231    ):
2232        super(DiskList, self).__init__(**kwargs)
2233        self.value = value
2234        self.next_link = next_link
2235
2236
2237class ProxyOnlyResource(msrest.serialization.Model):
2238    """The ProxyOnly Resource model definition.
2239
2240    Variables are only populated by the server, and will be ignored when sending a request.
2241
2242    :ivar id: Resource Id.
2243    :vartype id: str
2244    :ivar name: Resource name.
2245    :vartype name: str
2246    :ivar type: Resource type.
2247    :vartype type: str
2248    """
2249
2250    _validation = {
2251        'id': {'readonly': True},
2252        'name': {'readonly': True},
2253        'type': {'readonly': True},
2254    }
2255
2256    _attribute_map = {
2257        'id': {'key': 'id', 'type': 'str'},
2258        'name': {'key': 'name', 'type': 'str'},
2259        'type': {'key': 'type', 'type': 'str'},
2260    }
2261
2262    def __init__(
2263        self,
2264        **kwargs
2265    ):
2266        super(ProxyOnlyResource, self).__init__(**kwargs)
2267        self.id = None
2268        self.name = None
2269        self.type = None
2270
2271
2272class DiskRestorePoint(ProxyOnlyResource):
2273    """Properties of disk restore point.
2274
2275    Variables are only populated by the server, and will be ignored when sending a request.
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    :ivar time_created: The timestamp of restorePoint creation.
2284    :vartype time_created: ~datetime.datetime
2285    :ivar source_resource_id: arm id of source disk.
2286    :vartype source_resource_id: str
2287    :ivar os_type: The Operating System type. Possible values include: "Windows", "Linux".
2288    :vartype os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
2289    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
2290     disks only. Possible values include: "V1", "V2".
2291    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGeneration
2292    :param purchase_plan: Purchase plan information for the the image from which the OS disk was
2293     created.
2294    :type purchase_plan: ~azure.mgmt.compute.v2020_12_01.models.PurchasePlan
2295    :ivar family_id: id of the backing snapshot's MIS family.
2296    :vartype family_id: str
2297    :ivar source_unique_id: unique incarnation id of the source disk.
2298    :vartype source_unique_id: str
2299    :ivar encryption: Encryption property can be used to encrypt data at rest with customer managed
2300     keys or platform managed keys.
2301    :vartype encryption: ~azure.mgmt.compute.v2020_12_01.models.Encryption
2302    :param supports_hibernation: Indicates the OS on a disk supports hibernation.
2303    :type supports_hibernation: bool
2304    """
2305
2306    _validation = {
2307        'id': {'readonly': True},
2308        'name': {'readonly': True},
2309        'type': {'readonly': True},
2310        'time_created': {'readonly': True},
2311        'source_resource_id': {'readonly': True},
2312        'os_type': {'readonly': True},
2313        'family_id': {'readonly': True},
2314        'source_unique_id': {'readonly': True},
2315        'encryption': {'readonly': True},
2316    }
2317
2318    _attribute_map = {
2319        'id': {'key': 'id', 'type': 'str'},
2320        'name': {'key': 'name', 'type': 'str'},
2321        'type': {'key': 'type', 'type': 'str'},
2322        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
2323        'source_resource_id': {'key': 'properties.sourceResourceId', 'type': 'str'},
2324        'os_type': {'key': 'properties.osType', 'type': 'str'},
2325        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
2326        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'PurchasePlan'},
2327        'family_id': {'key': 'properties.familyId', 'type': 'str'},
2328        'source_unique_id': {'key': 'properties.sourceUniqueId', 'type': 'str'},
2329        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
2330        'supports_hibernation': {'key': 'properties.supportsHibernation', 'type': 'bool'},
2331    }
2332
2333    def __init__(
2334        self,
2335        *,
2336        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
2337        purchase_plan: Optional["PurchasePlan"] = None,
2338        supports_hibernation: Optional[bool] = None,
2339        **kwargs
2340    ):
2341        super(DiskRestorePoint, self).__init__(**kwargs)
2342        self.time_created = None
2343        self.source_resource_id = None
2344        self.os_type = None
2345        self.hyper_v_generation = hyper_v_generation
2346        self.purchase_plan = purchase_plan
2347        self.family_id = None
2348        self.source_unique_id = None
2349        self.encryption = None
2350        self.supports_hibernation = supports_hibernation
2351
2352
2353class DiskRestorePointList(msrest.serialization.Model):
2354    """The List Disk Restore Points operation response.
2355
2356    All required parameters must be populated in order to send to Azure.
2357
2358    :param value: Required. A list of disk restore points.
2359    :type value: list[~azure.mgmt.compute.v2020_12_01.models.DiskRestorePoint]
2360    :param next_link: The uri to fetch the next page of disk restore points. Call ListNext() with
2361     this to fetch the next page of disk restore points.
2362    :type next_link: str
2363    """
2364
2365    _validation = {
2366        'value': {'required': True},
2367    }
2368
2369    _attribute_map = {
2370        'value': {'key': 'value', 'type': '[DiskRestorePoint]'},
2371        'next_link': {'key': 'nextLink', 'type': 'str'},
2372    }
2373
2374    def __init__(
2375        self,
2376        *,
2377        value: List["DiskRestorePoint"],
2378        next_link: Optional[str] = None,
2379        **kwargs
2380    ):
2381        super(DiskRestorePointList, self).__init__(**kwargs)
2382        self.value = value
2383        self.next_link = next_link
2384
2385
2386class DiskSecurityProfile(msrest.serialization.Model):
2387    """Contains the security related information for the resource.
2388
2389    :param security_type: Specifies the SecurityType of the VM. Applicable for OS disks only.
2390     Possible values include: "TrustedLaunch".
2391    :type security_type: str or ~azure.mgmt.compute.v2020_12_01.models.DiskSecurityTypes
2392    """
2393
2394    _attribute_map = {
2395        'security_type': {'key': 'securityType', 'type': 'str'},
2396    }
2397
2398    def __init__(
2399        self,
2400        *,
2401        security_type: Optional[Union[str, "DiskSecurityTypes"]] = None,
2402        **kwargs
2403    ):
2404        super(DiskSecurityProfile, self).__init__(**kwargs)
2405        self.security_type = security_type
2406
2407
2408class DiskSku(msrest.serialization.Model):
2409    """The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, or StandardSSD_ZRS.
2410
2411    Variables are only populated by the server, and will be ignored when sending a request.
2412
2413    :param name: The sku name. Possible values include: "Standard_LRS", "Premium_LRS",
2414     "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS", "StandardSSD_ZRS".
2415    :type name: str or ~azure.mgmt.compute.v2020_12_01.models.DiskStorageAccountTypes
2416    :ivar tier: The sku tier.
2417    :vartype tier: str
2418    """
2419
2420    _validation = {
2421        'tier': {'readonly': True},
2422    }
2423
2424    _attribute_map = {
2425        'name': {'key': 'name', 'type': 'str'},
2426        'tier': {'key': 'tier', 'type': 'str'},
2427    }
2428
2429    def __init__(
2430        self,
2431        *,
2432        name: Optional[Union[str, "DiskStorageAccountTypes"]] = None,
2433        **kwargs
2434    ):
2435        super(DiskSku, self).__init__(**kwargs)
2436        self.name = name
2437        self.tier = None
2438
2439
2440class DiskUpdate(msrest.serialization.Model):
2441    """Disk update resource.
2442
2443    Variables are only populated by the server, and will be ignored when sending a request.
2444
2445    :param tags: A set of tags. Resource tags.
2446    :type tags: dict[str, str]
2447    :param sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS,
2448     UltraSSD_LRS, Premium_ZRS, or StandardSSD_ZRS.
2449    :type sku: ~azure.mgmt.compute.v2020_12_01.models.DiskSku
2450    :param os_type: the Operating System type. Possible values include: "Windows", "Linux".
2451    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
2452    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
2453     indicates the size of the disk to create. If this field is present for updates or creation with
2454     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
2455     running VM, and can only increase the disk's size.
2456    :type disk_size_gb: int
2457    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
2458     Encryption, can contain multiple encryption settings per disk or snapshot.
2459    :type encryption_settings_collection:
2460     ~azure.mgmt.compute.v2020_12_01.models.EncryptionSettingsCollection
2461    :param disk_iops_read_write: The number of IOPS allowed for this disk; only settable for
2462     UltraSSD disks. One operation can transfer between 4k and 256k bytes.
2463    :type disk_iops_read_write: long
2464    :param disk_m_bps_read_write: The bandwidth allowed for this disk; only settable for UltraSSD
2465     disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of
2466     10.
2467    :type disk_m_bps_read_write: long
2468    :param disk_iops_read_only: The total number of IOPS that will be allowed across all VMs
2469     mounting the shared disk as ReadOnly. One operation can transfer between 4k and 256k bytes.
2470    :type disk_iops_read_only: long
2471    :param disk_m_bps_read_only: The total throughput (MBps) that will be allowed across all VMs
2472     mounting the shared disk as ReadOnly. MBps means millions of bytes per second - MB here uses
2473     the ISO notation, of powers of 10.
2474    :type disk_m_bps_read_only: long
2475    :param max_shares: The maximum number of VMs that can attach to the disk at the same time.
2476     Value greater than one indicates a disk that can be mounted on multiple VMs at the same time.
2477    :type max_shares: int
2478    :param encryption: Encryption property can be used to encrypt data at rest with customer
2479     managed keys or platform managed keys.
2480    :type encryption: ~azure.mgmt.compute.v2020_12_01.models.Encryption
2481    :param network_access_policy: Policy for accessing the disk via network. Possible values
2482     include: "AllowAll", "AllowPrivate", "DenyAll".
2483    :type network_access_policy: str or ~azure.mgmt.compute.v2020_12_01.models.NetworkAccessPolicy
2484    :param disk_access_id: ARM id of the DiskAccess resource for using private endpoints on disks.
2485    :type disk_access_id: str
2486    :param tier: Performance tier of the disk (e.g, P4, S10) as described here:
2487     https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra
2488     disks.
2489    :type tier: str
2490    :param bursting_enabled: Set to true to enable bursting beyond the provisioned performance
2491     target of the disk. Bursting is disabled by default. Does not apply to Ultra disks.
2492    :type bursting_enabled: bool
2493    :param purchase_plan: Purchase plan information to be added on the OS disk.
2494    :type purchase_plan: ~azure.mgmt.compute.v2020_12_01.models.PurchasePlan
2495    :ivar property_updates_in_progress: Properties of the disk for which update is pending.
2496    :vartype property_updates_in_progress:
2497     ~azure.mgmt.compute.v2020_12_01.models.PropertyUpdatesInProgress
2498    :param supports_hibernation: Indicates the OS on a disk supports hibernation.
2499    :type supports_hibernation: bool
2500    """
2501
2502    _validation = {
2503        'property_updates_in_progress': {'readonly': True},
2504    }
2505
2506    _attribute_map = {
2507        'tags': {'key': 'tags', 'type': '{str}'},
2508        'sku': {'key': 'sku', 'type': 'DiskSku'},
2509        'os_type': {'key': 'properties.osType', 'type': 'str'},
2510        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
2511        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
2512        'disk_iops_read_write': {'key': 'properties.diskIOPSReadWrite', 'type': 'long'},
2513        'disk_m_bps_read_write': {'key': 'properties.diskMBpsReadWrite', 'type': 'long'},
2514        'disk_iops_read_only': {'key': 'properties.diskIOPSReadOnly', 'type': 'long'},
2515        'disk_m_bps_read_only': {'key': 'properties.diskMBpsReadOnly', 'type': 'long'},
2516        'max_shares': {'key': 'properties.maxShares', 'type': 'int'},
2517        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
2518        'network_access_policy': {'key': 'properties.networkAccessPolicy', 'type': 'str'},
2519        'disk_access_id': {'key': 'properties.diskAccessId', 'type': 'str'},
2520        'tier': {'key': 'properties.tier', 'type': 'str'},
2521        'bursting_enabled': {'key': 'properties.burstingEnabled', 'type': 'bool'},
2522        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'PurchasePlan'},
2523        'property_updates_in_progress': {'key': 'properties.propertyUpdatesInProgress', 'type': 'PropertyUpdatesInProgress'},
2524        'supports_hibernation': {'key': 'properties.supportsHibernation', 'type': 'bool'},
2525    }
2526
2527    def __init__(
2528        self,
2529        *,
2530        tags: Optional[Dict[str, str]] = None,
2531        sku: Optional["DiskSku"] = None,
2532        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
2533        disk_size_gb: Optional[int] = None,
2534        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
2535        disk_iops_read_write: Optional[int] = None,
2536        disk_m_bps_read_write: Optional[int] = None,
2537        disk_iops_read_only: Optional[int] = None,
2538        disk_m_bps_read_only: Optional[int] = None,
2539        max_shares: Optional[int] = None,
2540        encryption: Optional["Encryption"] = None,
2541        network_access_policy: Optional[Union[str, "NetworkAccessPolicy"]] = None,
2542        disk_access_id: Optional[str] = None,
2543        tier: Optional[str] = None,
2544        bursting_enabled: Optional[bool] = None,
2545        purchase_plan: Optional["PurchasePlan"] = None,
2546        supports_hibernation: Optional[bool] = None,
2547        **kwargs
2548    ):
2549        super(DiskUpdate, self).__init__(**kwargs)
2550        self.tags = tags
2551        self.sku = sku
2552        self.os_type = os_type
2553        self.disk_size_gb = disk_size_gb
2554        self.encryption_settings_collection = encryption_settings_collection
2555        self.disk_iops_read_write = disk_iops_read_write
2556        self.disk_m_bps_read_write = disk_m_bps_read_write
2557        self.disk_iops_read_only = disk_iops_read_only
2558        self.disk_m_bps_read_only = disk_m_bps_read_only
2559        self.max_shares = max_shares
2560        self.encryption = encryption
2561        self.network_access_policy = network_access_policy
2562        self.disk_access_id = disk_access_id
2563        self.tier = tier
2564        self.bursting_enabled = bursting_enabled
2565        self.purchase_plan = purchase_plan
2566        self.property_updates_in_progress = None
2567        self.supports_hibernation = supports_hibernation
2568
2569
2570class Encryption(msrest.serialization.Model):
2571    """Encryption at rest settings for disk or snapshot.
2572
2573    :param disk_encryption_set_id: ResourceId of the disk encryption set to use for enabling
2574     encryption at rest.
2575    :type disk_encryption_set_id: str
2576    :param type: The type of key used to encrypt the data of the disk. Possible values include:
2577     "EncryptionAtRestWithPlatformKey", "EncryptionAtRestWithCustomerKey",
2578     "EncryptionAtRestWithPlatformAndCustomerKeys".
2579    :type type: str or ~azure.mgmt.compute.v2020_12_01.models.EncryptionType
2580    """
2581
2582    _attribute_map = {
2583        'disk_encryption_set_id': {'key': 'diskEncryptionSetId', 'type': 'str'},
2584        'type': {'key': 'type', 'type': 'str'},
2585    }
2586
2587    def __init__(
2588        self,
2589        *,
2590        disk_encryption_set_id: Optional[str] = None,
2591        type: Optional[Union[str, "EncryptionType"]] = None,
2592        **kwargs
2593    ):
2594        super(Encryption, self).__init__(**kwargs)
2595        self.disk_encryption_set_id = disk_encryption_set_id
2596        self.type = type
2597
2598
2599class EncryptionSetIdentity(msrest.serialization.Model):
2600    """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.
2601
2602    Variables are only populated by the server, and will be ignored when sending a request.
2603
2604    :param type: The type of Managed Identity used by the DiskEncryptionSet. Only SystemAssigned is
2605     supported for new creations. Disk Encryption Sets can be updated with Identity type None during
2606     migration of subscription to a new Azure Active Directory tenant; it will cause the encrypted
2607     resources to lose access to the keys. Possible values include: "SystemAssigned", "None".
2608    :type type: str or ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetIdentityType
2609    :ivar principal_id: The object id of the Managed Identity Resource. This will be sent to the RP
2610     from ARM via the x-ms-identity-principal-id header in the PUT request if the resource has a
2611     systemAssigned(implicit) identity.
2612    :vartype principal_id: str
2613    :ivar tenant_id: The tenant id of the Managed Identity Resource. This will be sent to the RP
2614     from ARM via the x-ms-client-tenant-id header in the PUT request if the resource has a
2615     systemAssigned(implicit) identity.
2616    :vartype tenant_id: str
2617    """
2618
2619    _validation = {
2620        'principal_id': {'readonly': True},
2621        'tenant_id': {'readonly': True},
2622    }
2623
2624    _attribute_map = {
2625        'type': {'key': 'type', 'type': 'str'},
2626        'principal_id': {'key': 'principalId', 'type': 'str'},
2627        'tenant_id': {'key': 'tenantId', 'type': 'str'},
2628    }
2629
2630    def __init__(
2631        self,
2632        *,
2633        type: Optional[Union[str, "DiskEncryptionSetIdentityType"]] = None,
2634        **kwargs
2635    ):
2636        super(EncryptionSetIdentity, self).__init__(**kwargs)
2637        self.type = type
2638        self.principal_id = None
2639        self.tenant_id = None
2640
2641
2642class EncryptionSettingsCollection(msrest.serialization.Model):
2643    """Encryption settings for disk or snapshot.
2644
2645    All required parameters must be populated in order to send to Azure.
2646
2647    :param enabled: Required. Set this flag to true and provide DiskEncryptionKey and optional
2648     KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and
2649     KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object,
2650     the existing settings remain unchanged.
2651    :type enabled: bool
2652    :param encryption_settings: A collection of encryption settings, one for each disk volume.
2653    :type encryption_settings:
2654     list[~azure.mgmt.compute.v2020_12_01.models.EncryptionSettingsElement]
2655    :param encryption_settings_version: Describes what type of encryption is used for the disks.
2656     Once this field is set, it cannot be overwritten. '1.0' corresponds to Azure Disk Encryption
2657     with AAD app.'1.1' corresponds to Azure Disk Encryption.
2658    :type encryption_settings_version: str
2659    """
2660
2661    _validation = {
2662        'enabled': {'required': True},
2663    }
2664
2665    _attribute_map = {
2666        'enabled': {'key': 'enabled', 'type': 'bool'},
2667        'encryption_settings': {'key': 'encryptionSettings', 'type': '[EncryptionSettingsElement]'},
2668        'encryption_settings_version': {'key': 'encryptionSettingsVersion', 'type': 'str'},
2669    }
2670
2671    def __init__(
2672        self,
2673        *,
2674        enabled: bool,
2675        encryption_settings: Optional[List["EncryptionSettingsElement"]] = None,
2676        encryption_settings_version: Optional[str] = None,
2677        **kwargs
2678    ):
2679        super(EncryptionSettingsCollection, self).__init__(**kwargs)
2680        self.enabled = enabled
2681        self.encryption_settings = encryption_settings
2682        self.encryption_settings_version = encryption_settings_version
2683
2684
2685class EncryptionSettingsElement(msrest.serialization.Model):
2686    """Encryption settings for one disk volume.
2687
2688    :param disk_encryption_key: Key Vault Secret Url and vault id of the disk encryption key.
2689    :type disk_encryption_key: ~azure.mgmt.compute.v2020_12_01.models.KeyVaultAndSecretReference
2690    :param key_encryption_key: Key Vault Key Url and vault id of the key encryption key.
2691     KeyEncryptionKey is optional and when provided is used to unwrap the disk encryption key.
2692    :type key_encryption_key: ~azure.mgmt.compute.v2020_12_01.models.KeyVaultAndKeyReference
2693    """
2694
2695    _attribute_map = {
2696        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultAndSecretReference'},
2697        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultAndKeyReference'},
2698    }
2699
2700    def __init__(
2701        self,
2702        *,
2703        disk_encryption_key: Optional["KeyVaultAndSecretReference"] = None,
2704        key_encryption_key: Optional["KeyVaultAndKeyReference"] = None,
2705        **kwargs
2706    ):
2707        super(EncryptionSettingsElement, self).__init__(**kwargs)
2708        self.disk_encryption_key = disk_encryption_key
2709        self.key_encryption_key = key_encryption_key
2710
2711
2712class ExtendedLocation(msrest.serialization.Model):
2713    """The complex type of the extended location.
2714
2715    :param name: The name of the extended location.
2716    :type name: str
2717    :param type: The type of the extended location. Possible values include: "EdgeZone".
2718    :type type: str or ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocationTypes
2719    """
2720
2721    _attribute_map = {
2722        'name': {'key': 'name', 'type': 'str'},
2723        'type': {'key': 'type', 'type': 'str'},
2724    }
2725
2726    def __init__(
2727        self,
2728        *,
2729        name: Optional[str] = None,
2730        type: Optional[Union[str, "ExtendedLocationTypes"]] = None,
2731        **kwargs
2732    ):
2733        super(ExtendedLocation, self).__init__(**kwargs)
2734        self.name = name
2735        self.type = type
2736
2737
2738class GrantAccessData(msrest.serialization.Model):
2739    """Data used for requesting a SAS.
2740
2741    All required parameters must be populated in order to send to Azure.
2742
2743    :param access: Required.  Possible values include: "None", "Read", "Write".
2744    :type access: str or ~azure.mgmt.compute.v2020_12_01.models.AccessLevel
2745    :param duration_in_seconds: Required. Time duration in seconds until the SAS access expires.
2746    :type duration_in_seconds: int
2747    """
2748
2749    _validation = {
2750        'access': {'required': True},
2751        'duration_in_seconds': {'required': True},
2752    }
2753
2754    _attribute_map = {
2755        'access': {'key': 'access', 'type': 'str'},
2756        'duration_in_seconds': {'key': 'durationInSeconds', 'type': 'int'},
2757    }
2758
2759    def __init__(
2760        self,
2761        *,
2762        access: Union[str, "AccessLevel"],
2763        duration_in_seconds: int,
2764        **kwargs
2765    ):
2766        super(GrantAccessData, self).__init__(**kwargs)
2767        self.access = access
2768        self.duration_in_seconds = duration_in_seconds
2769
2770
2771class HardwareProfile(msrest.serialization.Model):
2772    """Specifies the hardware settings for the virtual machine.
2773
2774    :param vm_size: Specifies the size of the virtual machine. :code:`<br>`:code:`<br>` The enum
2775     data type is currently deprecated and will be removed by December 23rd 2023.
2776     :code:`<br>`:code:`<br>` Recommended way to get the list of available sizes is using these
2777     APIs: :code:`<br>`:code:`<br>` `List all available virtual machine sizes in an availability set
2778     <https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes>`_
2779     :code:`<br>`:code:`<br>` `List all available virtual machine sizes in a region
2780     <https://docs.microsoft.com/en-us/rest/api/compute/resourceskus/list>`_
2781     :code:`<br>`:code:`<br>` `List all available virtual machine sizes for resizing
2782     <https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes>`_. For more
2783     information about virtual machine sizes, see `Sizes for virtual machines
2784     <https://docs.microsoft.com/en-us/azure/virtual-machines/sizes>`_. :code:`<br>`:code:`<br>` The
2785     available VM sizes depend on region and availability set. Possible values include: "Basic_A0",
2786     "Basic_A1", "Basic_A2", "Basic_A3", "Basic_A4", "Standard_A0", "Standard_A1", "Standard_A2",
2787     "Standard_A3", "Standard_A4", "Standard_A5", "Standard_A6", "Standard_A7", "Standard_A8",
2788     "Standard_A9", "Standard_A10", "Standard_A11", "Standard_A1_v2", "Standard_A2_v2",
2789     "Standard_A4_v2", "Standard_A8_v2", "Standard_A2m_v2", "Standard_A4m_v2", "Standard_A8m_v2",
2790     "Standard_B1s", "Standard_B1ms", "Standard_B2s", "Standard_B2ms", "Standard_B4ms",
2791     "Standard_B8ms", "Standard_D1", "Standard_D2", "Standard_D3", "Standard_D4", "Standard_D11",
2792     "Standard_D12", "Standard_D13", "Standard_D14", "Standard_D1_v2", "Standard_D2_v2",
2793     "Standard_D3_v2", "Standard_D4_v2", "Standard_D5_v2", "Standard_D2_v3", "Standard_D4_v3",
2794     "Standard_D8_v3", "Standard_D16_v3", "Standard_D32_v3", "Standard_D64_v3", "Standard_D2s_v3",
2795     "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3",
2796     "Standard_D64s_v3", "Standard_D11_v2", "Standard_D12_v2", "Standard_D13_v2", "Standard_D14_v2",
2797     "Standard_D15_v2", "Standard_DS1", "Standard_DS2", "Standard_DS3", "Standard_DS4",
2798     "Standard_DS11", "Standard_DS12", "Standard_DS13", "Standard_DS14", "Standard_DS1_v2",
2799     "Standard_DS2_v2", "Standard_DS3_v2", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_DS11_v2",
2800     "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2",
2801     "Standard_DS13-4_v2", "Standard_DS13-2_v2", "Standard_DS14-8_v2", "Standard_DS14-4_v2",
2802     "Standard_E2_v3", "Standard_E4_v3", "Standard_E8_v3", "Standard_E16_v3", "Standard_E32_v3",
2803     "Standard_E64_v3", "Standard_E2s_v3", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3",
2804     "Standard_E32s_v3", "Standard_E64s_v3", "Standard_E32-16_v3", "Standard_E32-8s_v3",
2805     "Standard_E64-32s_v3", "Standard_E64-16s_v3", "Standard_F1", "Standard_F2", "Standard_F4",
2806     "Standard_F8", "Standard_F16", "Standard_F1s", "Standard_F2s", "Standard_F4s", "Standard_F8s",
2807     "Standard_F16s", "Standard_F2s_v2", "Standard_F4s_v2", "Standard_F8s_v2", "Standard_F16s_v2",
2808     "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_G1", "Standard_G2",
2809     "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", "Standard_GS3",
2810     "Standard_GS4", "Standard_GS5", "Standard_GS4-8", "Standard_GS4-4", "Standard_GS5-16",
2811     "Standard_GS5-8", "Standard_H8", "Standard_H16", "Standard_H8m", "Standard_H16m",
2812     "Standard_H16r", "Standard_H16mr", "Standard_L4s", "Standard_L8s", "Standard_L16s",
2813     "Standard_L32s", "Standard_M64s", "Standard_M64ms", "Standard_M128s", "Standard_M128ms",
2814     "Standard_M64-32ms", "Standard_M64-16ms", "Standard_M128-64ms", "Standard_M128-32ms",
2815     "Standard_NC6", "Standard_NC12", "Standard_NC24", "Standard_NC24r", "Standard_NC6s_v2",
2816     "Standard_NC12s_v2", "Standard_NC24s_v2", "Standard_NC24rs_v2", "Standard_NC6s_v3",
2817     "Standard_NC12s_v3", "Standard_NC24s_v3", "Standard_NC24rs_v3", "Standard_ND6s",
2818     "Standard_ND12s", "Standard_ND24s", "Standard_ND24rs", "Standard_NV6", "Standard_NV12",
2819     "Standard_NV24".
2820    :type vm_size: str or ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineSizeTypes
2821    """
2822
2823    _attribute_map = {
2824        'vm_size': {'key': 'vmSize', 'type': 'str'},
2825    }
2826
2827    def __init__(
2828        self,
2829        *,
2830        vm_size: Optional[Union[str, "VirtualMachineSizeTypes"]] = None,
2831        **kwargs
2832    ):
2833        super(HardwareProfile, self).__init__(**kwargs)
2834        self.vm_size = vm_size
2835
2836
2837class Image(Resource):
2838    """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.
2839
2840    Variables are only populated by the server, and will be ignored when sending a request.
2841
2842    All required parameters must be populated in order to send to Azure.
2843
2844    :ivar id: Resource Id.
2845    :vartype id: str
2846    :ivar name: Resource name.
2847    :vartype name: str
2848    :ivar type: Resource type.
2849    :vartype type: str
2850    :param location: Required. Resource location.
2851    :type location: str
2852    :param tags: A set of tags. Resource tags.
2853    :type tags: dict[str, str]
2854    :param extended_location: The extended location of the Image.
2855    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
2856    :param source_virtual_machine: The source virtual machine from which Image is created.
2857    :type source_virtual_machine: ~azure.mgmt.compute.v2020_12_01.models.SubResource
2858    :param storage_profile: Specifies the storage settings for the virtual machine disks.
2859    :type storage_profile: ~azure.mgmt.compute.v2020_12_01.models.ImageStorageProfile
2860    :ivar provisioning_state: The provisioning state.
2861    :vartype provisioning_state: str
2862    :param hyper_v_generation: Specifies the HyperVGenerationType of the VirtualMachine created
2863     from the image. From API Version 2019-03-01 if the image source is a blob, then we need the
2864     user to specify the value, if the source is managed resource like disk or snapshot, we may
2865     require the user to specify the property if we cannot deduce it from the source managed
2866     resource. Possible values include: "V1", "V2".
2867    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGenerationTypes
2868    """
2869
2870    _validation = {
2871        'id': {'readonly': True},
2872        'name': {'readonly': True},
2873        'type': {'readonly': True},
2874        'location': {'required': True},
2875        'provisioning_state': {'readonly': True},
2876    }
2877
2878    _attribute_map = {
2879        'id': {'key': 'id', 'type': 'str'},
2880        'name': {'key': 'name', 'type': 'str'},
2881        'type': {'key': 'type', 'type': 'str'},
2882        'location': {'key': 'location', 'type': 'str'},
2883        'tags': {'key': 'tags', 'type': '{str}'},
2884        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
2885        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
2886        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
2887        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2888        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
2889    }
2890
2891    def __init__(
2892        self,
2893        *,
2894        location: str,
2895        tags: Optional[Dict[str, str]] = None,
2896        extended_location: Optional["ExtendedLocation"] = None,
2897        source_virtual_machine: Optional["SubResource"] = None,
2898        storage_profile: Optional["ImageStorageProfile"] = None,
2899        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
2900        **kwargs
2901    ):
2902        super(Image, self).__init__(location=location, tags=tags, **kwargs)
2903        self.extended_location = extended_location
2904        self.source_virtual_machine = source_virtual_machine
2905        self.storage_profile = storage_profile
2906        self.provisioning_state = None
2907        self.hyper_v_generation = hyper_v_generation
2908
2909
2910class ImageDisk(msrest.serialization.Model):
2911    """Describes a image disk.
2912
2913    :param snapshot: The snapshot.
2914    :type snapshot: ~azure.mgmt.compute.v2020_12_01.models.SubResource
2915    :param managed_disk: The managedDisk.
2916    :type managed_disk: ~azure.mgmt.compute.v2020_12_01.models.SubResource
2917    :param blob_uri: The Virtual Hard Disk.
2918    :type blob_uri: str
2919    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
2920     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
2921     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
2922     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
2923     "ReadWrite".
2924    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
2925    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
2926     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
2927     This value cannot be larger than 1023 GB.
2928    :type disk_size_gb: int
2929    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
2930     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
2931     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS",
2932     "StandardSSD_ZRS".
2933    :type storage_account_type: str or ~azure.mgmt.compute.v2020_12_01.models.StorageAccountTypes
2934    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
2935     the managed image disk.
2936    :type disk_encryption_set: ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetParameters
2937    """
2938
2939    _attribute_map = {
2940        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
2941        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
2942        'blob_uri': {'key': 'blobUri', 'type': 'str'},
2943        'caching': {'key': 'caching', 'type': 'str'},
2944        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
2945        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2946        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
2947    }
2948
2949    def __init__(
2950        self,
2951        *,
2952        snapshot: Optional["SubResource"] = None,
2953        managed_disk: Optional["SubResource"] = None,
2954        blob_uri: Optional[str] = None,
2955        caching: Optional[Union[str, "CachingTypes"]] = None,
2956        disk_size_gb: Optional[int] = None,
2957        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
2958        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
2959        **kwargs
2960    ):
2961        super(ImageDisk, self).__init__(**kwargs)
2962        self.snapshot = snapshot
2963        self.managed_disk = managed_disk
2964        self.blob_uri = blob_uri
2965        self.caching = caching
2966        self.disk_size_gb = disk_size_gb
2967        self.storage_account_type = storage_account_type
2968        self.disk_encryption_set = disk_encryption_set
2969
2970
2971class ImageDataDisk(ImageDisk):
2972    """Describes a data disk.
2973
2974    All required parameters must be populated in order to send to Azure.
2975
2976    :param snapshot: The snapshot.
2977    :type snapshot: ~azure.mgmt.compute.v2020_12_01.models.SubResource
2978    :param managed_disk: The managedDisk.
2979    :type managed_disk: ~azure.mgmt.compute.v2020_12_01.models.SubResource
2980    :param blob_uri: The Virtual Hard Disk.
2981    :type blob_uri: str
2982    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
2983     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
2984     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
2985     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
2986     "ReadWrite".
2987    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
2988    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
2989     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
2990     This value cannot be larger than 1023 GB.
2991    :type disk_size_gb: int
2992    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
2993     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
2994     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS",
2995     "StandardSSD_ZRS".
2996    :type storage_account_type: str or ~azure.mgmt.compute.v2020_12_01.models.StorageAccountTypes
2997    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
2998     the managed image disk.
2999    :type disk_encryption_set: ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetParameters
3000    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
3001     identify data disks within the VM and therefore must be unique for each data disk attached to a
3002     VM.
3003    :type lun: int
3004    """
3005
3006    _validation = {
3007        'lun': {'required': True},
3008    }
3009
3010    _attribute_map = {
3011        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
3012        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
3013        'blob_uri': {'key': 'blobUri', 'type': 'str'},
3014        'caching': {'key': 'caching', 'type': 'str'},
3015        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3016        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3017        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
3018        'lun': {'key': 'lun', 'type': 'int'},
3019    }
3020
3021    def __init__(
3022        self,
3023        *,
3024        lun: int,
3025        snapshot: Optional["SubResource"] = None,
3026        managed_disk: Optional["SubResource"] = None,
3027        blob_uri: Optional[str] = None,
3028        caching: Optional[Union[str, "CachingTypes"]] = None,
3029        disk_size_gb: Optional[int] = None,
3030        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3031        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
3032        **kwargs
3033    ):
3034        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)
3035        self.lun = lun
3036
3037
3038class ImageDiskReference(msrest.serialization.Model):
3039    """The source image used for creating the disk.
3040
3041    All required parameters must be populated in order to send to Azure.
3042
3043    :param id: Required. A relative uri containing either a Platform Image Repository or user image
3044     reference.
3045    :type id: str
3046    :param lun: If the disk is created from an image's data disk, this is an index that indicates
3047     which of the data disks in the image to use. For OS disks, this field is null.
3048    :type lun: int
3049    """
3050
3051    _validation = {
3052        'id': {'required': True},
3053    }
3054
3055    _attribute_map = {
3056        'id': {'key': 'id', 'type': 'str'},
3057        'lun': {'key': 'lun', 'type': 'int'},
3058    }
3059
3060    def __init__(
3061        self,
3062        *,
3063        id: str,
3064        lun: Optional[int] = None,
3065        **kwargs
3066    ):
3067        super(ImageDiskReference, self).__init__(**kwargs)
3068        self.id = id
3069        self.lun = lun
3070
3071
3072class ImageListResult(msrest.serialization.Model):
3073    """The List Image operation response.
3074
3075    All required parameters must be populated in order to send to Azure.
3076
3077    :param value: Required. The list of Images.
3078    :type value: list[~azure.mgmt.compute.v2020_12_01.models.Image]
3079    :param next_link: The uri to fetch the next page of Images. Call ListNext() with this to fetch
3080     the next page of Images.
3081    :type next_link: str
3082    """
3083
3084    _validation = {
3085        'value': {'required': True},
3086    }
3087
3088    _attribute_map = {
3089        'value': {'key': 'value', 'type': '[Image]'},
3090        'next_link': {'key': 'nextLink', 'type': 'str'},
3091    }
3092
3093    def __init__(
3094        self,
3095        *,
3096        value: List["Image"],
3097        next_link: Optional[str] = None,
3098        **kwargs
3099    ):
3100        super(ImageListResult, self).__init__(**kwargs)
3101        self.value = value
3102        self.next_link = next_link
3103
3104
3105class ImageOSDisk(ImageDisk):
3106    """Describes an Operating System disk.
3107
3108    All required parameters must be populated in order to send to Azure.
3109
3110    :param snapshot: The snapshot.
3111    :type snapshot: ~azure.mgmt.compute.v2020_12_01.models.SubResource
3112    :param managed_disk: The managedDisk.
3113    :type managed_disk: ~azure.mgmt.compute.v2020_12_01.models.SubResource
3114    :param blob_uri: The Virtual Hard Disk.
3115    :type blob_uri: str
3116    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
3117     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
3118     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
3119     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
3120     "ReadWrite".
3121    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
3122    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
3123     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
3124     This value cannot be larger than 1023 GB.
3125    :type disk_size_gb: int
3126    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
3127     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
3128     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS",
3129     "StandardSSD_ZRS".
3130    :type storage_account_type: str or ~azure.mgmt.compute.v2020_12_01.models.StorageAccountTypes
3131    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
3132     the managed image disk.
3133    :type disk_encryption_set: ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetParameters
3134    :param os_type: Required. This property allows you to specify the type of the OS that is
3135     included in the disk if creating a VM from a custom image. :code:`<br>`:code:`<br>` Possible
3136     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
3137     values include: "Windows", "Linux".
3138    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
3139    :param os_state: Required. The OS State. Possible values include: "Generalized", "Specialized".
3140    :type os_state: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemStateTypes
3141    """
3142
3143    _validation = {
3144        'os_type': {'required': True},
3145        'os_state': {'required': True},
3146    }
3147
3148    _attribute_map = {
3149        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
3150        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
3151        'blob_uri': {'key': 'blobUri', 'type': 'str'},
3152        'caching': {'key': 'caching', 'type': 'str'},
3153        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3154        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3155        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
3156        'os_type': {'key': 'osType', 'type': 'str'},
3157        'os_state': {'key': 'osState', 'type': 'str'},
3158    }
3159
3160    def __init__(
3161        self,
3162        *,
3163        os_type: Union[str, "OperatingSystemTypes"],
3164        os_state: Union[str, "OperatingSystemStateTypes"],
3165        snapshot: Optional["SubResource"] = None,
3166        managed_disk: Optional["SubResource"] = None,
3167        blob_uri: Optional[str] = None,
3168        caching: Optional[Union[str, "CachingTypes"]] = None,
3169        disk_size_gb: Optional[int] = None,
3170        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3171        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
3172        **kwargs
3173    ):
3174        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)
3175        self.os_type = os_type
3176        self.os_state = os_state
3177
3178
3179class ImageReference(SubResource):
3180    """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.
3181
3182    Variables are only populated by the server, and will be ignored when sending a request.
3183
3184    :param id: Resource Id.
3185    :type id: str
3186    :param publisher: The image publisher.
3187    :type publisher: str
3188    :param offer: Specifies the offer of the platform image or marketplace image used to create the
3189     virtual machine.
3190    :type offer: str
3191    :param sku: The image SKU.
3192    :type sku: str
3193    :param version: Specifies the version of the platform image or marketplace image used to create
3194     the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and
3195     Build are decimal numbers. Specify 'latest' to use the latest version of an image available at
3196     deploy time. Even if you use 'latest', the VM image will not automatically update after deploy
3197     time even if a new version becomes available.
3198    :type version: str
3199    :ivar exact_version: Specifies in decimal numbers, the version of platform image or marketplace
3200     image used to create the virtual machine. This readonly field differs from 'version', only if
3201     the value specified in 'version' field is 'latest'.
3202    :vartype exact_version: str
3203    """
3204
3205    _validation = {
3206        'exact_version': {'readonly': True},
3207    }
3208
3209    _attribute_map = {
3210        'id': {'key': 'id', 'type': 'str'},
3211        'publisher': {'key': 'publisher', 'type': 'str'},
3212        'offer': {'key': 'offer', 'type': 'str'},
3213        'sku': {'key': 'sku', 'type': 'str'},
3214        'version': {'key': 'version', 'type': 'str'},
3215        'exact_version': {'key': 'exactVersion', 'type': 'str'},
3216    }
3217
3218    def __init__(
3219        self,
3220        *,
3221        id: Optional[str] = None,
3222        publisher: Optional[str] = None,
3223        offer: Optional[str] = None,
3224        sku: Optional[str] = None,
3225        version: Optional[str] = None,
3226        **kwargs
3227    ):
3228        super(ImageReference, self).__init__(id=id, **kwargs)
3229        self.publisher = publisher
3230        self.offer = offer
3231        self.sku = sku
3232        self.version = version
3233        self.exact_version = None
3234
3235
3236class ImageStorageProfile(msrest.serialization.Model):
3237    """Describes a storage profile.
3238
3239    :param os_disk: Specifies information about the operating system disk used by the virtual
3240     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
3241     for Azure virtual machines
3242     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3243    :type os_disk: ~azure.mgmt.compute.v2020_12_01.models.ImageOSDisk
3244    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
3245     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
3246     for Azure virtual machines
3247     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3248    :type data_disks: list[~azure.mgmt.compute.v2020_12_01.models.ImageDataDisk]
3249    :param zone_resilient: Specifies whether an image is zone resilient or not. Default is false.
3250     Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS).
3251    :type zone_resilient: bool
3252    """
3253
3254    _attribute_map = {
3255        'os_disk': {'key': 'osDisk', 'type': 'ImageOSDisk'},
3256        'data_disks': {'key': 'dataDisks', 'type': '[ImageDataDisk]'},
3257        'zone_resilient': {'key': 'zoneResilient', 'type': 'bool'},
3258    }
3259
3260    def __init__(
3261        self,
3262        *,
3263        os_disk: Optional["ImageOSDisk"] = None,
3264        data_disks: Optional[List["ImageDataDisk"]] = None,
3265        zone_resilient: Optional[bool] = None,
3266        **kwargs
3267    ):
3268        super(ImageStorageProfile, self).__init__(**kwargs)
3269        self.os_disk = os_disk
3270        self.data_disks = data_disks
3271        self.zone_resilient = zone_resilient
3272
3273
3274class ImageUpdate(UpdateResource):
3275    """The source user image virtual hard disk. Only tags may be updated.
3276
3277    Variables are only populated by the server, and will be ignored when sending a request.
3278
3279    :param tags: A set of tags. Resource tags.
3280    :type tags: dict[str, str]
3281    :param source_virtual_machine: The source virtual machine from which Image is created.
3282    :type source_virtual_machine: ~azure.mgmt.compute.v2020_12_01.models.SubResource
3283    :param storage_profile: Specifies the storage settings for the virtual machine disks.
3284    :type storage_profile: ~azure.mgmt.compute.v2020_12_01.models.ImageStorageProfile
3285    :ivar provisioning_state: The provisioning state.
3286    :vartype provisioning_state: str
3287    :param hyper_v_generation: Specifies the HyperVGenerationType of the VirtualMachine created
3288     from the image. From API Version 2019-03-01 if the image source is a blob, then we need the
3289     user to specify the value, if the source is managed resource like disk or snapshot, we may
3290     require the user to specify the property if we cannot deduce it from the source managed
3291     resource. Possible values include: "V1", "V2".
3292    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGenerationTypes
3293    """
3294
3295    _validation = {
3296        'provisioning_state': {'readonly': True},
3297    }
3298
3299    _attribute_map = {
3300        'tags': {'key': 'tags', 'type': '{str}'},
3301        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
3302        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
3303        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3304        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
3305    }
3306
3307    def __init__(
3308        self,
3309        *,
3310        tags: Optional[Dict[str, str]] = None,
3311        source_virtual_machine: Optional["SubResource"] = None,
3312        storage_profile: Optional["ImageStorageProfile"] = None,
3313        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
3314        **kwargs
3315    ):
3316        super(ImageUpdate, self).__init__(tags=tags, **kwargs)
3317        self.source_virtual_machine = source_virtual_machine
3318        self.storage_profile = storage_profile
3319        self.provisioning_state = None
3320        self.hyper_v_generation = hyper_v_generation
3321
3322
3323class InnerError(msrest.serialization.Model):
3324    """Inner error details.
3325
3326    :param exceptiontype: The exception type.
3327    :type exceptiontype: str
3328    :param errordetail: The internal error message or exception dump.
3329    :type errordetail: str
3330    """
3331
3332    _attribute_map = {
3333        'exceptiontype': {'key': 'exceptiontype', 'type': 'str'},
3334        'errordetail': {'key': 'errordetail', 'type': 'str'},
3335    }
3336
3337    def __init__(
3338        self,
3339        *,
3340        exceptiontype: Optional[str] = None,
3341        errordetail: Optional[str] = None,
3342        **kwargs
3343    ):
3344        super(InnerError, self).__init__(**kwargs)
3345        self.exceptiontype = exceptiontype
3346        self.errordetail = errordetail
3347
3348
3349class InstanceViewStatus(msrest.serialization.Model):
3350    """Instance view status.
3351
3352    :param code: The status code.
3353    :type code: str
3354    :param level: The level code. Possible values include: "Info", "Warning", "Error".
3355    :type level: str or ~azure.mgmt.compute.v2020_12_01.models.StatusLevelTypes
3356    :param display_status: The short localizable label for the status.
3357    :type display_status: str
3358    :param message: The detailed status message, including for alerts and error messages.
3359    :type message: str
3360    :param time: The time of the status.
3361    :type time: ~datetime.datetime
3362    """
3363
3364    _attribute_map = {
3365        'code': {'key': 'code', 'type': 'str'},
3366        'level': {'key': 'level', 'type': 'str'},
3367        'display_status': {'key': 'displayStatus', 'type': 'str'},
3368        'message': {'key': 'message', 'type': 'str'},
3369        'time': {'key': 'time', 'type': 'iso-8601'},
3370    }
3371
3372    def __init__(
3373        self,
3374        *,
3375        code: Optional[str] = None,
3376        level: Optional[Union[str, "StatusLevelTypes"]] = None,
3377        display_status: Optional[str] = None,
3378        message: Optional[str] = None,
3379        time: Optional[datetime.datetime] = None,
3380        **kwargs
3381    ):
3382        super(InstanceViewStatus, self).__init__(**kwargs)
3383        self.code = code
3384        self.level = level
3385        self.display_status = display_status
3386        self.message = message
3387        self.time = time
3388
3389
3390class KeyForDiskEncryptionSet(msrest.serialization.Model):
3391    """Key Vault Key Url to be used for server side encryption of Managed Disks and Snapshots.
3392
3393    All required parameters must be populated in order to send to Azure.
3394
3395    :param source_vault: Resource id of the KeyVault containing the key or secret. This property is
3396     optional and cannot be used if the KeyVault subscription is not the same as the Disk Encryption
3397     Set subscription.
3398    :type source_vault: ~azure.mgmt.compute.v2020_12_01.models.SourceVault
3399    :param key_url: Required. Fully versioned Key Url pointing to a key in KeyVault. Version
3400     segment of the Url is required regardless of rotationToLatestKeyVersionEnabled value.
3401    :type key_url: str
3402    """
3403
3404    _validation = {
3405        'key_url': {'required': True},
3406    }
3407
3408    _attribute_map = {
3409        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
3410        'key_url': {'key': 'keyUrl', 'type': 'str'},
3411    }
3412
3413    def __init__(
3414        self,
3415        *,
3416        key_url: str,
3417        source_vault: Optional["SourceVault"] = None,
3418        **kwargs
3419    ):
3420        super(KeyForDiskEncryptionSet, self).__init__(**kwargs)
3421        self.source_vault = source_vault
3422        self.key_url = key_url
3423
3424
3425class KeyVaultAndKeyReference(msrest.serialization.Model):
3426    """Key Vault Key Url and vault id of KeK, KeK is optional and when provided is used to unwrap the encryptionKey.
3427
3428    All required parameters must be populated in order to send to Azure.
3429
3430    :param source_vault: Required. Resource id of the KeyVault containing the key or secret.
3431    :type source_vault: ~azure.mgmt.compute.v2020_12_01.models.SourceVault
3432    :param key_url: Required. Url pointing to a key or secret in KeyVault.
3433    :type key_url: str
3434    """
3435
3436    _validation = {
3437        'source_vault': {'required': True},
3438        'key_url': {'required': True},
3439    }
3440
3441    _attribute_map = {
3442        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
3443        'key_url': {'key': 'keyUrl', 'type': 'str'},
3444    }
3445
3446    def __init__(
3447        self,
3448        *,
3449        source_vault: "SourceVault",
3450        key_url: str,
3451        **kwargs
3452    ):
3453        super(KeyVaultAndKeyReference, self).__init__(**kwargs)
3454        self.source_vault = source_vault
3455        self.key_url = key_url
3456
3457
3458class KeyVaultAndSecretReference(msrest.serialization.Model):
3459    """Key Vault Secret Url and vault id of the encryption key.
3460
3461    All required parameters must be populated in order to send to Azure.
3462
3463    :param source_vault: Required. Resource id of the KeyVault containing the key or secret.
3464    :type source_vault: ~azure.mgmt.compute.v2020_12_01.models.SourceVault
3465    :param secret_url: Required. Url pointing to a key or secret in KeyVault.
3466    :type secret_url: str
3467    """
3468
3469    _validation = {
3470        'source_vault': {'required': True},
3471        'secret_url': {'required': True},
3472    }
3473
3474    _attribute_map = {
3475        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
3476        'secret_url': {'key': 'secretUrl', 'type': 'str'},
3477    }
3478
3479    def __init__(
3480        self,
3481        *,
3482        source_vault: "SourceVault",
3483        secret_url: str,
3484        **kwargs
3485    ):
3486        super(KeyVaultAndSecretReference, self).__init__(**kwargs)
3487        self.source_vault = source_vault
3488        self.secret_url = secret_url
3489
3490
3491class KeyVaultKeyReference(msrest.serialization.Model):
3492    """Describes a reference to Key Vault Key.
3493
3494    All required parameters must be populated in order to send to Azure.
3495
3496    :param key_url: Required. The URL referencing a key encryption key in Key Vault.
3497    :type key_url: str
3498    :param source_vault: Required. The relative URL of the Key Vault containing the key.
3499    :type source_vault: ~azure.mgmt.compute.v2020_12_01.models.SubResource
3500    """
3501
3502    _validation = {
3503        'key_url': {'required': True},
3504        'source_vault': {'required': True},
3505    }
3506
3507    _attribute_map = {
3508        'key_url': {'key': 'keyUrl', 'type': 'str'},
3509        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
3510    }
3511
3512    def __init__(
3513        self,
3514        *,
3515        key_url: str,
3516        source_vault: "SubResource",
3517        **kwargs
3518    ):
3519        super(KeyVaultKeyReference, self).__init__(**kwargs)
3520        self.key_url = key_url
3521        self.source_vault = source_vault
3522
3523
3524class KeyVaultSecretReference(msrest.serialization.Model):
3525    """Describes a reference to Key Vault Secret.
3526
3527    All required parameters must be populated in order to send to Azure.
3528
3529    :param secret_url: Required. The URL referencing a secret in a Key Vault.
3530    :type secret_url: str
3531    :param source_vault: Required. The relative URL of the Key Vault containing the secret.
3532    :type source_vault: ~azure.mgmt.compute.v2020_12_01.models.SubResource
3533    """
3534
3535    _validation = {
3536        'secret_url': {'required': True},
3537        'source_vault': {'required': True},
3538    }
3539
3540    _attribute_map = {
3541        'secret_url': {'key': 'secretUrl', 'type': 'str'},
3542        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
3543    }
3544
3545    def __init__(
3546        self,
3547        *,
3548        secret_url: str,
3549        source_vault: "SubResource",
3550        **kwargs
3551    ):
3552        super(KeyVaultSecretReference, self).__init__(**kwargs)
3553        self.secret_url = secret_url
3554        self.source_vault = source_vault
3555
3556
3557class LastPatchInstallationSummary(msrest.serialization.Model):
3558    """Describes the properties of the last installed patch summary.
3559
3560    Variables are only populated by the server, and will be ignored when sending a request.
3561
3562    :ivar status: The overall success or failure status of the operation. It remains "InProgress"
3563     until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded",
3564     or "CompletedWithWarnings.". Possible values include: "Unknown", "InProgress", "Failed",
3565     "Succeeded", "CompletedWithWarnings".
3566    :vartype status: str or ~azure.mgmt.compute.v2020_12_01.models.PatchOperationStatus
3567    :ivar installation_activity_id: The activity ID of the operation that produced this result. It
3568     is used to correlate across CRP and extension logs.
3569    :vartype installation_activity_id: str
3570    :ivar maintenance_window_exceeded: Describes whether the operation ran out of time before it
3571     completed all its intended actions.
3572    :vartype maintenance_window_exceeded: bool
3573    :ivar not_selected_patch_count: The number of all available patches but not going to be
3574     installed because it didn't match a classification or inclusion list entry.
3575    :vartype not_selected_patch_count: int
3576    :ivar excluded_patch_count: The number of all available patches but excluded explicitly by a
3577     customer-specified exclusion list match.
3578    :vartype excluded_patch_count: int
3579    :ivar pending_patch_count: The number of all available patches expected to be installed over
3580     the course of the patch installation operation.
3581    :vartype pending_patch_count: int
3582    :ivar installed_patch_count: The count of patches that successfully installed.
3583    :vartype installed_patch_count: int
3584    :ivar failed_patch_count: The count of patches that failed installation.
3585    :vartype failed_patch_count: int
3586    :ivar start_time: The UTC timestamp when the operation began.
3587    :vartype start_time: ~datetime.datetime
3588    :ivar last_modified_time: The UTC timestamp when the operation began.
3589    :vartype last_modified_time: ~datetime.datetime
3590    :ivar error: The errors that were encountered during execution of the operation. The details
3591     array contains the list of them.
3592    :vartype error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
3593    """
3594
3595    _validation = {
3596        'status': {'readonly': True},
3597        'installation_activity_id': {'readonly': True},
3598        'maintenance_window_exceeded': {'readonly': True},
3599        'not_selected_patch_count': {'readonly': True},
3600        'excluded_patch_count': {'readonly': True},
3601        'pending_patch_count': {'readonly': True},
3602        'installed_patch_count': {'readonly': True},
3603        'failed_patch_count': {'readonly': True},
3604        'start_time': {'readonly': True},
3605        'last_modified_time': {'readonly': True},
3606        'error': {'readonly': True},
3607    }
3608
3609    _attribute_map = {
3610        'status': {'key': 'status', 'type': 'str'},
3611        'installation_activity_id': {'key': 'installationActivityId', 'type': 'str'},
3612        'maintenance_window_exceeded': {'key': 'maintenanceWindowExceeded', 'type': 'bool'},
3613        'not_selected_patch_count': {'key': 'notSelectedPatchCount', 'type': 'int'},
3614        'excluded_patch_count': {'key': 'excludedPatchCount', 'type': 'int'},
3615        'pending_patch_count': {'key': 'pendingPatchCount', 'type': 'int'},
3616        'installed_patch_count': {'key': 'installedPatchCount', 'type': 'int'},
3617        'failed_patch_count': {'key': 'failedPatchCount', 'type': 'int'},
3618        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
3619        'last_modified_time': {'key': 'lastModifiedTime', 'type': 'iso-8601'},
3620        'error': {'key': 'error', 'type': 'ApiError'},
3621    }
3622
3623    def __init__(
3624        self,
3625        **kwargs
3626    ):
3627        super(LastPatchInstallationSummary, self).__init__(**kwargs)
3628        self.status = None
3629        self.installation_activity_id = None
3630        self.maintenance_window_exceeded = None
3631        self.not_selected_patch_count = None
3632        self.excluded_patch_count = None
3633        self.pending_patch_count = None
3634        self.installed_patch_count = None
3635        self.failed_patch_count = None
3636        self.start_time = None
3637        self.last_modified_time = None
3638        self.error = None
3639
3640
3641class LinuxConfiguration(msrest.serialization.Model):
3642    """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>`_.
3643
3644    :param disable_password_authentication: Specifies whether password authentication should be
3645     disabled.
3646    :type disable_password_authentication: bool
3647    :param ssh: Specifies the ssh key configuration for a Linux OS.
3648    :type ssh: ~azure.mgmt.compute.v2020_12_01.models.SshConfiguration
3649    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
3650     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
3651     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
3652     the VM so that extensions can be added to the VM later.
3653    :type provision_vm_agent: bool
3654    :param patch_settings: [Preview Feature] Specifies settings related to VM Guest Patching on
3655     Linux.
3656    :type patch_settings: ~azure.mgmt.compute.v2020_12_01.models.LinuxPatchSettings
3657    """
3658
3659    _attribute_map = {
3660        'disable_password_authentication': {'key': 'disablePasswordAuthentication', 'type': 'bool'},
3661        'ssh': {'key': 'ssh', 'type': 'SshConfiguration'},
3662        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
3663        'patch_settings': {'key': 'patchSettings', 'type': 'LinuxPatchSettings'},
3664    }
3665
3666    def __init__(
3667        self,
3668        *,
3669        disable_password_authentication: Optional[bool] = None,
3670        ssh: Optional["SshConfiguration"] = None,
3671        provision_vm_agent: Optional[bool] = None,
3672        patch_settings: Optional["LinuxPatchSettings"] = None,
3673        **kwargs
3674    ):
3675        super(LinuxConfiguration, self).__init__(**kwargs)
3676        self.disable_password_authentication = disable_password_authentication
3677        self.ssh = ssh
3678        self.provision_vm_agent = provision_vm_agent
3679        self.patch_settings = patch_settings
3680
3681
3682class LinuxParameters(msrest.serialization.Model):
3683    """Input for InstallPatches on a Linux VM, as directly received by the API.
3684
3685    :param classifications_to_include: The update classifications to select when installing patches
3686     for Linux.
3687    :type classifications_to_include: list[str or
3688     ~azure.mgmt.compute.v2020_12_01.models.VMGuestPatchClassificationLinux]
3689    :param package_name_masks_to_include: packages to include in the patch operation. Format:
3690     packageName_packageVersion.
3691    :type package_name_masks_to_include: list[str]
3692    :param package_name_masks_to_exclude: packages to exclude in the patch operation. Format:
3693     packageName_packageVersion.
3694    :type package_name_masks_to_exclude: list[str]
3695    :param maintenance_run_id: This is used as a maintenance run identifier for Auto VM Guest
3696     Patching in Linux.
3697    :type maintenance_run_id: str
3698    """
3699
3700    _attribute_map = {
3701        'classifications_to_include': {'key': 'classificationsToInclude', 'type': '[str]'},
3702        'package_name_masks_to_include': {'key': 'packageNameMasksToInclude', 'type': '[str]'},
3703        'package_name_masks_to_exclude': {'key': 'packageNameMasksToExclude', 'type': '[str]'},
3704        'maintenance_run_id': {'key': 'maintenanceRunId', 'type': 'str'},
3705    }
3706
3707    def __init__(
3708        self,
3709        *,
3710        classifications_to_include: Optional[List[Union[str, "VMGuestPatchClassificationLinux"]]] = None,
3711        package_name_masks_to_include: Optional[List[str]] = None,
3712        package_name_masks_to_exclude: Optional[List[str]] = None,
3713        maintenance_run_id: Optional[str] = None,
3714        **kwargs
3715    ):
3716        super(LinuxParameters, self).__init__(**kwargs)
3717        self.classifications_to_include = classifications_to_include
3718        self.package_name_masks_to_include = package_name_masks_to_include
3719        self.package_name_masks_to_exclude = package_name_masks_to_exclude
3720        self.maintenance_run_id = maintenance_run_id
3721
3722
3723class LinuxPatchSettings(msrest.serialization.Model):
3724    """Specifies settings related to VM Guest Patching on Linux.
3725
3726    :param patch_mode: Specifies the mode of VM Guest Patching to IaaS virtual machine.:code:`<br
3727     />`:code:`<br />` Possible values are::code:`<br />`:code:`<br />` **ImageDefault** - The
3728     virtual machine's default patching configuration is used. :code:`<br />`:code:`<br />`
3729     **AutomaticByPlatform** - The virtual machine will be automatically updated by the platform.
3730     The property provisionVMAgent must be true. Possible values include: "ImageDefault",
3731     "AutomaticByPlatform".
3732    :type patch_mode: str or ~azure.mgmt.compute.v2020_12_01.models.LinuxVMGuestPatchMode
3733    """
3734
3735    _attribute_map = {
3736        'patch_mode': {'key': 'patchMode', 'type': 'str'},
3737    }
3738
3739    def __init__(
3740        self,
3741        *,
3742        patch_mode: Optional[Union[str, "LinuxVMGuestPatchMode"]] = None,
3743        **kwargs
3744    ):
3745        super(LinuxPatchSettings, self).__init__(**kwargs)
3746        self.patch_mode = patch_mode
3747
3748
3749class ListUsagesResult(msrest.serialization.Model):
3750    """The List Usages operation response.
3751
3752    All required parameters must be populated in order to send to Azure.
3753
3754    :param value: Required. The list of compute resource usages.
3755    :type value: list[~azure.mgmt.compute.v2020_12_01.models.Usage]
3756    :param next_link: The URI to fetch the next page of compute resource usage information. Call
3757     ListNext() with this to fetch the next page of compute resource usage information.
3758    :type next_link: str
3759    """
3760
3761    _validation = {
3762        'value': {'required': True},
3763    }
3764
3765    _attribute_map = {
3766        'value': {'key': 'value', 'type': '[Usage]'},
3767        'next_link': {'key': 'nextLink', 'type': 'str'},
3768    }
3769
3770    def __init__(
3771        self,
3772        *,
3773        value: List["Usage"],
3774        next_link: Optional[str] = None,
3775        **kwargs
3776    ):
3777        super(ListUsagesResult, self).__init__(**kwargs)
3778        self.value = value
3779        self.next_link = next_link
3780
3781
3782class LogAnalyticsInputBase(msrest.serialization.Model):
3783    """Api input base class for LogAnalytics Api.
3784
3785    All required parameters must be populated in order to send to Azure.
3786
3787    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
3788     LogAnalytics Api writes output logs to.
3789    :type blob_container_sas_uri: str
3790    :param from_time: Required. From time of the query.
3791    :type from_time: ~datetime.datetime
3792    :param to_time: Required. To time of the query.
3793    :type to_time: ~datetime.datetime
3794    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
3795    :type group_by_throttle_policy: bool
3796    :param group_by_operation_name: Group query result by Operation Name.
3797    :type group_by_operation_name: bool
3798    :param group_by_resource_name: Group query result by Resource Name.
3799    :type group_by_resource_name: bool
3800    :param group_by_client_application_id: Group query result by Client Application ID.
3801    :type group_by_client_application_id: bool
3802    :param group_by_user_agent: Group query result by User Agent.
3803    :type group_by_user_agent: bool
3804    """
3805
3806    _validation = {
3807        'blob_container_sas_uri': {'required': True},
3808        'from_time': {'required': True},
3809        'to_time': {'required': True},
3810    }
3811
3812    _attribute_map = {
3813        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
3814        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
3815        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
3816        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
3817        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
3818        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
3819        'group_by_client_application_id': {'key': 'groupByClientApplicationId', 'type': 'bool'},
3820        'group_by_user_agent': {'key': 'groupByUserAgent', 'type': 'bool'},
3821    }
3822
3823    def __init__(
3824        self,
3825        *,
3826        blob_container_sas_uri: str,
3827        from_time: datetime.datetime,
3828        to_time: datetime.datetime,
3829        group_by_throttle_policy: Optional[bool] = None,
3830        group_by_operation_name: Optional[bool] = None,
3831        group_by_resource_name: Optional[bool] = None,
3832        group_by_client_application_id: Optional[bool] = None,
3833        group_by_user_agent: Optional[bool] = None,
3834        **kwargs
3835    ):
3836        super(LogAnalyticsInputBase, self).__init__(**kwargs)
3837        self.blob_container_sas_uri = blob_container_sas_uri
3838        self.from_time = from_time
3839        self.to_time = to_time
3840        self.group_by_throttle_policy = group_by_throttle_policy
3841        self.group_by_operation_name = group_by_operation_name
3842        self.group_by_resource_name = group_by_resource_name
3843        self.group_by_client_application_id = group_by_client_application_id
3844        self.group_by_user_agent = group_by_user_agent
3845
3846
3847class LogAnalyticsOperationResult(msrest.serialization.Model):
3848    """LogAnalytics operation status response.
3849
3850    Variables are only populated by the server, and will be ignored when sending a request.
3851
3852    :ivar properties: LogAnalyticsOutput.
3853    :vartype properties: ~azure.mgmt.compute.v2020_12_01.models.LogAnalyticsOutput
3854    """
3855
3856    _validation = {
3857        'properties': {'readonly': True},
3858    }
3859
3860    _attribute_map = {
3861        'properties': {'key': 'properties', 'type': 'LogAnalyticsOutput'},
3862    }
3863
3864    def __init__(
3865        self,
3866        **kwargs
3867    ):
3868        super(LogAnalyticsOperationResult, self).__init__(**kwargs)
3869        self.properties = None
3870
3871
3872class LogAnalyticsOutput(msrest.serialization.Model):
3873    """LogAnalytics output properties.
3874
3875    Variables are only populated by the server, and will be ignored when sending a request.
3876
3877    :ivar output: Output file Uri path to blob container.
3878    :vartype output: str
3879    """
3880
3881    _validation = {
3882        'output': {'readonly': True},
3883    }
3884
3885    _attribute_map = {
3886        'output': {'key': 'output', 'type': 'str'},
3887    }
3888
3889    def __init__(
3890        self,
3891        **kwargs
3892    ):
3893        super(LogAnalyticsOutput, self).__init__(**kwargs)
3894        self.output = None
3895
3896
3897class MaintenanceRedeployStatus(msrest.serialization.Model):
3898    """Maintenance Operation Status.
3899
3900    :param is_customer_initiated_maintenance_allowed: True, if customer is allowed to perform
3901     Maintenance.
3902    :type is_customer_initiated_maintenance_allowed: bool
3903    :param pre_maintenance_window_start_time: Start Time for the Pre Maintenance Window.
3904    :type pre_maintenance_window_start_time: ~datetime.datetime
3905    :param pre_maintenance_window_end_time: End Time for the Pre Maintenance Window.
3906    :type pre_maintenance_window_end_time: ~datetime.datetime
3907    :param maintenance_window_start_time: Start Time for the Maintenance Window.
3908    :type maintenance_window_start_time: ~datetime.datetime
3909    :param maintenance_window_end_time: End Time for the Maintenance Window.
3910    :type maintenance_window_end_time: ~datetime.datetime
3911    :param last_operation_result_code: The Last Maintenance Operation Result Code. Possible values
3912     include: "None", "RetryLater", "MaintenanceAborted", "MaintenanceCompleted".
3913    :type last_operation_result_code: str or
3914     ~azure.mgmt.compute.v2020_12_01.models.MaintenanceOperationResultCodeTypes
3915    :param last_operation_message: Message returned for the last Maintenance Operation.
3916    :type last_operation_message: str
3917    """
3918
3919    _attribute_map = {
3920        'is_customer_initiated_maintenance_allowed': {'key': 'isCustomerInitiatedMaintenanceAllowed', 'type': 'bool'},
3921        'pre_maintenance_window_start_time': {'key': 'preMaintenanceWindowStartTime', 'type': 'iso-8601'},
3922        'pre_maintenance_window_end_time': {'key': 'preMaintenanceWindowEndTime', 'type': 'iso-8601'},
3923        'maintenance_window_start_time': {'key': 'maintenanceWindowStartTime', 'type': 'iso-8601'},
3924        'maintenance_window_end_time': {'key': 'maintenanceWindowEndTime', 'type': 'iso-8601'},
3925        'last_operation_result_code': {'key': 'lastOperationResultCode', 'type': 'str'},
3926        'last_operation_message': {'key': 'lastOperationMessage', 'type': 'str'},
3927    }
3928
3929    def __init__(
3930        self,
3931        *,
3932        is_customer_initiated_maintenance_allowed: Optional[bool] = None,
3933        pre_maintenance_window_start_time: Optional[datetime.datetime] = None,
3934        pre_maintenance_window_end_time: Optional[datetime.datetime] = None,
3935        maintenance_window_start_time: Optional[datetime.datetime] = None,
3936        maintenance_window_end_time: Optional[datetime.datetime] = None,
3937        last_operation_result_code: Optional[Union[str, "MaintenanceOperationResultCodeTypes"]] = None,
3938        last_operation_message: Optional[str] = None,
3939        **kwargs
3940    ):
3941        super(MaintenanceRedeployStatus, self).__init__(**kwargs)
3942        self.is_customer_initiated_maintenance_allowed = is_customer_initiated_maintenance_allowed
3943        self.pre_maintenance_window_start_time = pre_maintenance_window_start_time
3944        self.pre_maintenance_window_end_time = pre_maintenance_window_end_time
3945        self.maintenance_window_start_time = maintenance_window_start_time
3946        self.maintenance_window_end_time = maintenance_window_end_time
3947        self.last_operation_result_code = last_operation_result_code
3948        self.last_operation_message = last_operation_message
3949
3950
3951class ManagedDiskParameters(SubResource):
3952    """The parameters of a managed disk.
3953
3954    :param id: Resource Id.
3955    :type id: str
3956    :param storage_account_type: Specifies the storage account type for the managed disk. Managed
3957     OS disk storage account type can only be set when you create the scale set. NOTE: UltraSSD_LRS
3958     can only be used with data disks, it cannot be used with OS Disk. Possible values include:
3959     "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS",
3960     "StandardSSD_ZRS".
3961    :type storage_account_type: str or ~azure.mgmt.compute.v2020_12_01.models.StorageAccountTypes
3962    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
3963     the managed disk.
3964    :type disk_encryption_set: ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetParameters
3965    """
3966
3967    _attribute_map = {
3968        'id': {'key': 'id', 'type': 'str'},
3969        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3970        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
3971    }
3972
3973    def __init__(
3974        self,
3975        *,
3976        id: Optional[str] = None,
3977        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3978        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
3979        **kwargs
3980    ):
3981        super(ManagedDiskParameters, self).__init__(id=id, **kwargs)
3982        self.storage_account_type = storage_account_type
3983        self.disk_encryption_set = disk_encryption_set
3984
3985
3986class NetworkInterfaceReference(SubResource):
3987    """Describes a network interface reference.
3988
3989    :param id: Resource Id.
3990    :type id: str
3991    :param primary: Specifies the primary network interface in case the virtual machine has more
3992     than 1 network interface.
3993    :type primary: bool
3994    """
3995
3996    _attribute_map = {
3997        'id': {'key': 'id', 'type': 'str'},
3998        'primary': {'key': 'properties.primary', 'type': 'bool'},
3999    }
4000
4001    def __init__(
4002        self,
4003        *,
4004        id: Optional[str] = None,
4005        primary: Optional[bool] = None,
4006        **kwargs
4007    ):
4008        super(NetworkInterfaceReference, self).__init__(id=id, **kwargs)
4009        self.primary = primary
4010
4011
4012class NetworkProfile(msrest.serialization.Model):
4013    """Specifies the network interfaces of the virtual machine.
4014
4015    :param network_interfaces: Specifies the list of resource Ids for the network interfaces
4016     associated with the virtual machine.
4017    :type network_interfaces:
4018     list[~azure.mgmt.compute.v2020_12_01.models.NetworkInterfaceReference]
4019    """
4020
4021    _attribute_map = {
4022        'network_interfaces': {'key': 'networkInterfaces', 'type': '[NetworkInterfaceReference]'},
4023    }
4024
4025    def __init__(
4026        self,
4027        *,
4028        network_interfaces: Optional[List["NetworkInterfaceReference"]] = None,
4029        **kwargs
4030    ):
4031        super(NetworkProfile, self).__init__(**kwargs)
4032        self.network_interfaces = network_interfaces
4033
4034
4035class OrchestrationServiceStateInput(msrest.serialization.Model):
4036    """The input for OrchestrationServiceState.
4037
4038    All required parameters must be populated in order to send to Azure.
4039
4040    :param service_name: Required. The name of the service. Possible values include:
4041     "AutomaticRepairs", "DummyOrchestrationServiceName".
4042    :type service_name: str or ~azure.mgmt.compute.v2020_12_01.models.OrchestrationServiceNames
4043    :param action: Required. The action to be performed. Possible values include: "Resume",
4044     "Suspend".
4045    :type action: str or ~azure.mgmt.compute.v2020_12_01.models.OrchestrationServiceStateAction
4046    """
4047
4048    _validation = {
4049        'service_name': {'required': True},
4050        'action': {'required': True},
4051    }
4052
4053    _attribute_map = {
4054        'service_name': {'key': 'serviceName', 'type': 'str'},
4055        'action': {'key': 'action', 'type': 'str'},
4056    }
4057
4058    def __init__(
4059        self,
4060        *,
4061        service_name: Union[str, "OrchestrationServiceNames"],
4062        action: Union[str, "OrchestrationServiceStateAction"],
4063        **kwargs
4064    ):
4065        super(OrchestrationServiceStateInput, self).__init__(**kwargs)
4066        self.service_name = service_name
4067        self.action = action
4068
4069
4070class OrchestrationServiceSummary(msrest.serialization.Model):
4071    """Summary for an orchestration service of a virtual machine scale set.
4072
4073    Variables are only populated by the server, and will be ignored when sending a request.
4074
4075    :ivar service_name: The name of the service. Possible values include: "AutomaticRepairs",
4076     "DummyOrchestrationServiceName".
4077    :vartype service_name: str or ~azure.mgmt.compute.v2020_12_01.models.OrchestrationServiceNames
4078    :ivar service_state: The current state of the service. Possible values include: "NotRunning",
4079     "Running", "Suspended".
4080    :vartype service_state: str or ~azure.mgmt.compute.v2020_12_01.models.OrchestrationServiceState
4081    """
4082
4083    _validation = {
4084        'service_name': {'readonly': True},
4085        'service_state': {'readonly': True},
4086    }
4087
4088    _attribute_map = {
4089        'service_name': {'key': 'serviceName', 'type': 'str'},
4090        'service_state': {'key': 'serviceState', 'type': 'str'},
4091    }
4092
4093    def __init__(
4094        self,
4095        **kwargs
4096    ):
4097        super(OrchestrationServiceSummary, self).__init__(**kwargs)
4098        self.service_name = None
4099        self.service_state = None
4100
4101
4102class OSDisk(msrest.serialization.Model):
4103    """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>`_.
4104
4105    All required parameters must be populated in order to send to Azure.
4106
4107    :param os_type: This property allows you to specify the type of the OS that is included in the
4108     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
4109     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
4110     values include: "Windows", "Linux".
4111    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
4112    :param encryption_settings: Specifies the encryption settings for the OS Disk.
4113     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
4114    :type encryption_settings: ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSettings
4115    :param name: The disk name.
4116    :type name: str
4117    :param vhd: The virtual hard disk.
4118    :type vhd: ~azure.mgmt.compute.v2020_12_01.models.VirtualHardDisk
4119    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
4120     before being attached to the virtual machine. If SourceImage is provided, the destination
4121     virtual hard drive must not exist.
4122    :type image: ~azure.mgmt.compute.v2020_12_01.models.VirtualHardDisk
4123    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
4124     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
4125     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None** for Standard
4126     storage. **ReadOnly** for Premium storage. Possible values include: "None", "ReadOnly",
4127     "ReadWrite".
4128    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
4129    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
4130     disabled on the disk.
4131    :type write_accelerator_enabled: bool
4132    :param diff_disk_settings: Specifies the ephemeral Disk Settings for the operating system disk
4133     used by the virtual machine.
4134    :type diff_disk_settings: ~azure.mgmt.compute.v2020_12_01.models.DiffDiskSettings
4135    :param create_option: Required. Specifies how the virtual machine should be
4136     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
4137     This value is used when you are using a specialized disk to create the virtual
4138     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
4139     image to create the virtual machine. If you are using a platform image, you also use the
4140     imageReference element described above. If you are using a marketplace image, you  also use the
4141     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
4142    :type create_option: str or ~azure.mgmt.compute.v2020_12_01.models.DiskCreateOptionTypes
4143    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
4144     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
4145     This value cannot be larger than 1023 GB.
4146    :type disk_size_gb: int
4147    :param managed_disk: The managed disk parameters.
4148    :type managed_disk: ~azure.mgmt.compute.v2020_12_01.models.ManagedDiskParameters
4149    """
4150
4151    _validation = {
4152        'create_option': {'required': True},
4153    }
4154
4155    _attribute_map = {
4156        'os_type': {'key': 'osType', 'type': 'str'},
4157        'encryption_settings': {'key': 'encryptionSettings', 'type': 'DiskEncryptionSettings'},
4158        'name': {'key': 'name', 'type': 'str'},
4159        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
4160        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
4161        'caching': {'key': 'caching', 'type': 'str'},
4162        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
4163        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
4164        'create_option': {'key': 'createOption', 'type': 'str'},
4165        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
4166        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
4167    }
4168
4169    def __init__(
4170        self,
4171        *,
4172        create_option: Union[str, "DiskCreateOptionTypes"],
4173        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
4174        encryption_settings: Optional["DiskEncryptionSettings"] = None,
4175        name: Optional[str] = None,
4176        vhd: Optional["VirtualHardDisk"] = None,
4177        image: Optional["VirtualHardDisk"] = None,
4178        caching: Optional[Union[str, "CachingTypes"]] = None,
4179        write_accelerator_enabled: Optional[bool] = None,
4180        diff_disk_settings: Optional["DiffDiskSettings"] = None,
4181        disk_size_gb: Optional[int] = None,
4182        managed_disk: Optional["ManagedDiskParameters"] = None,
4183        **kwargs
4184    ):
4185        super(OSDisk, self).__init__(**kwargs)
4186        self.os_type = os_type
4187        self.encryption_settings = encryption_settings
4188        self.name = name
4189        self.vhd = vhd
4190        self.image = image
4191        self.caching = caching
4192        self.write_accelerator_enabled = write_accelerator_enabled
4193        self.diff_disk_settings = diff_disk_settings
4194        self.create_option = create_option
4195        self.disk_size_gb = disk_size_gb
4196        self.managed_disk = managed_disk
4197
4198
4199class OSDiskImage(msrest.serialization.Model):
4200    """Contains the os disk image information.
4201
4202    All required parameters must be populated in order to send to Azure.
4203
4204    :param operating_system: Required. The operating system of the osDiskImage. Possible values
4205     include: "Windows", "Linux".
4206    :type operating_system: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
4207    """
4208
4209    _validation = {
4210        'operating_system': {'required': True},
4211    }
4212
4213    _attribute_map = {
4214        'operating_system': {'key': 'operatingSystem', 'type': 'str'},
4215    }
4216
4217    def __init__(
4218        self,
4219        *,
4220        operating_system: Union[str, "OperatingSystemTypes"],
4221        **kwargs
4222    ):
4223        super(OSDiskImage, self).__init__(**kwargs)
4224        self.operating_system = operating_system
4225
4226
4227class OSProfile(msrest.serialization.Model):
4228    """Specifies the operating system settings for the virtual machine. Some of the settings cannot be changed once VM is provisioned.
4229
4230    :param computer_name: Specifies the host OS name of the virtual machine.
4231     :code:`<br>`:code:`<br>` This name cannot be updated after the VM is created.
4232     :code:`<br>`:code:`<br>` **Max-length (Windows):** 15 characters :code:`<br>`:code:`<br>`
4233     **Max-length (Linux):** 64 characters. :code:`<br>`:code:`<br>` For naming conventions and
4234     restrictions see `Azure infrastructure services implementation guidelines
4235     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions>`_.
4236    :type computer_name: str
4237    :param admin_username: Specifies the name of the administrator account.
4238     :code:`<br>`:code:`<br>` This property cannot be updated after the VM is created.
4239     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
4240     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
4241     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
4242     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
4243     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
4244     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
4245     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
4246     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
4247     root privileges on Linux virtual machines in Azure
4248     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
4249     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
4250     in this field, see `Selecting User Names for Linux on Azure
4251     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4252    :type admin_username: str
4253    :param admin_password: Specifies the password of the administrator account.
4254     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
4255     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
4256     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
4257     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
4258     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
4259     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
4260     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
4261     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
4262     resetting the password, see `How to reset the Remote Desktop service or its login password in a
4263     Windows VM
4264     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
4265     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
4266     repair disks on Azure Linux VMs using the VMAccess Extension
4267     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
4268    :type admin_password: str
4269    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
4270     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
4271     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` **Note: Do not pass any
4272     secrets or passwords in customData property** :code:`<br>`:code:`<br>` This property cannot be
4273     updated after the VM is created. :code:`<br>`:code:`<br>` customData is passed to the VM to be
4274     saved as a file, for more information see `Custom Data on Azure VMs
4275     <https://azure.microsoft.com/en-us/blog/custom-data-and-cloud-init-on-windows-azure/>`_
4276     :code:`<br>`:code:`<br>` For using cloud-init for your Linux VM, see `Using cloud-init to
4277     customize a Linux VM during creation
4278     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4279    :type custom_data: str
4280    :param windows_configuration: Specifies Windows operating system settings on the virtual
4281     machine.
4282    :type windows_configuration: ~azure.mgmt.compute.v2020_12_01.models.WindowsConfiguration
4283    :param linux_configuration: Specifies the Linux operating system settings on the virtual
4284     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
4285     Azure-Endorsed Distributions
4286     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
4287     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
4288     Non-Endorsed Distributions
4289     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
4290    :type linux_configuration: ~azure.mgmt.compute.v2020_12_01.models.LinuxConfiguration
4291    :param secrets: Specifies set of certificates that should be installed onto the virtual
4292     machine.
4293    :type secrets: list[~azure.mgmt.compute.v2020_12_01.models.VaultSecretGroup]
4294    :param allow_extension_operations: Specifies whether extension operations should be allowed on
4295     the virtual machine. :code:`<br>`:code:`<br>`This may only be set to False when no extensions
4296     are present on the virtual machine.
4297    :type allow_extension_operations: bool
4298    :param require_guest_provision_signal: Specifies whether the guest provision signal is required
4299     to infer provision success of the virtual machine.  **Note: This property is for private
4300     testing only, and all customers must not set the property to false.**.
4301    :type require_guest_provision_signal: bool
4302    """
4303
4304    _attribute_map = {
4305        'computer_name': {'key': 'computerName', 'type': 'str'},
4306        'admin_username': {'key': 'adminUsername', 'type': 'str'},
4307        'admin_password': {'key': 'adminPassword', 'type': 'str'},
4308        'custom_data': {'key': 'customData', 'type': 'str'},
4309        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
4310        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
4311        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
4312        'allow_extension_operations': {'key': 'allowExtensionOperations', 'type': 'bool'},
4313        'require_guest_provision_signal': {'key': 'requireGuestProvisionSignal', 'type': 'bool'},
4314    }
4315
4316    def __init__(
4317        self,
4318        *,
4319        computer_name: Optional[str] = None,
4320        admin_username: Optional[str] = None,
4321        admin_password: Optional[str] = None,
4322        custom_data: Optional[str] = None,
4323        windows_configuration: Optional["WindowsConfiguration"] = None,
4324        linux_configuration: Optional["LinuxConfiguration"] = None,
4325        secrets: Optional[List["VaultSecretGroup"]] = None,
4326        allow_extension_operations: Optional[bool] = None,
4327        require_guest_provision_signal: Optional[bool] = None,
4328        **kwargs
4329    ):
4330        super(OSProfile, self).__init__(**kwargs)
4331        self.computer_name = computer_name
4332        self.admin_username = admin_username
4333        self.admin_password = admin_password
4334        self.custom_data = custom_data
4335        self.windows_configuration = windows_configuration
4336        self.linux_configuration = linux_configuration
4337        self.secrets = secrets
4338        self.allow_extension_operations = allow_extension_operations
4339        self.require_guest_provision_signal = require_guest_provision_signal
4340
4341
4342class PatchInstallationDetail(msrest.serialization.Model):
4343    """Information about a specific patch that was encountered during an installation action.
4344
4345    Variables are only populated by the server, and will be ignored when sending a request.
4346
4347    :ivar patch_id: A unique identifier for the patch.
4348    :vartype patch_id: str
4349    :ivar name: The friendly name of the patch.
4350    :vartype name: str
4351    :ivar version: The version string of the package. It may conform to Semantic Versioning. Only
4352     applies to Linux.
4353    :vartype version: str
4354    :ivar kb_id: The KBID of the patch. Only applies to Windows patches.
4355    :vartype kb_id: str
4356    :ivar classifications: The classification(s) of the patch as provided by the patch publisher.
4357    :vartype classifications: list[str]
4358    :ivar installation_state: The state of the patch after the installation operation completed.
4359     Possible values include: "Unknown", "Installed", "Failed", "Excluded", "NotSelected",
4360     "Pending".
4361    :vartype installation_state: str or
4362     ~azure.mgmt.compute.v2020_12_01.models.PatchInstallationState
4363    """
4364
4365    _validation = {
4366        'patch_id': {'readonly': True},
4367        'name': {'readonly': True},
4368        'version': {'readonly': True},
4369        'kb_id': {'readonly': True},
4370        'classifications': {'readonly': True},
4371        'installation_state': {'readonly': True},
4372    }
4373
4374    _attribute_map = {
4375        'patch_id': {'key': 'patchId', 'type': 'str'},
4376        'name': {'key': 'name', 'type': 'str'},
4377        'version': {'key': 'version', 'type': 'str'},
4378        'kb_id': {'key': 'kbId', 'type': 'str'},
4379        'classifications': {'key': 'classifications', 'type': '[str]'},
4380        'installation_state': {'key': 'installationState', 'type': 'str'},
4381    }
4382
4383    def __init__(
4384        self,
4385        **kwargs
4386    ):
4387        super(PatchInstallationDetail, self).__init__(**kwargs)
4388        self.patch_id = None
4389        self.name = None
4390        self.version = None
4391        self.kb_id = None
4392        self.classifications = None
4393        self.installation_state = None
4394
4395
4396class PatchSettings(msrest.serialization.Model):
4397    """Specifies settings related to VM Guest Patching on Windows.
4398
4399    :param patch_mode: Specifies the mode of VM Guest Patching to IaaS virtual machine.:code:`<br
4400     />`:code:`<br />` Possible values are::code:`<br />`:code:`<br />` **Manual** - You  control
4401     the application of patches to a virtual machine. You do this by applying patches manually
4402     inside the VM. In this mode, automatic updates are disabled; the property
4403     WindowsConfiguration.enableAutomaticUpdates must be false:code:`<br />`:code:`<br />`
4404     **AutomaticByOS** - The virtual machine will automatically be updated by the OS. The property
4405     WindowsConfiguration.enableAutomaticUpdates must be true. :code:`<br />`:code:`<br />`
4406     **AutomaticByPlatform** - the virtual machine will automatically updated by the platform. The
4407     properties provisionVMAgent and WindowsConfiguration.enableAutomaticUpdates must be true.
4408     Possible values include: "Manual", "AutomaticByOS", "AutomaticByPlatform".
4409    :type patch_mode: str or ~azure.mgmt.compute.v2020_12_01.models.WindowsVMGuestPatchMode
4410    :param enable_hotpatching: Enables customers to patch their Azure VMs without requiring a
4411     reboot. For enableHotpatching, the 'provisionVMAgent' must be set to true and 'patchMode' must
4412     be set to 'AutomaticByPlatform'.
4413    :type enable_hotpatching: bool
4414    """
4415
4416    _attribute_map = {
4417        'patch_mode': {'key': 'patchMode', 'type': 'str'},
4418        'enable_hotpatching': {'key': 'enableHotpatching', 'type': 'bool'},
4419    }
4420
4421    def __init__(
4422        self,
4423        *,
4424        patch_mode: Optional[Union[str, "WindowsVMGuestPatchMode"]] = None,
4425        enable_hotpatching: Optional[bool] = None,
4426        **kwargs
4427    ):
4428        super(PatchSettings, self).__init__(**kwargs)
4429        self.patch_mode = patch_mode
4430        self.enable_hotpatching = enable_hotpatching
4431
4432
4433class Plan(msrest.serialization.Model):
4434    """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**.
4435
4436    :param name: The plan ID.
4437    :type name: str
4438    :param publisher: The publisher ID.
4439    :type publisher: str
4440    :param product: Specifies the product of the image from the marketplace. This is the same value
4441     as Offer under the imageReference element.
4442    :type product: str
4443    :param promotion_code: The promotion code.
4444    :type promotion_code: str
4445    """
4446
4447    _attribute_map = {
4448        'name': {'key': 'name', 'type': 'str'},
4449        'publisher': {'key': 'publisher', 'type': 'str'},
4450        'product': {'key': 'product', 'type': 'str'},
4451        'promotion_code': {'key': 'promotionCode', 'type': 'str'},
4452    }
4453
4454    def __init__(
4455        self,
4456        *,
4457        name: Optional[str] = None,
4458        publisher: Optional[str] = None,
4459        product: Optional[str] = None,
4460        promotion_code: Optional[str] = None,
4461        **kwargs
4462    ):
4463        super(Plan, self).__init__(**kwargs)
4464        self.name = name
4465        self.publisher = publisher
4466        self.product = product
4467        self.promotion_code = promotion_code
4468
4469
4470class PrivateEndpoint(msrest.serialization.Model):
4471    """The Private Endpoint resource.
4472
4473    Variables are only populated by the server, and will be ignored when sending a request.
4474
4475    :ivar id: The ARM identifier for Private Endpoint.
4476    :vartype id: str
4477    """
4478
4479    _validation = {
4480        'id': {'readonly': True},
4481    }
4482
4483    _attribute_map = {
4484        'id': {'key': 'id', 'type': 'str'},
4485    }
4486
4487    def __init__(
4488        self,
4489        **kwargs
4490    ):
4491        super(PrivateEndpoint, self).__init__(**kwargs)
4492        self.id = None
4493
4494
4495class PrivateEndpointConnection(msrest.serialization.Model):
4496    """The Private Endpoint Connection resource.
4497
4498    Variables are only populated by the server, and will be ignored when sending a request.
4499
4500    :ivar id: private endpoint connection Id.
4501    :vartype id: str
4502    :ivar name: private endpoint connection name.
4503    :vartype name: str
4504    :ivar type: private endpoint connection type.
4505    :vartype type: str
4506    :ivar private_endpoint: The resource of private end point.
4507    :vartype private_endpoint: ~azure.mgmt.compute.v2020_12_01.models.PrivateEndpoint
4508    :param private_link_service_connection_state: A collection of information about the state of
4509     the connection between DiskAccess and Virtual Network.
4510    :type private_link_service_connection_state:
4511     ~azure.mgmt.compute.v2020_12_01.models.PrivateLinkServiceConnectionState
4512    :ivar provisioning_state: The provisioning state of the private endpoint connection resource.
4513     Possible values include: "Succeeded", "Creating", "Deleting", "Failed".
4514    :vartype provisioning_state: str or
4515     ~azure.mgmt.compute.v2020_12_01.models.PrivateEndpointConnectionProvisioningState
4516    """
4517
4518    _validation = {
4519        'id': {'readonly': True},
4520        'name': {'readonly': True},
4521        'type': {'readonly': True},
4522        'private_endpoint': {'readonly': True},
4523        'provisioning_state': {'readonly': True},
4524    }
4525
4526    _attribute_map = {
4527        'id': {'key': 'id', 'type': 'str'},
4528        'name': {'key': 'name', 'type': 'str'},
4529        'type': {'key': 'type', 'type': 'str'},
4530        'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'},
4531        'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionState'},
4532        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4533    }
4534
4535    def __init__(
4536        self,
4537        *,
4538        private_link_service_connection_state: Optional["PrivateLinkServiceConnectionState"] = None,
4539        **kwargs
4540    ):
4541        super(PrivateEndpointConnection, self).__init__(**kwargs)
4542        self.id = None
4543        self.name = None
4544        self.type = None
4545        self.private_endpoint = None
4546        self.private_link_service_connection_state = private_link_service_connection_state
4547        self.provisioning_state = None
4548
4549
4550class PrivateEndpointConnectionListResult(msrest.serialization.Model):
4551    """A list of private link resources.
4552
4553    :param value: Array of private endpoint connections.
4554    :type value: list[~azure.mgmt.compute.v2020_12_01.models.PrivateEndpointConnection]
4555    :param next_link: The uri to fetch the next page of snapshots. Call ListNext() with this to
4556     fetch the next page of snapshots.
4557    :type next_link: str
4558    """
4559
4560    _attribute_map = {
4561        'value': {'key': 'value', 'type': '[PrivateEndpointConnection]'},
4562        'next_link': {'key': 'nextLink', 'type': 'str'},
4563    }
4564
4565    def __init__(
4566        self,
4567        *,
4568        value: Optional[List["PrivateEndpointConnection"]] = None,
4569        next_link: Optional[str] = None,
4570        **kwargs
4571    ):
4572        super(PrivateEndpointConnectionListResult, self).__init__(**kwargs)
4573        self.value = value
4574        self.next_link = next_link
4575
4576
4577class PrivateLinkResource(msrest.serialization.Model):
4578    """A private link resource.
4579
4580    Variables are only populated by the server, and will be ignored when sending a request.
4581
4582    :ivar id: private link resource Id.
4583    :vartype id: str
4584    :ivar name: private link resource name.
4585    :vartype name: str
4586    :ivar type: private link resource type.
4587    :vartype type: str
4588    :ivar group_id: The private link resource group id.
4589    :vartype group_id: str
4590    :ivar required_members: The private link resource required member names.
4591    :vartype required_members: list[str]
4592    :param required_zone_names: The private link resource DNS zone name.
4593    :type required_zone_names: list[str]
4594    """
4595
4596    _validation = {
4597        'id': {'readonly': True},
4598        'name': {'readonly': True},
4599        'type': {'readonly': True},
4600        'group_id': {'readonly': True},
4601        'required_members': {'readonly': True},
4602    }
4603
4604    _attribute_map = {
4605        'id': {'key': 'id', 'type': 'str'},
4606        'name': {'key': 'name', 'type': 'str'},
4607        'type': {'key': 'type', 'type': 'str'},
4608        'group_id': {'key': 'properties.groupId', 'type': 'str'},
4609        'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'},
4610        'required_zone_names': {'key': 'properties.requiredZoneNames', 'type': '[str]'},
4611    }
4612
4613    def __init__(
4614        self,
4615        *,
4616        required_zone_names: Optional[List[str]] = None,
4617        **kwargs
4618    ):
4619        super(PrivateLinkResource, self).__init__(**kwargs)
4620        self.id = None
4621        self.name = None
4622        self.type = None
4623        self.group_id = None
4624        self.required_members = None
4625        self.required_zone_names = required_zone_names
4626
4627
4628class PrivateLinkResourceListResult(msrest.serialization.Model):
4629    """A list of private link resources.
4630
4631    :param value: Array of private link resources.
4632    :type value: list[~azure.mgmt.compute.v2020_12_01.models.PrivateLinkResource]
4633    """
4634
4635    _attribute_map = {
4636        'value': {'key': 'value', 'type': '[PrivateLinkResource]'},
4637    }
4638
4639    def __init__(
4640        self,
4641        *,
4642        value: Optional[List["PrivateLinkResource"]] = None,
4643        **kwargs
4644    ):
4645        super(PrivateLinkResourceListResult, self).__init__(**kwargs)
4646        self.value = value
4647
4648
4649class PrivateLinkServiceConnectionState(msrest.serialization.Model):
4650    """A collection of information about the state of the connection between service consumer and provider.
4651
4652    :param status: Indicates whether the connection has been Approved/Rejected/Removed by the owner
4653     of the service. Possible values include: "Pending", "Approved", "Rejected".
4654    :type status: str or
4655     ~azure.mgmt.compute.v2020_12_01.models.PrivateEndpointServiceConnectionStatus
4656    :param description: The reason for approval/rejection of the connection.
4657    :type description: str
4658    :param actions_required: A message indicating if changes on the service provider require any
4659     updates on the consumer.
4660    :type actions_required: str
4661    """
4662
4663    _attribute_map = {
4664        'status': {'key': 'status', 'type': 'str'},
4665        'description': {'key': 'description', 'type': 'str'},
4666        'actions_required': {'key': 'actionsRequired', 'type': 'str'},
4667    }
4668
4669    def __init__(
4670        self,
4671        *,
4672        status: Optional[Union[str, "PrivateEndpointServiceConnectionStatus"]] = None,
4673        description: Optional[str] = None,
4674        actions_required: Optional[str] = None,
4675        **kwargs
4676    ):
4677        super(PrivateLinkServiceConnectionState, self).__init__(**kwargs)
4678        self.status = status
4679        self.description = description
4680        self.actions_required = actions_required
4681
4682
4683class PropertyUpdatesInProgress(msrest.serialization.Model):
4684    """Properties of the disk for which update is pending.
4685
4686    :param target_tier: The target performance tier of the disk if a tier change operation is in
4687     progress.
4688    :type target_tier: str
4689    """
4690
4691    _attribute_map = {
4692        'target_tier': {'key': 'targetTier', 'type': 'str'},
4693    }
4694
4695    def __init__(
4696        self,
4697        *,
4698        target_tier: Optional[str] = None,
4699        **kwargs
4700    ):
4701        super(PropertyUpdatesInProgress, self).__init__(**kwargs)
4702        self.target_tier = target_tier
4703
4704
4705class ProximityPlacementGroup(Resource):
4706    """Specifies information about the proximity placement group.
4707
4708    Variables are only populated by the server, and will be ignored when sending a request.
4709
4710    All required parameters must be populated in order to send to Azure.
4711
4712    :ivar id: Resource Id.
4713    :vartype id: str
4714    :ivar name: Resource name.
4715    :vartype name: str
4716    :ivar type: Resource type.
4717    :vartype type: str
4718    :param location: Required. Resource location.
4719    :type location: str
4720    :param tags: A set of tags. Resource tags.
4721    :type tags: dict[str, str]
4722    :param proximity_placement_group_type: Specifies the type of the proximity placement group.
4723     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Standard** : Co-locate
4724     resources within an Azure region or Availability Zone. :code:`<br>`:code:`<br>` **Ultra** : For
4725     future use. Possible values include: "Standard", "Ultra".
4726    :type proximity_placement_group_type: str or
4727     ~azure.mgmt.compute.v2020_12_01.models.ProximityPlacementGroupType
4728    :ivar virtual_machines: A list of references to all virtual machines in the proximity placement
4729     group.
4730    :vartype virtual_machines:
4731     list[~azure.mgmt.compute.v2020_12_01.models.SubResourceWithColocationStatus]
4732    :ivar virtual_machine_scale_sets: A list of references to all virtual machine scale sets in the
4733     proximity placement group.
4734    :vartype virtual_machine_scale_sets:
4735     list[~azure.mgmt.compute.v2020_12_01.models.SubResourceWithColocationStatus]
4736    :ivar availability_sets: A list of references to all availability sets in the proximity
4737     placement group.
4738    :vartype availability_sets:
4739     list[~azure.mgmt.compute.v2020_12_01.models.SubResourceWithColocationStatus]
4740    :param colocation_status: Describes colocation status of the Proximity Placement Group.
4741    :type colocation_status: ~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus
4742    """
4743
4744    _validation = {
4745        'id': {'readonly': True},
4746        'name': {'readonly': True},
4747        'type': {'readonly': True},
4748        'location': {'required': True},
4749        'virtual_machines': {'readonly': True},
4750        'virtual_machine_scale_sets': {'readonly': True},
4751        'availability_sets': {'readonly': True},
4752    }
4753
4754    _attribute_map = {
4755        'id': {'key': 'id', 'type': 'str'},
4756        'name': {'key': 'name', 'type': 'str'},
4757        'type': {'key': 'type', 'type': 'str'},
4758        'location': {'key': 'location', 'type': 'str'},
4759        'tags': {'key': 'tags', 'type': '{str}'},
4760        'proximity_placement_group_type': {'key': 'properties.proximityPlacementGroupType', 'type': 'str'},
4761        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceWithColocationStatus]'},
4762        'virtual_machine_scale_sets': {'key': 'properties.virtualMachineScaleSets', 'type': '[SubResourceWithColocationStatus]'},
4763        'availability_sets': {'key': 'properties.availabilitySets', 'type': '[SubResourceWithColocationStatus]'},
4764        'colocation_status': {'key': 'properties.colocationStatus', 'type': 'InstanceViewStatus'},
4765    }
4766
4767    def __init__(
4768        self,
4769        *,
4770        location: str,
4771        tags: Optional[Dict[str, str]] = None,
4772        proximity_placement_group_type: Optional[Union[str, "ProximityPlacementGroupType"]] = None,
4773        colocation_status: Optional["InstanceViewStatus"] = None,
4774        **kwargs
4775    ):
4776        super(ProximityPlacementGroup, self).__init__(location=location, tags=tags, **kwargs)
4777        self.proximity_placement_group_type = proximity_placement_group_type
4778        self.virtual_machines = None
4779        self.virtual_machine_scale_sets = None
4780        self.availability_sets = None
4781        self.colocation_status = colocation_status
4782
4783
4784class ProximityPlacementGroupListResult(msrest.serialization.Model):
4785    """The List Proximity Placement Group operation response.
4786
4787    All required parameters must be populated in order to send to Azure.
4788
4789    :param value: Required. The list of proximity placement groups.
4790    :type value: list[~azure.mgmt.compute.v2020_12_01.models.ProximityPlacementGroup]
4791    :param next_link: The URI to fetch the next page of proximity placement groups.
4792    :type next_link: str
4793    """
4794
4795    _validation = {
4796        'value': {'required': True},
4797    }
4798
4799    _attribute_map = {
4800        'value': {'key': 'value', 'type': '[ProximityPlacementGroup]'},
4801        'next_link': {'key': 'nextLink', 'type': 'str'},
4802    }
4803
4804    def __init__(
4805        self,
4806        *,
4807        value: List["ProximityPlacementGroup"],
4808        next_link: Optional[str] = None,
4809        **kwargs
4810    ):
4811        super(ProximityPlacementGroupListResult, self).__init__(**kwargs)
4812        self.value = value
4813        self.next_link = next_link
4814
4815
4816class ProximityPlacementGroupUpdate(UpdateResource):
4817    """Specifies information about the proximity placement group.
4818
4819    :param tags: A set of tags. Resource tags.
4820    :type tags: dict[str, str]
4821    """
4822
4823    _attribute_map = {
4824        'tags': {'key': 'tags', 'type': '{str}'},
4825    }
4826
4827    def __init__(
4828        self,
4829        *,
4830        tags: Optional[Dict[str, str]] = None,
4831        **kwargs
4832    ):
4833        super(ProximityPlacementGroupUpdate, self).__init__(tags=tags, **kwargs)
4834
4835
4836class PurchasePlan(msrest.serialization.Model):
4837    """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
4838
4839    All required parameters must be populated in order to send to Azure.
4840
4841    :param name: Required. The plan ID.
4842    :type name: str
4843    :param publisher: Required. The publisher ID.
4844    :type publisher: str
4845    :param product: Required. Specifies the product of the image from the marketplace. This is the
4846     same value as Offer under the imageReference element.
4847    :type product: str
4848    :param promotion_code: The Offer Promotion Code.
4849    :type promotion_code: str
4850    """
4851
4852    _validation = {
4853        'name': {'required': True},
4854        'publisher': {'required': True},
4855        'product': {'required': True},
4856    }
4857
4858    _attribute_map = {
4859        'name': {'key': 'name', 'type': 'str'},
4860        'publisher': {'key': 'publisher', 'type': 'str'},
4861        'product': {'key': 'product', 'type': 'str'},
4862        'promotion_code': {'key': 'promotionCode', 'type': 'str'},
4863    }
4864
4865    def __init__(
4866        self,
4867        *,
4868        name: str,
4869        publisher: str,
4870        product: str,
4871        promotion_code: Optional[str] = None,
4872        **kwargs
4873    ):
4874        super(PurchasePlan, self).__init__(**kwargs)
4875        self.name = name
4876        self.publisher = publisher
4877        self.product = product
4878        self.promotion_code = promotion_code
4879
4880
4881class PurchasePlanAutoGenerated(msrest.serialization.Model):
4882    """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
4883
4884    All required parameters must be populated in order to send to Azure.
4885
4886    :param publisher: Required. The publisher ID.
4887    :type publisher: str
4888    :param name: Required. The plan ID.
4889    :type name: str
4890    :param product: Required. Specifies the product of the image from the marketplace. This is the
4891     same value as Offer under the imageReference element.
4892    :type product: str
4893    """
4894
4895    _validation = {
4896        'publisher': {'required': True},
4897        'name': {'required': True},
4898        'product': {'required': True},
4899    }
4900
4901    _attribute_map = {
4902        'publisher': {'key': 'publisher', 'type': 'str'},
4903        'name': {'key': 'name', 'type': 'str'},
4904        'product': {'key': 'product', 'type': 'str'},
4905    }
4906
4907    def __init__(
4908        self,
4909        *,
4910        publisher: str,
4911        name: str,
4912        product: str,
4913        **kwargs
4914    ):
4915        super(PurchasePlanAutoGenerated, self).__init__(**kwargs)
4916        self.publisher = publisher
4917        self.name = name
4918        self.product = product
4919
4920
4921class RecoveryWalkResponse(msrest.serialization.Model):
4922    """Response after calling a manual recovery walk.
4923
4924    Variables are only populated by the server, and will be ignored when sending a request.
4925
4926    :ivar walk_performed: Whether the recovery walk was performed.
4927    :vartype walk_performed: bool
4928    :ivar next_platform_update_domain: The next update domain that needs to be walked. Null means
4929     walk spanning all update domains has been completed.
4930    :vartype next_platform_update_domain: int
4931    """
4932
4933    _validation = {
4934        'walk_performed': {'readonly': True},
4935        'next_platform_update_domain': {'readonly': True},
4936    }
4937
4938    _attribute_map = {
4939        'walk_performed': {'key': 'walkPerformed', 'type': 'bool'},
4940        'next_platform_update_domain': {'key': 'nextPlatformUpdateDomain', 'type': 'int'},
4941    }
4942
4943    def __init__(
4944        self,
4945        **kwargs
4946    ):
4947        super(RecoveryWalkResponse, self).__init__(**kwargs)
4948        self.walk_performed = None
4949        self.next_platform_update_domain = None
4950
4951
4952class RequestRateByIntervalInput(LogAnalyticsInputBase):
4953    """Api request input for LogAnalytics getRequestRateByInterval Api.
4954
4955    All required parameters must be populated in order to send to Azure.
4956
4957    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
4958     LogAnalytics Api writes output logs to.
4959    :type blob_container_sas_uri: str
4960    :param from_time: Required. From time of the query.
4961    :type from_time: ~datetime.datetime
4962    :param to_time: Required. To time of the query.
4963    :type to_time: ~datetime.datetime
4964    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
4965    :type group_by_throttle_policy: bool
4966    :param group_by_operation_name: Group query result by Operation Name.
4967    :type group_by_operation_name: bool
4968    :param group_by_resource_name: Group query result by Resource Name.
4969    :type group_by_resource_name: bool
4970    :param group_by_client_application_id: Group query result by Client Application ID.
4971    :type group_by_client_application_id: bool
4972    :param group_by_user_agent: Group query result by User Agent.
4973    :type group_by_user_agent: bool
4974    :param interval_length: Required. Interval value in minutes used to create LogAnalytics call
4975     rate logs. Possible values include: "ThreeMins", "FiveMins", "ThirtyMins", "SixtyMins".
4976    :type interval_length: str or ~azure.mgmt.compute.v2020_12_01.models.IntervalInMins
4977    """
4978
4979    _validation = {
4980        'blob_container_sas_uri': {'required': True},
4981        'from_time': {'required': True},
4982        'to_time': {'required': True},
4983        'interval_length': {'required': True},
4984    }
4985
4986    _attribute_map = {
4987        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
4988        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
4989        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
4990        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
4991        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
4992        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
4993        'group_by_client_application_id': {'key': 'groupByClientApplicationId', 'type': 'bool'},
4994        'group_by_user_agent': {'key': 'groupByUserAgent', 'type': 'bool'},
4995        'interval_length': {'key': 'intervalLength', 'type': 'str'},
4996    }
4997
4998    def __init__(
4999        self,
5000        *,
5001        blob_container_sas_uri: str,
5002        from_time: datetime.datetime,
5003        to_time: datetime.datetime,
5004        interval_length: Union[str, "IntervalInMins"],
5005        group_by_throttle_policy: Optional[bool] = None,
5006        group_by_operation_name: Optional[bool] = None,
5007        group_by_resource_name: Optional[bool] = None,
5008        group_by_client_application_id: Optional[bool] = None,
5009        group_by_user_agent: Optional[bool] = None,
5010        **kwargs
5011    ):
5012        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, group_by_client_application_id=group_by_client_application_id, group_by_user_agent=group_by_user_agent, **kwargs)
5013        self.interval_length = interval_length
5014
5015
5016class ResourceUriList(msrest.serialization.Model):
5017    """The List resources which are encrypted with the disk encryption set.
5018
5019    All required parameters must be populated in order to send to Azure.
5020
5021    :param value: Required. A list of IDs or Owner IDs of resources which are encrypted with the
5022     disk encryption set.
5023    :type value: list[str]
5024    :param next_link: The uri to fetch the next page of encrypted resources. Call ListNext() with
5025     this to fetch the next page of encrypted resources.
5026    :type next_link: str
5027    """
5028
5029    _validation = {
5030        'value': {'required': True},
5031    }
5032
5033    _attribute_map = {
5034        'value': {'key': 'value', 'type': '[str]'},
5035        'next_link': {'key': 'nextLink', 'type': 'str'},
5036    }
5037
5038    def __init__(
5039        self,
5040        *,
5041        value: List[str],
5042        next_link: Optional[str] = None,
5043        **kwargs
5044    ):
5045        super(ResourceUriList, self).__init__(**kwargs)
5046        self.value = value
5047        self.next_link = next_link
5048
5049
5050class RetrieveBootDiagnosticsDataResult(msrest.serialization.Model):
5051    """The SAS URIs of the console screenshot and serial log blobs.
5052
5053    Variables are only populated by the server, and will be ignored when sending a request.
5054
5055    :ivar console_screenshot_blob_uri: The console screenshot blob URI.
5056    :vartype console_screenshot_blob_uri: str
5057    :ivar serial_console_log_blob_uri: The serial console log blob URI.
5058    :vartype serial_console_log_blob_uri: str
5059    """
5060
5061    _validation = {
5062        'console_screenshot_blob_uri': {'readonly': True},
5063        'serial_console_log_blob_uri': {'readonly': True},
5064    }
5065
5066    _attribute_map = {
5067        'console_screenshot_blob_uri': {'key': 'consoleScreenshotBlobUri', 'type': 'str'},
5068        'serial_console_log_blob_uri': {'key': 'serialConsoleLogBlobUri', 'type': 'str'},
5069    }
5070
5071    def __init__(
5072        self,
5073        **kwargs
5074    ):
5075        super(RetrieveBootDiagnosticsDataResult, self).__init__(**kwargs)
5076        self.console_screenshot_blob_uri = None
5077        self.serial_console_log_blob_uri = None
5078
5079
5080class RollbackStatusInfo(msrest.serialization.Model):
5081    """Information about rollback on failed VM instances after a OS Upgrade operation.
5082
5083    Variables are only populated by the server, and will be ignored when sending a request.
5084
5085    :ivar successfully_rolledback_instance_count: The number of instances which have been
5086     successfully rolled back.
5087    :vartype successfully_rolledback_instance_count: int
5088    :ivar failed_rolledback_instance_count: The number of instances which failed to rollback.
5089    :vartype failed_rolledback_instance_count: int
5090    :ivar rollback_error: Error details if OS rollback failed.
5091    :vartype rollback_error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
5092    """
5093
5094    _validation = {
5095        'successfully_rolledback_instance_count': {'readonly': True},
5096        'failed_rolledback_instance_count': {'readonly': True},
5097        'rollback_error': {'readonly': True},
5098    }
5099
5100    _attribute_map = {
5101        'successfully_rolledback_instance_count': {'key': 'successfullyRolledbackInstanceCount', 'type': 'int'},
5102        'failed_rolledback_instance_count': {'key': 'failedRolledbackInstanceCount', 'type': 'int'},
5103        'rollback_error': {'key': 'rollbackError', 'type': 'ApiError'},
5104    }
5105
5106    def __init__(
5107        self,
5108        **kwargs
5109    ):
5110        super(RollbackStatusInfo, self).__init__(**kwargs)
5111        self.successfully_rolledback_instance_count = None
5112        self.failed_rolledback_instance_count = None
5113        self.rollback_error = None
5114
5115
5116class RollingUpgradePolicy(msrest.serialization.Model):
5117    """The configuration parameters used while performing a rolling upgrade.
5118
5119    :param max_batch_instance_percent: The maximum percent of total virtual machine instances that
5120     will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum,
5121     unhealthy instances in previous or future batches can cause the percentage of instances in a
5122     batch to decrease to ensure higher reliability. The default value for this parameter is 20%.
5123    :type max_batch_instance_percent: int
5124    :param max_unhealthy_instance_percent: The maximum percentage of the total virtual machine
5125     instances in the scale set that can be simultaneously unhealthy, either as a result of being
5126     upgraded, or by being found in an unhealthy state by the virtual machine health checks before
5127     the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The
5128     default value for this parameter is 20%.
5129    :type max_unhealthy_instance_percent: int
5130    :param max_unhealthy_upgraded_instance_percent: The maximum percentage of upgraded virtual
5131     machine instances that can be found to be in an unhealthy state. This check will happen after
5132     each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The
5133     default value for this parameter is 20%.
5134    :type max_unhealthy_upgraded_instance_percent: int
5135    :param pause_time_between_batches: The wait time between completing the update for all virtual
5136     machines in one batch and starting the next batch. The time duration should be specified in ISO
5137     8601 format. The default value is 0 seconds (PT0S).
5138    :type pause_time_between_batches: str
5139    :param enable_cross_zone_upgrade: Allow VMSS to ignore AZ boundaries when constructing upgrade
5140     batches. Take into consideration the Update Domain and maxBatchInstancePercent to determine the
5141     batch size.
5142    :type enable_cross_zone_upgrade: bool
5143    :param prioritize_unhealthy_instances: Upgrade all unhealthy instances in a scale set before
5144     any healthy instances.
5145    :type prioritize_unhealthy_instances: bool
5146    """
5147
5148    _validation = {
5149        'max_batch_instance_percent': {'maximum': 100, 'minimum': 5},
5150        'max_unhealthy_instance_percent': {'maximum': 100, 'minimum': 5},
5151        'max_unhealthy_upgraded_instance_percent': {'maximum': 100, 'minimum': 0},
5152    }
5153
5154    _attribute_map = {
5155        'max_batch_instance_percent': {'key': 'maxBatchInstancePercent', 'type': 'int'},
5156        'max_unhealthy_instance_percent': {'key': 'maxUnhealthyInstancePercent', 'type': 'int'},
5157        'max_unhealthy_upgraded_instance_percent': {'key': 'maxUnhealthyUpgradedInstancePercent', 'type': 'int'},
5158        'pause_time_between_batches': {'key': 'pauseTimeBetweenBatches', 'type': 'str'},
5159        'enable_cross_zone_upgrade': {'key': 'enableCrossZoneUpgrade', 'type': 'bool'},
5160        'prioritize_unhealthy_instances': {'key': 'prioritizeUnhealthyInstances', 'type': 'bool'},
5161    }
5162
5163    def __init__(
5164        self,
5165        *,
5166        max_batch_instance_percent: Optional[int] = None,
5167        max_unhealthy_instance_percent: Optional[int] = None,
5168        max_unhealthy_upgraded_instance_percent: Optional[int] = None,
5169        pause_time_between_batches: Optional[str] = None,
5170        enable_cross_zone_upgrade: Optional[bool] = None,
5171        prioritize_unhealthy_instances: Optional[bool] = None,
5172        **kwargs
5173    ):
5174        super(RollingUpgradePolicy, self).__init__(**kwargs)
5175        self.max_batch_instance_percent = max_batch_instance_percent
5176        self.max_unhealthy_instance_percent = max_unhealthy_instance_percent
5177        self.max_unhealthy_upgraded_instance_percent = max_unhealthy_upgraded_instance_percent
5178        self.pause_time_between_batches = pause_time_between_batches
5179        self.enable_cross_zone_upgrade = enable_cross_zone_upgrade
5180        self.prioritize_unhealthy_instances = prioritize_unhealthy_instances
5181
5182
5183class RollingUpgradeProgressInfo(msrest.serialization.Model):
5184    """Information about the number of virtual machine instances in each upgrade state.
5185
5186    Variables are only populated by the server, and will be ignored when sending a request.
5187
5188    :ivar successful_instance_count: The number of instances that have been successfully upgraded.
5189    :vartype successful_instance_count: int
5190    :ivar failed_instance_count: The number of instances that have failed to be upgraded
5191     successfully.
5192    :vartype failed_instance_count: int
5193    :ivar in_progress_instance_count: The number of instances that are currently being upgraded.
5194    :vartype in_progress_instance_count: int
5195    :ivar pending_instance_count: The number of instances that have not yet begun to be upgraded.
5196    :vartype pending_instance_count: int
5197    """
5198
5199    _validation = {
5200        'successful_instance_count': {'readonly': True},
5201        'failed_instance_count': {'readonly': True},
5202        'in_progress_instance_count': {'readonly': True},
5203        'pending_instance_count': {'readonly': True},
5204    }
5205
5206    _attribute_map = {
5207        'successful_instance_count': {'key': 'successfulInstanceCount', 'type': 'int'},
5208        'failed_instance_count': {'key': 'failedInstanceCount', 'type': 'int'},
5209        'in_progress_instance_count': {'key': 'inProgressInstanceCount', 'type': 'int'},
5210        'pending_instance_count': {'key': 'pendingInstanceCount', 'type': 'int'},
5211    }
5212
5213    def __init__(
5214        self,
5215        **kwargs
5216    ):
5217        super(RollingUpgradeProgressInfo, self).__init__(**kwargs)
5218        self.successful_instance_count = None
5219        self.failed_instance_count = None
5220        self.in_progress_instance_count = None
5221        self.pending_instance_count = None
5222
5223
5224class RollingUpgradeRunningStatus(msrest.serialization.Model):
5225    """Information about the current running state of the overall upgrade.
5226
5227    Variables are only populated by the server, and will be ignored when sending a request.
5228
5229    :ivar code: Code indicating the current status of the upgrade. Possible values include:
5230     "RollingForward", "Cancelled", "Completed", "Faulted".
5231    :vartype code: str or ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradeStatusCode
5232    :ivar start_time: Start time of the upgrade.
5233    :vartype start_time: ~datetime.datetime
5234    :ivar last_action: The last action performed on the rolling upgrade. Possible values include:
5235     "Start", "Cancel".
5236    :vartype last_action: str or ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradeActionType
5237    :ivar last_action_time: Last action time of the upgrade.
5238    :vartype last_action_time: ~datetime.datetime
5239    """
5240
5241    _validation = {
5242        'code': {'readonly': True},
5243        'start_time': {'readonly': True},
5244        'last_action': {'readonly': True},
5245        'last_action_time': {'readonly': True},
5246    }
5247
5248    _attribute_map = {
5249        'code': {'key': 'code', 'type': 'str'},
5250        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
5251        'last_action': {'key': 'lastAction', 'type': 'str'},
5252        'last_action_time': {'key': 'lastActionTime', 'type': 'iso-8601'},
5253    }
5254
5255    def __init__(
5256        self,
5257        **kwargs
5258    ):
5259        super(RollingUpgradeRunningStatus, self).__init__(**kwargs)
5260        self.code = None
5261        self.start_time = None
5262        self.last_action = None
5263        self.last_action_time = None
5264
5265
5266class RollingUpgradeStatusInfo(Resource):
5267    """The status of the latest virtual machine scale set rolling upgrade.
5268
5269    Variables are only populated by the server, and will be ignored when sending a request.
5270
5271    All required parameters must be populated in order to send to Azure.
5272
5273    :ivar id: Resource Id.
5274    :vartype id: str
5275    :ivar name: Resource name.
5276    :vartype name: str
5277    :ivar type: Resource type.
5278    :vartype type: str
5279    :param location: Required. Resource location.
5280    :type location: str
5281    :param tags: A set of tags. Resource tags.
5282    :type tags: dict[str, str]
5283    :ivar policy: The rolling upgrade policies applied for this upgrade.
5284    :vartype policy: ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradePolicy
5285    :ivar running_status: Information about the current running state of the overall upgrade.
5286    :vartype running_status: ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradeRunningStatus
5287    :ivar progress: Information about the number of virtual machine instances in each upgrade
5288     state.
5289    :vartype progress: ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradeProgressInfo
5290    :ivar error: Error details for this upgrade, if there are any.
5291    :vartype error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
5292    """
5293
5294    _validation = {
5295        'id': {'readonly': True},
5296        'name': {'readonly': True},
5297        'type': {'readonly': True},
5298        'location': {'required': True},
5299        'policy': {'readonly': True},
5300        'running_status': {'readonly': True},
5301        'progress': {'readonly': True},
5302        'error': {'readonly': True},
5303    }
5304
5305    _attribute_map = {
5306        'id': {'key': 'id', 'type': 'str'},
5307        'name': {'key': 'name', 'type': 'str'},
5308        'type': {'key': 'type', 'type': 'str'},
5309        'location': {'key': 'location', 'type': 'str'},
5310        'tags': {'key': 'tags', 'type': '{str}'},
5311        'policy': {'key': 'properties.policy', 'type': 'RollingUpgradePolicy'},
5312        'running_status': {'key': 'properties.runningStatus', 'type': 'RollingUpgradeRunningStatus'},
5313        'progress': {'key': 'properties.progress', 'type': 'RollingUpgradeProgressInfo'},
5314        'error': {'key': 'properties.error', 'type': 'ApiError'},
5315    }
5316
5317    def __init__(
5318        self,
5319        *,
5320        location: str,
5321        tags: Optional[Dict[str, str]] = None,
5322        **kwargs
5323    ):
5324        super(RollingUpgradeStatusInfo, self).__init__(location=location, tags=tags, **kwargs)
5325        self.policy = None
5326        self.running_status = None
5327        self.progress = None
5328        self.error = None
5329
5330
5331class RunCommandDocumentBase(msrest.serialization.Model):
5332    """Describes the properties of a Run Command metadata.
5333
5334    All required parameters must be populated in order to send to Azure.
5335
5336    :param schema: Required. The VM run command schema.
5337    :type schema: str
5338    :param id: Required. The VM run command id.
5339    :type id: str
5340    :param os_type: Required. The Operating System type. Possible values include: "Windows",
5341     "Linux".
5342    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
5343    :param label: Required. The VM run command label.
5344    :type label: str
5345    :param description: Required. The VM run command description.
5346    :type description: str
5347    """
5348
5349    _validation = {
5350        'schema': {'required': True},
5351        'id': {'required': True},
5352        'os_type': {'required': True},
5353        'label': {'required': True},
5354        'description': {'required': True},
5355    }
5356
5357    _attribute_map = {
5358        'schema': {'key': '$schema', 'type': 'str'},
5359        'id': {'key': 'id', 'type': 'str'},
5360        'os_type': {'key': 'osType', 'type': 'str'},
5361        'label': {'key': 'label', 'type': 'str'},
5362        'description': {'key': 'description', 'type': 'str'},
5363    }
5364
5365    def __init__(
5366        self,
5367        *,
5368        schema: str,
5369        id: str,
5370        os_type: Union[str, "OperatingSystemTypes"],
5371        label: str,
5372        description: str,
5373        **kwargs
5374    ):
5375        super(RunCommandDocumentBase, self).__init__(**kwargs)
5376        self.schema = schema
5377        self.id = id
5378        self.os_type = os_type
5379        self.label = label
5380        self.description = description
5381
5382
5383class RunCommandDocument(RunCommandDocumentBase):
5384    """Describes the properties of a Run Command.
5385
5386    All required parameters must be populated in order to send to Azure.
5387
5388    :param schema: Required. The VM run command schema.
5389    :type schema: str
5390    :param id: Required. The VM run command id.
5391    :type id: str
5392    :param os_type: Required. The Operating System type. Possible values include: "Windows",
5393     "Linux".
5394    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
5395    :param label: Required. The VM run command label.
5396    :type label: str
5397    :param description: Required. The VM run command description.
5398    :type description: str
5399    :param script: Required. The script to be executed.
5400    :type script: list[str]
5401    :param parameters: The parameters used by the script.
5402    :type parameters: list[~azure.mgmt.compute.v2020_12_01.models.RunCommandParameterDefinition]
5403    """
5404
5405    _validation = {
5406        'schema': {'required': True},
5407        'id': {'required': True},
5408        'os_type': {'required': True},
5409        'label': {'required': True},
5410        'description': {'required': True},
5411        'script': {'required': True},
5412    }
5413
5414    _attribute_map = {
5415        'schema': {'key': '$schema', 'type': 'str'},
5416        'id': {'key': 'id', 'type': 'str'},
5417        'os_type': {'key': 'osType', 'type': 'str'},
5418        'label': {'key': 'label', 'type': 'str'},
5419        'description': {'key': 'description', 'type': 'str'},
5420        'script': {'key': 'script', 'type': '[str]'},
5421        'parameters': {'key': 'parameters', 'type': '[RunCommandParameterDefinition]'},
5422    }
5423
5424    def __init__(
5425        self,
5426        *,
5427        schema: str,
5428        id: str,
5429        os_type: Union[str, "OperatingSystemTypes"],
5430        label: str,
5431        description: str,
5432        script: List[str],
5433        parameters: Optional[List["RunCommandParameterDefinition"]] = None,
5434        **kwargs
5435    ):
5436        super(RunCommandDocument, self).__init__(schema=schema, id=id, os_type=os_type, label=label, description=description, **kwargs)
5437        self.script = script
5438        self.parameters = parameters
5439
5440
5441class RunCommandInput(msrest.serialization.Model):
5442    """Capture Virtual Machine parameters.
5443
5444    All required parameters must be populated in order to send to Azure.
5445
5446    :param command_id: Required. The run command id.
5447    :type command_id: str
5448    :param script: Optional. The script to be executed.  When this value is given, the given script
5449     will override the default script of the command.
5450    :type script: list[str]
5451    :param parameters: The run command parameters.
5452    :type parameters: list[~azure.mgmt.compute.v2020_12_01.models.RunCommandInputParameter]
5453    """
5454
5455    _validation = {
5456        'command_id': {'required': True},
5457    }
5458
5459    _attribute_map = {
5460        'command_id': {'key': 'commandId', 'type': 'str'},
5461        'script': {'key': 'script', 'type': '[str]'},
5462        'parameters': {'key': 'parameters', 'type': '[RunCommandInputParameter]'},
5463    }
5464
5465    def __init__(
5466        self,
5467        *,
5468        command_id: str,
5469        script: Optional[List[str]] = None,
5470        parameters: Optional[List["RunCommandInputParameter"]] = None,
5471        **kwargs
5472    ):
5473        super(RunCommandInput, self).__init__(**kwargs)
5474        self.command_id = command_id
5475        self.script = script
5476        self.parameters = parameters
5477
5478
5479class RunCommandInputParameter(msrest.serialization.Model):
5480    """Describes the properties of a run command parameter.
5481
5482    All required parameters must be populated in order to send to Azure.
5483
5484    :param name: Required. The run command parameter name.
5485    :type name: str
5486    :param value: Required. The run command parameter value.
5487    :type value: str
5488    """
5489
5490    _validation = {
5491        'name': {'required': True},
5492        'value': {'required': True},
5493    }
5494
5495    _attribute_map = {
5496        'name': {'key': 'name', 'type': 'str'},
5497        'value': {'key': 'value', 'type': 'str'},
5498    }
5499
5500    def __init__(
5501        self,
5502        *,
5503        name: str,
5504        value: str,
5505        **kwargs
5506    ):
5507        super(RunCommandInputParameter, self).__init__(**kwargs)
5508        self.name = name
5509        self.value = value
5510
5511
5512class RunCommandListResult(msrest.serialization.Model):
5513    """The List Virtual Machine operation response.
5514
5515    All required parameters must be populated in order to send to Azure.
5516
5517    :param value: Required. The list of virtual machine run commands.
5518    :type value: list[~azure.mgmt.compute.v2020_12_01.models.RunCommandDocumentBase]
5519    :param next_link: The uri to fetch the next page of run commands. Call ListNext() with this to
5520     fetch the next page of run commands.
5521    :type next_link: str
5522    """
5523
5524    _validation = {
5525        'value': {'required': True},
5526    }
5527
5528    _attribute_map = {
5529        'value': {'key': 'value', 'type': '[RunCommandDocumentBase]'},
5530        'next_link': {'key': 'nextLink', 'type': 'str'},
5531    }
5532
5533    def __init__(
5534        self,
5535        *,
5536        value: List["RunCommandDocumentBase"],
5537        next_link: Optional[str] = None,
5538        **kwargs
5539    ):
5540        super(RunCommandListResult, self).__init__(**kwargs)
5541        self.value = value
5542        self.next_link = next_link
5543
5544
5545class RunCommandParameterDefinition(msrest.serialization.Model):
5546    """Describes the properties of a run command parameter.
5547
5548    All required parameters must be populated in order to send to Azure.
5549
5550    :param name: Required. The run command parameter name.
5551    :type name: str
5552    :param type: Required. The run command parameter type.
5553    :type type: str
5554    :param default_value: The run command parameter default value.
5555    :type default_value: str
5556    :param required: The run command parameter required.
5557    :type required: bool
5558    """
5559
5560    _validation = {
5561        'name': {'required': True},
5562        'type': {'required': True},
5563    }
5564
5565    _attribute_map = {
5566        'name': {'key': 'name', 'type': 'str'},
5567        'type': {'key': 'type', 'type': 'str'},
5568        'default_value': {'key': 'defaultValue', 'type': 'str'},
5569        'required': {'key': 'required', 'type': 'bool'},
5570    }
5571
5572    def __init__(
5573        self,
5574        *,
5575        name: str,
5576        type: str,
5577        default_value: Optional[str] = None,
5578        required: Optional[bool] = False,
5579        **kwargs
5580    ):
5581        super(RunCommandParameterDefinition, self).__init__(**kwargs)
5582        self.name = name
5583        self.type = type
5584        self.default_value = default_value
5585        self.required = required
5586
5587
5588class RunCommandResult(msrest.serialization.Model):
5589    """RunCommandResult.
5590
5591    :param value: Run command operation response.
5592    :type value: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
5593    """
5594
5595    _attribute_map = {
5596        'value': {'key': 'value', 'type': '[InstanceViewStatus]'},
5597    }
5598
5599    def __init__(
5600        self,
5601        *,
5602        value: Optional[List["InstanceViewStatus"]] = None,
5603        **kwargs
5604    ):
5605        super(RunCommandResult, self).__init__(**kwargs)
5606        self.value = value
5607
5608
5609class ScaleInPolicy(msrest.serialization.Model):
5610    """Describes a scale-in policy for a virtual machine scale set.
5611
5612    :param rules: The rules to be followed when scaling-in a virtual machine scale set.
5613     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Default** When a
5614     virtual machine scale set is scaled in, the scale set will first be balanced across zones if it
5615     is a zonal scale set. Then, it will be balanced across Fault Domains as far as possible. Within
5616     each Fault Domain, the virtual machines chosen for removal will be the newest ones that are not
5617     protected from scale-in. :code:`<br>`:code:`<br>` **OldestVM** When a virtual machine scale set
5618     is being scaled-in, the oldest virtual machines that are not protected from scale-in will be
5619     chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced
5620     across zones. Within each zone, the oldest virtual machines that are not protected will be
5621     chosen for removal. :code:`<br>`:code:`<br>` **NewestVM** When a virtual machine scale set is
5622     being scaled-in, the newest virtual machines that are not protected from scale-in will be
5623     chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced
5624     across zones. Within each zone, the newest virtual machines that are not protected will be
5625     chosen for removal. :code:`<br>`:code:`<br>`.
5626    :type rules: list[str or
5627     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetScaleInRules]
5628    """
5629
5630    _attribute_map = {
5631        'rules': {'key': 'rules', 'type': '[str]'},
5632    }
5633
5634    def __init__(
5635        self,
5636        *,
5637        rules: Optional[List[Union[str, "VirtualMachineScaleSetScaleInRules"]]] = None,
5638        **kwargs
5639    ):
5640        super(ScaleInPolicy, self).__init__(**kwargs)
5641        self.rules = rules
5642
5643
5644class ScheduledEventsProfile(msrest.serialization.Model):
5645    """ScheduledEventsProfile.
5646
5647    :param terminate_notification_profile: Specifies Terminate Scheduled Event related
5648     configurations.
5649    :type terminate_notification_profile:
5650     ~azure.mgmt.compute.v2020_12_01.models.TerminateNotificationProfile
5651    """
5652
5653    _attribute_map = {
5654        'terminate_notification_profile': {'key': 'terminateNotificationProfile', 'type': 'TerminateNotificationProfile'},
5655    }
5656
5657    def __init__(
5658        self,
5659        *,
5660        terminate_notification_profile: Optional["TerminateNotificationProfile"] = None,
5661        **kwargs
5662    ):
5663        super(ScheduledEventsProfile, self).__init__(**kwargs)
5664        self.terminate_notification_profile = terminate_notification_profile
5665
5666
5667class SecurityProfile(msrest.serialization.Model):
5668    """Specifies the Security profile settings for the virtual machine or virtual machine scale set.
5669
5670    :param uefi_settings: Specifies the security settings like secure boot and vTPM used while
5671     creating the virtual machine. :code:`<br>`:code:`<br>`Minimum api-version: 2020-12-01.
5672    :type uefi_settings: ~azure.mgmt.compute.v2020_12_01.models.UefiSettings
5673    :param encryption_at_host: This property can be used by user in the request to enable or
5674     disable the Host Encryption for the virtual machine or virtual machine scale set. This will
5675     enable the encryption for all the disks including Resource/Temp disk at host itself.
5676     :code:`<br>`:code:`<br>` Default: The Encryption at host will be disabled unless this property
5677     is set to true for the resource.
5678    :type encryption_at_host: bool
5679    :param security_type: Specifies the SecurityType of the virtual machine. It is set as
5680     TrustedLaunch to enable UefiSettings. :code:`<br>`:code:`<br>` Default: UefiSettings will not
5681     be enabled unless this property is set as TrustedLaunch. Possible values include:
5682     "TrustedLaunch".
5683    :type security_type: str or ~azure.mgmt.compute.v2020_12_01.models.SecurityTypes
5684    """
5685
5686    _attribute_map = {
5687        'uefi_settings': {'key': 'uefiSettings', 'type': 'UefiSettings'},
5688        'encryption_at_host': {'key': 'encryptionAtHost', 'type': 'bool'},
5689        'security_type': {'key': 'securityType', 'type': 'str'},
5690    }
5691
5692    def __init__(
5693        self,
5694        *,
5695        uefi_settings: Optional["UefiSettings"] = None,
5696        encryption_at_host: Optional[bool] = None,
5697        security_type: Optional[Union[str, "SecurityTypes"]] = None,
5698        **kwargs
5699    ):
5700        super(SecurityProfile, self).__init__(**kwargs)
5701        self.uefi_settings = uefi_settings
5702        self.encryption_at_host = encryption_at_host
5703        self.security_type = security_type
5704
5705
5706class ShareInfoElement(msrest.serialization.Model):
5707    """ShareInfoElement.
5708
5709    Variables are only populated by the server, and will be ignored when sending a request.
5710
5711    :ivar vm_uri: A relative URI containing the ID of the VM that has the disk attached.
5712    :vartype vm_uri: str
5713    """
5714
5715    _validation = {
5716        'vm_uri': {'readonly': True},
5717    }
5718
5719    _attribute_map = {
5720        'vm_uri': {'key': 'vmUri', 'type': 'str'},
5721    }
5722
5723    def __init__(
5724        self,
5725        **kwargs
5726    ):
5727        super(ShareInfoElement, self).__init__(**kwargs)
5728        self.vm_uri = None
5729
5730
5731class Sku(msrest.serialization.Model):
5732    """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.
5733
5734    :param name: The sku name.
5735    :type name: str
5736    :param tier: Specifies the tier of virtual machines in a scale set.:code:`<br />`:code:`<br />`
5737     Possible Values::code:`<br />`:code:`<br />` **Standard**\ :code:`<br />`:code:`<br />`
5738     **Basic**.
5739    :type tier: str
5740    :param capacity: Specifies the number of virtual machines in the scale set.
5741    :type capacity: long
5742    """
5743
5744    _attribute_map = {
5745        'name': {'key': 'name', 'type': 'str'},
5746        'tier': {'key': 'tier', 'type': 'str'},
5747        'capacity': {'key': 'capacity', 'type': 'long'},
5748    }
5749
5750    def __init__(
5751        self,
5752        *,
5753        name: Optional[str] = None,
5754        tier: Optional[str] = None,
5755        capacity: Optional[int] = None,
5756        **kwargs
5757    ):
5758        super(Sku, self).__init__(**kwargs)
5759        self.name = name
5760        self.tier = tier
5761        self.capacity = capacity
5762
5763
5764class Snapshot(Resource):
5765    """Snapshot resource.
5766
5767    Variables are only populated by the server, and will be ignored when sending a request.
5768
5769    All required parameters must be populated in order to send to Azure.
5770
5771    :ivar id: Resource Id.
5772    :vartype id: str
5773    :ivar name: Resource name.
5774    :vartype name: str
5775    :ivar type: Resource type.
5776    :vartype type: str
5777    :param location: Required. Resource location.
5778    :type location: str
5779    :param tags: A set of tags. Resource tags.
5780    :type tags: dict[str, str]
5781    :ivar managed_by: Unused. Always Null.
5782    :vartype managed_by: str
5783    :param sku: The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS. This is
5784     an optional parameter for incremental snapshot and the default behavior is the SKU will be set
5785     to the same sku as the previous snapshot.
5786    :type sku: ~azure.mgmt.compute.v2020_12_01.models.SnapshotSku
5787    :param extended_location: The extended location where the snapshot will be created. Extended
5788     location cannot be changed.
5789    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
5790    :ivar time_created: The time when the snapshot was created.
5791    :vartype time_created: ~datetime.datetime
5792    :param os_type: The Operating System type. Possible values include: "Windows", "Linux".
5793    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
5794    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
5795     disks only. Possible values include: "V1", "V2".
5796    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGeneration
5797    :param purchase_plan: Purchase plan information for the image from which the source disk for
5798     the snapshot was originally created.
5799    :type purchase_plan: ~azure.mgmt.compute.v2020_12_01.models.PurchasePlan
5800    :param creation_data: Disk source information. CreationData information cannot be changed after
5801     the disk has been created.
5802    :type creation_data: ~azure.mgmt.compute.v2020_12_01.models.CreationData
5803    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
5804     indicates the size of the disk to create. If this field is present for updates or creation with
5805     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
5806     running VM, and can only increase the disk's size.
5807    :type disk_size_gb: int
5808    :ivar disk_size_bytes: The size of the disk in bytes. This field is read only.
5809    :vartype disk_size_bytes: long
5810    :ivar disk_state: The state of the snapshot. Possible values include: "Unattached", "Attached",
5811     "Reserved", "ActiveSAS", "ReadyToUpload", "ActiveUpload".
5812    :vartype disk_state: str or ~azure.mgmt.compute.v2020_12_01.models.DiskState
5813    :ivar unique_id: Unique Guid identifying the resource.
5814    :vartype unique_id: str
5815    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
5816     Encryption, can contain multiple encryption settings per disk or snapshot.
5817    :type encryption_settings_collection:
5818     ~azure.mgmt.compute.v2020_12_01.models.EncryptionSettingsCollection
5819    :ivar provisioning_state: The disk provisioning state.
5820    :vartype provisioning_state: str
5821    :param incremental: Whether a snapshot is incremental. Incremental snapshots on the same disk
5822     occupy less space than full snapshots and can be diffed.
5823    :type incremental: bool
5824    :param encryption: Encryption property can be used to encrypt data at rest with customer
5825     managed keys or platform managed keys.
5826    :type encryption: ~azure.mgmt.compute.v2020_12_01.models.Encryption
5827    :param network_access_policy: Policy for accessing the disk via network. Possible values
5828     include: "AllowAll", "AllowPrivate", "DenyAll".
5829    :type network_access_policy: str or ~azure.mgmt.compute.v2020_12_01.models.NetworkAccessPolicy
5830    :param disk_access_id: ARM id of the DiskAccess resource for using private endpoints on disks.
5831    :type disk_access_id: str
5832    :param supports_hibernation: Indicates the OS on a snapshot supports hibernation.
5833    :type supports_hibernation: bool
5834    """
5835
5836    _validation = {
5837        'id': {'readonly': True},
5838        'name': {'readonly': True},
5839        'type': {'readonly': True},
5840        'location': {'required': True},
5841        'managed_by': {'readonly': True},
5842        'time_created': {'readonly': True},
5843        'disk_size_bytes': {'readonly': True},
5844        'disk_state': {'readonly': True},
5845        'unique_id': {'readonly': True},
5846        'provisioning_state': {'readonly': True},
5847    }
5848
5849    _attribute_map = {
5850        'id': {'key': 'id', 'type': 'str'},
5851        'name': {'key': 'name', 'type': 'str'},
5852        'type': {'key': 'type', 'type': 'str'},
5853        'location': {'key': 'location', 'type': 'str'},
5854        'tags': {'key': 'tags', 'type': '{str}'},
5855        'managed_by': {'key': 'managedBy', 'type': 'str'},
5856        'sku': {'key': 'sku', 'type': 'SnapshotSku'},
5857        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
5858        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
5859        'os_type': {'key': 'properties.osType', 'type': 'str'},
5860        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
5861        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'PurchasePlan'},
5862        'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'},
5863        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
5864        'disk_size_bytes': {'key': 'properties.diskSizeBytes', 'type': 'long'},
5865        'disk_state': {'key': 'properties.diskState', 'type': 'str'},
5866        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
5867        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
5868        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5869        'incremental': {'key': 'properties.incremental', 'type': 'bool'},
5870        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
5871        'network_access_policy': {'key': 'properties.networkAccessPolicy', 'type': 'str'},
5872        'disk_access_id': {'key': 'properties.diskAccessId', 'type': 'str'},
5873        'supports_hibernation': {'key': 'properties.supportsHibernation', 'type': 'bool'},
5874    }
5875
5876    def __init__(
5877        self,
5878        *,
5879        location: str,
5880        tags: Optional[Dict[str, str]] = None,
5881        sku: Optional["SnapshotSku"] = None,
5882        extended_location: Optional["ExtendedLocation"] = None,
5883        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
5884        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
5885        purchase_plan: Optional["PurchasePlan"] = None,
5886        creation_data: Optional["CreationData"] = None,
5887        disk_size_gb: Optional[int] = None,
5888        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
5889        incremental: Optional[bool] = None,
5890        encryption: Optional["Encryption"] = None,
5891        network_access_policy: Optional[Union[str, "NetworkAccessPolicy"]] = None,
5892        disk_access_id: Optional[str] = None,
5893        supports_hibernation: Optional[bool] = None,
5894        **kwargs
5895    ):
5896        super(Snapshot, self).__init__(location=location, tags=tags, **kwargs)
5897        self.managed_by = None
5898        self.sku = sku
5899        self.extended_location = extended_location
5900        self.time_created = None
5901        self.os_type = os_type
5902        self.hyper_v_generation = hyper_v_generation
5903        self.purchase_plan = purchase_plan
5904        self.creation_data = creation_data
5905        self.disk_size_gb = disk_size_gb
5906        self.disk_size_bytes = None
5907        self.disk_state = None
5908        self.unique_id = None
5909        self.encryption_settings_collection = encryption_settings_collection
5910        self.provisioning_state = None
5911        self.incremental = incremental
5912        self.encryption = encryption
5913        self.network_access_policy = network_access_policy
5914        self.disk_access_id = disk_access_id
5915        self.supports_hibernation = supports_hibernation
5916
5917
5918class SnapshotList(msrest.serialization.Model):
5919    """The List Snapshots operation response.
5920
5921    All required parameters must be populated in order to send to Azure.
5922
5923    :param value: Required. A list of snapshots.
5924    :type value: list[~azure.mgmt.compute.v2020_12_01.models.Snapshot]
5925    :param next_link: The uri to fetch the next page of snapshots. Call ListNext() with this to
5926     fetch the next page of snapshots.
5927    :type next_link: str
5928    """
5929
5930    _validation = {
5931        'value': {'required': True},
5932    }
5933
5934    _attribute_map = {
5935        'value': {'key': 'value', 'type': '[Snapshot]'},
5936        'next_link': {'key': 'nextLink', 'type': 'str'},
5937    }
5938
5939    def __init__(
5940        self,
5941        *,
5942        value: List["Snapshot"],
5943        next_link: Optional[str] = None,
5944        **kwargs
5945    ):
5946        super(SnapshotList, self).__init__(**kwargs)
5947        self.value = value
5948        self.next_link = next_link
5949
5950
5951class SnapshotSku(msrest.serialization.Model):
5952    """The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS. This is an optional parameter for incremental snapshot and the default behavior is the SKU will be set to the same sku as the previous snapshot.
5953
5954    Variables are only populated by the server, and will be ignored when sending a request.
5955
5956    :param name: The sku name. Possible values include: "Standard_LRS", "Premium_LRS",
5957     "Standard_ZRS".
5958    :type name: str or ~azure.mgmt.compute.v2020_12_01.models.SnapshotStorageAccountTypes
5959    :ivar tier: The sku tier.
5960    :vartype tier: str
5961    """
5962
5963    _validation = {
5964        'tier': {'readonly': True},
5965    }
5966
5967    _attribute_map = {
5968        'name': {'key': 'name', 'type': 'str'},
5969        'tier': {'key': 'tier', 'type': 'str'},
5970    }
5971
5972    def __init__(
5973        self,
5974        *,
5975        name: Optional[Union[str, "SnapshotStorageAccountTypes"]] = None,
5976        **kwargs
5977    ):
5978        super(SnapshotSku, self).__init__(**kwargs)
5979        self.name = name
5980        self.tier = None
5981
5982
5983class SnapshotUpdate(msrest.serialization.Model):
5984    """Snapshot update resource.
5985
5986    :param tags: A set of tags. Resource tags.
5987    :type tags: dict[str, str]
5988    :param sku: The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS. This is
5989     an optional parameter for incremental snapshot and the default behavior is the SKU will be set
5990     to the same sku as the previous snapshot.
5991    :type sku: ~azure.mgmt.compute.v2020_12_01.models.SnapshotSku
5992    :param os_type: the Operating System type. Possible values include: "Windows", "Linux".
5993    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
5994    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
5995     indicates the size of the disk to create. If this field is present for updates or creation with
5996     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
5997     running VM, and can only increase the disk's size.
5998    :type disk_size_gb: int
5999    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
6000     Encryption, can contain multiple encryption settings per disk or snapshot.
6001    :type encryption_settings_collection:
6002     ~azure.mgmt.compute.v2020_12_01.models.EncryptionSettingsCollection
6003    :param encryption: Encryption property can be used to encrypt data at rest with customer
6004     managed keys or platform managed keys.
6005    :type encryption: ~azure.mgmt.compute.v2020_12_01.models.Encryption
6006    :param network_access_policy: Policy for accessing the disk via network. Possible values
6007     include: "AllowAll", "AllowPrivate", "DenyAll".
6008    :type network_access_policy: str or ~azure.mgmt.compute.v2020_12_01.models.NetworkAccessPolicy
6009    :param disk_access_id: ARM id of the DiskAccess resource for using private endpoints on disks.
6010    :type disk_access_id: str
6011    :param supports_hibernation: Indicates the OS on a snapshot supports hibernation.
6012    :type supports_hibernation: bool
6013    """
6014
6015    _attribute_map = {
6016        'tags': {'key': 'tags', 'type': '{str}'},
6017        'sku': {'key': 'sku', 'type': 'SnapshotSku'},
6018        'os_type': {'key': 'properties.osType', 'type': 'str'},
6019        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
6020        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
6021        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
6022        'network_access_policy': {'key': 'properties.networkAccessPolicy', 'type': 'str'},
6023        'disk_access_id': {'key': 'properties.diskAccessId', 'type': 'str'},
6024        'supports_hibernation': {'key': 'properties.supportsHibernation', 'type': 'bool'},
6025    }
6026
6027    def __init__(
6028        self,
6029        *,
6030        tags: Optional[Dict[str, str]] = None,
6031        sku: Optional["SnapshotSku"] = None,
6032        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
6033        disk_size_gb: Optional[int] = None,
6034        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
6035        encryption: Optional["Encryption"] = None,
6036        network_access_policy: Optional[Union[str, "NetworkAccessPolicy"]] = None,
6037        disk_access_id: Optional[str] = None,
6038        supports_hibernation: Optional[bool] = None,
6039        **kwargs
6040    ):
6041        super(SnapshotUpdate, self).__init__(**kwargs)
6042        self.tags = tags
6043        self.sku = sku
6044        self.os_type = os_type
6045        self.disk_size_gb = disk_size_gb
6046        self.encryption_settings_collection = encryption_settings_collection
6047        self.encryption = encryption
6048        self.network_access_policy = network_access_policy
6049        self.disk_access_id = disk_access_id
6050        self.supports_hibernation = supports_hibernation
6051
6052
6053class SourceVault(msrest.serialization.Model):
6054    """The vault id is an Azure Resource Manager Resource id in the form /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}.
6055
6056    :param id: Resource Id.
6057    :type id: str
6058    """
6059
6060    _attribute_map = {
6061        'id': {'key': 'id', 'type': 'str'},
6062    }
6063
6064    def __init__(
6065        self,
6066        *,
6067        id: Optional[str] = None,
6068        **kwargs
6069    ):
6070        super(SourceVault, self).__init__(**kwargs)
6071        self.id = id
6072
6073
6074class SshConfiguration(msrest.serialization.Model):
6075    """SSH configuration for Linux based VMs running on Azure.
6076
6077    :param public_keys: The list of SSH public keys used to authenticate with linux based VMs.
6078    :type public_keys: list[~azure.mgmt.compute.v2020_12_01.models.SshPublicKey]
6079    """
6080
6081    _attribute_map = {
6082        'public_keys': {'key': 'publicKeys', 'type': '[SshPublicKey]'},
6083    }
6084
6085    def __init__(
6086        self,
6087        *,
6088        public_keys: Optional[List["SshPublicKey"]] = None,
6089        **kwargs
6090    ):
6091        super(SshConfiguration, self).__init__(**kwargs)
6092        self.public_keys = public_keys
6093
6094
6095class SshPublicKey(msrest.serialization.Model):
6096    """Contains information about SSH certificate public key and the path on the Linux VM where the public key is placed.
6097
6098    :param path: Specifies the full path on the created VM where ssh public key is stored. If the
6099     file already exists, the specified key is appended to the file. Example:
6100     /home/user/.ssh/authorized_keys.
6101    :type path: str
6102    :param key_data: SSH public key certificate used to authenticate with the VM through ssh. The
6103     key needs to be at least 2048-bit and in ssh-rsa format. :code:`<br>`:code:`<br>` For creating
6104     ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure
6105     <https://docs.microsoft.com/en-us/azure/virtual-machines/linux/mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
6106    :type key_data: str
6107    """
6108
6109    _attribute_map = {
6110        'path': {'key': 'path', 'type': 'str'},
6111        'key_data': {'key': 'keyData', 'type': 'str'},
6112    }
6113
6114    def __init__(
6115        self,
6116        *,
6117        path: Optional[str] = None,
6118        key_data: Optional[str] = None,
6119        **kwargs
6120    ):
6121        super(SshPublicKey, self).__init__(**kwargs)
6122        self.path = path
6123        self.key_data = key_data
6124
6125
6126class SshPublicKeyGenerateKeyPairResult(msrest.serialization.Model):
6127    """Response from generation of an SSH key pair.
6128
6129    All required parameters must be populated in order to send to Azure.
6130
6131    :param private_key: Required. Private key portion of the key pair used to authenticate to a
6132     virtual machine through ssh. The private key is returned in RFC3447 format and should be
6133     treated as a secret.
6134    :type private_key: str
6135    :param public_key: Required. Public key portion of the key pair used to authenticate to a
6136     virtual machine through ssh. The public key is in ssh-rsa format.
6137    :type public_key: str
6138    :param id: Required. The ARM resource id in the form of
6139     /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/sshPublicKeys/{SshPublicKeyName}.
6140    :type id: str
6141    """
6142
6143    _validation = {
6144        'private_key': {'required': True},
6145        'public_key': {'required': True},
6146        'id': {'required': True},
6147    }
6148
6149    _attribute_map = {
6150        'private_key': {'key': 'privateKey', 'type': 'str'},
6151        'public_key': {'key': 'publicKey', 'type': 'str'},
6152        'id': {'key': 'id', 'type': 'str'},
6153    }
6154
6155    def __init__(
6156        self,
6157        *,
6158        private_key: str,
6159        public_key: str,
6160        id: str,
6161        **kwargs
6162    ):
6163        super(SshPublicKeyGenerateKeyPairResult, self).__init__(**kwargs)
6164        self.private_key = private_key
6165        self.public_key = public_key
6166        self.id = id
6167
6168
6169class SshPublicKeyResource(Resource):
6170    """Specifies information about the SSH public key.
6171
6172    Variables are only populated by the server, and will be ignored when sending a request.
6173
6174    All required parameters must be populated in order to send to Azure.
6175
6176    :ivar id: Resource Id.
6177    :vartype id: str
6178    :ivar name: Resource name.
6179    :vartype name: str
6180    :ivar type: Resource type.
6181    :vartype type: str
6182    :param location: Required. Resource location.
6183    :type location: str
6184    :param tags: A set of tags. Resource tags.
6185    :type tags: dict[str, str]
6186    :param public_key: SSH public key used to authenticate to a virtual machine through ssh. If
6187     this property is not initially provided when the resource is created, the publicKey property
6188     will be populated when generateKeyPair is called. If the public key is provided upon resource
6189     creation, the provided public key needs to be at least 2048-bit and in ssh-rsa format.
6190    :type public_key: str
6191    """
6192
6193    _validation = {
6194        'id': {'readonly': True},
6195        'name': {'readonly': True},
6196        'type': {'readonly': True},
6197        'location': {'required': True},
6198    }
6199
6200    _attribute_map = {
6201        'id': {'key': 'id', 'type': 'str'},
6202        'name': {'key': 'name', 'type': 'str'},
6203        'type': {'key': 'type', 'type': 'str'},
6204        'location': {'key': 'location', 'type': 'str'},
6205        'tags': {'key': 'tags', 'type': '{str}'},
6206        'public_key': {'key': 'properties.publicKey', 'type': 'str'},
6207    }
6208
6209    def __init__(
6210        self,
6211        *,
6212        location: str,
6213        tags: Optional[Dict[str, str]] = None,
6214        public_key: Optional[str] = None,
6215        **kwargs
6216    ):
6217        super(SshPublicKeyResource, self).__init__(location=location, tags=tags, **kwargs)
6218        self.public_key = public_key
6219
6220
6221class SshPublicKeysGroupListResult(msrest.serialization.Model):
6222    """The list SSH public keys operation response.
6223
6224    All required parameters must be populated in order to send to Azure.
6225
6226    :param value: Required. The list of SSH public keys.
6227    :type value: list[~azure.mgmt.compute.v2020_12_01.models.SshPublicKeyResource]
6228    :param next_link: The URI to fetch the next page of SSH public keys. Call ListNext() with this
6229     URI to fetch the next page of SSH public keys.
6230    :type next_link: str
6231    """
6232
6233    _validation = {
6234        'value': {'required': True},
6235    }
6236
6237    _attribute_map = {
6238        'value': {'key': 'value', 'type': '[SshPublicKeyResource]'},
6239        'next_link': {'key': 'nextLink', 'type': 'str'},
6240    }
6241
6242    def __init__(
6243        self,
6244        *,
6245        value: List["SshPublicKeyResource"],
6246        next_link: Optional[str] = None,
6247        **kwargs
6248    ):
6249        super(SshPublicKeysGroupListResult, self).__init__(**kwargs)
6250        self.value = value
6251        self.next_link = next_link
6252
6253
6254class SshPublicKeyUpdateResource(UpdateResource):
6255    """Specifies information about the SSH public key.
6256
6257    :param tags: A set of tags. Resource tags.
6258    :type tags: dict[str, str]
6259    :param public_key: SSH public key used to authenticate to a virtual machine through ssh. If
6260     this property is not initially provided when the resource is created, the publicKey property
6261     will be populated when generateKeyPair is called. If the public key is provided upon resource
6262     creation, the provided public key needs to be at least 2048-bit and in ssh-rsa format.
6263    :type public_key: str
6264    """
6265
6266    _attribute_map = {
6267        'tags': {'key': 'tags', 'type': '{str}'},
6268        'public_key': {'key': 'properties.publicKey', 'type': 'str'},
6269    }
6270
6271    def __init__(
6272        self,
6273        *,
6274        tags: Optional[Dict[str, str]] = None,
6275        public_key: Optional[str] = None,
6276        **kwargs
6277    ):
6278        super(SshPublicKeyUpdateResource, self).__init__(tags=tags, **kwargs)
6279        self.public_key = public_key
6280
6281
6282class StorageProfile(msrest.serialization.Model):
6283    """Specifies the storage settings for the virtual machine disks.
6284
6285    :param image_reference: Specifies information about the image to use. You can specify
6286     information about platform images, marketplace images, or virtual machine images. This element
6287     is required when you want to use a platform image, marketplace image, or virtual machine image,
6288     but is not used in other creation operations.
6289    :type image_reference: ~azure.mgmt.compute.v2020_12_01.models.ImageReference
6290    :param os_disk: Specifies information about the operating system disk used by the virtual
6291     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
6292     for Azure virtual machines
6293     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6294    :type os_disk: ~azure.mgmt.compute.v2020_12_01.models.OSDisk
6295    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
6296     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
6297     for Azure virtual machines
6298     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6299    :type data_disks: list[~azure.mgmt.compute.v2020_12_01.models.DataDisk]
6300    """
6301
6302    _attribute_map = {
6303        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
6304        'os_disk': {'key': 'osDisk', 'type': 'OSDisk'},
6305        'data_disks': {'key': 'dataDisks', 'type': '[DataDisk]'},
6306    }
6307
6308    def __init__(
6309        self,
6310        *,
6311        image_reference: Optional["ImageReference"] = None,
6312        os_disk: Optional["OSDisk"] = None,
6313        data_disks: Optional[List["DataDisk"]] = None,
6314        **kwargs
6315    ):
6316        super(StorageProfile, self).__init__(**kwargs)
6317        self.image_reference = image_reference
6318        self.os_disk = os_disk
6319        self.data_disks = data_disks
6320
6321
6322class SubResourceReadOnly(msrest.serialization.Model):
6323    """SubResourceReadOnly.
6324
6325    Variables are only populated by the server, and will be ignored when sending a request.
6326
6327    :ivar id: Resource Id.
6328    :vartype id: str
6329    """
6330
6331    _validation = {
6332        'id': {'readonly': True},
6333    }
6334
6335    _attribute_map = {
6336        'id': {'key': 'id', 'type': 'str'},
6337    }
6338
6339    def __init__(
6340        self,
6341        **kwargs
6342    ):
6343        super(SubResourceReadOnly, self).__init__(**kwargs)
6344        self.id = None
6345
6346
6347class SubResourceWithColocationStatus(SubResource):
6348    """SubResourceWithColocationStatus.
6349
6350    :param id: Resource Id.
6351    :type id: str
6352    :param colocation_status: Describes colocation status of a resource in the Proximity Placement
6353     Group.
6354    :type colocation_status: ~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus
6355    """
6356
6357    _attribute_map = {
6358        'id': {'key': 'id', 'type': 'str'},
6359        'colocation_status': {'key': 'colocationStatus', 'type': 'InstanceViewStatus'},
6360    }
6361
6362    def __init__(
6363        self,
6364        *,
6365        id: Optional[str] = None,
6366        colocation_status: Optional["InstanceViewStatus"] = None,
6367        **kwargs
6368    ):
6369        super(SubResourceWithColocationStatus, self).__init__(id=id, **kwargs)
6370        self.colocation_status = colocation_status
6371
6372
6373class TerminateNotificationProfile(msrest.serialization.Model):
6374    """TerminateNotificationProfile.
6375
6376    :param not_before_timeout: Configurable length of time a Virtual Machine being deleted will
6377     have to potentially approve the Terminate Scheduled Event before the event is auto approved
6378     (timed out). The configuration must be specified in ISO 8601 format, the default value is 5
6379     minutes (PT5M).
6380    :type not_before_timeout: str
6381    :param enable: Specifies whether the Terminate Scheduled event is enabled or disabled.
6382    :type enable: bool
6383    """
6384
6385    _attribute_map = {
6386        'not_before_timeout': {'key': 'notBeforeTimeout', 'type': 'str'},
6387        'enable': {'key': 'enable', 'type': 'bool'},
6388    }
6389
6390    def __init__(
6391        self,
6392        *,
6393        not_before_timeout: Optional[str] = None,
6394        enable: Optional[bool] = None,
6395        **kwargs
6396    ):
6397        super(TerminateNotificationProfile, self).__init__(**kwargs)
6398        self.not_before_timeout = not_before_timeout
6399        self.enable = enable
6400
6401
6402class ThrottledRequestsInput(LogAnalyticsInputBase):
6403    """Api request input for LogAnalytics getThrottledRequests Api.
6404
6405    All required parameters must be populated in order to send to Azure.
6406
6407    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
6408     LogAnalytics Api writes output logs to.
6409    :type blob_container_sas_uri: str
6410    :param from_time: Required. From time of the query.
6411    :type from_time: ~datetime.datetime
6412    :param to_time: Required. To time of the query.
6413    :type to_time: ~datetime.datetime
6414    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
6415    :type group_by_throttle_policy: bool
6416    :param group_by_operation_name: Group query result by Operation Name.
6417    :type group_by_operation_name: bool
6418    :param group_by_resource_name: Group query result by Resource Name.
6419    :type group_by_resource_name: bool
6420    :param group_by_client_application_id: Group query result by Client Application ID.
6421    :type group_by_client_application_id: bool
6422    :param group_by_user_agent: Group query result by User Agent.
6423    :type group_by_user_agent: bool
6424    """
6425
6426    _validation = {
6427        'blob_container_sas_uri': {'required': True},
6428        'from_time': {'required': True},
6429        'to_time': {'required': True},
6430    }
6431
6432    _attribute_map = {
6433        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
6434        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
6435        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
6436        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
6437        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
6438        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
6439        'group_by_client_application_id': {'key': 'groupByClientApplicationId', 'type': 'bool'},
6440        'group_by_user_agent': {'key': 'groupByUserAgent', 'type': 'bool'},
6441    }
6442
6443    def __init__(
6444        self,
6445        *,
6446        blob_container_sas_uri: str,
6447        from_time: datetime.datetime,
6448        to_time: datetime.datetime,
6449        group_by_throttle_policy: Optional[bool] = None,
6450        group_by_operation_name: Optional[bool] = None,
6451        group_by_resource_name: Optional[bool] = None,
6452        group_by_client_application_id: Optional[bool] = None,
6453        group_by_user_agent: Optional[bool] = None,
6454        **kwargs
6455    ):
6456        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, group_by_client_application_id=group_by_client_application_id, group_by_user_agent=group_by_user_agent, **kwargs)
6457
6458
6459class UefiSettings(msrest.serialization.Model):
6460    """Specifies the security settings like secure boot and vTPM used while creating the virtual machine. :code:`<br>`:code:`<br>`Minimum api-version: 2020-12-01.
6461
6462    :param secure_boot_enabled: Specifies whether secure boot should be enabled on the virtual
6463     machine. :code:`<br>`:code:`<br>`Minimum api-version: 2020-12-01.
6464    :type secure_boot_enabled: bool
6465    :param v_tpm_enabled: Specifies whether vTPM should be enabled on the virtual machine.
6466     :code:`<br>`:code:`<br>`Minimum api-version: 2020-12-01.
6467    :type v_tpm_enabled: bool
6468    """
6469
6470    _attribute_map = {
6471        'secure_boot_enabled': {'key': 'secureBootEnabled', 'type': 'bool'},
6472        'v_tpm_enabled': {'key': 'vTpmEnabled', 'type': 'bool'},
6473    }
6474
6475    def __init__(
6476        self,
6477        *,
6478        secure_boot_enabled: Optional[bool] = None,
6479        v_tpm_enabled: Optional[bool] = None,
6480        **kwargs
6481    ):
6482        super(UefiSettings, self).__init__(**kwargs)
6483        self.secure_boot_enabled = secure_boot_enabled
6484        self.v_tpm_enabled = v_tpm_enabled
6485
6486
6487class UpgradeOperationHistoricalStatusInfo(msrest.serialization.Model):
6488    """Virtual Machine Scale Set OS Upgrade History operation response.
6489
6490    Variables are only populated by the server, and will be ignored when sending a request.
6491
6492    :ivar properties: Information about the properties of the upgrade operation.
6493    :vartype properties:
6494     ~azure.mgmt.compute.v2020_12_01.models.UpgradeOperationHistoricalStatusInfoProperties
6495    :ivar type: Resource type.
6496    :vartype type: str
6497    :ivar location: Resource location.
6498    :vartype location: str
6499    """
6500
6501    _validation = {
6502        'properties': {'readonly': True},
6503        'type': {'readonly': True},
6504        'location': {'readonly': True},
6505    }
6506
6507    _attribute_map = {
6508        'properties': {'key': 'properties', 'type': 'UpgradeOperationHistoricalStatusInfoProperties'},
6509        'type': {'key': 'type', 'type': 'str'},
6510        'location': {'key': 'location', 'type': 'str'},
6511    }
6512
6513    def __init__(
6514        self,
6515        **kwargs
6516    ):
6517        super(UpgradeOperationHistoricalStatusInfo, self).__init__(**kwargs)
6518        self.properties = None
6519        self.type = None
6520        self.location = None
6521
6522
6523class UpgradeOperationHistoricalStatusInfoProperties(msrest.serialization.Model):
6524    """Describes each OS upgrade on the Virtual Machine Scale Set.
6525
6526    Variables are only populated by the server, and will be ignored when sending a request.
6527
6528    :ivar running_status: Information about the overall status of the upgrade operation.
6529    :vartype running_status: ~azure.mgmt.compute.v2020_12_01.models.UpgradeOperationHistoryStatus
6530    :ivar progress: Counts of the VMs in each state.
6531    :vartype progress: ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradeProgressInfo
6532    :ivar error: Error Details for this upgrade if there are any.
6533    :vartype error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
6534    :ivar started_by: Invoker of the Upgrade Operation. Possible values include: "Unknown", "User",
6535     "Platform".
6536    :vartype started_by: str or ~azure.mgmt.compute.v2020_12_01.models.UpgradeOperationInvoker
6537    :ivar target_image_reference: Image Reference details.
6538    :vartype target_image_reference: ~azure.mgmt.compute.v2020_12_01.models.ImageReference
6539    :ivar rollback_info: Information about OS rollback if performed.
6540    :vartype rollback_info: ~azure.mgmt.compute.v2020_12_01.models.RollbackStatusInfo
6541    """
6542
6543    _validation = {
6544        'running_status': {'readonly': True},
6545        'progress': {'readonly': True},
6546        'error': {'readonly': True},
6547        'started_by': {'readonly': True},
6548        'target_image_reference': {'readonly': True},
6549        'rollback_info': {'readonly': True},
6550    }
6551
6552    _attribute_map = {
6553        'running_status': {'key': 'runningStatus', 'type': 'UpgradeOperationHistoryStatus'},
6554        'progress': {'key': 'progress', 'type': 'RollingUpgradeProgressInfo'},
6555        'error': {'key': 'error', 'type': 'ApiError'},
6556        'started_by': {'key': 'startedBy', 'type': 'str'},
6557        'target_image_reference': {'key': 'targetImageReference', 'type': 'ImageReference'},
6558        'rollback_info': {'key': 'rollbackInfo', 'type': 'RollbackStatusInfo'},
6559    }
6560
6561    def __init__(
6562        self,
6563        **kwargs
6564    ):
6565        super(UpgradeOperationHistoricalStatusInfoProperties, self).__init__(**kwargs)
6566        self.running_status = None
6567        self.progress = None
6568        self.error = None
6569        self.started_by = None
6570        self.target_image_reference = None
6571        self.rollback_info = None
6572
6573
6574class UpgradeOperationHistoryStatus(msrest.serialization.Model):
6575    """Information about the current running state of the overall upgrade.
6576
6577    Variables are only populated by the server, and will be ignored when sending a request.
6578
6579    :ivar code: Code indicating the current status of the upgrade. Possible values include:
6580     "RollingForward", "Cancelled", "Completed", "Faulted".
6581    :vartype code: str or ~azure.mgmt.compute.v2020_12_01.models.UpgradeState
6582    :ivar start_time: Start time of the upgrade.
6583    :vartype start_time: ~datetime.datetime
6584    :ivar end_time: End time of the upgrade.
6585    :vartype end_time: ~datetime.datetime
6586    """
6587
6588    _validation = {
6589        'code': {'readonly': True},
6590        'start_time': {'readonly': True},
6591        'end_time': {'readonly': True},
6592    }
6593
6594    _attribute_map = {
6595        'code': {'key': 'code', 'type': 'str'},
6596        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
6597        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
6598    }
6599
6600    def __init__(
6601        self,
6602        **kwargs
6603    ):
6604        super(UpgradeOperationHistoryStatus, self).__init__(**kwargs)
6605        self.code = None
6606        self.start_time = None
6607        self.end_time = None
6608
6609
6610class UpgradePolicy(msrest.serialization.Model):
6611    """Describes an upgrade policy - automatic, manual, or rolling.
6612
6613    :param mode: Specifies the mode of an upgrade to virtual machines in the scale set.:code:`<br
6614     />`:code:`<br />` Possible values are::code:`<br />`:code:`<br />` **Manual** - You  control
6615     the application of updates to virtual machines in the scale set. You do this by using the
6616     manualUpgrade action.:code:`<br />`:code:`<br />` **Automatic** - All virtual machines in the
6617     scale set are  automatically updated at the same time. Possible values include: "Automatic",
6618     "Manual", "Rolling".
6619    :type mode: str or ~azure.mgmt.compute.v2020_12_01.models.UpgradeMode
6620    :param rolling_upgrade_policy: The configuration parameters used while performing a rolling
6621     upgrade.
6622    :type rolling_upgrade_policy: ~azure.mgmt.compute.v2020_12_01.models.RollingUpgradePolicy
6623    :param automatic_os_upgrade_policy: Configuration parameters used for performing automatic OS
6624     Upgrade.
6625    :type automatic_os_upgrade_policy:
6626     ~azure.mgmt.compute.v2020_12_01.models.AutomaticOSUpgradePolicy
6627    """
6628
6629    _attribute_map = {
6630        'mode': {'key': 'mode', 'type': 'str'},
6631        'rolling_upgrade_policy': {'key': 'rollingUpgradePolicy', 'type': 'RollingUpgradePolicy'},
6632        'automatic_os_upgrade_policy': {'key': 'automaticOSUpgradePolicy', 'type': 'AutomaticOSUpgradePolicy'},
6633    }
6634
6635    def __init__(
6636        self,
6637        *,
6638        mode: Optional[Union[str, "UpgradeMode"]] = None,
6639        rolling_upgrade_policy: Optional["RollingUpgradePolicy"] = None,
6640        automatic_os_upgrade_policy: Optional["AutomaticOSUpgradePolicy"] = None,
6641        **kwargs
6642    ):
6643        super(UpgradePolicy, self).__init__(**kwargs)
6644        self.mode = mode
6645        self.rolling_upgrade_policy = rolling_upgrade_policy
6646        self.automatic_os_upgrade_policy = automatic_os_upgrade_policy
6647
6648
6649class Usage(msrest.serialization.Model):
6650    """Describes Compute Resource Usage.
6651
6652    Variables are only populated by the server, and will be ignored when sending a request.
6653
6654    All required parameters must be populated in order to send to Azure.
6655
6656    :ivar unit: An enum describing the unit of usage measurement. Has constant value: "Count".
6657    :vartype unit: str
6658    :param current_value: Required. The current usage of the resource.
6659    :type current_value: int
6660    :param limit: Required. The maximum permitted usage of the resource.
6661    :type limit: long
6662    :param name: Required. The name of the type of usage.
6663    :type name: ~azure.mgmt.compute.v2020_12_01.models.UsageName
6664    """
6665
6666    _validation = {
6667        'unit': {'required': True, 'constant': True},
6668        'current_value': {'required': True},
6669        'limit': {'required': True},
6670        'name': {'required': True},
6671    }
6672
6673    _attribute_map = {
6674        'unit': {'key': 'unit', 'type': 'str'},
6675        'current_value': {'key': 'currentValue', 'type': 'int'},
6676        'limit': {'key': 'limit', 'type': 'long'},
6677        'name': {'key': 'name', 'type': 'UsageName'},
6678    }
6679
6680    unit = "Count"
6681
6682    def __init__(
6683        self,
6684        *,
6685        current_value: int,
6686        limit: int,
6687        name: "UsageName",
6688        **kwargs
6689    ):
6690        super(Usage, self).__init__(**kwargs)
6691        self.current_value = current_value
6692        self.limit = limit
6693        self.name = name
6694
6695
6696class UsageName(msrest.serialization.Model):
6697    """The Usage Names.
6698
6699    :param value: The name of the resource.
6700    :type value: str
6701    :param localized_value: The localized name of the resource.
6702    :type localized_value: str
6703    """
6704
6705    _attribute_map = {
6706        'value': {'key': 'value', 'type': 'str'},
6707        'localized_value': {'key': 'localizedValue', 'type': 'str'},
6708    }
6709
6710    def __init__(
6711        self,
6712        *,
6713        value: Optional[str] = None,
6714        localized_value: Optional[str] = None,
6715        **kwargs
6716    ):
6717        super(UsageName, self).__init__(**kwargs)
6718        self.value = value
6719        self.localized_value = localized_value
6720
6721
6722class UserAssignedIdentitiesValue(msrest.serialization.Model):
6723    """UserAssignedIdentitiesValue.
6724
6725    Variables are only populated by the server, and will be ignored when sending a request.
6726
6727    :ivar principal_id: The principal id of user assigned identity.
6728    :vartype principal_id: str
6729    :ivar client_id: The client id of user assigned identity.
6730    :vartype client_id: str
6731    """
6732
6733    _validation = {
6734        'principal_id': {'readonly': True},
6735        'client_id': {'readonly': True},
6736    }
6737
6738    _attribute_map = {
6739        'principal_id': {'key': 'principalId', 'type': 'str'},
6740        'client_id': {'key': 'clientId', 'type': 'str'},
6741    }
6742
6743    def __init__(
6744        self,
6745        **kwargs
6746    ):
6747        super(UserAssignedIdentitiesValue, self).__init__(**kwargs)
6748        self.principal_id = None
6749        self.client_id = None
6750
6751
6752class VaultCertificate(msrest.serialization.Model):
6753    """Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.
6754
6755    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
6756     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
6757     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
6758     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
6759     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
6760     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
6761     "password":":code:`<pfx-file-password>`":code:`<br>`}.
6762    :type certificate_url: str
6763    :param certificate_store: For Windows VMs, specifies the certificate store on the Virtual
6764     Machine to which the certificate should be added. The specified certificate store is implicitly
6765     in the LocalMachine account. :code:`<br>`:code:`<br>`For Linux VMs, the certificate file is
6766     placed under the /var/lib/waagent directory, with the file name &lt;UppercaseThumbprint&gt;.crt
6767     for the X509 certificate file and &lt;UppercaseThumbprint&gt;.prv for private key. Both of
6768     these files are .pem formatted.
6769    :type certificate_store: str
6770    """
6771
6772    _attribute_map = {
6773        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
6774        'certificate_store': {'key': 'certificateStore', 'type': 'str'},
6775    }
6776
6777    def __init__(
6778        self,
6779        *,
6780        certificate_url: Optional[str] = None,
6781        certificate_store: Optional[str] = None,
6782        **kwargs
6783    ):
6784        super(VaultCertificate, self).__init__(**kwargs)
6785        self.certificate_url = certificate_url
6786        self.certificate_store = certificate_store
6787
6788
6789class VaultSecretGroup(msrest.serialization.Model):
6790    """Describes a set of certificates which are all in the same Key Vault.
6791
6792    :param source_vault: The relative URL of the Key Vault containing all of the certificates in
6793     VaultCertificates.
6794    :type source_vault: ~azure.mgmt.compute.v2020_12_01.models.SubResource
6795    :param vault_certificates: The list of key vault references in SourceVault which contain
6796     certificates.
6797    :type vault_certificates: list[~azure.mgmt.compute.v2020_12_01.models.VaultCertificate]
6798    """
6799
6800    _attribute_map = {
6801        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
6802        'vault_certificates': {'key': 'vaultCertificates', 'type': '[VaultCertificate]'},
6803    }
6804
6805    def __init__(
6806        self,
6807        *,
6808        source_vault: Optional["SubResource"] = None,
6809        vault_certificates: Optional[List["VaultCertificate"]] = None,
6810        **kwargs
6811    ):
6812        super(VaultSecretGroup, self).__init__(**kwargs)
6813        self.source_vault = source_vault
6814        self.vault_certificates = vault_certificates
6815
6816
6817class VirtualHardDisk(msrest.serialization.Model):
6818    """Describes the uri of a disk.
6819
6820    :param uri: Specifies the virtual hard disk's uri.
6821    :type uri: str
6822    """
6823
6824    _attribute_map = {
6825        'uri': {'key': 'uri', 'type': 'str'},
6826    }
6827
6828    def __init__(
6829        self,
6830        *,
6831        uri: Optional[str] = None,
6832        **kwargs
6833    ):
6834        super(VirtualHardDisk, self).__init__(**kwargs)
6835        self.uri = uri
6836
6837
6838class VirtualMachine(Resource):
6839    """Describes a Virtual Machine.
6840
6841    Variables are only populated by the server, and will be ignored when sending a request.
6842
6843    All required parameters must be populated in order to send to Azure.
6844
6845    :ivar id: Resource Id.
6846    :vartype id: str
6847    :ivar name: Resource name.
6848    :vartype name: str
6849    :ivar type: Resource type.
6850    :vartype type: str
6851    :param location: Required. Resource location.
6852    :type location: str
6853    :param tags: A set of tags. Resource tags.
6854    :type tags: dict[str, str]
6855    :param plan: Specifies information about the marketplace image used to create the virtual
6856     machine. This element is only used for marketplace images. Before you can use a marketplace
6857     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
6858     the marketplace image that you want to use and then click **Want to deploy programmatically,
6859     Get Started ->**. Enter any required information and then click **Save**.
6860    :type plan: ~azure.mgmt.compute.v2020_12_01.models.Plan
6861    :ivar resources: The virtual machine child extension resources.
6862    :vartype resources: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtension]
6863    :param identity: The identity of the virtual machine, if configured.
6864    :type identity: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineIdentity
6865    :param zones: The virtual machine zones.
6866    :type zones: list[str]
6867    :param extended_location: The extended location of the Virtual Machine.
6868    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
6869    :param hardware_profile: Specifies the hardware settings for the virtual machine.
6870    :type hardware_profile: ~azure.mgmt.compute.v2020_12_01.models.HardwareProfile
6871    :param storage_profile: Specifies the storage settings for the virtual machine disks.
6872    :type storage_profile: ~azure.mgmt.compute.v2020_12_01.models.StorageProfile
6873    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
6874     virtual machine.
6875    :type additional_capabilities: ~azure.mgmt.compute.v2020_12_01.models.AdditionalCapabilities
6876    :param os_profile: Specifies the operating system settings used while creating the virtual
6877     machine. Some of the settings cannot be changed once VM is provisioned.
6878    :type os_profile: ~azure.mgmt.compute.v2020_12_01.models.OSProfile
6879    :param network_profile: Specifies the network interfaces of the virtual machine.
6880    :type network_profile: ~azure.mgmt.compute.v2020_12_01.models.NetworkProfile
6881    :param security_profile: Specifies the Security related profile settings for the virtual
6882     machine.
6883    :type security_profile: ~azure.mgmt.compute.v2020_12_01.models.SecurityProfile
6884    :param diagnostics_profile: Specifies the boot diagnostic settings state.
6885     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
6886    :type diagnostics_profile: ~azure.mgmt.compute.v2020_12_01.models.DiagnosticsProfile
6887    :param availability_set: Specifies information about the availability set that the virtual
6888     machine should be assigned to. Virtual machines specified in the same availability set are
6889     allocated to different nodes to maximize availability. For more information about availability
6890     sets, see `Manage the availability of virtual machines
6891     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6892     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
6893     maintenance for virtual machines in Azure
6894     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6895     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
6896     time. The availability set to which the VM is being added should be under the same resource
6897     group as the availability set resource. An existing VM cannot be added to an availability set.
6898     :code:`<br>`:code:`<br>`This property cannot exist along with a non-null
6899     properties.virtualMachineScaleSet reference.
6900    :type availability_set: ~azure.mgmt.compute.v2020_12_01.models.SubResource
6901    :param virtual_machine_scale_set: Specifies information about the virtual machine scale set
6902     that the virtual machine should be assigned to. Virtual machines specified in the same virtual
6903     machine scale set are allocated to different nodes to maximize availability. Currently, a VM
6904     can only be added to virtual machine scale set at creation time. An existing VM cannot be added
6905     to a virtual machine scale set. :code:`<br>`:code:`<br>`This property cannot exist along with a
6906     non-null properties.availabilitySet reference. :code:`<br>`:code:`<br>`Minimum api‐version:
6907     2019‐03‐01.
6908    :type virtual_machine_scale_set: ~azure.mgmt.compute.v2020_12_01.models.SubResource
6909    :param proximity_placement_group: Specifies information about the proximity placement group
6910     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
6911     2018-04-01.
6912    :type proximity_placement_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
6913    :param priority: Specifies the priority for the virtual machine.
6914     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01. Possible values include: "Regular",
6915     "Low", "Spot".
6916    :type priority: str or ~azure.mgmt.compute.v2020_12_01.models.VirtualMachinePriorityTypes
6917    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and
6918     Azure Spot scale set. :code:`<br>`:code:`<br>`For Azure Spot virtual machines, both
6919     'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.
6920     :code:`<br>`:code:`<br>`For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported
6921     and the minimum api-version is 2017-10-30-preview. Possible values include: "Deallocate",
6922     "Delete".
6923    :type eviction_policy: str or
6924     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineEvictionPolicyTypes
6925    :param billing_profile: Specifies the billing related details of a Azure Spot virtual machine.
6926     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
6927    :type billing_profile: ~azure.mgmt.compute.v2020_12_01.models.BillingProfile
6928    :param host: Specifies information about the dedicated host that the virtual machine resides
6929     in. :code:`<br>`:code:`<br>`Minimum api-version: 2018-10-01.
6930    :type host: ~azure.mgmt.compute.v2020_12_01.models.SubResource
6931    :param host_group: Specifies information about the dedicated host group that the virtual
6932     machine resides in. :code:`<br>`:code:`<br>`Minimum api-version: 2020-06-01.
6933     :code:`<br>`:code:`<br>`NOTE: User cannot specify both host and hostGroup properties.
6934    :type host_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
6935    :ivar provisioning_state: The provisioning state, which only appears in the response.
6936    :vartype provisioning_state: str
6937    :ivar instance_view: The virtual machine instance view.
6938    :vartype instance_view: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineInstanceView
6939    :param license_type: Specifies that the image or disk that is being used was licensed
6940     on-premises. :code:`<br>`:code:`<br>` Possible values for Windows Server operating system are:
6941     :code:`<br>`:code:`<br>` Windows_Client :code:`<br>`:code:`<br>` Windows_Server
6942     :code:`<br>`:code:`<br>` Possible values for Linux Server operating system are:
6943     :code:`<br>`:code:`<br>` RHEL_BYOS (for RHEL) :code:`<br>`:code:`<br>` SLES_BYOS (for SUSE)
6944     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
6945     <https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing>`_
6946     :code:`<br>`:code:`<br>` `Azure Hybrid Use Benefit for Linux Server
6947     <https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux>`_
6948     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
6949    :type license_type: str
6950    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
6951     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
6952    :vartype vm_id: str
6953    :param extensions_time_budget: Specifies the time alloted for all extensions to start. The time
6954     duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in
6955     ISO 8601 format. The default value is 90 minutes (PT1H30M). :code:`<br>`:code:`<br>` Minimum
6956     api-version: 2020-06-01.
6957    :type extensions_time_budget: str
6958    :param platform_fault_domain: Specifies the scale set logical fault domain into which the
6959     Virtual Machine will be created. By default, the Virtual Machine will by automatically assigned
6960     to a fault domain that best maintains balance across available fault
6961     domains.:code:`<br>`:code:`<li>`This is applicable only if the 'virtualMachineScaleSet'
6962     property of this Virtual Machine is set.:code:`<li>`The Virtual Machine Scale Set that is
6963     referenced, must have 'platformFaultDomainCount' &gt; 1.:code:`<li>`This property cannot be
6964     updated once the Virtual Machine is created.:code:`<li>`Fault domain assignment can be viewed
6965     in the Virtual Machine Instance View.:code:`<br>`:code:`<br>`Minimum api‐version: 2020‐12‐01.
6966    :type platform_fault_domain: int
6967    """
6968
6969    _validation = {
6970        'id': {'readonly': True},
6971        'name': {'readonly': True},
6972        'type': {'readonly': True},
6973        'location': {'required': True},
6974        'resources': {'readonly': True},
6975        'provisioning_state': {'readonly': True},
6976        'instance_view': {'readonly': True},
6977        'vm_id': {'readonly': True},
6978    }
6979
6980    _attribute_map = {
6981        'id': {'key': 'id', 'type': 'str'},
6982        'name': {'key': 'name', 'type': 'str'},
6983        'type': {'key': 'type', 'type': 'str'},
6984        'location': {'key': 'location', 'type': 'str'},
6985        'tags': {'key': 'tags', 'type': '{str}'},
6986        'plan': {'key': 'plan', 'type': 'Plan'},
6987        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
6988        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
6989        'zones': {'key': 'zones', 'type': '[str]'},
6990        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
6991        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
6992        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
6993        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
6994        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
6995        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
6996        'security_profile': {'key': 'properties.securityProfile', 'type': 'SecurityProfile'},
6997        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
6998        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
6999        'virtual_machine_scale_set': {'key': 'properties.virtualMachineScaleSet', 'type': 'SubResource'},
7000        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
7001        'priority': {'key': 'properties.priority', 'type': 'str'},
7002        'eviction_policy': {'key': 'properties.evictionPolicy', 'type': 'str'},
7003        'billing_profile': {'key': 'properties.billingProfile', 'type': 'BillingProfile'},
7004        'host': {'key': 'properties.host', 'type': 'SubResource'},
7005        'host_group': {'key': 'properties.hostGroup', 'type': 'SubResource'},
7006        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7007        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
7008        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
7009        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
7010        'extensions_time_budget': {'key': 'properties.extensionsTimeBudget', 'type': 'str'},
7011        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
7012    }
7013
7014    def __init__(
7015        self,
7016        *,
7017        location: str,
7018        tags: Optional[Dict[str, str]] = None,
7019        plan: Optional["Plan"] = None,
7020        identity: Optional["VirtualMachineIdentity"] = None,
7021        zones: Optional[List[str]] = None,
7022        extended_location: Optional["ExtendedLocation"] = None,
7023        hardware_profile: Optional["HardwareProfile"] = None,
7024        storage_profile: Optional["StorageProfile"] = None,
7025        additional_capabilities: Optional["AdditionalCapabilities"] = None,
7026        os_profile: Optional["OSProfile"] = None,
7027        network_profile: Optional["NetworkProfile"] = None,
7028        security_profile: Optional["SecurityProfile"] = None,
7029        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
7030        availability_set: Optional["SubResource"] = None,
7031        virtual_machine_scale_set: Optional["SubResource"] = None,
7032        proximity_placement_group: Optional["SubResource"] = None,
7033        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
7034        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
7035        billing_profile: Optional["BillingProfile"] = None,
7036        host: Optional["SubResource"] = None,
7037        host_group: Optional["SubResource"] = None,
7038        license_type: Optional[str] = None,
7039        extensions_time_budget: Optional[str] = None,
7040        platform_fault_domain: Optional[int] = None,
7041        **kwargs
7042    ):
7043        super(VirtualMachine, self).__init__(location=location, tags=tags, **kwargs)
7044        self.plan = plan
7045        self.resources = None
7046        self.identity = identity
7047        self.zones = zones
7048        self.extended_location = extended_location
7049        self.hardware_profile = hardware_profile
7050        self.storage_profile = storage_profile
7051        self.additional_capabilities = additional_capabilities
7052        self.os_profile = os_profile
7053        self.network_profile = network_profile
7054        self.security_profile = security_profile
7055        self.diagnostics_profile = diagnostics_profile
7056        self.availability_set = availability_set
7057        self.virtual_machine_scale_set = virtual_machine_scale_set
7058        self.proximity_placement_group = proximity_placement_group
7059        self.priority = priority
7060        self.eviction_policy = eviction_policy
7061        self.billing_profile = billing_profile
7062        self.host = host
7063        self.host_group = host_group
7064        self.provisioning_state = None
7065        self.instance_view = None
7066        self.license_type = license_type
7067        self.vm_id = None
7068        self.extensions_time_budget = extensions_time_budget
7069        self.platform_fault_domain = platform_fault_domain
7070
7071
7072class VirtualMachineAgentInstanceView(msrest.serialization.Model):
7073    """The instance view of the VM Agent running on the virtual machine.
7074
7075    :param vm_agent_version: The VM Agent full version.
7076    :type vm_agent_version: str
7077    :param extension_handlers: The virtual machine extension handler instance view.
7078    :type extension_handlers:
7079     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtensionHandlerInstanceView]
7080    :param statuses: The resource status information.
7081    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
7082    """
7083
7084    _attribute_map = {
7085        'vm_agent_version': {'key': 'vmAgentVersion', 'type': 'str'},
7086        'extension_handlers': {'key': 'extensionHandlers', 'type': '[VirtualMachineExtensionHandlerInstanceView]'},
7087        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
7088    }
7089
7090    def __init__(
7091        self,
7092        *,
7093        vm_agent_version: Optional[str] = None,
7094        extension_handlers: Optional[List["VirtualMachineExtensionHandlerInstanceView"]] = None,
7095        statuses: Optional[List["InstanceViewStatus"]] = None,
7096        **kwargs
7097    ):
7098        super(VirtualMachineAgentInstanceView, self).__init__(**kwargs)
7099        self.vm_agent_version = vm_agent_version
7100        self.extension_handlers = extension_handlers
7101        self.statuses = statuses
7102
7103
7104class VirtualMachineAssessPatchesResult(msrest.serialization.Model):
7105    """Describes the properties of an AssessPatches result.
7106
7107    Variables are only populated by the server, and will be ignored when sending a request.
7108
7109    :ivar status: The overall success or failure status of the operation. It remains "InProgress"
7110     until the operation completes. At that point it will become "Unknown", "Failed", "Succeeded",
7111     or "CompletedWithWarnings.". Possible values include: "Unknown", "InProgress", "Failed",
7112     "Succeeded", "CompletedWithWarnings".
7113    :vartype status: str or ~azure.mgmt.compute.v2020_12_01.models.PatchOperationStatus
7114    :ivar assessment_activity_id: The activity ID of the operation that produced this result. It is
7115     used to correlate across CRP and extension logs.
7116    :vartype assessment_activity_id: str
7117    :ivar reboot_pending: The overall reboot status of the VM. It will be true when partially
7118     installed patches require a reboot to complete installation but the reboot has not yet
7119     occurred.
7120    :vartype reboot_pending: bool
7121    :ivar critical_and_security_patch_count: The number of critical or security patches that have
7122     been detected as available and not yet installed.
7123    :vartype critical_and_security_patch_count: int
7124    :ivar other_patch_count: The number of all available patches excluding critical and security.
7125    :vartype other_patch_count: int
7126    :ivar start_date_time: The UTC timestamp when the operation began.
7127    :vartype start_date_time: ~datetime.datetime
7128    :ivar available_patches: The list of patches that have been detected as available for
7129     installation.
7130    :vartype available_patches:
7131     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineSoftwarePatchProperties]
7132    :ivar error: The errors that were encountered during execution of the operation. The details
7133     array contains the list of them.
7134    :vartype error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
7135    """
7136
7137    _validation = {
7138        'status': {'readonly': True},
7139        'assessment_activity_id': {'readonly': True},
7140        'reboot_pending': {'readonly': True},
7141        'critical_and_security_patch_count': {'readonly': True},
7142        'other_patch_count': {'readonly': True},
7143        'start_date_time': {'readonly': True},
7144        'available_patches': {'readonly': True},
7145        'error': {'readonly': True},
7146    }
7147
7148    _attribute_map = {
7149        'status': {'key': 'status', 'type': 'str'},
7150        'assessment_activity_id': {'key': 'assessmentActivityId', 'type': 'str'},
7151        'reboot_pending': {'key': 'rebootPending', 'type': 'bool'},
7152        'critical_and_security_patch_count': {'key': 'criticalAndSecurityPatchCount', 'type': 'int'},
7153        'other_patch_count': {'key': 'otherPatchCount', 'type': 'int'},
7154        'start_date_time': {'key': 'startDateTime', 'type': 'iso-8601'},
7155        'available_patches': {'key': 'availablePatches', 'type': '[VirtualMachineSoftwarePatchProperties]'},
7156        'error': {'key': 'error', 'type': 'ApiError'},
7157    }
7158
7159    def __init__(
7160        self,
7161        **kwargs
7162    ):
7163        super(VirtualMachineAssessPatchesResult, self).__init__(**kwargs)
7164        self.status = None
7165        self.assessment_activity_id = None
7166        self.reboot_pending = None
7167        self.critical_and_security_patch_count = None
7168        self.other_patch_count = None
7169        self.start_date_time = None
7170        self.available_patches = None
7171        self.error = None
7172
7173
7174class VirtualMachineCaptureParameters(msrest.serialization.Model):
7175    """Capture Virtual Machine parameters.
7176
7177    All required parameters must be populated in order to send to Azure.
7178
7179    :param vhd_prefix: Required. The captured virtual hard disk's name prefix.
7180    :type vhd_prefix: str
7181    :param destination_container_name: Required. The destination container name.
7182    :type destination_container_name: str
7183    :param overwrite_vhds: Required. Specifies whether to overwrite the destination virtual hard
7184     disk, in case of conflict.
7185    :type overwrite_vhds: bool
7186    """
7187
7188    _validation = {
7189        'vhd_prefix': {'required': True},
7190        'destination_container_name': {'required': True},
7191        'overwrite_vhds': {'required': True},
7192    }
7193
7194    _attribute_map = {
7195        'vhd_prefix': {'key': 'vhdPrefix', 'type': 'str'},
7196        'destination_container_name': {'key': 'destinationContainerName', 'type': 'str'},
7197        'overwrite_vhds': {'key': 'overwriteVhds', 'type': 'bool'},
7198    }
7199
7200    def __init__(
7201        self,
7202        *,
7203        vhd_prefix: str,
7204        destination_container_name: str,
7205        overwrite_vhds: bool,
7206        **kwargs
7207    ):
7208        super(VirtualMachineCaptureParameters, self).__init__(**kwargs)
7209        self.vhd_prefix = vhd_prefix
7210        self.destination_container_name = destination_container_name
7211        self.overwrite_vhds = overwrite_vhds
7212
7213
7214class VirtualMachineCaptureResult(SubResource):
7215    """Output of virtual machine capture operation.
7216
7217    Variables are only populated by the server, and will be ignored when sending a request.
7218
7219    :param id: Resource Id.
7220    :type id: str
7221    :ivar schema: the schema of the captured virtual machine.
7222    :vartype schema: str
7223    :ivar content_version: the version of the content.
7224    :vartype content_version: str
7225    :ivar parameters: parameters of the captured virtual machine.
7226    :vartype parameters: any
7227    :ivar resources: a list of resource items of the captured virtual machine.
7228    :vartype resources: list[any]
7229    """
7230
7231    _validation = {
7232        'schema': {'readonly': True},
7233        'content_version': {'readonly': True},
7234        'parameters': {'readonly': True},
7235        'resources': {'readonly': True},
7236    }
7237
7238    _attribute_map = {
7239        'id': {'key': 'id', 'type': 'str'},
7240        'schema': {'key': '$schema', 'type': 'str'},
7241        'content_version': {'key': 'contentVersion', 'type': 'str'},
7242        'parameters': {'key': 'parameters', 'type': 'object'},
7243        'resources': {'key': 'resources', 'type': '[object]'},
7244    }
7245
7246    def __init__(
7247        self,
7248        *,
7249        id: Optional[str] = None,
7250        **kwargs
7251    ):
7252        super(VirtualMachineCaptureResult, self).__init__(id=id, **kwargs)
7253        self.schema = None
7254        self.content_version = None
7255        self.parameters = None
7256        self.resources = None
7257
7258
7259class VirtualMachineExtension(Resource):
7260    """Describes a Virtual Machine Extension.
7261
7262    Variables are only populated by the server, and will be ignored when sending a request.
7263
7264    All required parameters must be populated in order to send to Azure.
7265
7266    :ivar id: Resource Id.
7267    :vartype id: str
7268    :ivar name: Resource name.
7269    :vartype name: str
7270    :ivar type: Resource type.
7271    :vartype type: str
7272    :param location: Required. Resource location.
7273    :type location: str
7274    :param tags: A set of tags. Resource tags.
7275    :type tags: dict[str, str]
7276    :param force_update_tag: How the extension handler should be forced to update even if the
7277     extension configuration has not changed.
7278    :type force_update_tag: str
7279    :param publisher: The name of the extension handler publisher.
7280    :type publisher: str
7281    :param type_properties_type: Specifies the type of the extension; an example is
7282     "CustomScriptExtension".
7283    :type type_properties_type: str
7284    :param type_handler_version: Specifies the version of the script handler.
7285    :type type_handler_version: str
7286    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
7287     version if one is available at deployment time. Once deployed, however, the extension will not
7288     upgrade minor versions unless redeployed, even with this property set to true.
7289    :type auto_upgrade_minor_version: bool
7290    :param enable_automatic_upgrade: Indicates whether the extension should be automatically
7291     upgraded by the platform if there is a newer version of the extension available.
7292    :type enable_automatic_upgrade: bool
7293    :param settings: Json formatted public settings for the extension.
7294    :type settings: any
7295    :param protected_settings: The extension can contain either protectedSettings or
7296     protectedSettingsFromKeyVault or no protected settings at all.
7297    :type protected_settings: any
7298    :ivar provisioning_state: The provisioning state, which only appears in the response.
7299    :vartype provisioning_state: str
7300    :param instance_view: The virtual machine extension instance view.
7301    :type instance_view: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtensionInstanceView
7302    """
7303
7304    _validation = {
7305        'id': {'readonly': True},
7306        'name': {'readonly': True},
7307        'type': {'readonly': True},
7308        'location': {'required': True},
7309        'provisioning_state': {'readonly': True},
7310    }
7311
7312    _attribute_map = {
7313        'id': {'key': 'id', 'type': 'str'},
7314        'name': {'key': 'name', 'type': 'str'},
7315        'type': {'key': 'type', 'type': 'str'},
7316        'location': {'key': 'location', 'type': 'str'},
7317        'tags': {'key': 'tags', 'type': '{str}'},
7318        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
7319        'publisher': {'key': 'properties.publisher', 'type': 'str'},
7320        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
7321        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
7322        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
7323        'enable_automatic_upgrade': {'key': 'properties.enableAutomaticUpgrade', 'type': 'bool'},
7324        'settings': {'key': 'properties.settings', 'type': 'object'},
7325        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
7326        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7327        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineExtensionInstanceView'},
7328    }
7329
7330    def __init__(
7331        self,
7332        *,
7333        location: str,
7334        tags: Optional[Dict[str, str]] = None,
7335        force_update_tag: Optional[str] = None,
7336        publisher: Optional[str] = None,
7337        type_properties_type: Optional[str] = None,
7338        type_handler_version: Optional[str] = None,
7339        auto_upgrade_minor_version: Optional[bool] = None,
7340        enable_automatic_upgrade: Optional[bool] = None,
7341        settings: Optional[Any] = None,
7342        protected_settings: Optional[Any] = None,
7343        instance_view: Optional["VirtualMachineExtensionInstanceView"] = None,
7344        **kwargs
7345    ):
7346        super(VirtualMachineExtension, self).__init__(location=location, tags=tags, **kwargs)
7347        self.force_update_tag = force_update_tag
7348        self.publisher = publisher
7349        self.type_properties_type = type_properties_type
7350        self.type_handler_version = type_handler_version
7351        self.auto_upgrade_minor_version = auto_upgrade_minor_version
7352        self.enable_automatic_upgrade = enable_automatic_upgrade
7353        self.settings = settings
7354        self.protected_settings = protected_settings
7355        self.provisioning_state = None
7356        self.instance_view = instance_view
7357
7358
7359class VirtualMachineExtensionHandlerInstanceView(msrest.serialization.Model):
7360    """The instance view of a virtual machine extension handler.
7361
7362    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7363    :type type: str
7364    :param type_handler_version: Specifies the version of the script handler.
7365    :type type_handler_version: str
7366    :param status: The extension handler status.
7367    :type status: ~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus
7368    """
7369
7370    _attribute_map = {
7371        'type': {'key': 'type', 'type': 'str'},
7372        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
7373        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
7374    }
7375
7376    def __init__(
7377        self,
7378        *,
7379        type: Optional[str] = None,
7380        type_handler_version: Optional[str] = None,
7381        status: Optional["InstanceViewStatus"] = None,
7382        **kwargs
7383    ):
7384        super(VirtualMachineExtensionHandlerInstanceView, self).__init__(**kwargs)
7385        self.type = type
7386        self.type_handler_version = type_handler_version
7387        self.status = status
7388
7389
7390class VirtualMachineExtensionImage(Resource):
7391    """Describes a Virtual Machine Extension Image.
7392
7393    Variables are only populated by the server, and will be ignored when sending a request.
7394
7395    All required parameters must be populated in order to send to Azure.
7396
7397    :ivar id: Resource Id.
7398    :vartype id: str
7399    :ivar name: Resource name.
7400    :vartype name: str
7401    :ivar type: Resource type.
7402    :vartype type: str
7403    :param location: Required. Resource location.
7404    :type location: str
7405    :param tags: A set of tags. Resource tags.
7406    :type tags: dict[str, str]
7407    :param operating_system: The operating system this extension supports.
7408    :type operating_system: str
7409    :param compute_role: The type of role (IaaS or PaaS) this extension supports.
7410    :type compute_role: str
7411    :param handler_schema: The schema defined by publisher, where extension consumers should
7412     provide settings in a matching schema.
7413    :type handler_schema: str
7414    :param vm_scale_set_enabled: Whether the extension can be used on xRP VMScaleSets. By default
7415     existing extensions are usable on scalesets, but there might be cases where a publisher wants
7416     to explicitly indicate the extension is only enabled for CRP VMs but not VMSS.
7417    :type vm_scale_set_enabled: bool
7418    :param supports_multiple_extensions: Whether the handler can support multiple extensions.
7419    :type supports_multiple_extensions: bool
7420    """
7421
7422    _validation = {
7423        'id': {'readonly': True},
7424        'name': {'readonly': True},
7425        'type': {'readonly': True},
7426        'location': {'required': True},
7427    }
7428
7429    _attribute_map = {
7430        'id': {'key': 'id', 'type': 'str'},
7431        'name': {'key': 'name', 'type': 'str'},
7432        'type': {'key': 'type', 'type': 'str'},
7433        'location': {'key': 'location', 'type': 'str'},
7434        'tags': {'key': 'tags', 'type': '{str}'},
7435        'operating_system': {'key': 'properties.operatingSystem', 'type': 'str'},
7436        'compute_role': {'key': 'properties.computeRole', 'type': 'str'},
7437        'handler_schema': {'key': 'properties.handlerSchema', 'type': 'str'},
7438        'vm_scale_set_enabled': {'key': 'properties.vmScaleSetEnabled', 'type': 'bool'},
7439        'supports_multiple_extensions': {'key': 'properties.supportsMultipleExtensions', 'type': 'bool'},
7440    }
7441
7442    def __init__(
7443        self,
7444        *,
7445        location: str,
7446        tags: Optional[Dict[str, str]] = None,
7447        operating_system: Optional[str] = None,
7448        compute_role: Optional[str] = None,
7449        handler_schema: Optional[str] = None,
7450        vm_scale_set_enabled: Optional[bool] = None,
7451        supports_multiple_extensions: Optional[bool] = None,
7452        **kwargs
7453    ):
7454        super(VirtualMachineExtensionImage, self).__init__(location=location, tags=tags, **kwargs)
7455        self.operating_system = operating_system
7456        self.compute_role = compute_role
7457        self.handler_schema = handler_schema
7458        self.vm_scale_set_enabled = vm_scale_set_enabled
7459        self.supports_multiple_extensions = supports_multiple_extensions
7460
7461
7462class VirtualMachineExtensionInstanceView(msrest.serialization.Model):
7463    """The instance view of a virtual machine extension.
7464
7465    :param name: The virtual machine extension name.
7466    :type name: str
7467    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7468    :type type: str
7469    :param type_handler_version: Specifies the version of the script handler.
7470    :type type_handler_version: str
7471    :param substatuses: The resource status information.
7472    :type substatuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
7473    :param statuses: The resource status information.
7474    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
7475    """
7476
7477    _attribute_map = {
7478        'name': {'key': 'name', 'type': 'str'},
7479        'type': {'key': 'type', 'type': 'str'},
7480        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
7481        'substatuses': {'key': 'substatuses', 'type': '[InstanceViewStatus]'},
7482        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
7483    }
7484
7485    def __init__(
7486        self,
7487        *,
7488        name: Optional[str] = None,
7489        type: Optional[str] = None,
7490        type_handler_version: Optional[str] = None,
7491        substatuses: Optional[List["InstanceViewStatus"]] = None,
7492        statuses: Optional[List["InstanceViewStatus"]] = None,
7493        **kwargs
7494    ):
7495        super(VirtualMachineExtensionInstanceView, self).__init__(**kwargs)
7496        self.name = name
7497        self.type = type
7498        self.type_handler_version = type_handler_version
7499        self.substatuses = substatuses
7500        self.statuses = statuses
7501
7502
7503class VirtualMachineExtensionsListResult(msrest.serialization.Model):
7504    """The List Extension operation response.
7505
7506    :param value: The list of extensions.
7507    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtension]
7508    """
7509
7510    _attribute_map = {
7511        'value': {'key': 'value', 'type': '[VirtualMachineExtension]'},
7512    }
7513
7514    def __init__(
7515        self,
7516        *,
7517        value: Optional[List["VirtualMachineExtension"]] = None,
7518        **kwargs
7519    ):
7520        super(VirtualMachineExtensionsListResult, self).__init__(**kwargs)
7521        self.value = value
7522
7523
7524class VirtualMachineExtensionUpdate(UpdateResource):
7525    """Describes a Virtual Machine Extension.
7526
7527    :param tags: A set of tags. Resource tags.
7528    :type tags: dict[str, str]
7529    :param force_update_tag: How the extension handler should be forced to update even if the
7530     extension configuration has not changed.
7531    :type force_update_tag: str
7532    :param publisher: The name of the extension handler publisher.
7533    :type publisher: str
7534    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7535    :type type: str
7536    :param type_handler_version: Specifies the version of the script handler.
7537    :type type_handler_version: str
7538    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
7539     version if one is available at deployment time. Once deployed, however, the extension will not
7540     upgrade minor versions unless redeployed, even with this property set to true.
7541    :type auto_upgrade_minor_version: bool
7542    :param enable_automatic_upgrade: Indicates whether the extension should be automatically
7543     upgraded by the platform if there is a newer version of the extension available.
7544    :type enable_automatic_upgrade: bool
7545    :param settings: Json formatted public settings for the extension.
7546    :type settings: any
7547    :param protected_settings: The extension can contain either protectedSettings or
7548     protectedSettingsFromKeyVault or no protected settings at all.
7549    :type protected_settings: any
7550    """
7551
7552    _attribute_map = {
7553        'tags': {'key': 'tags', 'type': '{str}'},
7554        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
7555        'publisher': {'key': 'properties.publisher', 'type': 'str'},
7556        'type': {'key': 'properties.type', 'type': 'str'},
7557        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
7558        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
7559        'enable_automatic_upgrade': {'key': 'properties.enableAutomaticUpgrade', 'type': 'bool'},
7560        'settings': {'key': 'properties.settings', 'type': 'object'},
7561        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
7562    }
7563
7564    def __init__(
7565        self,
7566        *,
7567        tags: Optional[Dict[str, str]] = None,
7568        force_update_tag: Optional[str] = None,
7569        publisher: Optional[str] = None,
7570        type: Optional[str] = None,
7571        type_handler_version: Optional[str] = None,
7572        auto_upgrade_minor_version: Optional[bool] = None,
7573        enable_automatic_upgrade: Optional[bool] = None,
7574        settings: Optional[Any] = None,
7575        protected_settings: Optional[Any] = None,
7576        **kwargs
7577    ):
7578        super(VirtualMachineExtensionUpdate, self).__init__(tags=tags, **kwargs)
7579        self.force_update_tag = force_update_tag
7580        self.publisher = publisher
7581        self.type = type
7582        self.type_handler_version = type_handler_version
7583        self.auto_upgrade_minor_version = auto_upgrade_minor_version
7584        self.enable_automatic_upgrade = enable_automatic_upgrade
7585        self.settings = settings
7586        self.protected_settings = protected_settings
7587
7588
7589class VirtualMachineHealthStatus(msrest.serialization.Model):
7590    """The health status of the VM.
7591
7592    Variables are only populated by the server, and will be ignored when sending a request.
7593
7594    :ivar status: The health status information for the VM.
7595    :vartype status: ~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus
7596    """
7597
7598    _validation = {
7599        'status': {'readonly': True},
7600    }
7601
7602    _attribute_map = {
7603        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
7604    }
7605
7606    def __init__(
7607        self,
7608        **kwargs
7609    ):
7610        super(VirtualMachineHealthStatus, self).__init__(**kwargs)
7611        self.status = None
7612
7613
7614class VirtualMachineIdentity(msrest.serialization.Model):
7615    """Identity for the virtual machine.
7616
7617    Variables are only populated by the server, and will be ignored when sending a request.
7618
7619    :ivar principal_id: The principal id of virtual machine identity. This property will only be
7620     provided for a system assigned identity.
7621    :vartype principal_id: str
7622    :ivar tenant_id: The tenant id associated with the virtual machine. This property will only be
7623     provided for a system assigned identity.
7624    :vartype tenant_id: str
7625    :param type: The type of identity used for the virtual machine. The type 'SystemAssigned,
7626     UserAssigned' includes both an implicitly created identity and a set of user assigned
7627     identities. The type 'None' will remove any identities from the virtual machine. Possible
7628     values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", "None".
7629    :type type: str or ~azure.mgmt.compute.v2020_12_01.models.ResourceIdentityType
7630    :param user_assigned_identities: The list of user identities associated with the Virtual
7631     Machine. The user identity dictionary key references will be ARM resource ids in the form:
7632     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
7633    :type user_assigned_identities: dict[str,
7634     ~azure.mgmt.compute.v2020_12_01.models.UserAssignedIdentitiesValue]
7635    """
7636
7637    _validation = {
7638        'principal_id': {'readonly': True},
7639        'tenant_id': {'readonly': True},
7640    }
7641
7642    _attribute_map = {
7643        'principal_id': {'key': 'principalId', 'type': 'str'},
7644        'tenant_id': {'key': 'tenantId', 'type': 'str'},
7645        'type': {'key': 'type', 'type': 'str'},
7646        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserAssignedIdentitiesValue}'},
7647    }
7648
7649    def __init__(
7650        self,
7651        *,
7652        type: Optional[Union[str, "ResourceIdentityType"]] = None,
7653        user_assigned_identities: Optional[Dict[str, "UserAssignedIdentitiesValue"]] = None,
7654        **kwargs
7655    ):
7656        super(VirtualMachineIdentity, self).__init__(**kwargs)
7657        self.principal_id = None
7658        self.tenant_id = None
7659        self.type = type
7660        self.user_assigned_identities = user_assigned_identities
7661
7662
7663class VirtualMachineImageResource(SubResource):
7664    """Virtual machine image resource information.
7665
7666    All required parameters must be populated in order to send to Azure.
7667
7668    :param id: Resource Id.
7669    :type id: str
7670    :param name: Required. The name of the resource.
7671    :type name: str
7672    :param location: Required. The supported Azure location of the resource.
7673    :type location: str
7674    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
7675     more information about using tags, see `Using tags to organize your Azure resources
7676     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
7677    :type tags: dict[str, str]
7678    :param extended_location: The extended location of the Virtual Machine.
7679    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
7680    """
7681
7682    _validation = {
7683        'name': {'required': True},
7684        'location': {'required': True},
7685    }
7686
7687    _attribute_map = {
7688        'id': {'key': 'id', 'type': 'str'},
7689        'name': {'key': 'name', 'type': 'str'},
7690        'location': {'key': 'location', 'type': 'str'},
7691        'tags': {'key': 'tags', 'type': '{str}'},
7692        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
7693    }
7694
7695    def __init__(
7696        self,
7697        *,
7698        name: str,
7699        location: str,
7700        id: Optional[str] = None,
7701        tags: Optional[Dict[str, str]] = None,
7702        extended_location: Optional["ExtendedLocation"] = None,
7703        **kwargs
7704    ):
7705        super(VirtualMachineImageResource, self).__init__(id=id, **kwargs)
7706        self.name = name
7707        self.location = location
7708        self.tags = tags
7709        self.extended_location = extended_location
7710
7711
7712class VirtualMachineImage(VirtualMachineImageResource):
7713    """Describes a Virtual Machine Image.
7714
7715    All required parameters must be populated in order to send to Azure.
7716
7717    :param id: Resource Id.
7718    :type id: str
7719    :param name: Required. The name of the resource.
7720    :type name: str
7721    :param location: Required. The supported Azure location of the resource.
7722    :type location: str
7723    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
7724     more information about using tags, see `Using tags to organize your Azure resources
7725     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
7726    :type tags: dict[str, str]
7727    :param extended_location: The extended location of the Virtual Machine.
7728    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
7729    :param plan: Used for establishing the purchase context of any 3rd Party artifact through
7730     MarketPlace.
7731    :type plan: ~azure.mgmt.compute.v2020_12_01.models.PurchasePlanAutoGenerated
7732    :param os_disk_image: Contains the os disk image information.
7733    :type os_disk_image: ~azure.mgmt.compute.v2020_12_01.models.OSDiskImage
7734    :param data_disk_images:
7735    :type data_disk_images: list[~azure.mgmt.compute.v2020_12_01.models.DataDiskImage]
7736    :param automatic_os_upgrade_properties: Describes automatic OS upgrade properties on the image.
7737    :type automatic_os_upgrade_properties:
7738     ~azure.mgmt.compute.v2020_12_01.models.AutomaticOSUpgradeProperties
7739    :param hyper_v_generation: Specifies the HyperVGeneration Type. Possible values include: "V1",
7740     "V2".
7741    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGenerationTypes
7742    :param disallowed: Specifies disallowed configuration for the VirtualMachine created from the
7743     image.
7744    :type disallowed: ~azure.mgmt.compute.v2020_12_01.models.DisallowedConfiguration
7745    :param features:
7746    :type features: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineImageFeature]
7747    """
7748
7749    _validation = {
7750        'name': {'required': True},
7751        'location': {'required': True},
7752    }
7753
7754    _attribute_map = {
7755        'id': {'key': 'id', 'type': 'str'},
7756        'name': {'key': 'name', 'type': 'str'},
7757        'location': {'key': 'location', 'type': 'str'},
7758        'tags': {'key': 'tags', 'type': '{str}'},
7759        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
7760        'plan': {'key': 'properties.plan', 'type': 'PurchasePlanAutoGenerated'},
7761        'os_disk_image': {'key': 'properties.osDiskImage', 'type': 'OSDiskImage'},
7762        'data_disk_images': {'key': 'properties.dataDiskImages', 'type': '[DataDiskImage]'},
7763        'automatic_os_upgrade_properties': {'key': 'properties.automaticOSUpgradeProperties', 'type': 'AutomaticOSUpgradeProperties'},
7764        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
7765        'disallowed': {'key': 'properties.disallowed', 'type': 'DisallowedConfiguration'},
7766        'features': {'key': 'properties.features', 'type': '[VirtualMachineImageFeature]'},
7767    }
7768
7769    def __init__(
7770        self,
7771        *,
7772        name: str,
7773        location: str,
7774        id: Optional[str] = None,
7775        tags: Optional[Dict[str, str]] = None,
7776        extended_location: Optional["ExtendedLocation"] = None,
7777        plan: Optional["PurchasePlanAutoGenerated"] = None,
7778        os_disk_image: Optional["OSDiskImage"] = None,
7779        data_disk_images: Optional[List["DataDiskImage"]] = None,
7780        automatic_os_upgrade_properties: Optional["AutomaticOSUpgradeProperties"] = None,
7781        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
7782        disallowed: Optional["DisallowedConfiguration"] = None,
7783        features: Optional[List["VirtualMachineImageFeature"]] = None,
7784        **kwargs
7785    ):
7786        super(VirtualMachineImage, self).__init__(id=id, name=name, location=location, tags=tags, extended_location=extended_location, **kwargs)
7787        self.plan = plan
7788        self.os_disk_image = os_disk_image
7789        self.data_disk_images = data_disk_images
7790        self.automatic_os_upgrade_properties = automatic_os_upgrade_properties
7791        self.hyper_v_generation = hyper_v_generation
7792        self.disallowed = disallowed
7793        self.features = features
7794
7795
7796class VirtualMachineImageFeature(msrest.serialization.Model):
7797    """Specifies additional capabilities supported by the image.
7798
7799    :param name: The name of the feature.
7800    :type name: str
7801    :param value: The corresponding value for the feature.
7802    :type value: str
7803    """
7804
7805    _attribute_map = {
7806        'name': {'key': 'name', 'type': 'str'},
7807        'value': {'key': 'value', 'type': 'str'},
7808    }
7809
7810    def __init__(
7811        self,
7812        *,
7813        name: Optional[str] = None,
7814        value: Optional[str] = None,
7815        **kwargs
7816    ):
7817        super(VirtualMachineImageFeature, self).__init__(**kwargs)
7818        self.name = name
7819        self.value = value
7820
7821
7822class VirtualMachineInstallPatchesParameters(msrest.serialization.Model):
7823    """Input for InstallPatches as directly received by the API.
7824
7825    All required parameters must be populated in order to send to Azure.
7826
7827    :param maximum_duration: Required. Specifies the maximum amount of time that the operation will
7828     run. It must be an ISO 8601-compliant duration string such as PT4H (4 hours).
7829    :type maximum_duration: str
7830    :param reboot_setting: Required. Defines when it is acceptable to reboot a VM during a software
7831     update operation. Possible values include: "IfRequired", "Never", "Always".
7832    :type reboot_setting: str or ~azure.mgmt.compute.v2020_12_01.models.VMGuestPatchRebootSetting
7833    :param windows_parameters: Input for InstallPatches on a Windows VM, as directly received by
7834     the API.
7835    :type windows_parameters: ~azure.mgmt.compute.v2020_12_01.models.WindowsParameters
7836    :param linux_parameters: Input for InstallPatches on a Linux VM, as directly received by the
7837     API.
7838    :type linux_parameters: ~azure.mgmt.compute.v2020_12_01.models.LinuxParameters
7839    """
7840
7841    _validation = {
7842        'maximum_duration': {'required': True},
7843        'reboot_setting': {'required': True},
7844    }
7845
7846    _attribute_map = {
7847        'maximum_duration': {'key': 'maximumDuration', 'type': 'str'},
7848        'reboot_setting': {'key': 'rebootSetting', 'type': 'str'},
7849        'windows_parameters': {'key': 'windowsParameters', 'type': 'WindowsParameters'},
7850        'linux_parameters': {'key': 'linuxParameters', 'type': 'LinuxParameters'},
7851    }
7852
7853    def __init__(
7854        self,
7855        *,
7856        maximum_duration: str,
7857        reboot_setting: Union[str, "VMGuestPatchRebootSetting"],
7858        windows_parameters: Optional["WindowsParameters"] = None,
7859        linux_parameters: Optional["LinuxParameters"] = None,
7860        **kwargs
7861    ):
7862        super(VirtualMachineInstallPatchesParameters, self).__init__(**kwargs)
7863        self.maximum_duration = maximum_duration
7864        self.reboot_setting = reboot_setting
7865        self.windows_parameters = windows_parameters
7866        self.linux_parameters = linux_parameters
7867
7868
7869class VirtualMachineInstallPatchesResult(msrest.serialization.Model):
7870    """The result summary of an installation operation.
7871
7872    Variables are only populated by the server, and will be ignored when sending a request.
7873
7874    :ivar status: The overall success or failure status of the operation. It remains "InProgress"
7875     until the operation completes. At that point it will become "Failed", "Succeeded", "Unknown" or
7876     "CompletedWithWarnings.". Possible values include: "Unknown", "InProgress", "Failed",
7877     "Succeeded", "CompletedWithWarnings".
7878    :vartype status: str or ~azure.mgmt.compute.v2020_12_01.models.PatchOperationStatus
7879    :ivar installation_activity_id: The activity ID of the operation that produced this result. It
7880     is used to correlate across CRP and extension logs.
7881    :vartype installation_activity_id: str
7882    :ivar reboot_status: The reboot state of the VM following completion of the operation. Possible
7883     values include: "Unknown", "NotNeeded", "Required", "Started", "Failed", "Completed".
7884    :vartype reboot_status: str or ~azure.mgmt.compute.v2020_12_01.models.VMGuestPatchRebootStatus
7885    :ivar maintenance_window_exceeded: Whether the operation ran out of time before it completed
7886     all its intended actions.
7887    :vartype maintenance_window_exceeded: bool
7888    :ivar excluded_patch_count: The number of patches that were not installed due to the user
7889     blocking their installation.
7890    :vartype excluded_patch_count: int
7891    :ivar not_selected_patch_count: The number of patches that were detected as available for
7892     install, but did not meet the operation's criteria.
7893    :vartype not_selected_patch_count: int
7894    :ivar pending_patch_count: The number of patches that were identified as meeting the
7895     installation criteria, but were not able to be installed. Typically this happens when
7896     maintenanceWindowExceeded == true.
7897    :vartype pending_patch_count: int
7898    :ivar installed_patch_count: The number of patches successfully installed.
7899    :vartype installed_patch_count: int
7900    :ivar failed_patch_count: The number of patches that could not be installed due to some issue.
7901     See errors for details.
7902    :vartype failed_patch_count: int
7903    :ivar patches: The patches that were installed during the operation.
7904    :vartype patches: list[~azure.mgmt.compute.v2020_12_01.models.PatchInstallationDetail]
7905    :ivar start_date_time: The UTC timestamp when the operation began.
7906    :vartype start_date_time: ~datetime.datetime
7907    :ivar error: The errors that were encountered during execution of the operation. The details
7908     array contains the list of them.
7909    :vartype error: ~azure.mgmt.compute.v2020_12_01.models.ApiError
7910    """
7911
7912    _validation = {
7913        'status': {'readonly': True},
7914        'installation_activity_id': {'readonly': True},
7915        'reboot_status': {'readonly': True},
7916        'maintenance_window_exceeded': {'readonly': True},
7917        'excluded_patch_count': {'readonly': True},
7918        'not_selected_patch_count': {'readonly': True},
7919        'pending_patch_count': {'readonly': True},
7920        'installed_patch_count': {'readonly': True},
7921        'failed_patch_count': {'readonly': True},
7922        'patches': {'readonly': True},
7923        'start_date_time': {'readonly': True},
7924        'error': {'readonly': True},
7925    }
7926
7927    _attribute_map = {
7928        'status': {'key': 'status', 'type': 'str'},
7929        'installation_activity_id': {'key': 'installationActivityId', 'type': 'str'},
7930        'reboot_status': {'key': 'rebootStatus', 'type': 'str'},
7931        'maintenance_window_exceeded': {'key': 'maintenanceWindowExceeded', 'type': 'bool'},
7932        'excluded_patch_count': {'key': 'excludedPatchCount', 'type': 'int'},
7933        'not_selected_patch_count': {'key': 'notSelectedPatchCount', 'type': 'int'},
7934        'pending_patch_count': {'key': 'pendingPatchCount', 'type': 'int'},
7935        'installed_patch_count': {'key': 'installedPatchCount', 'type': 'int'},
7936        'failed_patch_count': {'key': 'failedPatchCount', 'type': 'int'},
7937        'patches': {'key': 'patches', 'type': '[PatchInstallationDetail]'},
7938        'start_date_time': {'key': 'startDateTime', 'type': 'iso-8601'},
7939        'error': {'key': 'error', 'type': 'ApiError'},
7940    }
7941
7942    def __init__(
7943        self,
7944        **kwargs
7945    ):
7946        super(VirtualMachineInstallPatchesResult, self).__init__(**kwargs)
7947        self.status = None
7948        self.installation_activity_id = None
7949        self.reboot_status = None
7950        self.maintenance_window_exceeded = None
7951        self.excluded_patch_count = None
7952        self.not_selected_patch_count = None
7953        self.pending_patch_count = None
7954        self.installed_patch_count = None
7955        self.failed_patch_count = None
7956        self.patches = None
7957        self.start_date_time = None
7958        self.error = None
7959
7960
7961class VirtualMachineInstanceView(msrest.serialization.Model):
7962    """The instance view of a virtual machine.
7963
7964    Variables are only populated by the server, and will be ignored when sending a request.
7965
7966    :param platform_update_domain: Specifies the update domain of the virtual machine.
7967    :type platform_update_domain: int
7968    :param platform_fault_domain: Specifies the fault domain of the virtual machine.
7969    :type platform_fault_domain: int
7970    :param computer_name: The computer name assigned to the virtual machine.
7971    :type computer_name: str
7972    :param os_name: The Operating System running on the virtual machine.
7973    :type os_name: str
7974    :param os_version: The version of Operating System running on the virtual machine.
7975    :type os_version: str
7976    :param hyper_v_generation: Specifies the HyperVGeneration Type associated with a resource.
7977     Possible values include: "V1", "V2".
7978    :type hyper_v_generation: str or ~azure.mgmt.compute.v2020_12_01.models.HyperVGenerationType
7979    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
7980    :type rdp_thumb_print: str
7981    :param vm_agent: The VM Agent running on the virtual machine.
7982    :type vm_agent: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineAgentInstanceView
7983    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
7984    :type maintenance_redeploy_status:
7985     ~azure.mgmt.compute.v2020_12_01.models.MaintenanceRedeployStatus
7986    :param disks: The virtual machine disk information.
7987    :type disks: list[~azure.mgmt.compute.v2020_12_01.models.DiskInstanceView]
7988    :param extensions: The extensions information.
7989    :type extensions:
7990     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtensionInstanceView]
7991    :ivar vm_health: The health status for the VM.
7992    :vartype vm_health: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineHealthStatus
7993    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
7994     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
7995     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
7996     screenshot of the VM from the hypervisor.
7997    :type boot_diagnostics: ~azure.mgmt.compute.v2020_12_01.models.BootDiagnosticsInstanceView
7998    :ivar assigned_host: Resource id of the dedicated host, on which the virtual machine is
7999     allocated through automatic placement, when the virtual machine is associated with a dedicated
8000     host group that has automatic placement enabled. :code:`<br>`:code:`<br>`Minimum api-version:
8001     2020-06-01.
8002    :vartype assigned_host: str
8003    :param statuses: The resource status information.
8004    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
8005    :param patch_status: [Preview Feature] The status of virtual machine patch operations.
8006    :type patch_status: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachinePatchStatus
8007    """
8008
8009    _validation = {
8010        'vm_health': {'readonly': True},
8011        'assigned_host': {'readonly': True},
8012    }
8013
8014    _attribute_map = {
8015        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
8016        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
8017        'computer_name': {'key': 'computerName', 'type': 'str'},
8018        'os_name': {'key': 'osName', 'type': 'str'},
8019        'os_version': {'key': 'osVersion', 'type': 'str'},
8020        'hyper_v_generation': {'key': 'hyperVGeneration', 'type': 'str'},
8021        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
8022        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
8023        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
8024        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
8025        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
8026        'vm_health': {'key': 'vmHealth', 'type': 'VirtualMachineHealthStatus'},
8027        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
8028        'assigned_host': {'key': 'assignedHost', 'type': 'str'},
8029        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
8030        'patch_status': {'key': 'patchStatus', 'type': 'VirtualMachinePatchStatus'},
8031    }
8032
8033    def __init__(
8034        self,
8035        *,
8036        platform_update_domain: Optional[int] = None,
8037        platform_fault_domain: Optional[int] = None,
8038        computer_name: Optional[str] = None,
8039        os_name: Optional[str] = None,
8040        os_version: Optional[str] = None,
8041        hyper_v_generation: Optional[Union[str, "HyperVGenerationType"]] = None,
8042        rdp_thumb_print: Optional[str] = None,
8043        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
8044        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
8045        disks: Optional[List["DiskInstanceView"]] = None,
8046        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
8047        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
8048        statuses: Optional[List["InstanceViewStatus"]] = None,
8049        patch_status: Optional["VirtualMachinePatchStatus"] = None,
8050        **kwargs
8051    ):
8052        super(VirtualMachineInstanceView, self).__init__(**kwargs)
8053        self.platform_update_domain = platform_update_domain
8054        self.platform_fault_domain = platform_fault_domain
8055        self.computer_name = computer_name
8056        self.os_name = os_name
8057        self.os_version = os_version
8058        self.hyper_v_generation = hyper_v_generation
8059        self.rdp_thumb_print = rdp_thumb_print
8060        self.vm_agent = vm_agent
8061        self.maintenance_redeploy_status = maintenance_redeploy_status
8062        self.disks = disks
8063        self.extensions = extensions
8064        self.vm_health = None
8065        self.boot_diagnostics = boot_diagnostics
8066        self.assigned_host = None
8067        self.statuses = statuses
8068        self.patch_status = patch_status
8069
8070
8071class VirtualMachineListResult(msrest.serialization.Model):
8072    """The List Virtual Machine operation response.
8073
8074    All required parameters must be populated in order to send to Azure.
8075
8076    :param value: Required. The list of virtual machines.
8077    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachine]
8078    :param next_link: The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch
8079     the next page of Virtual Machines.
8080    :type next_link: str
8081    """
8082
8083    _validation = {
8084        'value': {'required': True},
8085    }
8086
8087    _attribute_map = {
8088        'value': {'key': 'value', 'type': '[VirtualMachine]'},
8089        'next_link': {'key': 'nextLink', 'type': 'str'},
8090    }
8091
8092    def __init__(
8093        self,
8094        *,
8095        value: List["VirtualMachine"],
8096        next_link: Optional[str] = None,
8097        **kwargs
8098    ):
8099        super(VirtualMachineListResult, self).__init__(**kwargs)
8100        self.value = value
8101        self.next_link = next_link
8102
8103
8104class VirtualMachinePatchStatus(msrest.serialization.Model):
8105    """The status of virtual machine patch operations.
8106
8107    Variables are only populated by the server, and will be ignored when sending a request.
8108
8109    :param available_patch_summary: The available patch summary of the latest assessment operation
8110     for the virtual machine.
8111    :type available_patch_summary: ~azure.mgmt.compute.v2020_12_01.models.AvailablePatchSummary
8112    :param last_patch_installation_summary: The installation summary of the latest installation
8113     operation for the virtual machine.
8114    :type last_patch_installation_summary:
8115     ~azure.mgmt.compute.v2020_12_01.models.LastPatchInstallationSummary
8116    :ivar configuration_statuses: The enablement status of the specified patchMode.
8117    :vartype configuration_statuses:
8118     list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
8119    """
8120
8121    _validation = {
8122        'configuration_statuses': {'readonly': True},
8123    }
8124
8125    _attribute_map = {
8126        'available_patch_summary': {'key': 'availablePatchSummary', 'type': 'AvailablePatchSummary'},
8127        'last_patch_installation_summary': {'key': 'lastPatchInstallationSummary', 'type': 'LastPatchInstallationSummary'},
8128        'configuration_statuses': {'key': 'configurationStatuses', 'type': '[InstanceViewStatus]'},
8129    }
8130
8131    def __init__(
8132        self,
8133        *,
8134        available_patch_summary: Optional["AvailablePatchSummary"] = None,
8135        last_patch_installation_summary: Optional["LastPatchInstallationSummary"] = None,
8136        **kwargs
8137    ):
8138        super(VirtualMachinePatchStatus, self).__init__(**kwargs)
8139        self.available_patch_summary = available_patch_summary
8140        self.last_patch_installation_summary = last_patch_installation_summary
8141        self.configuration_statuses = None
8142
8143
8144class VirtualMachineReimageParameters(msrest.serialization.Model):
8145    """Parameters for Reimaging Virtual Machine. NOTE: Virtual Machine OS disk will always be reimaged.
8146
8147    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
8148     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
8149    :type temp_disk: bool
8150    """
8151
8152    _attribute_map = {
8153        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
8154    }
8155
8156    def __init__(
8157        self,
8158        *,
8159        temp_disk: Optional[bool] = None,
8160        **kwargs
8161    ):
8162        super(VirtualMachineReimageParameters, self).__init__(**kwargs)
8163        self.temp_disk = temp_disk
8164
8165
8166class VirtualMachineRunCommand(Resource):
8167    """Describes a Virtual Machine run command.
8168
8169    Variables are only populated by the server, and will be ignored when sending a request.
8170
8171    All required parameters must be populated in order to send to Azure.
8172
8173    :ivar id: Resource Id.
8174    :vartype id: str
8175    :ivar name: Resource name.
8176    :vartype name: str
8177    :ivar type: Resource type.
8178    :vartype type: str
8179    :param location: Required. Resource location.
8180    :type location: str
8181    :param tags: A set of tags. Resource tags.
8182    :type tags: dict[str, str]
8183    :param source: The source of the run command script.
8184    :type source: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineRunCommandScriptSource
8185    :param parameters: The parameters used by the script.
8186    :type parameters: list[~azure.mgmt.compute.v2020_12_01.models.RunCommandInputParameter]
8187    :param protected_parameters: The parameters used by the script.
8188    :type protected_parameters:
8189     list[~azure.mgmt.compute.v2020_12_01.models.RunCommandInputParameter]
8190    :param async_execution: Optional. If set to true, provisioning will complete as soon as the
8191     script starts and will not wait for script to complete.
8192    :type async_execution: bool
8193    :param run_as_user: Specifies the user account on the VM when executing the run command.
8194    :type run_as_user: str
8195    :param run_as_password: Specifies the user account password on the VM when executing the run
8196     command.
8197    :type run_as_password: str
8198    :param timeout_in_seconds: The timeout in seconds to execute the run command.
8199    :type timeout_in_seconds: int
8200    :param output_blob_uri: Specifies the Azure storage blob where script output stream will be
8201     uploaded.
8202    :type output_blob_uri: str
8203    :param error_blob_uri: Specifies the Azure storage blob where script error stream will be
8204     uploaded.
8205    :type error_blob_uri: str
8206    :ivar provisioning_state: The provisioning state, which only appears in the response.
8207    :vartype provisioning_state: str
8208    :ivar instance_view: The virtual machine run command instance view.
8209    :vartype instance_view:
8210     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineRunCommandInstanceView
8211    """
8212
8213    _validation = {
8214        'id': {'readonly': True},
8215        'name': {'readonly': True},
8216        'type': {'readonly': True},
8217        'location': {'required': True},
8218        'provisioning_state': {'readonly': True},
8219        'instance_view': {'readonly': True},
8220    }
8221
8222    _attribute_map = {
8223        'id': {'key': 'id', 'type': 'str'},
8224        'name': {'key': 'name', 'type': 'str'},
8225        'type': {'key': 'type', 'type': 'str'},
8226        'location': {'key': 'location', 'type': 'str'},
8227        'tags': {'key': 'tags', 'type': '{str}'},
8228        'source': {'key': 'properties.source', 'type': 'VirtualMachineRunCommandScriptSource'},
8229        'parameters': {'key': 'properties.parameters', 'type': '[RunCommandInputParameter]'},
8230        'protected_parameters': {'key': 'properties.protectedParameters', 'type': '[RunCommandInputParameter]'},
8231        'async_execution': {'key': 'properties.asyncExecution', 'type': 'bool'},
8232        'run_as_user': {'key': 'properties.runAsUser', 'type': 'str'},
8233        'run_as_password': {'key': 'properties.runAsPassword', 'type': 'str'},
8234        'timeout_in_seconds': {'key': 'properties.timeoutInSeconds', 'type': 'int'},
8235        'output_blob_uri': {'key': 'properties.outputBlobUri', 'type': 'str'},
8236        'error_blob_uri': {'key': 'properties.errorBlobUri', 'type': 'str'},
8237        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8238        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineRunCommandInstanceView'},
8239    }
8240
8241    def __init__(
8242        self,
8243        *,
8244        location: str,
8245        tags: Optional[Dict[str, str]] = None,
8246        source: Optional["VirtualMachineRunCommandScriptSource"] = None,
8247        parameters: Optional[List["RunCommandInputParameter"]] = None,
8248        protected_parameters: Optional[List["RunCommandInputParameter"]] = None,
8249        async_execution: Optional[bool] = False,
8250        run_as_user: Optional[str] = None,
8251        run_as_password: Optional[str] = None,
8252        timeout_in_seconds: Optional[int] = None,
8253        output_blob_uri: Optional[str] = None,
8254        error_blob_uri: Optional[str] = None,
8255        **kwargs
8256    ):
8257        super(VirtualMachineRunCommand, self).__init__(location=location, tags=tags, **kwargs)
8258        self.source = source
8259        self.parameters = parameters
8260        self.protected_parameters = protected_parameters
8261        self.async_execution = async_execution
8262        self.run_as_user = run_as_user
8263        self.run_as_password = run_as_password
8264        self.timeout_in_seconds = timeout_in_seconds
8265        self.output_blob_uri = output_blob_uri
8266        self.error_blob_uri = error_blob_uri
8267        self.provisioning_state = None
8268        self.instance_view = None
8269
8270
8271class VirtualMachineRunCommandInstanceView(msrest.serialization.Model):
8272    """The instance view of a virtual machine run command.
8273
8274    :param execution_state: Script execution status. Possible values include: "Unknown", "Pending",
8275     "Running", "Failed", "Succeeded", "TimedOut", "Canceled".
8276    :type execution_state: str or ~azure.mgmt.compute.v2020_12_01.models.ExecutionState
8277    :param execution_message: Communicate script configuration errors or execution messages.
8278    :type execution_message: str
8279    :param exit_code: Exit code returned from script execution.
8280    :type exit_code: int
8281    :param output: Script output stream.
8282    :type output: str
8283    :param error: Script error stream.
8284    :type error: str
8285    :param start_time: Script start time.
8286    :type start_time: ~datetime.datetime
8287    :param end_time: Script end time.
8288    :type end_time: ~datetime.datetime
8289    :param statuses: The resource status information.
8290    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
8291    """
8292
8293    _attribute_map = {
8294        'execution_state': {'key': 'executionState', 'type': 'str'},
8295        'execution_message': {'key': 'executionMessage', 'type': 'str'},
8296        'exit_code': {'key': 'exitCode', 'type': 'int'},
8297        'output': {'key': 'output', 'type': 'str'},
8298        'error': {'key': 'error', 'type': 'str'},
8299        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
8300        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
8301        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
8302    }
8303
8304    def __init__(
8305        self,
8306        *,
8307        execution_state: Optional[Union[str, "ExecutionState"]] = None,
8308        execution_message: Optional[str] = None,
8309        exit_code: Optional[int] = None,
8310        output: Optional[str] = None,
8311        error: Optional[str] = None,
8312        start_time: Optional[datetime.datetime] = None,
8313        end_time: Optional[datetime.datetime] = None,
8314        statuses: Optional[List["InstanceViewStatus"]] = None,
8315        **kwargs
8316    ):
8317        super(VirtualMachineRunCommandInstanceView, self).__init__(**kwargs)
8318        self.execution_state = execution_state
8319        self.execution_message = execution_message
8320        self.exit_code = exit_code
8321        self.output = output
8322        self.error = error
8323        self.start_time = start_time
8324        self.end_time = end_time
8325        self.statuses = statuses
8326
8327
8328class VirtualMachineRunCommandScriptSource(msrest.serialization.Model):
8329    """Describes the script sources for run command.
8330
8331    :param script: Specifies the script content to be executed on the VM.
8332    :type script: str
8333    :param script_uri: Specifies the script download location.
8334    :type script_uri: str
8335    :param command_id: Specifies a commandId of predefined built-in script.
8336    :type command_id: str
8337    """
8338
8339    _attribute_map = {
8340        'script': {'key': 'script', 'type': 'str'},
8341        'script_uri': {'key': 'scriptUri', 'type': 'str'},
8342        'command_id': {'key': 'commandId', 'type': 'str'},
8343    }
8344
8345    def __init__(
8346        self,
8347        *,
8348        script: Optional[str] = None,
8349        script_uri: Optional[str] = None,
8350        command_id: Optional[str] = None,
8351        **kwargs
8352    ):
8353        super(VirtualMachineRunCommandScriptSource, self).__init__(**kwargs)
8354        self.script = script
8355        self.script_uri = script_uri
8356        self.command_id = command_id
8357
8358
8359class VirtualMachineRunCommandsListResult(msrest.serialization.Model):
8360    """The List run command operation response.
8361
8362    All required parameters must be populated in order to send to Azure.
8363
8364    :param value: Required. The list of run commands.
8365    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineRunCommand]
8366    :param next_link: The uri to fetch the next page of run commands.
8367    :type next_link: str
8368    """
8369
8370    _validation = {
8371        'value': {'required': True},
8372    }
8373
8374    _attribute_map = {
8375        'value': {'key': 'value', 'type': '[VirtualMachineRunCommand]'},
8376        'next_link': {'key': 'nextLink', 'type': 'str'},
8377    }
8378
8379    def __init__(
8380        self,
8381        *,
8382        value: List["VirtualMachineRunCommand"],
8383        next_link: Optional[str] = None,
8384        **kwargs
8385    ):
8386        super(VirtualMachineRunCommandsListResult, self).__init__(**kwargs)
8387        self.value = value
8388        self.next_link = next_link
8389
8390
8391class VirtualMachineRunCommandUpdate(UpdateResource):
8392    """Describes a Virtual Machine run command.
8393
8394    Variables are only populated by the server, and will be ignored when sending a request.
8395
8396    :param tags: A set of tags. Resource tags.
8397    :type tags: dict[str, str]
8398    :param source: The source of the run command script.
8399    :type source: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineRunCommandScriptSource
8400    :param parameters: The parameters used by the script.
8401    :type parameters: list[~azure.mgmt.compute.v2020_12_01.models.RunCommandInputParameter]
8402    :param protected_parameters: The parameters used by the script.
8403    :type protected_parameters:
8404     list[~azure.mgmt.compute.v2020_12_01.models.RunCommandInputParameter]
8405    :param async_execution: Optional. If set to true, provisioning will complete as soon as the
8406     script starts and will not wait for script to complete.
8407    :type async_execution: bool
8408    :param run_as_user: Specifies the user account on the VM when executing the run command.
8409    :type run_as_user: str
8410    :param run_as_password: Specifies the user account password on the VM when executing the run
8411     command.
8412    :type run_as_password: str
8413    :param timeout_in_seconds: The timeout in seconds to execute the run command.
8414    :type timeout_in_seconds: int
8415    :param output_blob_uri: Specifies the Azure storage blob where script output stream will be
8416     uploaded.
8417    :type output_blob_uri: str
8418    :param error_blob_uri: Specifies the Azure storage blob where script error stream will be
8419     uploaded.
8420    :type error_blob_uri: str
8421    :ivar provisioning_state: The provisioning state, which only appears in the response.
8422    :vartype provisioning_state: str
8423    :ivar instance_view: The virtual machine run command instance view.
8424    :vartype instance_view:
8425     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineRunCommandInstanceView
8426    """
8427
8428    _validation = {
8429        'provisioning_state': {'readonly': True},
8430        'instance_view': {'readonly': True},
8431    }
8432
8433    _attribute_map = {
8434        'tags': {'key': 'tags', 'type': '{str}'},
8435        'source': {'key': 'properties.source', 'type': 'VirtualMachineRunCommandScriptSource'},
8436        'parameters': {'key': 'properties.parameters', 'type': '[RunCommandInputParameter]'},
8437        'protected_parameters': {'key': 'properties.protectedParameters', 'type': '[RunCommandInputParameter]'},
8438        'async_execution': {'key': 'properties.asyncExecution', 'type': 'bool'},
8439        'run_as_user': {'key': 'properties.runAsUser', 'type': 'str'},
8440        'run_as_password': {'key': 'properties.runAsPassword', 'type': 'str'},
8441        'timeout_in_seconds': {'key': 'properties.timeoutInSeconds', 'type': 'int'},
8442        'output_blob_uri': {'key': 'properties.outputBlobUri', 'type': 'str'},
8443        'error_blob_uri': {'key': 'properties.errorBlobUri', 'type': 'str'},
8444        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8445        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineRunCommandInstanceView'},
8446    }
8447
8448    def __init__(
8449        self,
8450        *,
8451        tags: Optional[Dict[str, str]] = None,
8452        source: Optional["VirtualMachineRunCommandScriptSource"] = None,
8453        parameters: Optional[List["RunCommandInputParameter"]] = None,
8454        protected_parameters: Optional[List["RunCommandInputParameter"]] = None,
8455        async_execution: Optional[bool] = False,
8456        run_as_user: Optional[str] = None,
8457        run_as_password: Optional[str] = None,
8458        timeout_in_seconds: Optional[int] = None,
8459        output_blob_uri: Optional[str] = None,
8460        error_blob_uri: Optional[str] = None,
8461        **kwargs
8462    ):
8463        super(VirtualMachineRunCommandUpdate, self).__init__(tags=tags, **kwargs)
8464        self.source = source
8465        self.parameters = parameters
8466        self.protected_parameters = protected_parameters
8467        self.async_execution = async_execution
8468        self.run_as_user = run_as_user
8469        self.run_as_password = run_as_password
8470        self.timeout_in_seconds = timeout_in_seconds
8471        self.output_blob_uri = output_blob_uri
8472        self.error_blob_uri = error_blob_uri
8473        self.provisioning_state = None
8474        self.instance_view = None
8475
8476
8477class VirtualMachineScaleSet(Resource):
8478    """Describes a Virtual Machine Scale Set.
8479
8480    Variables are only populated by the server, and will be ignored when sending a request.
8481
8482    All required parameters must be populated in order to send to Azure.
8483
8484    :ivar id: Resource Id.
8485    :vartype id: str
8486    :ivar name: Resource name.
8487    :vartype name: str
8488    :ivar type: Resource type.
8489    :vartype type: str
8490    :param location: Required. Resource location.
8491    :type location: str
8492    :param tags: A set of tags. Resource tags.
8493    :type tags: dict[str, str]
8494    :param sku: The virtual machine scale set sku.
8495    :type sku: ~azure.mgmt.compute.v2020_12_01.models.Sku
8496    :param plan: Specifies information about the marketplace image used to create the virtual
8497     machine. This element is only used for marketplace images. Before you can use a marketplace
8498     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
8499     the marketplace image that you want to use and then click **Want to deploy programmatically,
8500     Get Started ->**. Enter any required information and then click **Save**.
8501    :type plan: ~azure.mgmt.compute.v2020_12_01.models.Plan
8502    :param identity: The identity of the virtual machine scale set, if configured.
8503    :type identity: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetIdentity
8504    :param zones: The virtual machine scale set zones. NOTE: Availability zones can only be set
8505     when you create the scale set.
8506    :type zones: list[str]
8507    :param extended_location: The extended location of the Virtual Machine Scale Set.
8508    :type extended_location: ~azure.mgmt.compute.v2020_12_01.models.ExtendedLocation
8509    :param upgrade_policy: The upgrade policy.
8510    :type upgrade_policy: ~azure.mgmt.compute.v2020_12_01.models.UpgradePolicy
8511    :param automatic_repairs_policy: Policy for automatic repairs.
8512    :type automatic_repairs_policy: ~azure.mgmt.compute.v2020_12_01.models.AutomaticRepairsPolicy
8513    :param virtual_machine_profile: The virtual machine profile.
8514    :type virtual_machine_profile:
8515     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVMProfile
8516    :ivar provisioning_state: The provisioning state, which only appears in the response.
8517    :vartype provisioning_state: str
8518    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
8519     overprovisioned.
8520    :type overprovision: bool
8521    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
8522     are launched only on the requested number of VMs which are finally kept. This property will
8523     hence ensure that the extensions do not run on the extra overprovisioned VMs.
8524    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
8525    :ivar unique_id: Specifies the ID which uniquely identifies a Virtual Machine Scale Set.
8526    :vartype unique_id: str
8527    :param single_placement_group: When true this limits the scale set to a single placement group,
8528     of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to
8529     false. However, if singlePlacementGroup is false, it may not be modified to true.
8530    :type single_placement_group: bool
8531    :param zone_balance: Whether to force strictly even Virtual Machine distribution cross x-zones
8532     in case there is zone outage.
8533    :type zone_balance: bool
8534    :param platform_fault_domain_count: Fault Domain count for each placement group.
8535    :type platform_fault_domain_count: int
8536    :param proximity_placement_group: Specifies information about the proximity placement group
8537     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
8538     api-version: 2018-04-01.
8539    :type proximity_placement_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
8540    :param host_group: Specifies information about the dedicated host group that the virtual
8541     machine scale set resides in. :code:`<br>`:code:`<br>`Minimum api-version: 2020-06-01.
8542    :type host_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
8543    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
8544     Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines
8545     have the capability to support attaching managed data disks with UltraSSD_LRS storage account
8546     type.
8547    :type additional_capabilities: ~azure.mgmt.compute.v2020_12_01.models.AdditionalCapabilities
8548    :param scale_in_policy: Specifies the scale-in policy that decides which virtual machines are
8549     chosen for removal when a Virtual Machine Scale Set is scaled-in.
8550    :type scale_in_policy: ~azure.mgmt.compute.v2020_12_01.models.ScaleInPolicy
8551    :param orchestration_mode: Specifies the orchestration mode for the virtual machine scale set.
8552     Possible values include: "Uniform", "Flexible".
8553    :type orchestration_mode: str or ~azure.mgmt.compute.v2020_12_01.models.OrchestrationMode
8554    """
8555
8556    _validation = {
8557        'id': {'readonly': True},
8558        'name': {'readonly': True},
8559        'type': {'readonly': True},
8560        'location': {'required': True},
8561        'provisioning_state': {'readonly': True},
8562        'unique_id': {'readonly': True},
8563    }
8564
8565    _attribute_map = {
8566        'id': {'key': 'id', 'type': 'str'},
8567        'name': {'key': 'name', 'type': 'str'},
8568        'type': {'key': 'type', 'type': 'str'},
8569        'location': {'key': 'location', 'type': 'str'},
8570        'tags': {'key': 'tags', 'type': '{str}'},
8571        'sku': {'key': 'sku', 'type': 'Sku'},
8572        'plan': {'key': 'plan', 'type': 'Plan'},
8573        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
8574        'zones': {'key': 'zones', 'type': '[str]'},
8575        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
8576        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
8577        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
8578        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetVMProfile'},
8579        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8580        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
8581        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
8582        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
8583        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
8584        'zone_balance': {'key': 'properties.zoneBalance', 'type': 'bool'},
8585        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
8586        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
8587        'host_group': {'key': 'properties.hostGroup', 'type': 'SubResource'},
8588        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
8589        'scale_in_policy': {'key': 'properties.scaleInPolicy', 'type': 'ScaleInPolicy'},
8590        'orchestration_mode': {'key': 'properties.orchestrationMode', 'type': 'str'},
8591    }
8592
8593    def __init__(
8594        self,
8595        *,
8596        location: str,
8597        tags: Optional[Dict[str, str]] = None,
8598        sku: Optional["Sku"] = None,
8599        plan: Optional["Plan"] = None,
8600        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
8601        zones: Optional[List[str]] = None,
8602        extended_location: Optional["ExtendedLocation"] = None,
8603        upgrade_policy: Optional["UpgradePolicy"] = None,
8604        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
8605        virtual_machine_profile: Optional["VirtualMachineScaleSetVMProfile"] = None,
8606        overprovision: Optional[bool] = None,
8607        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
8608        single_placement_group: Optional[bool] = None,
8609        zone_balance: Optional[bool] = None,
8610        platform_fault_domain_count: Optional[int] = None,
8611        proximity_placement_group: Optional["SubResource"] = None,
8612        host_group: Optional["SubResource"] = None,
8613        additional_capabilities: Optional["AdditionalCapabilities"] = None,
8614        scale_in_policy: Optional["ScaleInPolicy"] = None,
8615        orchestration_mode: Optional[Union[str, "OrchestrationMode"]] = None,
8616        **kwargs
8617    ):
8618        super(VirtualMachineScaleSet, self).__init__(location=location, tags=tags, **kwargs)
8619        self.sku = sku
8620        self.plan = plan
8621        self.identity = identity
8622        self.zones = zones
8623        self.extended_location = extended_location
8624        self.upgrade_policy = upgrade_policy
8625        self.automatic_repairs_policy = automatic_repairs_policy
8626        self.virtual_machine_profile = virtual_machine_profile
8627        self.provisioning_state = None
8628        self.overprovision = overprovision
8629        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
8630        self.unique_id = None
8631        self.single_placement_group = single_placement_group
8632        self.zone_balance = zone_balance
8633        self.platform_fault_domain_count = platform_fault_domain_count
8634        self.proximity_placement_group = proximity_placement_group
8635        self.host_group = host_group
8636        self.additional_capabilities = additional_capabilities
8637        self.scale_in_policy = scale_in_policy
8638        self.orchestration_mode = orchestration_mode
8639
8640
8641class VirtualMachineScaleSetDataDisk(msrest.serialization.Model):
8642    """Describes a virtual machine scale set data disk.
8643
8644    All required parameters must be populated in order to send to Azure.
8645
8646    :param name: The disk name.
8647    :type name: str
8648    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
8649     identify data disks within the VM and therefore must be unique for each data disk attached to a
8650     VM.
8651    :type lun: int
8652    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
8653     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
8654     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
8655     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
8656     "ReadWrite".
8657    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
8658    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
8659     disabled on the disk.
8660    :type write_accelerator_enabled: bool
8661    :param create_option: Required. The create option. Possible values include: "FromImage",
8662     "Empty", "Attach".
8663    :type create_option: str or ~azure.mgmt.compute.v2020_12_01.models.DiskCreateOptionTypes
8664    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
8665     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
8666     This value cannot be larger than 1023 GB.
8667    :type disk_size_gb: int
8668    :param managed_disk: The managed disk parameters.
8669    :type managed_disk:
8670     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetManagedDiskParameters
8671    :param disk_iops_read_write: Specifies the Read-Write IOPS for the managed disk. Should be used
8672     only when StorageAccountType is UltraSSD_LRS. If not specified, a default value would be
8673     assigned based on diskSizeGB.
8674    :type disk_iops_read_write: long
8675    :param disk_m_bps_read_write: Specifies the bandwidth in MB per second for the managed disk.
8676     Should be used only when StorageAccountType is UltraSSD_LRS. If not specified, a default value
8677     would be assigned based on diskSizeGB.
8678    :type disk_m_bps_read_write: long
8679    """
8680
8681    _validation = {
8682        'lun': {'required': True},
8683        'create_option': {'required': True},
8684    }
8685
8686    _attribute_map = {
8687        'name': {'key': 'name', 'type': 'str'},
8688        'lun': {'key': 'lun', 'type': 'int'},
8689        'caching': {'key': 'caching', 'type': 'str'},
8690        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
8691        'create_option': {'key': 'createOption', 'type': 'str'},
8692        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
8693        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
8694        'disk_iops_read_write': {'key': 'diskIOPSReadWrite', 'type': 'long'},
8695        'disk_m_bps_read_write': {'key': 'diskMBpsReadWrite', 'type': 'long'},
8696    }
8697
8698    def __init__(
8699        self,
8700        *,
8701        lun: int,
8702        create_option: Union[str, "DiskCreateOptionTypes"],
8703        name: Optional[str] = None,
8704        caching: Optional[Union[str, "CachingTypes"]] = None,
8705        write_accelerator_enabled: Optional[bool] = None,
8706        disk_size_gb: Optional[int] = None,
8707        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
8708        disk_iops_read_write: Optional[int] = None,
8709        disk_m_bps_read_write: Optional[int] = None,
8710        **kwargs
8711    ):
8712        super(VirtualMachineScaleSetDataDisk, self).__init__(**kwargs)
8713        self.name = name
8714        self.lun = lun
8715        self.caching = caching
8716        self.write_accelerator_enabled = write_accelerator_enabled
8717        self.create_option = create_option
8718        self.disk_size_gb = disk_size_gb
8719        self.managed_disk = managed_disk
8720        self.disk_iops_read_write = disk_iops_read_write
8721        self.disk_m_bps_read_write = disk_m_bps_read_write
8722
8723
8724class VirtualMachineScaleSetExtension(SubResourceReadOnly):
8725    """Describes a Virtual Machine Scale Set Extension.
8726
8727    Variables are only populated by the server, and will be ignored when sending a request.
8728
8729    :ivar id: Resource Id.
8730    :vartype id: str
8731    :param name: The name of the extension.
8732    :type name: str
8733    :ivar type: Resource type.
8734    :vartype type: str
8735    :param force_update_tag: If a value is provided and is different from the previous value, the
8736     extension handler will be forced to update even if the extension configuration has not changed.
8737    :type force_update_tag: str
8738    :param publisher: The name of the extension handler publisher.
8739    :type publisher: str
8740    :param type_properties_type: Specifies the type of the extension; an example is
8741     "CustomScriptExtension".
8742    :type type_properties_type: str
8743    :param type_handler_version: Specifies the version of the script handler.
8744    :type type_handler_version: str
8745    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
8746     version if one is available at deployment time. Once deployed, however, the extension will not
8747     upgrade minor versions unless redeployed, even with this property set to true.
8748    :type auto_upgrade_minor_version: bool
8749    :param enable_automatic_upgrade: Indicates whether the extension should be automatically
8750     upgraded by the platform if there is a newer version of the extension available.
8751    :type enable_automatic_upgrade: bool
8752    :param settings: Json formatted public settings for the extension.
8753    :type settings: any
8754    :param protected_settings: The extension can contain either protectedSettings or
8755     protectedSettingsFromKeyVault or no protected settings at all.
8756    :type protected_settings: any
8757    :ivar provisioning_state: The provisioning state, which only appears in the response.
8758    :vartype provisioning_state: str
8759    :param provision_after_extensions: Collection of extension names after which this extension
8760     needs to be provisioned.
8761    :type provision_after_extensions: list[str]
8762    """
8763
8764    _validation = {
8765        'id': {'readonly': True},
8766        'type': {'readonly': True},
8767        'provisioning_state': {'readonly': True},
8768    }
8769
8770    _attribute_map = {
8771        'id': {'key': 'id', 'type': 'str'},
8772        'name': {'key': 'name', 'type': 'str'},
8773        'type': {'key': 'type', 'type': 'str'},
8774        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
8775        'publisher': {'key': 'properties.publisher', 'type': 'str'},
8776        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
8777        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
8778        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
8779        'enable_automatic_upgrade': {'key': 'properties.enableAutomaticUpgrade', 'type': 'bool'},
8780        'settings': {'key': 'properties.settings', 'type': 'object'},
8781        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
8782        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8783        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
8784    }
8785
8786    def __init__(
8787        self,
8788        *,
8789        name: Optional[str] = None,
8790        force_update_tag: Optional[str] = None,
8791        publisher: Optional[str] = None,
8792        type_properties_type: Optional[str] = None,
8793        type_handler_version: Optional[str] = None,
8794        auto_upgrade_minor_version: Optional[bool] = None,
8795        enable_automatic_upgrade: Optional[bool] = None,
8796        settings: Optional[Any] = None,
8797        protected_settings: Optional[Any] = None,
8798        provision_after_extensions: Optional[List[str]] = None,
8799        **kwargs
8800    ):
8801        super(VirtualMachineScaleSetExtension, self).__init__(**kwargs)
8802        self.name = name
8803        self.type = None
8804        self.force_update_tag = force_update_tag
8805        self.publisher = publisher
8806        self.type_properties_type = type_properties_type
8807        self.type_handler_version = type_handler_version
8808        self.auto_upgrade_minor_version = auto_upgrade_minor_version
8809        self.enable_automatic_upgrade = enable_automatic_upgrade
8810        self.settings = settings
8811        self.protected_settings = protected_settings
8812        self.provisioning_state = None
8813        self.provision_after_extensions = provision_after_extensions
8814
8815
8816class VirtualMachineScaleSetExtensionListResult(msrest.serialization.Model):
8817    """The List VM scale set extension operation response.
8818
8819    All required parameters must be populated in order to send to Azure.
8820
8821    :param value: Required. The list of VM scale set extensions.
8822    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetExtension]
8823    :param next_link: The uri to fetch the next page of VM scale set extensions. Call ListNext()
8824     with this to fetch the next page of VM scale set extensions.
8825    :type next_link: str
8826    """
8827
8828    _validation = {
8829        'value': {'required': True},
8830    }
8831
8832    _attribute_map = {
8833        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetExtension]'},
8834        'next_link': {'key': 'nextLink', 'type': 'str'},
8835    }
8836
8837    def __init__(
8838        self,
8839        *,
8840        value: List["VirtualMachineScaleSetExtension"],
8841        next_link: Optional[str] = None,
8842        **kwargs
8843    ):
8844        super(VirtualMachineScaleSetExtensionListResult, self).__init__(**kwargs)
8845        self.value = value
8846        self.next_link = next_link
8847
8848
8849class VirtualMachineScaleSetExtensionProfile(msrest.serialization.Model):
8850    """Describes a virtual machine scale set extension profile.
8851
8852    :param extensions: The virtual machine scale set child extension resources.
8853    :type extensions: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetExtension]
8854    :param extensions_time_budget: Specifies the time alloted for all extensions to start. The time
8855     duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in
8856     ISO 8601 format. The default value is 90 minutes (PT1H30M). :code:`<br>`:code:`<br>` Minimum
8857     api-version: 2020-06-01.
8858    :type extensions_time_budget: str
8859    """
8860
8861    _attribute_map = {
8862        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetExtension]'},
8863        'extensions_time_budget': {'key': 'extensionsTimeBudget', 'type': 'str'},
8864    }
8865
8866    def __init__(
8867        self,
8868        *,
8869        extensions: Optional[List["VirtualMachineScaleSetExtension"]] = None,
8870        extensions_time_budget: Optional[str] = None,
8871        **kwargs
8872    ):
8873        super(VirtualMachineScaleSetExtensionProfile, self).__init__(**kwargs)
8874        self.extensions = extensions
8875        self.extensions_time_budget = extensions_time_budget
8876
8877
8878class VirtualMachineScaleSetExtensionUpdate(SubResourceReadOnly):
8879    """Describes a Virtual Machine Scale Set Extension.
8880
8881    Variables are only populated by the server, and will be ignored when sending a request.
8882
8883    :ivar id: Resource Id.
8884    :vartype id: str
8885    :ivar name: The name of the extension.
8886    :vartype name: str
8887    :ivar type: Resource type.
8888    :vartype type: str
8889    :param force_update_tag: If a value is provided and is different from the previous value, the
8890     extension handler will be forced to update even if the extension configuration has not changed.
8891    :type force_update_tag: str
8892    :param publisher: The name of the extension handler publisher.
8893    :type publisher: str
8894    :param type_properties_type: Specifies the type of the extension; an example is
8895     "CustomScriptExtension".
8896    :type type_properties_type: str
8897    :param type_handler_version: Specifies the version of the script handler.
8898    :type type_handler_version: str
8899    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
8900     version if one is available at deployment time. Once deployed, however, the extension will not
8901     upgrade minor versions unless redeployed, even with this property set to true.
8902    :type auto_upgrade_minor_version: bool
8903    :param enable_automatic_upgrade: Indicates whether the extension should be automatically
8904     upgraded by the platform if there is a newer version of the extension available.
8905    :type enable_automatic_upgrade: bool
8906    :param settings: Json formatted public settings for the extension.
8907    :type settings: any
8908    :param protected_settings: The extension can contain either protectedSettings or
8909     protectedSettingsFromKeyVault or no protected settings at all.
8910    :type protected_settings: any
8911    :ivar provisioning_state: The provisioning state, which only appears in the response.
8912    :vartype provisioning_state: str
8913    :param provision_after_extensions: Collection of extension names after which this extension
8914     needs to be provisioned.
8915    :type provision_after_extensions: list[str]
8916    """
8917
8918    _validation = {
8919        'id': {'readonly': True},
8920        'name': {'readonly': True},
8921        'type': {'readonly': True},
8922        'provisioning_state': {'readonly': True},
8923    }
8924
8925    _attribute_map = {
8926        'id': {'key': 'id', 'type': 'str'},
8927        'name': {'key': 'name', 'type': 'str'},
8928        'type': {'key': 'type', 'type': 'str'},
8929        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
8930        'publisher': {'key': 'properties.publisher', 'type': 'str'},
8931        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
8932        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
8933        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
8934        'enable_automatic_upgrade': {'key': 'properties.enableAutomaticUpgrade', 'type': 'bool'},
8935        'settings': {'key': 'properties.settings', 'type': 'object'},
8936        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
8937        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8938        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
8939    }
8940
8941    def __init__(
8942        self,
8943        *,
8944        force_update_tag: Optional[str] = None,
8945        publisher: Optional[str] = None,
8946        type_properties_type: Optional[str] = None,
8947        type_handler_version: Optional[str] = None,
8948        auto_upgrade_minor_version: Optional[bool] = None,
8949        enable_automatic_upgrade: Optional[bool] = None,
8950        settings: Optional[Any] = None,
8951        protected_settings: Optional[Any] = None,
8952        provision_after_extensions: Optional[List[str]] = None,
8953        **kwargs
8954    ):
8955        super(VirtualMachineScaleSetExtensionUpdate, self).__init__(**kwargs)
8956        self.name = None
8957        self.type = None
8958        self.force_update_tag = force_update_tag
8959        self.publisher = publisher
8960        self.type_properties_type = type_properties_type
8961        self.type_handler_version = type_handler_version
8962        self.auto_upgrade_minor_version = auto_upgrade_minor_version
8963        self.enable_automatic_upgrade = enable_automatic_upgrade
8964        self.settings = settings
8965        self.protected_settings = protected_settings
8966        self.provisioning_state = None
8967        self.provision_after_extensions = provision_after_extensions
8968
8969
8970class VirtualMachineScaleSetIdentity(msrest.serialization.Model):
8971    """Identity for the virtual machine scale set.
8972
8973    Variables are only populated by the server, and will be ignored when sending a request.
8974
8975    :ivar principal_id: The principal id of virtual machine scale set identity. This property will
8976     only be provided for a system assigned identity.
8977    :vartype principal_id: str
8978    :ivar tenant_id: The tenant id associated with the virtual machine scale set. This property
8979     will only be provided for a system assigned identity.
8980    :vartype tenant_id: str
8981    :param type: The type of identity used for the virtual machine scale set. The type
8982     'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user
8983     assigned identities. The type 'None' will remove any identities from the virtual machine scale
8984     set. Possible values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned",
8985     "None".
8986    :type type: str or ~azure.mgmt.compute.v2020_12_01.models.ResourceIdentityType
8987    :param user_assigned_identities: The list of user identities associated with the virtual
8988     machine scale set. The user identity dictionary key references will be ARM resource ids in the
8989     form:
8990     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
8991    :type user_assigned_identities: dict[str,
8992     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue]
8993    """
8994
8995    _validation = {
8996        'principal_id': {'readonly': True},
8997        'tenant_id': {'readonly': True},
8998    }
8999
9000    _attribute_map = {
9001        'principal_id': {'key': 'principalId', 'type': 'str'},
9002        'tenant_id': {'key': 'tenantId', 'type': 'str'},
9003        'type': {'key': 'type', 'type': 'str'},
9004        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue}'},
9005    }
9006
9007    def __init__(
9008        self,
9009        *,
9010        type: Optional[Union[str, "ResourceIdentityType"]] = None,
9011        user_assigned_identities: Optional[Dict[str, "VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue"]] = None,
9012        **kwargs
9013    ):
9014        super(VirtualMachineScaleSetIdentity, self).__init__(**kwargs)
9015        self.principal_id = None
9016        self.tenant_id = None
9017        self.type = type
9018        self.user_assigned_identities = user_assigned_identities
9019
9020
9021class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(msrest.serialization.Model):
9022    """VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue.
9023
9024    Variables are only populated by the server, and will be ignored when sending a request.
9025
9026    :ivar principal_id: The principal id of user assigned identity.
9027    :vartype principal_id: str
9028    :ivar client_id: The client id of user assigned identity.
9029    :vartype client_id: str
9030    """
9031
9032    _validation = {
9033        'principal_id': {'readonly': True},
9034        'client_id': {'readonly': True},
9035    }
9036
9037    _attribute_map = {
9038        'principal_id': {'key': 'principalId', 'type': 'str'},
9039        'client_id': {'key': 'clientId', 'type': 'str'},
9040    }
9041
9042    def __init__(
9043        self,
9044        **kwargs
9045    ):
9046        super(VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue, self).__init__(**kwargs)
9047        self.principal_id = None
9048        self.client_id = None
9049
9050
9051class VirtualMachineScaleSetInstanceView(msrest.serialization.Model):
9052    """The instance view of a virtual machine scale set.
9053
9054    Variables are only populated by the server, and will be ignored when sending a request.
9055
9056    :ivar virtual_machine: The instance view status summary for the virtual machine scale set.
9057    :vartype virtual_machine:
9058     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetInstanceViewStatusesSummary
9059    :ivar extensions: The extensions information.
9060    :vartype extensions:
9061     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVMExtensionsSummary]
9062    :param statuses: The resource status information.
9063    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
9064    :ivar orchestration_services: The orchestration services information.
9065    :vartype orchestration_services:
9066     list[~azure.mgmt.compute.v2020_12_01.models.OrchestrationServiceSummary]
9067    """
9068
9069    _validation = {
9070        'virtual_machine': {'readonly': True},
9071        'extensions': {'readonly': True},
9072        'orchestration_services': {'readonly': True},
9073    }
9074
9075    _attribute_map = {
9076        'virtual_machine': {'key': 'virtualMachine', 'type': 'VirtualMachineScaleSetInstanceViewStatusesSummary'},
9077        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetVMExtensionsSummary]'},
9078        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
9079        'orchestration_services': {'key': 'orchestrationServices', 'type': '[OrchestrationServiceSummary]'},
9080    }
9081
9082    def __init__(
9083        self,
9084        *,
9085        statuses: Optional[List["InstanceViewStatus"]] = None,
9086        **kwargs
9087    ):
9088        super(VirtualMachineScaleSetInstanceView, self).__init__(**kwargs)
9089        self.virtual_machine = None
9090        self.extensions = None
9091        self.statuses = statuses
9092        self.orchestration_services = None
9093
9094
9095class VirtualMachineScaleSetInstanceViewStatusesSummary(msrest.serialization.Model):
9096    """Instance view statuses summary for virtual machines of a virtual machine scale set.
9097
9098    Variables are only populated by the server, and will be ignored when sending a request.
9099
9100    :ivar statuses_summary: The extensions information.
9101    :vartype statuses_summary:
9102     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineStatusCodeCount]
9103    """
9104
9105    _validation = {
9106        'statuses_summary': {'readonly': True},
9107    }
9108
9109    _attribute_map = {
9110        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
9111    }
9112
9113    def __init__(
9114        self,
9115        **kwargs
9116    ):
9117        super(VirtualMachineScaleSetInstanceViewStatusesSummary, self).__init__(**kwargs)
9118        self.statuses_summary = None
9119
9120
9121class VirtualMachineScaleSetIPConfiguration(SubResource):
9122    """Describes a virtual machine scale set network profile's IP configuration.
9123
9124    All required parameters must be populated in order to send to Azure.
9125
9126    :param id: Resource Id.
9127    :type id: str
9128    :param name: Required. The IP configuration name.
9129    :type name: str
9130    :param subnet: Specifies the identifier of the subnet.
9131    :type subnet: ~azure.mgmt.compute.v2020_12_01.models.ApiEntityReference
9132    :param primary: Specifies the primary network interface in case the virtual machine has more
9133     than 1 network interface.
9134    :type primary: bool
9135    :param public_ip_address_configuration: The publicIPAddressConfiguration.
9136    :type public_ip_address_configuration:
9137     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration
9138    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
9139     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
9140     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
9141    :type private_ip_address_version: str or ~azure.mgmt.compute.v2020_12_01.models.IPVersion
9142    :param application_gateway_backend_address_pools: Specifies an array of references to backend
9143     address pools of application gateways. A scale set can reference backend address pools of
9144     multiple application gateways. Multiple scale sets cannot use the same application gateway.
9145    :type application_gateway_backend_address_pools:
9146     list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
9147    :param application_security_groups: Specifies an array of references to application security
9148     group.
9149    :type application_security_groups: list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
9150    :param load_balancer_backend_address_pools: Specifies an array of references to backend address
9151     pools of load balancers. A scale set can reference backend address pools of one public and one
9152     internal load balancer. Multiple scale sets cannot use the same basic sku load balancer.
9153    :type load_balancer_backend_address_pools:
9154     list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
9155    :param load_balancer_inbound_nat_pools: Specifies an array of references to inbound Nat pools
9156     of the load balancers. A scale set can reference inbound nat pools of one public and one
9157     internal load balancer. Multiple scale sets cannot use the same basic sku load balancer.
9158    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
9159    """
9160
9161    _validation = {
9162        'name': {'required': True},
9163    }
9164
9165    _attribute_map = {
9166        'id': {'key': 'id', 'type': 'str'},
9167        'name': {'key': 'name', 'type': 'str'},
9168        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
9169        'primary': {'key': 'properties.primary', 'type': 'bool'},
9170        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetPublicIPAddressConfiguration'},
9171        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
9172        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
9173        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
9174        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
9175        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
9176    }
9177
9178    def __init__(
9179        self,
9180        *,
9181        name: str,
9182        id: Optional[str] = None,
9183        subnet: Optional["ApiEntityReference"] = None,
9184        primary: Optional[bool] = None,
9185        public_ip_address_configuration: Optional["VirtualMachineScaleSetPublicIPAddressConfiguration"] = None,
9186        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
9187        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
9188        application_security_groups: Optional[List["SubResource"]] = None,
9189        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
9190        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
9191        **kwargs
9192    ):
9193        super(VirtualMachineScaleSetIPConfiguration, self).__init__(id=id, **kwargs)
9194        self.name = name
9195        self.subnet = subnet
9196        self.primary = primary
9197        self.public_ip_address_configuration = public_ip_address_configuration
9198        self.private_ip_address_version = private_ip_address_version
9199        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
9200        self.application_security_groups = application_security_groups
9201        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
9202        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
9203
9204
9205class VirtualMachineScaleSetIpTag(msrest.serialization.Model):
9206    """Contains the IP tag associated with the public IP address.
9207
9208    :param ip_tag_type: IP tag type. Example: FirstPartyUsage.
9209    :type ip_tag_type: str
9210    :param tag: IP tag associated with the public IP. Example: SQL, Storage etc.
9211    :type tag: str
9212    """
9213
9214    _attribute_map = {
9215        'ip_tag_type': {'key': 'ipTagType', 'type': 'str'},
9216        'tag': {'key': 'tag', 'type': 'str'},
9217    }
9218
9219    def __init__(
9220        self,
9221        *,
9222        ip_tag_type: Optional[str] = None,
9223        tag: Optional[str] = None,
9224        **kwargs
9225    ):
9226        super(VirtualMachineScaleSetIpTag, self).__init__(**kwargs)
9227        self.ip_tag_type = ip_tag_type
9228        self.tag = tag
9229
9230
9231class VirtualMachineScaleSetListOSUpgradeHistory(msrest.serialization.Model):
9232    """List of Virtual Machine Scale Set OS Upgrade History operation response.
9233
9234    All required parameters must be populated in order to send to Azure.
9235
9236    :param value: Required. The list of OS upgrades performed on the virtual machine scale set.
9237    :type value: list[~azure.mgmt.compute.v2020_12_01.models.UpgradeOperationHistoricalStatusInfo]
9238    :param next_link: The uri to fetch the next page of OS Upgrade History. Call ListNext() with
9239     this to fetch the next page of history of upgrades.
9240    :type next_link: str
9241    """
9242
9243    _validation = {
9244        'value': {'required': True},
9245    }
9246
9247    _attribute_map = {
9248        'value': {'key': 'value', 'type': '[UpgradeOperationHistoricalStatusInfo]'},
9249        'next_link': {'key': 'nextLink', 'type': 'str'},
9250    }
9251
9252    def __init__(
9253        self,
9254        *,
9255        value: List["UpgradeOperationHistoricalStatusInfo"],
9256        next_link: Optional[str] = None,
9257        **kwargs
9258    ):
9259        super(VirtualMachineScaleSetListOSUpgradeHistory, self).__init__(**kwargs)
9260        self.value = value
9261        self.next_link = next_link
9262
9263
9264class VirtualMachineScaleSetListResult(msrest.serialization.Model):
9265    """The List Virtual Machine operation response.
9266
9267    All required parameters must be populated in order to send to Azure.
9268
9269    :param value: Required. The list of virtual machine scale sets.
9270    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSet]
9271    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
9272     with this to fetch the next page of VMSS.
9273    :type next_link: str
9274    """
9275
9276    _validation = {
9277        'value': {'required': True},
9278    }
9279
9280    _attribute_map = {
9281        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
9282        'next_link': {'key': 'nextLink', 'type': 'str'},
9283    }
9284
9285    def __init__(
9286        self,
9287        *,
9288        value: List["VirtualMachineScaleSet"],
9289        next_link: Optional[str] = None,
9290        **kwargs
9291    ):
9292        super(VirtualMachineScaleSetListResult, self).__init__(**kwargs)
9293        self.value = value
9294        self.next_link = next_link
9295
9296
9297class VirtualMachineScaleSetListSkusResult(msrest.serialization.Model):
9298    """The Virtual Machine Scale Set List Skus operation response.
9299
9300    All required parameters must be populated in order to send to Azure.
9301
9302    :param value: Required. The list of skus available for the virtual machine scale set.
9303    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetSku]
9304    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set Skus. Call
9305     ListNext() with this to fetch the next page of VMSS Skus.
9306    :type next_link: str
9307    """
9308
9309    _validation = {
9310        'value': {'required': True},
9311    }
9312
9313    _attribute_map = {
9314        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetSku]'},
9315        'next_link': {'key': 'nextLink', 'type': 'str'},
9316    }
9317
9318    def __init__(
9319        self,
9320        *,
9321        value: List["VirtualMachineScaleSetSku"],
9322        next_link: Optional[str] = None,
9323        **kwargs
9324    ):
9325        super(VirtualMachineScaleSetListSkusResult, self).__init__(**kwargs)
9326        self.value = value
9327        self.next_link = next_link
9328
9329
9330class VirtualMachineScaleSetListWithLinkResult(msrest.serialization.Model):
9331    """The List Virtual Machine operation response.
9332
9333    All required parameters must be populated in order to send to Azure.
9334
9335    :param value: Required. The list of virtual machine scale sets.
9336    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSet]
9337    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
9338     with this to fetch the next page of Virtual Machine Scale Sets.
9339    :type next_link: str
9340    """
9341
9342    _validation = {
9343        'value': {'required': True},
9344    }
9345
9346    _attribute_map = {
9347        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
9348        'next_link': {'key': 'nextLink', 'type': 'str'},
9349    }
9350
9351    def __init__(
9352        self,
9353        *,
9354        value: List["VirtualMachineScaleSet"],
9355        next_link: Optional[str] = None,
9356        **kwargs
9357    ):
9358        super(VirtualMachineScaleSetListWithLinkResult, self).__init__(**kwargs)
9359        self.value = value
9360        self.next_link = next_link
9361
9362
9363class VirtualMachineScaleSetManagedDiskParameters(msrest.serialization.Model):
9364    """Describes the parameters of a ScaleSet managed disk.
9365
9366    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
9367     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
9368     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS", "Premium_ZRS",
9369     "StandardSSD_ZRS".
9370    :type storage_account_type: str or ~azure.mgmt.compute.v2020_12_01.models.StorageAccountTypes
9371    :param disk_encryption_set: Specifies the customer managed disk encryption set resource id for
9372     the managed disk.
9373    :type disk_encryption_set: ~azure.mgmt.compute.v2020_12_01.models.DiskEncryptionSetParameters
9374    """
9375
9376    _attribute_map = {
9377        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
9378        'disk_encryption_set': {'key': 'diskEncryptionSet', 'type': 'DiskEncryptionSetParameters'},
9379    }
9380
9381    def __init__(
9382        self,
9383        *,
9384        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
9385        disk_encryption_set: Optional["DiskEncryptionSetParameters"] = None,
9386        **kwargs
9387    ):
9388        super(VirtualMachineScaleSetManagedDiskParameters, self).__init__(**kwargs)
9389        self.storage_account_type = storage_account_type
9390        self.disk_encryption_set = disk_encryption_set
9391
9392
9393class VirtualMachineScaleSetNetworkConfiguration(SubResource):
9394    """Describes a virtual machine scale set network profile's network configurations.
9395
9396    All required parameters must be populated in order to send to Azure.
9397
9398    :param id: Resource Id.
9399    :type id: str
9400    :param name: Required. The network configuration name.
9401    :type name: str
9402    :param primary: Specifies the primary network interface in case the virtual machine has more
9403     than 1 network interface.
9404    :type primary: bool
9405    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
9406     networking-enabled.
9407    :type enable_accelerated_networking: bool
9408    :param enable_fpga: Specifies whether the network interface is FPGA networking-enabled.
9409    :type enable_fpga: bool
9410    :param network_security_group: The network security group.
9411    :type network_security_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
9412    :param dns_settings: The dns settings to be applied on the network interfaces.
9413    :type dns_settings:
9414     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
9415    :param ip_configurations: Specifies the IP configurations of the network interface.
9416    :type ip_configurations:
9417     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetIPConfiguration]
9418    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
9419    :type enable_ip_forwarding: bool
9420    """
9421
9422    _validation = {
9423        'name': {'required': True},
9424    }
9425
9426    _attribute_map = {
9427        'id': {'key': 'id', 'type': 'str'},
9428        'name': {'key': 'name', 'type': 'str'},
9429        'primary': {'key': 'properties.primary', 'type': 'bool'},
9430        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
9431        'enable_fpga': {'key': 'properties.enableFpga', 'type': 'bool'},
9432        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
9433        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
9434        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetIPConfiguration]'},
9435        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
9436    }
9437
9438    def __init__(
9439        self,
9440        *,
9441        name: str,
9442        id: Optional[str] = None,
9443        primary: Optional[bool] = None,
9444        enable_accelerated_networking: Optional[bool] = None,
9445        enable_fpga: Optional[bool] = None,
9446        network_security_group: Optional["SubResource"] = None,
9447        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
9448        ip_configurations: Optional[List["VirtualMachineScaleSetIPConfiguration"]] = None,
9449        enable_ip_forwarding: Optional[bool] = None,
9450        **kwargs
9451    ):
9452        super(VirtualMachineScaleSetNetworkConfiguration, self).__init__(id=id, **kwargs)
9453        self.name = name
9454        self.primary = primary
9455        self.enable_accelerated_networking = enable_accelerated_networking
9456        self.enable_fpga = enable_fpga
9457        self.network_security_group = network_security_group
9458        self.dns_settings = dns_settings
9459        self.ip_configurations = ip_configurations
9460        self.enable_ip_forwarding = enable_ip_forwarding
9461
9462
9463class VirtualMachineScaleSetNetworkConfigurationDnsSettings(msrest.serialization.Model):
9464    """Describes a virtual machines scale sets network configuration's DNS settings.
9465
9466    :param dns_servers: List of DNS servers IP addresses.
9467    :type dns_servers: list[str]
9468    """
9469
9470    _attribute_map = {
9471        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
9472    }
9473
9474    def __init__(
9475        self,
9476        *,
9477        dns_servers: Optional[List[str]] = None,
9478        **kwargs
9479    ):
9480        super(VirtualMachineScaleSetNetworkConfigurationDnsSettings, self).__init__(**kwargs)
9481        self.dns_servers = dns_servers
9482
9483
9484class VirtualMachineScaleSetNetworkProfile(msrest.serialization.Model):
9485    """Describes a virtual machine scale set network profile.
9486
9487    :param health_probe: A reference to a load balancer probe used to determine the health of an
9488     instance in the virtual machine scale set. The reference will be in the form:
9489     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
9490    :type health_probe: ~azure.mgmt.compute.v2020_12_01.models.ApiEntityReference
9491    :param network_interface_configurations: The list of network configurations.
9492    :type network_interface_configurations:
9493     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetNetworkConfiguration]
9494    """
9495
9496    _attribute_map = {
9497        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
9498        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
9499    }
9500
9501    def __init__(
9502        self,
9503        *,
9504        health_probe: Optional["ApiEntityReference"] = None,
9505        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
9506        **kwargs
9507    ):
9508        super(VirtualMachineScaleSetNetworkProfile, self).__init__(**kwargs)
9509        self.health_probe = health_probe
9510        self.network_interface_configurations = network_interface_configurations
9511
9512
9513class VirtualMachineScaleSetOSDisk(msrest.serialization.Model):
9514    """Describes a virtual machine scale set operating system disk.
9515
9516    All required parameters must be populated in order to send to Azure.
9517
9518    :param name: The disk name.
9519    :type name: str
9520    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
9521     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
9522     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
9523     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
9524     "ReadWrite".
9525    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
9526    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
9527     disabled on the disk.
9528    :type write_accelerator_enabled: bool
9529    :param create_option: Required. Specifies how the virtual machines in the scale set should be
9530     created.:code:`<br>`:code:`<br>` The only allowed value is: **FromImage** \u2013 This value is
9531     used when you are using an image to create the virtual machine. If you are using a platform
9532     image, you also use the imageReference element described above. If you are using a marketplace
9533     image, you  also use the plan element previously described. Possible values include:
9534     "FromImage", "Empty", "Attach".
9535    :type create_option: str or ~azure.mgmt.compute.v2020_12_01.models.DiskCreateOptionTypes
9536    :param diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk
9537     used by the virtual machine scale set.
9538    :type diff_disk_settings: ~azure.mgmt.compute.v2020_12_01.models.DiffDiskSettings
9539    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
9540     can be used to overwrite the size of the disk in a virtual machine image.
9541     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
9542    :type disk_size_gb: int
9543    :param os_type: This property allows you to specify the type of the OS that is included in the
9544     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
9545     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
9546     values include: "Windows", "Linux".
9547    :type os_type: str or ~azure.mgmt.compute.v2020_12_01.models.OperatingSystemTypes
9548    :param image: Specifies information about the unmanaged user image to base the scale set on.
9549    :type image: ~azure.mgmt.compute.v2020_12_01.models.VirtualHardDisk
9550    :param vhd_containers: Specifies the container urls that are used to store operating system
9551     disks for the scale set.
9552    :type vhd_containers: list[str]
9553    :param managed_disk: The managed disk parameters.
9554    :type managed_disk:
9555     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetManagedDiskParameters
9556    """
9557
9558    _validation = {
9559        'create_option': {'required': True},
9560    }
9561
9562    _attribute_map = {
9563        'name': {'key': 'name', 'type': 'str'},
9564        'caching': {'key': 'caching', 'type': 'str'},
9565        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
9566        'create_option': {'key': 'createOption', 'type': 'str'},
9567        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
9568        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
9569        'os_type': {'key': 'osType', 'type': 'str'},
9570        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
9571        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
9572        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
9573    }
9574
9575    def __init__(
9576        self,
9577        *,
9578        create_option: Union[str, "DiskCreateOptionTypes"],
9579        name: Optional[str] = None,
9580        caching: Optional[Union[str, "CachingTypes"]] = None,
9581        write_accelerator_enabled: Optional[bool] = None,
9582        diff_disk_settings: Optional["DiffDiskSettings"] = None,
9583        disk_size_gb: Optional[int] = None,
9584        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
9585        image: Optional["VirtualHardDisk"] = None,
9586        vhd_containers: Optional[List[str]] = None,
9587        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
9588        **kwargs
9589    ):
9590        super(VirtualMachineScaleSetOSDisk, self).__init__(**kwargs)
9591        self.name = name
9592        self.caching = caching
9593        self.write_accelerator_enabled = write_accelerator_enabled
9594        self.create_option = create_option
9595        self.diff_disk_settings = diff_disk_settings
9596        self.disk_size_gb = disk_size_gb
9597        self.os_type = os_type
9598        self.image = image
9599        self.vhd_containers = vhd_containers
9600        self.managed_disk = managed_disk
9601
9602
9603class VirtualMachineScaleSetOSProfile(msrest.serialization.Model):
9604    """Describes a virtual machine scale set OS profile.
9605
9606    :param computer_name_prefix: Specifies the computer name prefix for all of the virtual machines
9607     in the scale set. Computer name prefixes must be 1 to 15 characters long.
9608    :type computer_name_prefix: str
9609    :param admin_username: Specifies the name of the administrator account.
9610     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
9611     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
9612     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
9613     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
9614     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
9615     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
9616     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
9617     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
9618     root privileges on Linux virtual machines in Azure
9619     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
9620     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
9621     in this field, see `Selecting User Names for Linux on Azure
9622     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
9623    :type admin_username: str
9624    :param admin_password: Specifies the password of the administrator account.
9625     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
9626     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
9627     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
9628     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
9629     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
9630     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
9631     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
9632     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
9633     resetting the password, see `How to reset the Remote Desktop service or its login password in a
9634     Windows VM
9635     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9636     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
9637     repair disks on Azure Linux VMs using the VMAccess Extension
9638     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
9639    :type admin_password: str
9640    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
9641     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
9642     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` For using cloud-init for
9643     your VM, see `Using cloud-init to customize a Linux VM during creation
9644     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
9645    :type custom_data: str
9646    :param windows_configuration: Specifies Windows operating system settings on the virtual
9647     machine.
9648    :type windows_configuration: ~azure.mgmt.compute.v2020_12_01.models.WindowsConfiguration
9649    :param linux_configuration: Specifies the Linux operating system settings on the virtual
9650     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
9651     Azure-Endorsed Distributions
9652     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
9653     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
9654     Non-Endorsed Distributions
9655     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
9656    :type linux_configuration: ~azure.mgmt.compute.v2020_12_01.models.LinuxConfiguration
9657    :param secrets: Specifies set of certificates that should be installed onto the virtual
9658     machines in the scale set.
9659    :type secrets: list[~azure.mgmt.compute.v2020_12_01.models.VaultSecretGroup]
9660    """
9661
9662    _attribute_map = {
9663        'computer_name_prefix': {'key': 'computerNamePrefix', 'type': 'str'},
9664        'admin_username': {'key': 'adminUsername', 'type': 'str'},
9665        'admin_password': {'key': 'adminPassword', 'type': 'str'},
9666        'custom_data': {'key': 'customData', 'type': 'str'},
9667        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
9668        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
9669        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
9670    }
9671
9672    def __init__(
9673        self,
9674        *,
9675        computer_name_prefix: Optional[str] = None,
9676        admin_username: Optional[str] = None,
9677        admin_password: Optional[str] = None,
9678        custom_data: Optional[str] = None,
9679        windows_configuration: Optional["WindowsConfiguration"] = None,
9680        linux_configuration: Optional["LinuxConfiguration"] = None,
9681        secrets: Optional[List["VaultSecretGroup"]] = None,
9682        **kwargs
9683    ):
9684        super(VirtualMachineScaleSetOSProfile, self).__init__(**kwargs)
9685        self.computer_name_prefix = computer_name_prefix
9686        self.admin_username = admin_username
9687        self.admin_password = admin_password
9688        self.custom_data = custom_data
9689        self.windows_configuration = windows_configuration
9690        self.linux_configuration = linux_configuration
9691        self.secrets = secrets
9692
9693
9694class VirtualMachineScaleSetPublicIPAddressConfiguration(msrest.serialization.Model):
9695    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
9696
9697    All required parameters must be populated in order to send to Azure.
9698
9699    :param name: Required. The publicIP address configuration name.
9700    :type name: str
9701    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
9702    :type idle_timeout_in_minutes: int
9703    :param dns_settings: The dns settings to be applied on the publicIP addresses .
9704    :type dns_settings:
9705     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
9706    :param ip_tags: The list of IP tags associated with the public IP address.
9707    :type ip_tags: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetIpTag]
9708    :param public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses.
9709    :type public_ip_prefix: ~azure.mgmt.compute.v2020_12_01.models.SubResource
9710    :param public_ip_address_version: Available from Api-Version 2019-07-01 onwards, it represents
9711     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values
9712     are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
9713    :type public_ip_address_version: str or ~azure.mgmt.compute.v2020_12_01.models.IPVersion
9714    """
9715
9716    _validation = {
9717        'name': {'required': True},
9718    }
9719
9720    _attribute_map = {
9721        'name': {'key': 'name', 'type': 'str'},
9722        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
9723        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
9724        'ip_tags': {'key': 'properties.ipTags', 'type': '[VirtualMachineScaleSetIpTag]'},
9725        'public_ip_prefix': {'key': 'properties.publicIPPrefix', 'type': 'SubResource'},
9726        'public_ip_address_version': {'key': 'properties.publicIPAddressVersion', 'type': 'str'},
9727    }
9728
9729    def __init__(
9730        self,
9731        *,
9732        name: str,
9733        idle_timeout_in_minutes: Optional[int] = None,
9734        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
9735        ip_tags: Optional[List["VirtualMachineScaleSetIpTag"]] = None,
9736        public_ip_prefix: Optional["SubResource"] = None,
9737        public_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
9738        **kwargs
9739    ):
9740        super(VirtualMachineScaleSetPublicIPAddressConfiguration, self).__init__(**kwargs)
9741        self.name = name
9742        self.idle_timeout_in_minutes = idle_timeout_in_minutes
9743        self.dns_settings = dns_settings
9744        self.ip_tags = ip_tags
9745        self.public_ip_prefix = public_ip_prefix
9746        self.public_ip_address_version = public_ip_address_version
9747
9748
9749class VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings(msrest.serialization.Model):
9750    """Describes a virtual machines scale sets network configuration's DNS settings.
9751
9752    All required parameters must be populated in order to send to Azure.
9753
9754    :param domain_name_label: Required. The Domain name label.The concatenation of the domain name
9755     label and vm index will be the domain name labels of the PublicIPAddress resources that will be
9756     created.
9757    :type domain_name_label: str
9758    """
9759
9760    _validation = {
9761        'domain_name_label': {'required': True},
9762    }
9763
9764    _attribute_map = {
9765        'domain_name_label': {'key': 'domainNameLabel', 'type': 'str'},
9766    }
9767
9768    def __init__(
9769        self,
9770        *,
9771        domain_name_label: str,
9772        **kwargs
9773    ):
9774        super(VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings, self).__init__(**kwargs)
9775        self.domain_name_label = domain_name_label
9776
9777
9778class VirtualMachineScaleSetVMReimageParameters(VirtualMachineReimageParameters):
9779    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
9780
9781    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
9782     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
9783    :type temp_disk: bool
9784    """
9785
9786    _attribute_map = {
9787        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
9788    }
9789
9790    def __init__(
9791        self,
9792        *,
9793        temp_disk: Optional[bool] = None,
9794        **kwargs
9795    ):
9796        super(VirtualMachineScaleSetVMReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
9797
9798
9799class VirtualMachineScaleSetReimageParameters(VirtualMachineScaleSetVMReimageParameters):
9800    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
9801
9802    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
9803     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
9804    :type temp_disk: bool
9805    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
9806     scale set instance ids will result in the operation being performed on all virtual machines in
9807     the virtual machine scale set.
9808    :type instance_ids: list[str]
9809    """
9810
9811    _attribute_map = {
9812        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
9813        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
9814    }
9815
9816    def __init__(
9817        self,
9818        *,
9819        temp_disk: Optional[bool] = None,
9820        instance_ids: Optional[List[str]] = None,
9821        **kwargs
9822    ):
9823        super(VirtualMachineScaleSetReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
9824        self.instance_ids = instance_ids
9825
9826
9827class VirtualMachineScaleSetSku(msrest.serialization.Model):
9828    """Describes an available virtual machine scale set sku.
9829
9830    Variables are only populated by the server, and will be ignored when sending a request.
9831
9832    :ivar resource_type: The type of resource the sku applies to.
9833    :vartype resource_type: str
9834    :ivar sku: The Sku.
9835    :vartype sku: ~azure.mgmt.compute.v2020_12_01.models.Sku
9836    :ivar capacity: Specifies the number of virtual machines in the scale set.
9837    :vartype capacity: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetSkuCapacity
9838    """
9839
9840    _validation = {
9841        'resource_type': {'readonly': True},
9842        'sku': {'readonly': True},
9843        'capacity': {'readonly': True},
9844    }
9845
9846    _attribute_map = {
9847        'resource_type': {'key': 'resourceType', 'type': 'str'},
9848        'sku': {'key': 'sku', 'type': 'Sku'},
9849        'capacity': {'key': 'capacity', 'type': 'VirtualMachineScaleSetSkuCapacity'},
9850    }
9851
9852    def __init__(
9853        self,
9854        **kwargs
9855    ):
9856        super(VirtualMachineScaleSetSku, self).__init__(**kwargs)
9857        self.resource_type = None
9858        self.sku = None
9859        self.capacity = None
9860
9861
9862class VirtualMachineScaleSetSkuCapacity(msrest.serialization.Model):
9863    """Describes scaling information of a sku.
9864
9865    Variables are only populated by the server, and will be ignored when sending a request.
9866
9867    :ivar minimum: The minimum capacity.
9868    :vartype minimum: long
9869    :ivar maximum: The maximum capacity that can be set.
9870    :vartype maximum: long
9871    :ivar default_capacity: The default capacity.
9872    :vartype default_capacity: long
9873    :ivar scale_type: The scale type applicable to the sku. Possible values include: "Automatic",
9874     "None".
9875    :vartype scale_type: str or
9876     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetSkuScaleType
9877    """
9878
9879    _validation = {
9880        'minimum': {'readonly': True},
9881        'maximum': {'readonly': True},
9882        'default_capacity': {'readonly': True},
9883        'scale_type': {'readonly': True},
9884    }
9885
9886    _attribute_map = {
9887        'minimum': {'key': 'minimum', 'type': 'long'},
9888        'maximum': {'key': 'maximum', 'type': 'long'},
9889        'default_capacity': {'key': 'defaultCapacity', 'type': 'long'},
9890        'scale_type': {'key': 'scaleType', 'type': 'str'},
9891    }
9892
9893    def __init__(
9894        self,
9895        **kwargs
9896    ):
9897        super(VirtualMachineScaleSetSkuCapacity, self).__init__(**kwargs)
9898        self.minimum = None
9899        self.maximum = None
9900        self.default_capacity = None
9901        self.scale_type = None
9902
9903
9904class VirtualMachineScaleSetStorageProfile(msrest.serialization.Model):
9905    """Describes a virtual machine scale set storage profile.
9906
9907    :param image_reference: Specifies information about the image to use. You can specify
9908     information about platform images, marketplace images, or virtual machine images. This element
9909     is required when you want to use a platform image, marketplace image, or virtual machine image,
9910     but is not used in other creation operations.
9911    :type image_reference: ~azure.mgmt.compute.v2020_12_01.models.ImageReference
9912    :param os_disk: Specifies information about the operating system disk used by the virtual
9913     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
9914     `About disks and VHDs for Azure virtual machines
9915     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
9916    :type os_disk: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetOSDisk
9917    :param data_disks: Specifies the parameters that are used to add data disks to the virtual
9918     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
9919     `About disks and VHDs for Azure virtual machines
9920     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
9921    :type data_disks: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetDataDisk]
9922    """
9923
9924    _attribute_map = {
9925        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
9926        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetOSDisk'},
9927        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
9928    }
9929
9930    def __init__(
9931        self,
9932        *,
9933        image_reference: Optional["ImageReference"] = None,
9934        os_disk: Optional["VirtualMachineScaleSetOSDisk"] = None,
9935        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
9936        **kwargs
9937    ):
9938        super(VirtualMachineScaleSetStorageProfile, self).__init__(**kwargs)
9939        self.image_reference = image_reference
9940        self.os_disk = os_disk
9941        self.data_disks = data_disks
9942
9943
9944class VirtualMachineScaleSetUpdate(UpdateResource):
9945    """Describes a Virtual Machine Scale Set.
9946
9947    :param tags: A set of tags. Resource tags.
9948    :type tags: dict[str, str]
9949    :param sku: The virtual machine scale set sku.
9950    :type sku: ~azure.mgmt.compute.v2020_12_01.models.Sku
9951    :param plan: The purchase plan when deploying a virtual machine scale set from VM Marketplace
9952     images.
9953    :type plan: ~azure.mgmt.compute.v2020_12_01.models.Plan
9954    :param identity: The identity of the virtual machine scale set, if configured.
9955    :type identity: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetIdentity
9956    :param upgrade_policy: The upgrade policy.
9957    :type upgrade_policy: ~azure.mgmt.compute.v2020_12_01.models.UpgradePolicy
9958    :param automatic_repairs_policy: Policy for automatic repairs.
9959    :type automatic_repairs_policy: ~azure.mgmt.compute.v2020_12_01.models.AutomaticRepairsPolicy
9960    :param virtual_machine_profile: The virtual machine profile.
9961    :type virtual_machine_profile:
9962     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateVMProfile
9963    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
9964     overprovisioned.
9965    :type overprovision: bool
9966    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
9967     are launched only on the requested number of VMs which are finally kept. This property will
9968     hence ensure that the extensions do not run on the extra overprovisioned VMs.
9969    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
9970    :param single_placement_group: When true this limits the scale set to a single placement group,
9971     of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to
9972     false. However, if singlePlacementGroup is false, it may not be modified to true.
9973    :type single_placement_group: bool
9974    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
9975     Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines
9976     have the capability to support attaching managed data disks with UltraSSD_LRS storage account
9977     type.
9978    :type additional_capabilities: ~azure.mgmt.compute.v2020_12_01.models.AdditionalCapabilities
9979    :param scale_in_policy: Specifies the scale-in policy that decides which virtual machines are
9980     chosen for removal when a Virtual Machine Scale Set is scaled-in.
9981    :type scale_in_policy: ~azure.mgmt.compute.v2020_12_01.models.ScaleInPolicy
9982    :param proximity_placement_group: Specifies information about the proximity placement group
9983     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
9984     api-version: 2018-04-01.
9985    :type proximity_placement_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
9986    """
9987
9988    _attribute_map = {
9989        'tags': {'key': 'tags', 'type': '{str}'},
9990        'sku': {'key': 'sku', 'type': 'Sku'},
9991        'plan': {'key': 'plan', 'type': 'Plan'},
9992        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
9993        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
9994        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
9995        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetUpdateVMProfile'},
9996        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
9997        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
9998        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
9999        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
10000        'scale_in_policy': {'key': 'properties.scaleInPolicy', 'type': 'ScaleInPolicy'},
10001        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
10002    }
10003
10004    def __init__(
10005        self,
10006        *,
10007        tags: Optional[Dict[str, str]] = None,
10008        sku: Optional["Sku"] = None,
10009        plan: Optional["Plan"] = None,
10010        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
10011        upgrade_policy: Optional["UpgradePolicy"] = None,
10012        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
10013        virtual_machine_profile: Optional["VirtualMachineScaleSetUpdateVMProfile"] = None,
10014        overprovision: Optional[bool] = None,
10015        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
10016        single_placement_group: Optional[bool] = None,
10017        additional_capabilities: Optional["AdditionalCapabilities"] = None,
10018        scale_in_policy: Optional["ScaleInPolicy"] = None,
10019        proximity_placement_group: Optional["SubResource"] = None,
10020        **kwargs
10021    ):
10022        super(VirtualMachineScaleSetUpdate, self).__init__(tags=tags, **kwargs)
10023        self.sku = sku
10024        self.plan = plan
10025        self.identity = identity
10026        self.upgrade_policy = upgrade_policy
10027        self.automatic_repairs_policy = automatic_repairs_policy
10028        self.virtual_machine_profile = virtual_machine_profile
10029        self.overprovision = overprovision
10030        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
10031        self.single_placement_group = single_placement_group
10032        self.additional_capabilities = additional_capabilities
10033        self.scale_in_policy = scale_in_policy
10034        self.proximity_placement_group = proximity_placement_group
10035
10036
10037class VirtualMachineScaleSetUpdateIPConfiguration(SubResource):
10038    """Describes a virtual machine scale set network profile's IP configuration. NOTE: The subnet of a scale set may be modified as long as the original subnet and the new subnet are in the same virtual network.
10039
10040    :param id: Resource Id.
10041    :type id: str
10042    :param name: The IP configuration name.
10043    :type name: str
10044    :param subnet: The subnet.
10045    :type subnet: ~azure.mgmt.compute.v2020_12_01.models.ApiEntityReference
10046    :param primary: Specifies the primary IP Configuration in case the network interface has more
10047     than one IP Configuration.
10048    :type primary: bool
10049    :param public_ip_address_configuration: The publicIPAddressConfiguration.
10050    :type public_ip_address_configuration:
10051     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration
10052    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
10053     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
10054     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
10055    :type private_ip_address_version: str or ~azure.mgmt.compute.v2020_12_01.models.IPVersion
10056    :param application_gateway_backend_address_pools: The application gateway backend address
10057     pools.
10058    :type application_gateway_backend_address_pools:
10059     list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
10060    :param application_security_groups: Specifies an array of references to application security
10061     group.
10062    :type application_security_groups: list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
10063    :param load_balancer_backend_address_pools: The load balancer backend address pools.
10064    :type load_balancer_backend_address_pools:
10065     list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
10066    :param load_balancer_inbound_nat_pools: The load balancer inbound nat pools.
10067    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2020_12_01.models.SubResource]
10068    """
10069
10070    _attribute_map = {
10071        'id': {'key': 'id', 'type': 'str'},
10072        'name': {'key': 'name', 'type': 'str'},
10073        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
10074        'primary': {'key': 'properties.primary', 'type': 'bool'},
10075        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetUpdatePublicIPAddressConfiguration'},
10076        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
10077        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
10078        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
10079        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
10080        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
10081    }
10082
10083    def __init__(
10084        self,
10085        *,
10086        id: Optional[str] = None,
10087        name: Optional[str] = None,
10088        subnet: Optional["ApiEntityReference"] = None,
10089        primary: Optional[bool] = None,
10090        public_ip_address_configuration: Optional["VirtualMachineScaleSetUpdatePublicIPAddressConfiguration"] = None,
10091        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
10092        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
10093        application_security_groups: Optional[List["SubResource"]] = None,
10094        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
10095        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
10096        **kwargs
10097    ):
10098        super(VirtualMachineScaleSetUpdateIPConfiguration, self).__init__(id=id, **kwargs)
10099        self.name = name
10100        self.subnet = subnet
10101        self.primary = primary
10102        self.public_ip_address_configuration = public_ip_address_configuration
10103        self.private_ip_address_version = private_ip_address_version
10104        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
10105        self.application_security_groups = application_security_groups
10106        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
10107        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
10108
10109
10110class VirtualMachineScaleSetUpdateNetworkConfiguration(SubResource):
10111    """Describes a virtual machine scale set network profile's network configurations.
10112
10113    :param id: Resource Id.
10114    :type id: str
10115    :param name: The network configuration name.
10116    :type name: str
10117    :param primary: Whether this is a primary NIC on a virtual machine.
10118    :type primary: bool
10119    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
10120     networking-enabled.
10121    :type enable_accelerated_networking: bool
10122    :param enable_fpga: Specifies whether the network interface is FPGA networking-enabled.
10123    :type enable_fpga: bool
10124    :param network_security_group: The network security group.
10125    :type network_security_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
10126    :param dns_settings: The dns settings to be applied on the network interfaces.
10127    :type dns_settings:
10128     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
10129    :param ip_configurations: The virtual machine scale set IP Configuration.
10130    :type ip_configurations:
10131     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateIPConfiguration]
10132    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
10133    :type enable_ip_forwarding: bool
10134    """
10135
10136    _attribute_map = {
10137        'id': {'key': 'id', 'type': 'str'},
10138        'name': {'key': 'name', 'type': 'str'},
10139        'primary': {'key': 'properties.primary', 'type': 'bool'},
10140        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
10141        'enable_fpga': {'key': 'properties.enableFpga', 'type': 'bool'},
10142        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
10143        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
10144        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetUpdateIPConfiguration]'},
10145        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
10146    }
10147
10148    def __init__(
10149        self,
10150        *,
10151        id: Optional[str] = None,
10152        name: Optional[str] = None,
10153        primary: Optional[bool] = None,
10154        enable_accelerated_networking: Optional[bool] = None,
10155        enable_fpga: Optional[bool] = None,
10156        network_security_group: Optional["SubResource"] = None,
10157        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
10158        ip_configurations: Optional[List["VirtualMachineScaleSetUpdateIPConfiguration"]] = None,
10159        enable_ip_forwarding: Optional[bool] = None,
10160        **kwargs
10161    ):
10162        super(VirtualMachineScaleSetUpdateNetworkConfiguration, self).__init__(id=id, **kwargs)
10163        self.name = name
10164        self.primary = primary
10165        self.enable_accelerated_networking = enable_accelerated_networking
10166        self.enable_fpga = enable_fpga
10167        self.network_security_group = network_security_group
10168        self.dns_settings = dns_settings
10169        self.ip_configurations = ip_configurations
10170        self.enable_ip_forwarding = enable_ip_forwarding
10171
10172
10173class VirtualMachineScaleSetUpdateNetworkProfile(msrest.serialization.Model):
10174    """Describes a virtual machine scale set network profile.
10175
10176    :param health_probe: A reference to a load balancer probe used to determine the health of an
10177     instance in the virtual machine scale set. The reference will be in the form:
10178     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
10179    :type health_probe: ~azure.mgmt.compute.v2020_12_01.models.ApiEntityReference
10180    :param network_interface_configurations: The list of network configurations.
10181    :type network_interface_configurations:
10182     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration]
10183    """
10184
10185    _attribute_map = {
10186        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
10187        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetUpdateNetworkConfiguration]'},
10188    }
10189
10190    def __init__(
10191        self,
10192        *,
10193        health_probe: Optional["ApiEntityReference"] = None,
10194        network_interface_configurations: Optional[List["VirtualMachineScaleSetUpdateNetworkConfiguration"]] = None,
10195        **kwargs
10196    ):
10197        super(VirtualMachineScaleSetUpdateNetworkProfile, self).__init__(**kwargs)
10198        self.health_probe = health_probe
10199        self.network_interface_configurations = network_interface_configurations
10200
10201
10202class VirtualMachineScaleSetUpdateOSDisk(msrest.serialization.Model):
10203    """Describes virtual machine scale set operating system disk Update Object. This should be used for Updating VMSS OS Disk.
10204
10205    :param caching: The caching type. Possible values include: "None", "ReadOnly", "ReadWrite".
10206    :type caching: str or ~azure.mgmt.compute.v2020_12_01.models.CachingTypes
10207    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
10208     disabled on the disk.
10209    :type write_accelerator_enabled: bool
10210    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
10211     can be used to overwrite the size of the disk in a virtual machine image.
10212     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
10213    :type disk_size_gb: int
10214    :param image: The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before
10215     using it to attach to the Virtual Machine. If SourceImage is provided, the destination
10216     VirtualHardDisk should not exist.
10217    :type image: ~azure.mgmt.compute.v2020_12_01.models.VirtualHardDisk
10218    :param vhd_containers: The list of virtual hard disk container uris.
10219    :type vhd_containers: list[str]
10220    :param managed_disk: The managed disk parameters.
10221    :type managed_disk:
10222     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetManagedDiskParameters
10223    """
10224
10225    _attribute_map = {
10226        'caching': {'key': 'caching', 'type': 'str'},
10227        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
10228        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
10229        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
10230        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
10231        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
10232    }
10233
10234    def __init__(
10235        self,
10236        *,
10237        caching: Optional[Union[str, "CachingTypes"]] = None,
10238        write_accelerator_enabled: Optional[bool] = None,
10239        disk_size_gb: Optional[int] = None,
10240        image: Optional["VirtualHardDisk"] = None,
10241        vhd_containers: Optional[List[str]] = None,
10242        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
10243        **kwargs
10244    ):
10245        super(VirtualMachineScaleSetUpdateOSDisk, self).__init__(**kwargs)
10246        self.caching = caching
10247        self.write_accelerator_enabled = write_accelerator_enabled
10248        self.disk_size_gb = disk_size_gb
10249        self.image = image
10250        self.vhd_containers = vhd_containers
10251        self.managed_disk = managed_disk
10252
10253
10254class VirtualMachineScaleSetUpdateOSProfile(msrest.serialization.Model):
10255    """Describes a virtual machine scale set OS profile.
10256
10257    :param custom_data: A base-64 encoded string of custom data.
10258    :type custom_data: str
10259    :param windows_configuration: The Windows Configuration of the OS profile.
10260    :type windows_configuration: ~azure.mgmt.compute.v2020_12_01.models.WindowsConfiguration
10261    :param linux_configuration: The Linux Configuration of the OS profile.
10262    :type linux_configuration: ~azure.mgmt.compute.v2020_12_01.models.LinuxConfiguration
10263    :param secrets: The List of certificates for addition to the VM.
10264    :type secrets: list[~azure.mgmt.compute.v2020_12_01.models.VaultSecretGroup]
10265    """
10266
10267    _attribute_map = {
10268        'custom_data': {'key': 'customData', 'type': 'str'},
10269        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
10270        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
10271        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
10272    }
10273
10274    def __init__(
10275        self,
10276        *,
10277        custom_data: Optional[str] = None,
10278        windows_configuration: Optional["WindowsConfiguration"] = None,
10279        linux_configuration: Optional["LinuxConfiguration"] = None,
10280        secrets: Optional[List["VaultSecretGroup"]] = None,
10281        **kwargs
10282    ):
10283        super(VirtualMachineScaleSetUpdateOSProfile, self).__init__(**kwargs)
10284        self.custom_data = custom_data
10285        self.windows_configuration = windows_configuration
10286        self.linux_configuration = linux_configuration
10287        self.secrets = secrets
10288
10289
10290class VirtualMachineScaleSetUpdatePublicIPAddressConfiguration(msrest.serialization.Model):
10291    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
10292
10293    :param name: The publicIP address configuration name.
10294    :type name: str
10295    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
10296    :type idle_timeout_in_minutes: int
10297    :param dns_settings: The dns settings to be applied on the publicIP addresses .
10298    :type dns_settings:
10299     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
10300    """
10301
10302    _attribute_map = {
10303        'name': {'key': 'name', 'type': 'str'},
10304        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
10305        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
10306    }
10307
10308    def __init__(
10309        self,
10310        *,
10311        name: Optional[str] = None,
10312        idle_timeout_in_minutes: Optional[int] = None,
10313        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
10314        **kwargs
10315    ):
10316        super(VirtualMachineScaleSetUpdatePublicIPAddressConfiguration, self).__init__(**kwargs)
10317        self.name = name
10318        self.idle_timeout_in_minutes = idle_timeout_in_minutes
10319        self.dns_settings = dns_settings
10320
10321
10322class VirtualMachineScaleSetUpdateStorageProfile(msrest.serialization.Model):
10323    """Describes a virtual machine scale set storage profile.
10324
10325    :param image_reference: The image reference.
10326    :type image_reference: ~azure.mgmt.compute.v2020_12_01.models.ImageReference
10327    :param os_disk: The OS disk.
10328    :type os_disk: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateOSDisk
10329    :param data_disks: The data disks.
10330    :type data_disks: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetDataDisk]
10331    """
10332
10333    _attribute_map = {
10334        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
10335        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetUpdateOSDisk'},
10336        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
10337    }
10338
10339    def __init__(
10340        self,
10341        *,
10342        image_reference: Optional["ImageReference"] = None,
10343        os_disk: Optional["VirtualMachineScaleSetUpdateOSDisk"] = None,
10344        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
10345        **kwargs
10346    ):
10347        super(VirtualMachineScaleSetUpdateStorageProfile, self).__init__(**kwargs)
10348        self.image_reference = image_reference
10349        self.os_disk = os_disk
10350        self.data_disks = data_disks
10351
10352
10353class VirtualMachineScaleSetUpdateVMProfile(msrest.serialization.Model):
10354    """Describes a virtual machine scale set virtual machine profile.
10355
10356    :param os_profile: The virtual machine scale set OS profile.
10357    :type os_profile: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateOSProfile
10358    :param storage_profile: The virtual machine scale set storage profile.
10359    :type storage_profile:
10360     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateStorageProfile
10361    :param network_profile: The virtual machine scale set network profile.
10362    :type network_profile:
10363     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetUpdateNetworkProfile
10364    :param security_profile: The virtual machine scale set Security profile.
10365    :type security_profile: ~azure.mgmt.compute.v2020_12_01.models.SecurityProfile
10366    :param diagnostics_profile: The virtual machine scale set diagnostics profile.
10367    :type diagnostics_profile: ~azure.mgmt.compute.v2020_12_01.models.DiagnosticsProfile
10368    :param extension_profile: The virtual machine scale set extension profile.
10369    :type extension_profile:
10370     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetExtensionProfile
10371    :param license_type: The license type, which is for bring your own license scenario.
10372    :type license_type: str
10373    :param billing_profile: Specifies the billing related details of a Azure Spot VMSS.
10374     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
10375    :type billing_profile: ~azure.mgmt.compute.v2020_12_01.models.BillingProfile
10376    :param scheduled_events_profile: Specifies Scheduled Event related configurations.
10377    :type scheduled_events_profile: ~azure.mgmt.compute.v2020_12_01.models.ScheduledEventsProfile
10378    """
10379
10380    _attribute_map = {
10381        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetUpdateOSProfile'},
10382        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetUpdateStorageProfile'},
10383        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetUpdateNetworkProfile'},
10384        'security_profile': {'key': 'securityProfile', 'type': 'SecurityProfile'},
10385        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
10386        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
10387        'license_type': {'key': 'licenseType', 'type': 'str'},
10388        'billing_profile': {'key': 'billingProfile', 'type': 'BillingProfile'},
10389        'scheduled_events_profile': {'key': 'scheduledEventsProfile', 'type': 'ScheduledEventsProfile'},
10390    }
10391
10392    def __init__(
10393        self,
10394        *,
10395        os_profile: Optional["VirtualMachineScaleSetUpdateOSProfile"] = None,
10396        storage_profile: Optional["VirtualMachineScaleSetUpdateStorageProfile"] = None,
10397        network_profile: Optional["VirtualMachineScaleSetUpdateNetworkProfile"] = None,
10398        security_profile: Optional["SecurityProfile"] = None,
10399        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
10400        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
10401        license_type: Optional[str] = None,
10402        billing_profile: Optional["BillingProfile"] = None,
10403        scheduled_events_profile: Optional["ScheduledEventsProfile"] = None,
10404        **kwargs
10405    ):
10406        super(VirtualMachineScaleSetUpdateVMProfile, self).__init__(**kwargs)
10407        self.os_profile = os_profile
10408        self.storage_profile = storage_profile
10409        self.network_profile = network_profile
10410        self.security_profile = security_profile
10411        self.diagnostics_profile = diagnostics_profile
10412        self.extension_profile = extension_profile
10413        self.license_type = license_type
10414        self.billing_profile = billing_profile
10415        self.scheduled_events_profile = scheduled_events_profile
10416
10417
10418class VirtualMachineScaleSetVM(Resource):
10419    """Describes a virtual machine scale set virtual machine.
10420
10421    Variables are only populated by the server, and will be ignored when sending a request.
10422
10423    All required parameters must be populated in order to send to Azure.
10424
10425    :ivar id: Resource Id.
10426    :vartype id: str
10427    :ivar name: Resource name.
10428    :vartype name: str
10429    :ivar type: Resource type.
10430    :vartype type: str
10431    :param location: Required. Resource location.
10432    :type location: str
10433    :param tags: A set of tags. Resource tags.
10434    :type tags: dict[str, str]
10435    :ivar instance_id: The virtual machine instance ID.
10436    :vartype instance_id: str
10437    :ivar sku: The virtual machine SKU.
10438    :vartype sku: ~azure.mgmt.compute.v2020_12_01.models.Sku
10439    :param plan: Specifies information about the marketplace image used to create the virtual
10440     machine. This element is only used for marketplace images. Before you can use a marketplace
10441     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
10442     the marketplace image that you want to use and then click **Want to deploy programmatically,
10443     Get Started ->**. Enter any required information and then click **Save**.
10444    :type plan: ~azure.mgmt.compute.v2020_12_01.models.Plan
10445    :ivar resources: The virtual machine child extension resources.
10446    :vartype resources: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtension]
10447    :ivar zones: The virtual machine zones.
10448    :vartype zones: list[str]
10449    :ivar latest_model_applied: Specifies whether the latest model has been applied to the virtual
10450     machine.
10451    :vartype latest_model_applied: bool
10452    :ivar vm_id: Azure VM unique ID.
10453    :vartype vm_id: str
10454    :ivar instance_view: The virtual machine instance view.
10455    :vartype instance_view:
10456     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVMInstanceView
10457    :param hardware_profile: Specifies the hardware settings for the virtual machine.
10458    :type hardware_profile: ~azure.mgmt.compute.v2020_12_01.models.HardwareProfile
10459    :param storage_profile: Specifies the storage settings for the virtual machine disks.
10460    :type storage_profile: ~azure.mgmt.compute.v2020_12_01.models.StorageProfile
10461    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
10462     virtual machine in the scale set. For instance: whether the virtual machine has the capability
10463     to support attaching managed data disks with UltraSSD_LRS storage account type.
10464    :type additional_capabilities: ~azure.mgmt.compute.v2020_12_01.models.AdditionalCapabilities
10465    :param os_profile: Specifies the operating system settings for the virtual machine.
10466    :type os_profile: ~azure.mgmt.compute.v2020_12_01.models.OSProfile
10467    :param security_profile: Specifies the Security related profile settings for the virtual
10468     machine.
10469    :type security_profile: ~azure.mgmt.compute.v2020_12_01.models.SecurityProfile
10470    :param network_profile: Specifies the network interfaces of the virtual machine.
10471    :type network_profile: ~azure.mgmt.compute.v2020_12_01.models.NetworkProfile
10472    :param network_profile_configuration: Specifies the network profile configuration of the
10473     virtual machine.
10474    :type network_profile_configuration:
10475     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration
10476    :param diagnostics_profile: Specifies the boot diagnostic settings state.
10477     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
10478    :type diagnostics_profile: ~azure.mgmt.compute.v2020_12_01.models.DiagnosticsProfile
10479    :param availability_set: Specifies information about the availability set that the virtual
10480     machine should be assigned to. Virtual machines specified in the same availability set are
10481     allocated to different nodes to maximize availability. For more information about availability
10482     sets, see `Manage the availability of virtual machines
10483     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
10484     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
10485     maintenance for virtual machines in Azure
10486     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
10487     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
10488     time. An existing VM cannot be added to an availability set.
10489    :type availability_set: ~azure.mgmt.compute.v2020_12_01.models.SubResource
10490    :ivar provisioning_state: The provisioning state, which only appears in the response.
10491    :vartype provisioning_state: str
10492    :param license_type: Specifies that the image or disk that is being used was licensed
10493     on-premises. :code:`<br>`:code:`<br>` Possible values for Windows Server operating system are:
10494     :code:`<br>`:code:`<br>` Windows_Client :code:`<br>`:code:`<br>` Windows_Server
10495     :code:`<br>`:code:`<br>` Possible values for Linux Server operating system are:
10496     :code:`<br>`:code:`<br>` RHEL_BYOS (for RHEL) :code:`<br>`:code:`<br>` SLES_BYOS (for SUSE)
10497     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
10498     <https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing>`_
10499     :code:`<br>`:code:`<br>` `Azure Hybrid Use Benefit for Linux Server
10500     <https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux>`_
10501     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
10502    :type license_type: str
10503    :ivar model_definition_applied: Specifies whether the model applied to the virtual machine is
10504     the model of the virtual machine scale set or the customized model for the virtual machine.
10505    :vartype model_definition_applied: str
10506    :param protection_policy: Specifies the protection policy of the virtual machine.
10507    :type protection_policy:
10508     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVMProtectionPolicy
10509    """
10510
10511    _validation = {
10512        'id': {'readonly': True},
10513        'name': {'readonly': True},
10514        'type': {'readonly': True},
10515        'location': {'required': True},
10516        'instance_id': {'readonly': True},
10517        'sku': {'readonly': True},
10518        'resources': {'readonly': True},
10519        'zones': {'readonly': True},
10520        'latest_model_applied': {'readonly': True},
10521        'vm_id': {'readonly': True},
10522        'instance_view': {'readonly': True},
10523        'provisioning_state': {'readonly': True},
10524        'model_definition_applied': {'readonly': True},
10525    }
10526
10527    _attribute_map = {
10528        'id': {'key': 'id', 'type': 'str'},
10529        'name': {'key': 'name', 'type': 'str'},
10530        'type': {'key': 'type', 'type': 'str'},
10531        'location': {'key': 'location', 'type': 'str'},
10532        'tags': {'key': 'tags', 'type': '{str}'},
10533        'instance_id': {'key': 'instanceId', 'type': 'str'},
10534        'sku': {'key': 'sku', 'type': 'Sku'},
10535        'plan': {'key': 'plan', 'type': 'Plan'},
10536        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
10537        'zones': {'key': 'zones', 'type': '[str]'},
10538        'latest_model_applied': {'key': 'properties.latestModelApplied', 'type': 'bool'},
10539        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
10540        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineScaleSetVMInstanceView'},
10541        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
10542        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
10543        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
10544        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
10545        'security_profile': {'key': 'properties.securityProfile', 'type': 'SecurityProfile'},
10546        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
10547        'network_profile_configuration': {'key': 'properties.networkProfileConfiguration', 'type': 'VirtualMachineScaleSetVMNetworkProfileConfiguration'},
10548        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
10549        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
10550        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
10551        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
10552        'model_definition_applied': {'key': 'properties.modelDefinitionApplied', 'type': 'str'},
10553        'protection_policy': {'key': 'properties.protectionPolicy', 'type': 'VirtualMachineScaleSetVMProtectionPolicy'},
10554    }
10555
10556    def __init__(
10557        self,
10558        *,
10559        location: str,
10560        tags: Optional[Dict[str, str]] = None,
10561        plan: Optional["Plan"] = None,
10562        hardware_profile: Optional["HardwareProfile"] = None,
10563        storage_profile: Optional["StorageProfile"] = None,
10564        additional_capabilities: Optional["AdditionalCapabilities"] = None,
10565        os_profile: Optional["OSProfile"] = None,
10566        security_profile: Optional["SecurityProfile"] = None,
10567        network_profile: Optional["NetworkProfile"] = None,
10568        network_profile_configuration: Optional["VirtualMachineScaleSetVMNetworkProfileConfiguration"] = None,
10569        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
10570        availability_set: Optional["SubResource"] = None,
10571        license_type: Optional[str] = None,
10572        protection_policy: Optional["VirtualMachineScaleSetVMProtectionPolicy"] = None,
10573        **kwargs
10574    ):
10575        super(VirtualMachineScaleSetVM, self).__init__(location=location, tags=tags, **kwargs)
10576        self.instance_id = None
10577        self.sku = None
10578        self.plan = plan
10579        self.resources = None
10580        self.zones = None
10581        self.latest_model_applied = None
10582        self.vm_id = None
10583        self.instance_view = None
10584        self.hardware_profile = hardware_profile
10585        self.storage_profile = storage_profile
10586        self.additional_capabilities = additional_capabilities
10587        self.os_profile = os_profile
10588        self.security_profile = security_profile
10589        self.network_profile = network_profile
10590        self.network_profile_configuration = network_profile_configuration
10591        self.diagnostics_profile = diagnostics_profile
10592        self.availability_set = availability_set
10593        self.provisioning_state = None
10594        self.license_type = license_type
10595        self.model_definition_applied = None
10596        self.protection_policy = protection_policy
10597
10598
10599class VirtualMachineScaleSetVMExtension(SubResourceReadOnly):
10600    """Describes a VMSS VM Extension.
10601
10602    Variables are only populated by the server, and will be ignored when sending a request.
10603
10604    :ivar id: Resource Id.
10605    :vartype id: str
10606    :ivar name: The name of the extension.
10607    :vartype name: str
10608    :ivar type: Resource type.
10609    :vartype type: str
10610    :param force_update_tag: How the extension handler should be forced to update even if the
10611     extension configuration has not changed.
10612    :type force_update_tag: str
10613    :param publisher: The name of the extension handler publisher.
10614    :type publisher: str
10615    :param type_properties_type: Specifies the type of the extension; an example is
10616     "CustomScriptExtension".
10617    :type type_properties_type: str
10618    :param type_handler_version: Specifies the version of the script handler.
10619    :type type_handler_version: str
10620    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
10621     version if one is available at deployment time. Once deployed, however, the extension will not
10622     upgrade minor versions unless redeployed, even with this property set to true.
10623    :type auto_upgrade_minor_version: bool
10624    :param enable_automatic_upgrade: Indicates whether the extension should be automatically
10625     upgraded by the platform if there is a newer version of the extension available.
10626    :type enable_automatic_upgrade: bool
10627    :param settings: Json formatted public settings for the extension.
10628    :type settings: any
10629    :param protected_settings: The extension can contain either protectedSettings or
10630     protectedSettingsFromKeyVault or no protected settings at all.
10631    :type protected_settings: any
10632    :ivar provisioning_state: The provisioning state, which only appears in the response.
10633    :vartype provisioning_state: str
10634    :param instance_view: The virtual machine extension instance view.
10635    :type instance_view: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtensionInstanceView
10636    """
10637
10638    _validation = {
10639        'id': {'readonly': True},
10640        'name': {'readonly': True},
10641        'type': {'readonly': True},
10642        'provisioning_state': {'readonly': True},
10643    }
10644
10645    _attribute_map = {
10646        'id': {'key': 'id', 'type': 'str'},
10647        'name': {'key': 'name', 'type': 'str'},
10648        'type': {'key': 'type', 'type': 'str'},
10649        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
10650        'publisher': {'key': 'properties.publisher', 'type': 'str'},
10651        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
10652        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
10653        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
10654        'enable_automatic_upgrade': {'key': 'properties.enableAutomaticUpgrade', 'type': 'bool'},
10655        'settings': {'key': 'properties.settings', 'type': 'object'},
10656        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
10657        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
10658        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineExtensionInstanceView'},
10659    }
10660
10661    def __init__(
10662        self,
10663        *,
10664        force_update_tag: Optional[str] = None,
10665        publisher: Optional[str] = None,
10666        type_properties_type: Optional[str] = None,
10667        type_handler_version: Optional[str] = None,
10668        auto_upgrade_minor_version: Optional[bool] = None,
10669        enable_automatic_upgrade: Optional[bool] = None,
10670        settings: Optional[Any] = None,
10671        protected_settings: Optional[Any] = None,
10672        instance_view: Optional["VirtualMachineExtensionInstanceView"] = None,
10673        **kwargs
10674    ):
10675        super(VirtualMachineScaleSetVMExtension, self).__init__(**kwargs)
10676        self.name = None
10677        self.type = None
10678        self.force_update_tag = force_update_tag
10679        self.publisher = publisher
10680        self.type_properties_type = type_properties_type
10681        self.type_handler_version = type_handler_version
10682        self.auto_upgrade_minor_version = auto_upgrade_minor_version
10683        self.enable_automatic_upgrade = enable_automatic_upgrade
10684        self.settings = settings
10685        self.protected_settings = protected_settings
10686        self.provisioning_state = None
10687        self.instance_view = instance_view
10688
10689
10690class VirtualMachineScaleSetVMExtensionsListResult(msrest.serialization.Model):
10691    """The List VMSS VM Extension operation response.
10692
10693    :param value: The list of VMSS VM extensions.
10694    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVMExtension]
10695    """
10696
10697    _attribute_map = {
10698        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetVMExtension]'},
10699    }
10700
10701    def __init__(
10702        self,
10703        *,
10704        value: Optional[List["VirtualMachineScaleSetVMExtension"]] = None,
10705        **kwargs
10706    ):
10707        super(VirtualMachineScaleSetVMExtensionsListResult, self).__init__(**kwargs)
10708        self.value = value
10709
10710
10711class VirtualMachineScaleSetVMExtensionsSummary(msrest.serialization.Model):
10712    """Extensions summary for virtual machines of a virtual machine scale set.
10713
10714    Variables are only populated by the server, and will be ignored when sending a request.
10715
10716    :ivar name: The extension name.
10717    :vartype name: str
10718    :ivar statuses_summary: The extensions information.
10719    :vartype statuses_summary:
10720     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineStatusCodeCount]
10721    """
10722
10723    _validation = {
10724        'name': {'readonly': True},
10725        'statuses_summary': {'readonly': True},
10726    }
10727
10728    _attribute_map = {
10729        'name': {'key': 'name', 'type': 'str'},
10730        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
10731    }
10732
10733    def __init__(
10734        self,
10735        **kwargs
10736    ):
10737        super(VirtualMachineScaleSetVMExtensionsSummary, self).__init__(**kwargs)
10738        self.name = None
10739        self.statuses_summary = None
10740
10741
10742class VirtualMachineScaleSetVMExtensionUpdate(SubResourceReadOnly):
10743    """Describes a VMSS VM Extension.
10744
10745    Variables are only populated by the server, and will be ignored when sending a request.
10746
10747    :ivar id: Resource Id.
10748    :vartype id: str
10749    :ivar name: The name of the extension.
10750    :vartype name: str
10751    :ivar type: Resource type.
10752    :vartype type: str
10753    :param force_update_tag: How the extension handler should be forced to update even if the
10754     extension configuration has not changed.
10755    :type force_update_tag: str
10756    :param publisher: The name of the extension handler publisher.
10757    :type publisher: str
10758    :param type_properties_type: Specifies the type of the extension; an example is
10759     "CustomScriptExtension".
10760    :type type_properties_type: str
10761    :param type_handler_version: Specifies the version of the script handler.
10762    :type type_handler_version: str
10763    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
10764     version if one is available at deployment time. Once deployed, however, the extension will not
10765     upgrade minor versions unless redeployed, even with this property set to true.
10766    :type auto_upgrade_minor_version: bool
10767    :param enable_automatic_upgrade: Indicates whether the extension should be automatically
10768     upgraded by the platform if there is a newer version of the extension available.
10769    :type enable_automatic_upgrade: bool
10770    :param settings: Json formatted public settings for the extension.
10771    :type settings: any
10772    :param protected_settings: The extension can contain either protectedSettings or
10773     protectedSettingsFromKeyVault or no protected settings at all.
10774    :type protected_settings: any
10775    """
10776
10777    _validation = {
10778        'id': {'readonly': True},
10779        'name': {'readonly': True},
10780        'type': {'readonly': True},
10781    }
10782
10783    _attribute_map = {
10784        'id': {'key': 'id', 'type': 'str'},
10785        'name': {'key': 'name', 'type': 'str'},
10786        'type': {'key': 'type', 'type': 'str'},
10787        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
10788        'publisher': {'key': 'properties.publisher', 'type': 'str'},
10789        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
10790        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
10791        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
10792        'enable_automatic_upgrade': {'key': 'properties.enableAutomaticUpgrade', 'type': 'bool'},
10793        'settings': {'key': 'properties.settings', 'type': 'object'},
10794        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
10795    }
10796
10797    def __init__(
10798        self,
10799        *,
10800        force_update_tag: Optional[str] = None,
10801        publisher: Optional[str] = None,
10802        type_properties_type: Optional[str] = None,
10803        type_handler_version: Optional[str] = None,
10804        auto_upgrade_minor_version: Optional[bool] = None,
10805        enable_automatic_upgrade: Optional[bool] = None,
10806        settings: Optional[Any] = None,
10807        protected_settings: Optional[Any] = None,
10808        **kwargs
10809    ):
10810        super(VirtualMachineScaleSetVMExtensionUpdate, self).__init__(**kwargs)
10811        self.name = None
10812        self.type = None
10813        self.force_update_tag = force_update_tag
10814        self.publisher = publisher
10815        self.type_properties_type = type_properties_type
10816        self.type_handler_version = type_handler_version
10817        self.auto_upgrade_minor_version = auto_upgrade_minor_version
10818        self.enable_automatic_upgrade = enable_automatic_upgrade
10819        self.settings = settings
10820        self.protected_settings = protected_settings
10821
10822
10823class VirtualMachineScaleSetVMInstanceIDs(msrest.serialization.Model):
10824    """Specifies a list of virtual machine instance IDs from the VM scale set.
10825
10826    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
10827     scale set instance ids will result in the operation being performed on all virtual machines in
10828     the virtual machine scale set.
10829    :type instance_ids: list[str]
10830    """
10831
10832    _attribute_map = {
10833        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
10834    }
10835
10836    def __init__(
10837        self,
10838        *,
10839        instance_ids: Optional[List[str]] = None,
10840        **kwargs
10841    ):
10842        super(VirtualMachineScaleSetVMInstanceIDs, self).__init__(**kwargs)
10843        self.instance_ids = instance_ids
10844
10845
10846class VirtualMachineScaleSetVMInstanceRequiredIDs(msrest.serialization.Model):
10847    """Specifies a list of virtual machine instance IDs from the VM scale set.
10848
10849    All required parameters must be populated in order to send to Azure.
10850
10851    :param instance_ids: Required. The virtual machine scale set instance ids.
10852    :type instance_ids: list[str]
10853    """
10854
10855    _validation = {
10856        'instance_ids': {'required': True},
10857    }
10858
10859    _attribute_map = {
10860        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
10861    }
10862
10863    def __init__(
10864        self,
10865        *,
10866        instance_ids: List[str],
10867        **kwargs
10868    ):
10869        super(VirtualMachineScaleSetVMInstanceRequiredIDs, self).__init__(**kwargs)
10870        self.instance_ids = instance_ids
10871
10872
10873class VirtualMachineScaleSetVMInstanceView(msrest.serialization.Model):
10874    """The instance view of a virtual machine scale set VM.
10875
10876    Variables are only populated by the server, and will be ignored when sending a request.
10877
10878    :param platform_update_domain: The Update Domain count.
10879    :type platform_update_domain: int
10880    :param platform_fault_domain: The Fault Domain count.
10881    :type platform_fault_domain: int
10882    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
10883    :type rdp_thumb_print: str
10884    :param vm_agent: The VM Agent running on the virtual machine.
10885    :type vm_agent: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineAgentInstanceView
10886    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
10887    :type maintenance_redeploy_status:
10888     ~azure.mgmt.compute.v2020_12_01.models.MaintenanceRedeployStatus
10889    :param disks: The disks information.
10890    :type disks: list[~azure.mgmt.compute.v2020_12_01.models.DiskInstanceView]
10891    :param extensions: The extensions information.
10892    :type extensions:
10893     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineExtensionInstanceView]
10894    :ivar vm_health: The health status for the VM.
10895    :vartype vm_health: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineHealthStatus
10896    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
10897     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
10898     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
10899     screenshot of the VM from the hypervisor.
10900    :type boot_diagnostics: ~azure.mgmt.compute.v2020_12_01.models.BootDiagnosticsInstanceView
10901    :param statuses: The resource status information.
10902    :type statuses: list[~azure.mgmt.compute.v2020_12_01.models.InstanceViewStatus]
10903    :ivar assigned_host: Resource id of the dedicated host, on which the virtual machine is
10904     allocated through automatic placement, when the virtual machine is associated with a dedicated
10905     host group that has automatic placement enabled. :code:`<br>`:code:`<br>`Minimum api-version:
10906     2020-06-01.
10907    :vartype assigned_host: str
10908    :param placement_group_id: The placement group in which the VM is running. If the VM is
10909     deallocated it will not have a placementGroupId.
10910    :type placement_group_id: str
10911    """
10912
10913    _validation = {
10914        'vm_health': {'readonly': True},
10915        'assigned_host': {'readonly': True},
10916    }
10917
10918    _attribute_map = {
10919        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
10920        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
10921        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
10922        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
10923        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
10924        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
10925        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
10926        'vm_health': {'key': 'vmHealth', 'type': 'VirtualMachineHealthStatus'},
10927        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
10928        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
10929        'assigned_host': {'key': 'assignedHost', 'type': 'str'},
10930        'placement_group_id': {'key': 'placementGroupId', 'type': 'str'},
10931    }
10932
10933    def __init__(
10934        self,
10935        *,
10936        platform_update_domain: Optional[int] = None,
10937        platform_fault_domain: Optional[int] = None,
10938        rdp_thumb_print: Optional[str] = None,
10939        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
10940        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
10941        disks: Optional[List["DiskInstanceView"]] = None,
10942        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
10943        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
10944        statuses: Optional[List["InstanceViewStatus"]] = None,
10945        placement_group_id: Optional[str] = None,
10946        **kwargs
10947    ):
10948        super(VirtualMachineScaleSetVMInstanceView, self).__init__(**kwargs)
10949        self.platform_update_domain = platform_update_domain
10950        self.platform_fault_domain = platform_fault_domain
10951        self.rdp_thumb_print = rdp_thumb_print
10952        self.vm_agent = vm_agent
10953        self.maintenance_redeploy_status = maintenance_redeploy_status
10954        self.disks = disks
10955        self.extensions = extensions
10956        self.vm_health = None
10957        self.boot_diagnostics = boot_diagnostics
10958        self.statuses = statuses
10959        self.assigned_host = None
10960        self.placement_group_id = placement_group_id
10961
10962
10963class VirtualMachineScaleSetVMListResult(msrest.serialization.Model):
10964    """The List Virtual Machine Scale Set VMs operation response.
10965
10966    All required parameters must be populated in order to send to Azure.
10967
10968    :param value: Required. The list of virtual machine scale sets VMs.
10969    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetVM]
10970    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set VMs. Call
10971     ListNext() with this to fetch the next page of VMSS VMs.
10972    :type next_link: str
10973    """
10974
10975    _validation = {
10976        'value': {'required': True},
10977    }
10978
10979    _attribute_map = {
10980        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetVM]'},
10981        'next_link': {'key': 'nextLink', 'type': 'str'},
10982    }
10983
10984    def __init__(
10985        self,
10986        *,
10987        value: List["VirtualMachineScaleSetVM"],
10988        next_link: Optional[str] = None,
10989        **kwargs
10990    ):
10991        super(VirtualMachineScaleSetVMListResult, self).__init__(**kwargs)
10992        self.value = value
10993        self.next_link = next_link
10994
10995
10996class VirtualMachineScaleSetVMNetworkProfileConfiguration(msrest.serialization.Model):
10997    """Describes a virtual machine scale set VM network profile.
10998
10999    :param network_interface_configurations: The list of network configurations.
11000    :type network_interface_configurations:
11001     list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetNetworkConfiguration]
11002    """
11003
11004    _attribute_map = {
11005        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
11006    }
11007
11008    def __init__(
11009        self,
11010        *,
11011        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
11012        **kwargs
11013    ):
11014        super(VirtualMachineScaleSetVMNetworkProfileConfiguration, self).__init__(**kwargs)
11015        self.network_interface_configurations = network_interface_configurations
11016
11017
11018class VirtualMachineScaleSetVMProfile(msrest.serialization.Model):
11019    """Describes a virtual machine scale set virtual machine profile.
11020
11021    :param os_profile: Specifies the operating system settings for the virtual machines in the
11022     scale set.
11023    :type os_profile: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetOSProfile
11024    :param storage_profile: Specifies the storage settings for the virtual machine disks.
11025    :type storage_profile:
11026     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetStorageProfile
11027    :param network_profile: Specifies properties of the network interfaces of the virtual machines
11028     in the scale set.
11029    :type network_profile:
11030     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetNetworkProfile
11031    :param security_profile: Specifies the Security related profile settings for the virtual
11032     machines in the scale set.
11033    :type security_profile: ~azure.mgmt.compute.v2020_12_01.models.SecurityProfile
11034    :param diagnostics_profile: Specifies the boot diagnostic settings state.
11035     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
11036    :type diagnostics_profile: ~azure.mgmt.compute.v2020_12_01.models.DiagnosticsProfile
11037    :param extension_profile: Specifies a collection of settings for extensions installed on
11038     virtual machines in the scale set.
11039    :type extension_profile:
11040     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineScaleSetExtensionProfile
11041    :param license_type: Specifies that the image or disk that is being used was licensed
11042     on-premises. :code:`<br>`:code:`<br>` Possible values for Windows Server operating system are:
11043     :code:`<br>`:code:`<br>` Windows_Client :code:`<br>`:code:`<br>` Windows_Server
11044     :code:`<br>`:code:`<br>` Possible values for Linux Server operating system are:
11045     :code:`<br>`:code:`<br>` RHEL_BYOS (for RHEL) :code:`<br>`:code:`<br>` SLES_BYOS (for SUSE)
11046     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
11047     <https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing>`_
11048     :code:`<br>`:code:`<br>` `Azure Hybrid Use Benefit for Linux Server
11049     <https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux>`_
11050     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
11051    :type license_type: str
11052    :param priority: Specifies the priority for the virtual machines in the scale set.
11053     :code:`<br>`:code:`<br>`Minimum api-version: 2017-10-30-preview. Possible values include:
11054     "Regular", "Low", "Spot".
11055    :type priority: str or ~azure.mgmt.compute.v2020_12_01.models.VirtualMachinePriorityTypes
11056    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and
11057     Azure Spot scale set. :code:`<br>`:code:`<br>`For Azure Spot virtual machines, both
11058     'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.
11059     :code:`<br>`:code:`<br>`For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported
11060     and the minimum api-version is 2017-10-30-preview. Possible values include: "Deallocate",
11061     "Delete".
11062    :type eviction_policy: str or
11063     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineEvictionPolicyTypes
11064    :param billing_profile: Specifies the billing related details of a Azure Spot VMSS.
11065     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
11066    :type billing_profile: ~azure.mgmt.compute.v2020_12_01.models.BillingProfile
11067    :param scheduled_events_profile: Specifies Scheduled Event related configurations.
11068    :type scheduled_events_profile: ~azure.mgmt.compute.v2020_12_01.models.ScheduledEventsProfile
11069    """
11070
11071    _attribute_map = {
11072        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetOSProfile'},
11073        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetStorageProfile'},
11074        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetNetworkProfile'},
11075        'security_profile': {'key': 'securityProfile', 'type': 'SecurityProfile'},
11076        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
11077        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
11078        'license_type': {'key': 'licenseType', 'type': 'str'},
11079        'priority': {'key': 'priority', 'type': 'str'},
11080        'eviction_policy': {'key': 'evictionPolicy', 'type': 'str'},
11081        'billing_profile': {'key': 'billingProfile', 'type': 'BillingProfile'},
11082        'scheduled_events_profile': {'key': 'scheduledEventsProfile', 'type': 'ScheduledEventsProfile'},
11083    }
11084
11085    def __init__(
11086        self,
11087        *,
11088        os_profile: Optional["VirtualMachineScaleSetOSProfile"] = None,
11089        storage_profile: Optional["VirtualMachineScaleSetStorageProfile"] = None,
11090        network_profile: Optional["VirtualMachineScaleSetNetworkProfile"] = None,
11091        security_profile: Optional["SecurityProfile"] = None,
11092        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
11093        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
11094        license_type: Optional[str] = None,
11095        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
11096        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
11097        billing_profile: Optional["BillingProfile"] = None,
11098        scheduled_events_profile: Optional["ScheduledEventsProfile"] = None,
11099        **kwargs
11100    ):
11101        super(VirtualMachineScaleSetVMProfile, self).__init__(**kwargs)
11102        self.os_profile = os_profile
11103        self.storage_profile = storage_profile
11104        self.network_profile = network_profile
11105        self.security_profile = security_profile
11106        self.diagnostics_profile = diagnostics_profile
11107        self.extension_profile = extension_profile
11108        self.license_type = license_type
11109        self.priority = priority
11110        self.eviction_policy = eviction_policy
11111        self.billing_profile = billing_profile
11112        self.scheduled_events_profile = scheduled_events_profile
11113
11114
11115class VirtualMachineScaleSetVMProtectionPolicy(msrest.serialization.Model):
11116    """The protection policy of a virtual machine scale set VM.
11117
11118    :param protect_from_scale_in: Indicates that the virtual machine scale set VM shouldn't be
11119     considered for deletion during a scale-in operation.
11120    :type protect_from_scale_in: bool
11121    :param protect_from_scale_set_actions: Indicates that model updates or actions (including
11122     scale-in) initiated on the virtual machine scale set should not be applied to the virtual
11123     machine scale set VM.
11124    :type protect_from_scale_set_actions: bool
11125    """
11126
11127    _attribute_map = {
11128        'protect_from_scale_in': {'key': 'protectFromScaleIn', 'type': 'bool'},
11129        'protect_from_scale_set_actions': {'key': 'protectFromScaleSetActions', 'type': 'bool'},
11130    }
11131
11132    def __init__(
11133        self,
11134        *,
11135        protect_from_scale_in: Optional[bool] = None,
11136        protect_from_scale_set_actions: Optional[bool] = None,
11137        **kwargs
11138    ):
11139        super(VirtualMachineScaleSetVMProtectionPolicy, self).__init__(**kwargs)
11140        self.protect_from_scale_in = protect_from_scale_in
11141        self.protect_from_scale_set_actions = protect_from_scale_set_actions
11142
11143
11144class VirtualMachineSize(msrest.serialization.Model):
11145    """Describes the properties of a VM size.
11146
11147    :param name: The name of the virtual machine size.
11148    :type name: str
11149    :param number_of_cores: The number of cores supported by the virtual machine size.
11150    :type number_of_cores: int
11151    :param os_disk_size_in_mb: The OS disk size, in MB, allowed by the virtual machine size.
11152    :type os_disk_size_in_mb: int
11153    :param resource_disk_size_in_mb: The resource disk size, in MB, allowed by the virtual machine
11154     size.
11155    :type resource_disk_size_in_mb: int
11156    :param memory_in_mb: The amount of memory, in MB, supported by the virtual machine size.
11157    :type memory_in_mb: int
11158    :param max_data_disk_count: The maximum number of data disks that can be attached to the
11159     virtual machine size.
11160    :type max_data_disk_count: int
11161    """
11162
11163    _attribute_map = {
11164        'name': {'key': 'name', 'type': 'str'},
11165        'number_of_cores': {'key': 'numberOfCores', 'type': 'int'},
11166        'os_disk_size_in_mb': {'key': 'osDiskSizeInMB', 'type': 'int'},
11167        'resource_disk_size_in_mb': {'key': 'resourceDiskSizeInMB', 'type': 'int'},
11168        'memory_in_mb': {'key': 'memoryInMB', 'type': 'int'},
11169        'max_data_disk_count': {'key': 'maxDataDiskCount', 'type': 'int'},
11170    }
11171
11172    def __init__(
11173        self,
11174        *,
11175        name: Optional[str] = None,
11176        number_of_cores: Optional[int] = None,
11177        os_disk_size_in_mb: Optional[int] = None,
11178        resource_disk_size_in_mb: Optional[int] = None,
11179        memory_in_mb: Optional[int] = None,
11180        max_data_disk_count: Optional[int] = None,
11181        **kwargs
11182    ):
11183        super(VirtualMachineSize, self).__init__(**kwargs)
11184        self.name = name
11185        self.number_of_cores = number_of_cores
11186        self.os_disk_size_in_mb = os_disk_size_in_mb
11187        self.resource_disk_size_in_mb = resource_disk_size_in_mb
11188        self.memory_in_mb = memory_in_mb
11189        self.max_data_disk_count = max_data_disk_count
11190
11191
11192class VirtualMachineSizeListResult(msrest.serialization.Model):
11193    """The List Virtual Machine operation response.
11194
11195    :param value: The list of virtual machine sizes.
11196    :type value: list[~azure.mgmt.compute.v2020_12_01.models.VirtualMachineSize]
11197    """
11198
11199    _attribute_map = {
11200        'value': {'key': 'value', 'type': '[VirtualMachineSize]'},
11201    }
11202
11203    def __init__(
11204        self,
11205        *,
11206        value: Optional[List["VirtualMachineSize"]] = None,
11207        **kwargs
11208    ):
11209        super(VirtualMachineSizeListResult, self).__init__(**kwargs)
11210        self.value = value
11211
11212
11213class VirtualMachineSoftwarePatchProperties(msrest.serialization.Model):
11214    """Describes the properties of a Virtual Machine software patch.
11215
11216    Variables are only populated by the server, and will be ignored when sending a request.
11217
11218    :ivar patch_id: A unique identifier for the patch.
11219    :vartype patch_id: str
11220    :ivar name: The friendly name of the patch.
11221    :vartype name: str
11222    :ivar version: The version number of the patch. This property applies only to Linux patches.
11223    :vartype version: str
11224    :ivar kb_id: The KBID of the patch. Only applies to Windows patches.
11225    :vartype kb_id: str
11226    :ivar classifications: The classification(s) of the patch as provided by the patch publisher.
11227    :vartype classifications: list[str]
11228    :ivar reboot_behavior: Describes the reboot requirements of the patch. Possible values include:
11229     "Unknown", "NeverReboots", "AlwaysRequiresReboot", "CanRequestReboot".
11230    :vartype reboot_behavior: str or
11231     ~azure.mgmt.compute.v2020_12_01.models.VMGuestPatchRebootBehavior
11232    :ivar activity_id: The activity ID of the operation that produced this result. It is used to
11233     correlate across CRP and extension logs.
11234    :vartype activity_id: str
11235    :ivar published_date: The UTC timestamp when the repository published this patch.
11236    :vartype published_date: ~datetime.datetime
11237    :ivar last_modified_date_time: The UTC timestamp of the last update to this patch record.
11238    :vartype last_modified_date_time: ~datetime.datetime
11239    :ivar assessment_state: Describes the availability of a given patch. Possible values include:
11240     "Unknown", "Available".
11241    :vartype assessment_state: str or ~azure.mgmt.compute.v2020_12_01.models.PatchAssessmentState
11242    """
11243
11244    _validation = {
11245        'patch_id': {'readonly': True},
11246        'name': {'readonly': True},
11247        'version': {'readonly': True},
11248        'kb_id': {'readonly': True},
11249        'classifications': {'readonly': True},
11250        'reboot_behavior': {'readonly': True},
11251        'activity_id': {'readonly': True},
11252        'published_date': {'readonly': True},
11253        'last_modified_date_time': {'readonly': True},
11254        'assessment_state': {'readonly': True},
11255    }
11256
11257    _attribute_map = {
11258        'patch_id': {'key': 'patchId', 'type': 'str'},
11259        'name': {'key': 'name', 'type': 'str'},
11260        'version': {'key': 'version', 'type': 'str'},
11261        'kb_id': {'key': 'kbId', 'type': 'str'},
11262        'classifications': {'key': 'classifications', 'type': '[str]'},
11263        'reboot_behavior': {'key': 'rebootBehavior', 'type': 'str'},
11264        'activity_id': {'key': 'activityId', 'type': 'str'},
11265        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
11266        'last_modified_date_time': {'key': 'lastModifiedDateTime', 'type': 'iso-8601'},
11267        'assessment_state': {'key': 'assessmentState', 'type': 'str'},
11268    }
11269
11270    def __init__(
11271        self,
11272        **kwargs
11273    ):
11274        super(VirtualMachineSoftwarePatchProperties, self).__init__(**kwargs)
11275        self.patch_id = None
11276        self.name = None
11277        self.version = None
11278        self.kb_id = None
11279        self.classifications = None
11280        self.reboot_behavior = None
11281        self.activity_id = None
11282        self.published_date = None
11283        self.last_modified_date_time = None
11284        self.assessment_state = None
11285
11286
11287class VirtualMachineStatusCodeCount(msrest.serialization.Model):
11288    """The status code and count of the virtual machine scale set instance view status summary.
11289
11290    Variables are only populated by the server, and will be ignored when sending a request.
11291
11292    :ivar code: The instance view status code.
11293    :vartype code: str
11294    :ivar count: The number of instances having a particular status code.
11295    :vartype count: int
11296    """
11297
11298    _validation = {
11299        'code': {'readonly': True},
11300        'count': {'readonly': True},
11301    }
11302
11303    _attribute_map = {
11304        'code': {'key': 'code', 'type': 'str'},
11305        'count': {'key': 'count', 'type': 'int'},
11306    }
11307
11308    def __init__(
11309        self,
11310        **kwargs
11311    ):
11312        super(VirtualMachineStatusCodeCount, self).__init__(**kwargs)
11313        self.code = None
11314        self.count = None
11315
11316
11317class VirtualMachineUpdate(UpdateResource):
11318    """Describes a Virtual Machine Update.
11319
11320    Variables are only populated by the server, and will be ignored when sending a request.
11321
11322    :param tags: A set of tags. Resource tags.
11323    :type tags: dict[str, str]
11324    :param plan: Specifies information about the marketplace image used to create the virtual
11325     machine. This element is only used for marketplace images. Before you can use a marketplace
11326     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
11327     the marketplace image that you want to use and then click **Want to deploy programmatically,
11328     Get Started ->**. Enter any required information and then click **Save**.
11329    :type plan: ~azure.mgmt.compute.v2020_12_01.models.Plan
11330    :param identity: The identity of the virtual machine, if configured.
11331    :type identity: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineIdentity
11332    :param zones: The virtual machine zones.
11333    :type zones: list[str]
11334    :param hardware_profile: Specifies the hardware settings for the virtual machine.
11335    :type hardware_profile: ~azure.mgmt.compute.v2020_12_01.models.HardwareProfile
11336    :param storage_profile: Specifies the storage settings for the virtual machine disks.
11337    :type storage_profile: ~azure.mgmt.compute.v2020_12_01.models.StorageProfile
11338    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
11339     virtual machine.
11340    :type additional_capabilities: ~azure.mgmt.compute.v2020_12_01.models.AdditionalCapabilities
11341    :param os_profile: Specifies the operating system settings used while creating the virtual
11342     machine. Some of the settings cannot be changed once VM is provisioned.
11343    :type os_profile: ~azure.mgmt.compute.v2020_12_01.models.OSProfile
11344    :param network_profile: Specifies the network interfaces of the virtual machine.
11345    :type network_profile: ~azure.mgmt.compute.v2020_12_01.models.NetworkProfile
11346    :param security_profile: Specifies the Security related profile settings for the virtual
11347     machine.
11348    :type security_profile: ~azure.mgmt.compute.v2020_12_01.models.SecurityProfile
11349    :param diagnostics_profile: Specifies the boot diagnostic settings state.
11350     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
11351    :type diagnostics_profile: ~azure.mgmt.compute.v2020_12_01.models.DiagnosticsProfile
11352    :param availability_set: Specifies information about the availability set that the virtual
11353     machine should be assigned to. Virtual machines specified in the same availability set are
11354     allocated to different nodes to maximize availability. For more information about availability
11355     sets, see `Manage the availability of virtual machines
11356     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
11357     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
11358     maintenance for virtual machines in Azure
11359     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
11360     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
11361     time. The availability set to which the VM is being added should be under the same resource
11362     group as the availability set resource. An existing VM cannot be added to an availability set.
11363     :code:`<br>`:code:`<br>`This property cannot exist along with a non-null
11364     properties.virtualMachineScaleSet reference.
11365    :type availability_set: ~azure.mgmt.compute.v2020_12_01.models.SubResource
11366    :param virtual_machine_scale_set: Specifies information about the virtual machine scale set
11367     that the virtual machine should be assigned to. Virtual machines specified in the same virtual
11368     machine scale set are allocated to different nodes to maximize availability. Currently, a VM
11369     can only be added to virtual machine scale set at creation time. An existing VM cannot be added
11370     to a virtual machine scale set. :code:`<br>`:code:`<br>`This property cannot exist along with a
11371     non-null properties.availabilitySet reference. :code:`<br>`:code:`<br>`Minimum api‐version:
11372     2019‐03‐01.
11373    :type virtual_machine_scale_set: ~azure.mgmt.compute.v2020_12_01.models.SubResource
11374    :param proximity_placement_group: Specifies information about the proximity placement group
11375     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
11376     2018-04-01.
11377    :type proximity_placement_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
11378    :param priority: Specifies the priority for the virtual machine.
11379     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01. Possible values include: "Regular",
11380     "Low", "Spot".
11381    :type priority: str or ~azure.mgmt.compute.v2020_12_01.models.VirtualMachinePriorityTypes
11382    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine and
11383     Azure Spot scale set. :code:`<br>`:code:`<br>`For Azure Spot virtual machines, both
11384     'Deallocate' and 'Delete' are supported and the minimum api-version is 2019-03-01.
11385     :code:`<br>`:code:`<br>`For Azure Spot scale sets, both 'Deallocate' and 'Delete' are supported
11386     and the minimum api-version is 2017-10-30-preview. Possible values include: "Deallocate",
11387     "Delete".
11388    :type eviction_policy: str or
11389     ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineEvictionPolicyTypes
11390    :param billing_profile: Specifies the billing related details of a Azure Spot virtual machine.
11391     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
11392    :type billing_profile: ~azure.mgmt.compute.v2020_12_01.models.BillingProfile
11393    :param host: Specifies information about the dedicated host that the virtual machine resides
11394     in. :code:`<br>`:code:`<br>`Minimum api-version: 2018-10-01.
11395    :type host: ~azure.mgmt.compute.v2020_12_01.models.SubResource
11396    :param host_group: Specifies information about the dedicated host group that the virtual
11397     machine resides in. :code:`<br>`:code:`<br>`Minimum api-version: 2020-06-01.
11398     :code:`<br>`:code:`<br>`NOTE: User cannot specify both host and hostGroup properties.
11399    :type host_group: ~azure.mgmt.compute.v2020_12_01.models.SubResource
11400    :ivar provisioning_state: The provisioning state, which only appears in the response.
11401    :vartype provisioning_state: str
11402    :ivar instance_view: The virtual machine instance view.
11403    :vartype instance_view: ~azure.mgmt.compute.v2020_12_01.models.VirtualMachineInstanceView
11404    :param license_type: Specifies that the image or disk that is being used was licensed
11405     on-premises. :code:`<br>`:code:`<br>` Possible values for Windows Server operating system are:
11406     :code:`<br>`:code:`<br>` Windows_Client :code:`<br>`:code:`<br>` Windows_Server
11407     :code:`<br>`:code:`<br>` Possible values for Linux Server operating system are:
11408     :code:`<br>`:code:`<br>` RHEL_BYOS (for RHEL) :code:`<br>`:code:`<br>` SLES_BYOS (for SUSE)
11409     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
11410     <https://docs.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing>`_
11411     :code:`<br>`:code:`<br>` `Azure Hybrid Use Benefit for Linux Server
11412     <https://docs.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux>`_
11413     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
11414    :type license_type: str
11415    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
11416     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
11417    :vartype vm_id: str
11418    :param extensions_time_budget: Specifies the time alloted for all extensions to start. The time
11419     duration should be between 15 minutes and 120 minutes (inclusive) and should be specified in
11420     ISO 8601 format. The default value is 90 minutes (PT1H30M). :code:`<br>`:code:`<br>` Minimum
11421     api-version: 2020-06-01.
11422    :type extensions_time_budget: str
11423    :param platform_fault_domain: Specifies the scale set logical fault domain into which the
11424     Virtual Machine will be created. By default, the Virtual Machine will by automatically assigned
11425     to a fault domain that best maintains balance across available fault
11426     domains.:code:`<br>`:code:`<li>`This is applicable only if the 'virtualMachineScaleSet'
11427     property of this Virtual Machine is set.:code:`<li>`The Virtual Machine Scale Set that is
11428     referenced, must have 'platformFaultDomainCount' &gt; 1.:code:`<li>`This property cannot be
11429     updated once the Virtual Machine is created.:code:`<li>`Fault domain assignment can be viewed
11430     in the Virtual Machine Instance View.:code:`<br>`:code:`<br>`Minimum api‐version: 2020‐12‐01.
11431    :type platform_fault_domain: int
11432    """
11433
11434    _validation = {
11435        'provisioning_state': {'readonly': True},
11436        'instance_view': {'readonly': True},
11437        'vm_id': {'readonly': True},
11438    }
11439
11440    _attribute_map = {
11441        'tags': {'key': 'tags', 'type': '{str}'},
11442        'plan': {'key': 'plan', 'type': 'Plan'},
11443        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
11444        'zones': {'key': 'zones', 'type': '[str]'},
11445        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
11446        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
11447        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
11448        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
11449        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
11450        'security_profile': {'key': 'properties.securityProfile', 'type': 'SecurityProfile'},
11451        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
11452        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
11453        'virtual_machine_scale_set': {'key': 'properties.virtualMachineScaleSet', 'type': 'SubResource'},
11454        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
11455        'priority': {'key': 'properties.priority', 'type': 'str'},
11456        'eviction_policy': {'key': 'properties.evictionPolicy', 'type': 'str'},
11457        'billing_profile': {'key': 'properties.billingProfile', 'type': 'BillingProfile'},
11458        'host': {'key': 'properties.host', 'type': 'SubResource'},
11459        'host_group': {'key': 'properties.hostGroup', 'type': 'SubResource'},
11460        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
11461        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
11462        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
11463        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
11464        'extensions_time_budget': {'key': 'properties.extensionsTimeBudget', 'type': 'str'},
11465        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
11466    }
11467
11468    def __init__(
11469        self,
11470        *,
11471        tags: Optional[Dict[str, str]] = None,
11472        plan: Optional["Plan"] = None,
11473        identity: Optional["VirtualMachineIdentity"] = None,
11474        zones: Optional[List[str]] = None,
11475        hardware_profile: Optional["HardwareProfile"] = None,
11476        storage_profile: Optional["StorageProfile"] = None,
11477        additional_capabilities: Optional["AdditionalCapabilities"] = None,
11478        os_profile: Optional["OSProfile"] = None,
11479        network_profile: Optional["NetworkProfile"] = None,
11480        security_profile: Optional["SecurityProfile"] = None,
11481        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
11482        availability_set: Optional["SubResource"] = None,
11483        virtual_machine_scale_set: Optional["SubResource"] = None,
11484        proximity_placement_group: Optional["SubResource"] = None,
11485        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
11486        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
11487        billing_profile: Optional["BillingProfile"] = None,
11488        host: Optional["SubResource"] = None,
11489        host_group: Optional["SubResource"] = None,
11490        license_type: Optional[str] = None,
11491        extensions_time_budget: Optional[str] = None,
11492        platform_fault_domain: Optional[int] = None,
11493        **kwargs
11494    ):
11495        super(VirtualMachineUpdate, self).__init__(tags=tags, **kwargs)
11496        self.plan = plan
11497        self.identity = identity
11498        self.zones = zones
11499        self.hardware_profile = hardware_profile
11500        self.storage_profile = storage_profile
11501        self.additional_capabilities = additional_capabilities
11502        self.os_profile = os_profile
11503        self.network_profile = network_profile
11504        self.security_profile = security_profile
11505        self.diagnostics_profile = diagnostics_profile
11506        self.availability_set = availability_set
11507        self.virtual_machine_scale_set = virtual_machine_scale_set
11508        self.proximity_placement_group = proximity_placement_group
11509        self.priority = priority
11510        self.eviction_policy = eviction_policy
11511        self.billing_profile = billing_profile
11512        self.host = host
11513        self.host_group = host_group
11514        self.provisioning_state = None
11515        self.instance_view = None
11516        self.license_type = license_type
11517        self.vm_id = None
11518        self.extensions_time_budget = extensions_time_budget
11519        self.platform_fault_domain = platform_fault_domain
11520
11521
11522class VMScaleSetConvertToSinglePlacementGroupInput(msrest.serialization.Model):
11523    """VMScaleSetConvertToSinglePlacementGroupInput.
11524
11525    :param active_placement_group_id: Id of the placement group in which you want future virtual
11526     machine instances to be placed. To query placement group Id, please use Virtual Machine Scale
11527     Set VMs - Get API. If not provided, the platform will choose one with maximum number of virtual
11528     machine instances.
11529    :type active_placement_group_id: str
11530    """
11531
11532    _attribute_map = {
11533        'active_placement_group_id': {'key': 'activePlacementGroupId', 'type': 'str'},
11534    }
11535
11536    def __init__(
11537        self,
11538        *,
11539        active_placement_group_id: Optional[str] = None,
11540        **kwargs
11541    ):
11542        super(VMScaleSetConvertToSinglePlacementGroupInput, self).__init__(**kwargs)
11543        self.active_placement_group_id = active_placement_group_id
11544
11545
11546class WindowsConfiguration(msrest.serialization.Model):
11547    """Specifies Windows operating system settings on the virtual machine.
11548
11549    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
11550     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
11551     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
11552     the VM so that extensions can be added to the VM later.
11553    :type provision_vm_agent: bool
11554    :param enable_automatic_updates: Indicates whether Automatic Updates is enabled for the Windows
11555     virtual machine. Default value is true. :code:`<br>`:code:`<br>` For virtual machine scale
11556     sets, this property can be updated and updates will take effect on OS reprovisioning.
11557    :type enable_automatic_updates: bool
11558    :param time_zone: Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".
11559     :code:`<br>`:code:`<br>` Possible values can be `TimeZoneInfo.Id
11560     <https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.id?#System_TimeZoneInfo_Id>`_
11561     value from time zones returned by `TimeZoneInfo.GetSystemTimeZones
11562     <https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.getsystemtimezones>`_.
11563    :type time_zone: str
11564    :param additional_unattend_content: Specifies additional base-64 encoded XML formatted
11565     information that can be included in the Unattend.xml file, which is used by Windows Setup.
11566    :type additional_unattend_content:
11567     list[~azure.mgmt.compute.v2020_12_01.models.AdditionalUnattendContent]
11568    :param patch_settings: [Preview Feature] Specifies settings related to VM Guest Patching on
11569     Windows.
11570    :type patch_settings: ~azure.mgmt.compute.v2020_12_01.models.PatchSettings
11571    :param win_rm: Specifies the Windows Remote Management listeners. This enables remote Windows
11572     PowerShell.
11573    :type win_rm: ~azure.mgmt.compute.v2020_12_01.models.WinRMConfiguration
11574    """
11575
11576    _attribute_map = {
11577        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
11578        'enable_automatic_updates': {'key': 'enableAutomaticUpdates', 'type': 'bool'},
11579        'time_zone': {'key': 'timeZone', 'type': 'str'},
11580        'additional_unattend_content': {'key': 'additionalUnattendContent', 'type': '[AdditionalUnattendContent]'},
11581        'patch_settings': {'key': 'patchSettings', 'type': 'PatchSettings'},
11582        'win_rm': {'key': 'winRM', 'type': 'WinRMConfiguration'},
11583    }
11584
11585    def __init__(
11586        self,
11587        *,
11588        provision_vm_agent: Optional[bool] = None,
11589        enable_automatic_updates: Optional[bool] = None,
11590        time_zone: Optional[str] = None,
11591        additional_unattend_content: Optional[List["AdditionalUnattendContent"]] = None,
11592        patch_settings: Optional["PatchSettings"] = None,
11593        win_rm: Optional["WinRMConfiguration"] = None,
11594        **kwargs
11595    ):
11596        super(WindowsConfiguration, self).__init__(**kwargs)
11597        self.provision_vm_agent = provision_vm_agent
11598        self.enable_automatic_updates = enable_automatic_updates
11599        self.time_zone = time_zone
11600        self.additional_unattend_content = additional_unattend_content
11601        self.patch_settings = patch_settings
11602        self.win_rm = win_rm
11603
11604
11605class WindowsParameters(msrest.serialization.Model):
11606    """Input for InstallPatches on a Windows VM, as directly received by the API.
11607
11608    :param classifications_to_include: The update classifications to select when installing patches
11609     for Windows.
11610    :type classifications_to_include: list[str or
11611     ~azure.mgmt.compute.v2020_12_01.models.VMGuestPatchClassificationWindows]
11612    :param kb_numbers_to_include: Kbs to include in the patch operation.
11613    :type kb_numbers_to_include: list[str]
11614    :param kb_numbers_to_exclude: Kbs to exclude in the patch operation.
11615    :type kb_numbers_to_exclude: list[str]
11616    :param exclude_kbs_requiring_reboot: Filters out Kbs that don't have an
11617     InstallationRebootBehavior of 'NeverReboots' when this is set to true.
11618    :type exclude_kbs_requiring_reboot: bool
11619    :param max_patch_publish_date: This is used to install patches that were published on or before
11620     this given max published date.
11621    :type max_patch_publish_date: ~datetime.datetime
11622    """
11623
11624    _attribute_map = {
11625        'classifications_to_include': {'key': 'classificationsToInclude', 'type': '[str]'},
11626        'kb_numbers_to_include': {'key': 'kbNumbersToInclude', 'type': '[str]'},
11627        'kb_numbers_to_exclude': {'key': 'kbNumbersToExclude', 'type': '[str]'},
11628        'exclude_kbs_requiring_reboot': {'key': 'excludeKbsRequiringReboot', 'type': 'bool'},
11629        'max_patch_publish_date': {'key': 'maxPatchPublishDate', 'type': 'iso-8601'},
11630    }
11631
11632    def __init__(
11633        self,
11634        *,
11635        classifications_to_include: Optional[List[Union[str, "VMGuestPatchClassificationWindows"]]] = None,
11636        kb_numbers_to_include: Optional[List[str]] = None,
11637        kb_numbers_to_exclude: Optional[List[str]] = None,
11638        exclude_kbs_requiring_reboot: Optional[bool] = None,
11639        max_patch_publish_date: Optional[datetime.datetime] = None,
11640        **kwargs
11641    ):
11642        super(WindowsParameters, self).__init__(**kwargs)
11643        self.classifications_to_include = classifications_to_include
11644        self.kb_numbers_to_include = kb_numbers_to_include
11645        self.kb_numbers_to_exclude = kb_numbers_to_exclude
11646        self.exclude_kbs_requiring_reboot = exclude_kbs_requiring_reboot
11647        self.max_patch_publish_date = max_patch_publish_date
11648
11649
11650class WinRMConfiguration(msrest.serialization.Model):
11651    """Describes Windows Remote Management configuration of the VM.
11652
11653    :param listeners: The list of Windows Remote Management listeners.
11654    :type listeners: list[~azure.mgmt.compute.v2020_12_01.models.WinRMListener]
11655    """
11656
11657    _attribute_map = {
11658        'listeners': {'key': 'listeners', 'type': '[WinRMListener]'},
11659    }
11660
11661    def __init__(
11662        self,
11663        *,
11664        listeners: Optional[List["WinRMListener"]] = None,
11665        **kwargs
11666    ):
11667        super(WinRMConfiguration, self).__init__(**kwargs)
11668        self.listeners = listeners
11669
11670
11671class WinRMListener(msrest.serialization.Model):
11672    """Describes Protocol and thumbprint of Windows Remote Management listener.
11673
11674    :param protocol: Specifies the protocol of WinRM listener. :code:`<br>`:code:`<br>` Possible
11675     values are: :code:`<br>`\ **http** :code:`<br>`:code:`<br>` **https**. Possible values include:
11676     "Http", "Https".
11677    :type protocol: str or ~azure.mgmt.compute.v2020_12_01.models.ProtocolTypes
11678    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
11679     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
11680     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
11681     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
11682     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
11683     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
11684     "password":":code:`<pfx-file-password>`":code:`<br>`}.
11685    :type certificate_url: str
11686    """
11687
11688    _attribute_map = {
11689        'protocol': {'key': 'protocol', 'type': 'str'},
11690        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
11691    }
11692
11693    def __init__(
11694        self,
11695        *,
11696        protocol: Optional[Union[str, "ProtocolTypes"]] = None,
11697        certificate_url: Optional[str] = None,
11698        **kwargs
11699    ):
11700        super(WinRMListener, self).__init__(**kwargs)
11701        self.protocol = protocol
11702        self.certificate_url = certificate_url
11703