1# coding=utf-8
2# --------------------------------------------------------------------------
3# Copyright (c) Microsoft Corporation. All rights reserved.
4# Licensed under the MIT License. See License.txt in the project root for license information.
5# Code generated by Microsoft (R) AutoRest Code Generator.
6# Changes may cause incorrect behavior and will be lost if the code is regenerated.
7# --------------------------------------------------------------------------
8
9import datetime
10from typing import Any, Dict, List, Optional, Union
11
12import msrest.serialization
13
14from ._compute_management_client_enums import *
15
16
17class AccessUri(msrest.serialization.Model):
18    """A disk access SAS uri.
19
20    Variables are only populated by the server, and will be ignored when sending a request.
21
22    :ivar access_sas: A SAS uri for accessing a disk.
23    :vartype access_sas: str
24    """
25
26    _validation = {
27        'access_sas': {'readonly': True},
28    }
29
30    _attribute_map = {
31        'access_sas': {'key': 'accessSAS', 'type': 'str'},
32    }
33
34    def __init__(
35        self,
36        **kwargs
37    ):
38        super(AccessUri, self).__init__(**kwargs)
39        self.access_sas = None
40
41
42class AdditionalCapabilities(msrest.serialization.Model):
43    """Enables or disables a capability on the virtual machine or virtual machine scale set.
44
45    :param ultra_ssd_enabled: The flag that enables or disables a capability to have one or more
46     managed data disks with UltraSSD_LRS storage account type on the VM or VMSS. Managed disks with
47     storage account type UltraSSD_LRS can be added to a virtual machine or virtual machine scale
48     set only if this property is enabled.
49    :type ultra_ssd_enabled: bool
50    """
51
52    _attribute_map = {
53        'ultra_ssd_enabled': {'key': 'ultraSSDEnabled', 'type': 'bool'},
54    }
55
56    def __init__(
57        self,
58        *,
59        ultra_ssd_enabled: Optional[bool] = None,
60        **kwargs
61    ):
62        super(AdditionalCapabilities, self).__init__(**kwargs)
63        self.ultra_ssd_enabled = ultra_ssd_enabled
64
65
66class AdditionalUnattendContent(msrest.serialization.Model):
67    """Specifies additional XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. Contents are defined by setting name, component name, and the pass in which the content is applied.
68
69    :param pass_name: The pass name. Currently, the only allowable value is OobeSystem. The only
70     acceptable values to pass in are None and "OobeSystem". The default value is None.
71    :type pass_name: str
72    :param component_name: The component name. Currently, the only allowable value is
73     Microsoft-Windows-Shell-Setup. The only acceptable values to pass in are None and
74     "Microsoft-Windows-Shell-Setup". The default value is None.
75    :type component_name: str
76    :param setting_name: Specifies the name of the setting to which the content applies. Possible
77     values are: FirstLogonCommands and AutoLogon. Possible values include: "AutoLogon",
78     "FirstLogonCommands".
79    :type setting_name: str or ~azure.mgmt.compute.v2019_03_01.models.SettingNames
80    :param content: Specifies the XML formatted content that is added to the unattend.xml file for
81     the specified path and component. The XML must be less than 4KB and must include the root
82     element for the setting or feature that is being inserted.
83    :type content: str
84    """
85
86    _attribute_map = {
87        'pass_name': {'key': 'passName', 'type': 'str'},
88        'component_name': {'key': 'componentName', 'type': 'str'},
89        'setting_name': {'key': 'settingName', 'type': 'str'},
90        'content': {'key': 'content', 'type': 'str'},
91    }
92
93    def __init__(
94        self,
95        *,
96        pass_name: Optional[str] = None,
97        component_name: Optional[str] = None,
98        setting_name: Optional[Union[str, "SettingNames"]] = None,
99        content: Optional[str] = None,
100        **kwargs
101    ):
102        super(AdditionalUnattendContent, self).__init__(**kwargs)
103        self.pass_name = pass_name
104        self.component_name = component_name
105        self.setting_name = setting_name
106        self.content = content
107
108
109class ApiEntityReference(msrest.serialization.Model):
110    """The API entity reference.
111
112    :param id: The ARM resource id in the form of
113     /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/...
114    :type id: str
115    """
116
117    _attribute_map = {
118        'id': {'key': 'id', 'type': 'str'},
119    }
120
121    def __init__(
122        self,
123        *,
124        id: Optional[str] = None,
125        **kwargs
126    ):
127        super(ApiEntityReference, self).__init__(**kwargs)
128        self.id = id
129
130
131class ApiError(msrest.serialization.Model):
132    """Api error.
133
134    :param details: The Api error details.
135    :type details: list[~azure.mgmt.compute.v2019_03_01.models.ApiErrorBase]
136    :param innererror: The Api inner error.
137    :type innererror: ~azure.mgmt.compute.v2019_03_01.models.InnerError
138    :param code: The error code.
139    :type code: str
140    :param target: The target of the particular error.
141    :type target: str
142    :param message: The error message.
143    :type message: str
144    """
145
146    _attribute_map = {
147        'details': {'key': 'details', 'type': '[ApiErrorBase]'},
148        'innererror': {'key': 'innererror', 'type': 'InnerError'},
149        'code': {'key': 'code', 'type': 'str'},
150        'target': {'key': 'target', 'type': 'str'},
151        'message': {'key': 'message', 'type': 'str'},
152    }
153
154    def __init__(
155        self,
156        *,
157        details: Optional[List["ApiErrorBase"]] = None,
158        innererror: Optional["InnerError"] = None,
159        code: Optional[str] = None,
160        target: Optional[str] = None,
161        message: Optional[str] = None,
162        **kwargs
163    ):
164        super(ApiError, self).__init__(**kwargs)
165        self.details = details
166        self.innererror = innererror
167        self.code = code
168        self.target = target
169        self.message = message
170
171
172class ApiErrorBase(msrest.serialization.Model):
173    """Api error base.
174
175    :param code: The error code.
176    :type code: str
177    :param target: The target of the particular error.
178    :type target: str
179    :param message: The error message.
180    :type message: str
181    """
182
183    _attribute_map = {
184        'code': {'key': 'code', 'type': 'str'},
185        'target': {'key': 'target', 'type': 'str'},
186        'message': {'key': 'message', 'type': 'str'},
187    }
188
189    def __init__(
190        self,
191        *,
192        code: Optional[str] = None,
193        target: Optional[str] = None,
194        message: Optional[str] = None,
195        **kwargs
196    ):
197        super(ApiErrorBase, self).__init__(**kwargs)
198        self.code = code
199        self.target = target
200        self.message = message
201
202
203class AutomaticOSUpgradePolicy(msrest.serialization.Model):
204    """The configuration parameters used for performing automatic OS upgrade.
205
206    :param enable_automatic_os_upgrade: Indicates whether OS upgrades should automatically be
207     applied to scale set instances in a rolling fashion when a newer version of the OS image
208     becomes available. Default value is false. :code:`<br>`:code:`<br>` If this is set to true for
209     Windows based scale sets, `enableAutomaticUpdates
210     <https://docs.microsoft.com/dotnet/api/microsoft.azure.management.compute.models.windowsconfiguration.enableautomaticupdates?view=azure-dotnet>`_
211     is automatically set to false and cannot be set to true.
212    :type enable_automatic_os_upgrade: bool
213    :param disable_automatic_rollback: Whether OS image rollback feature should be disabled.
214     Default value is false.
215    :type disable_automatic_rollback: bool
216    """
217
218    _attribute_map = {
219        'enable_automatic_os_upgrade': {'key': 'enableAutomaticOSUpgrade', 'type': 'bool'},
220        'disable_automatic_rollback': {'key': 'disableAutomaticRollback', 'type': 'bool'},
221    }
222
223    def __init__(
224        self,
225        *,
226        enable_automatic_os_upgrade: Optional[bool] = None,
227        disable_automatic_rollback: Optional[bool] = None,
228        **kwargs
229    ):
230        super(AutomaticOSUpgradePolicy, self).__init__(**kwargs)
231        self.enable_automatic_os_upgrade = enable_automatic_os_upgrade
232        self.disable_automatic_rollback = disable_automatic_rollback
233
234
235class AutomaticOSUpgradeProperties(msrest.serialization.Model):
236    """Describes automatic OS upgrade properties on the image.
237
238    All required parameters must be populated in order to send to Azure.
239
240    :param automatic_os_upgrade_supported: Required. Specifies whether automatic OS upgrade is
241     supported on the image.
242    :type automatic_os_upgrade_supported: bool
243    """
244
245    _validation = {
246        'automatic_os_upgrade_supported': {'required': True},
247    }
248
249    _attribute_map = {
250        'automatic_os_upgrade_supported': {'key': 'automaticOSUpgradeSupported', 'type': 'bool'},
251    }
252
253    def __init__(
254        self,
255        *,
256        automatic_os_upgrade_supported: bool,
257        **kwargs
258    ):
259        super(AutomaticOSUpgradeProperties, self).__init__(**kwargs)
260        self.automatic_os_upgrade_supported = automatic_os_upgrade_supported
261
262
263class AutomaticRepairsPolicy(msrest.serialization.Model):
264    """Specifies the configuration parameters for automatic repairs on the virtual machine scale set.
265
266    :param enabled: Specifies whether automatic repairs should be enabled on the virtual machine
267     scale set. The default value is false.
268    :type enabled: bool
269    :param grace_period: The amount of time for which automatic repairs are suspended due to a
270     state change on VM. The grace time starts after the state change has completed. This helps
271     avoid premature or accidental repairs. The time duration should be specified in ISO 8601
272     format. The minimum allowed grace period is 30 minutes (PT30M), which is also the default
273     value. The maximum allowed grace period is 90 minutes (PT90M).
274    :type grace_period: str
275    """
276
277    _attribute_map = {
278        'enabled': {'key': 'enabled', 'type': 'bool'},
279        'grace_period': {'key': 'gracePeriod', 'type': 'str'},
280    }
281
282    def __init__(
283        self,
284        *,
285        enabled: Optional[bool] = None,
286        grace_period: Optional[str] = None,
287        **kwargs
288    ):
289        super(AutomaticRepairsPolicy, self).__init__(**kwargs)
290        self.enabled = enabled
291        self.grace_period = grace_period
292
293
294class Resource(msrest.serialization.Model):
295    """The Resource model definition.
296
297    Variables are only populated by the server, and will be ignored when sending a request.
298
299    All required parameters must be populated in order to send to Azure.
300
301    :ivar id: Resource Id.
302    :vartype id: str
303    :ivar name: Resource name.
304    :vartype name: str
305    :ivar type: Resource type.
306    :vartype type: str
307    :param location: Required. Resource location.
308    :type location: str
309    :param tags: A set of tags. Resource tags.
310    :type tags: dict[str, str]
311    """
312
313    _validation = {
314        'id': {'readonly': True},
315        'name': {'readonly': True},
316        'type': {'readonly': True},
317        'location': {'required': True},
318    }
319
320    _attribute_map = {
321        'id': {'key': 'id', 'type': 'str'},
322        'name': {'key': 'name', 'type': 'str'},
323        'type': {'key': 'type', 'type': 'str'},
324        'location': {'key': 'location', 'type': 'str'},
325        'tags': {'key': 'tags', 'type': '{str}'},
326    }
327
328    def __init__(
329        self,
330        *,
331        location: str,
332        tags: Optional[Dict[str, str]] = None,
333        **kwargs
334    ):
335        super(Resource, self).__init__(**kwargs)
336        self.id = None
337        self.name = None
338        self.type = None
339        self.location = location
340        self.tags = tags
341
342
343class AvailabilitySet(Resource):
344    """Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see `Manage the availability of virtual machines <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_. :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned maintenance for virtual machines in Azure <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_ :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.
345
346    Variables are only populated by the server, and will be ignored when sending a request.
347
348    All required parameters must be populated in order to send to Azure.
349
350    :ivar id: Resource Id.
351    :vartype id: str
352    :ivar name: Resource name.
353    :vartype name: str
354    :ivar type: Resource type.
355    :vartype type: str
356    :param location: Required. Resource location.
357    :type location: str
358    :param tags: A set of tags. Resource tags.
359    :type tags: dict[str, str]
360    :param sku: Sku of the availability set, only name is required to be set. See
361     AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with
362     managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is
363     'Classic'.
364    :type sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
365    :param platform_update_domain_count: Update Domain count.
366    :type platform_update_domain_count: int
367    :param platform_fault_domain_count: Fault Domain count.
368    :type platform_fault_domain_count: int
369    :param virtual_machines: A list of references to all virtual machines in the availability set.
370    :type virtual_machines: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
371    :param proximity_placement_group: Specifies information about the proximity placement group
372     that the availability set should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
373     2018-04-01.
374    :type proximity_placement_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
375    :ivar statuses: The resource status information.
376    :vartype statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
377    """
378
379    _validation = {
380        'id': {'readonly': True},
381        'name': {'readonly': True},
382        'type': {'readonly': True},
383        'location': {'required': True},
384        'statuses': {'readonly': True},
385    }
386
387    _attribute_map = {
388        'id': {'key': 'id', 'type': 'str'},
389        'name': {'key': 'name', 'type': 'str'},
390        'type': {'key': 'type', 'type': 'str'},
391        'location': {'key': 'location', 'type': 'str'},
392        'tags': {'key': 'tags', 'type': '{str}'},
393        'sku': {'key': 'sku', 'type': 'Sku'},
394        'platform_update_domain_count': {'key': 'properties.platformUpdateDomainCount', 'type': 'int'},
395        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
396        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
397        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
398        'statuses': {'key': 'properties.statuses', 'type': '[InstanceViewStatus]'},
399    }
400
401    def __init__(
402        self,
403        *,
404        location: str,
405        tags: Optional[Dict[str, str]] = None,
406        sku: Optional["Sku"] = None,
407        platform_update_domain_count: Optional[int] = None,
408        platform_fault_domain_count: Optional[int] = None,
409        virtual_machines: Optional[List["SubResource"]] = None,
410        proximity_placement_group: Optional["SubResource"] = None,
411        **kwargs
412    ):
413        super(AvailabilitySet, self).__init__(location=location, tags=tags, **kwargs)
414        self.sku = sku
415        self.platform_update_domain_count = platform_update_domain_count
416        self.platform_fault_domain_count = platform_fault_domain_count
417        self.virtual_machines = virtual_machines
418        self.proximity_placement_group = proximity_placement_group
419        self.statuses = None
420
421
422class AvailabilitySetListResult(msrest.serialization.Model):
423    """The List Availability Set operation response.
424
425    All required parameters must be populated in order to send to Azure.
426
427    :param value: Required. The list of availability sets.
428    :type value: list[~azure.mgmt.compute.v2019_03_01.models.AvailabilitySet]
429    :param next_link: The URI to fetch the next page of AvailabilitySets. Call ListNext() with this
430     URI to fetch the next page of AvailabilitySets.
431    :type next_link: str
432    """
433
434    _validation = {
435        'value': {'required': True},
436    }
437
438    _attribute_map = {
439        'value': {'key': 'value', 'type': '[AvailabilitySet]'},
440        'next_link': {'key': 'nextLink', 'type': 'str'},
441    }
442
443    def __init__(
444        self,
445        *,
446        value: List["AvailabilitySet"],
447        next_link: Optional[str] = None,
448        **kwargs
449    ):
450        super(AvailabilitySetListResult, self).__init__(**kwargs)
451        self.value = value
452        self.next_link = next_link
453
454
455class UpdateResource(msrest.serialization.Model):
456    """The Update Resource model definition.
457
458    :param tags: A set of tags. Resource tags.
459    :type tags: dict[str, str]
460    """
461
462    _attribute_map = {
463        'tags': {'key': 'tags', 'type': '{str}'},
464    }
465
466    def __init__(
467        self,
468        *,
469        tags: Optional[Dict[str, str]] = None,
470        **kwargs
471    ):
472        super(UpdateResource, self).__init__(**kwargs)
473        self.tags = tags
474
475
476class AvailabilitySetUpdate(UpdateResource):
477    """Specifies information about the availability set that the virtual machine should be assigned to. Only tags may be updated.
478
479    Variables are only populated by the server, and will be ignored when sending a request.
480
481    :param tags: A set of tags. Resource tags.
482    :type tags: dict[str, str]
483    :param sku: Sku of the availability set.
484    :type sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
485    :param platform_update_domain_count: Update Domain count.
486    :type platform_update_domain_count: int
487    :param platform_fault_domain_count: Fault Domain count.
488    :type platform_fault_domain_count: int
489    :param virtual_machines: A list of references to all virtual machines in the availability set.
490    :type virtual_machines: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
491    :param proximity_placement_group: Specifies information about the proximity placement group
492     that the availability set should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
493     2018-04-01.
494    :type proximity_placement_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
495    :ivar statuses: The resource status information.
496    :vartype statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
497    """
498
499    _validation = {
500        'statuses': {'readonly': True},
501    }
502
503    _attribute_map = {
504        'tags': {'key': 'tags', 'type': '{str}'},
505        'sku': {'key': 'sku', 'type': 'Sku'},
506        'platform_update_domain_count': {'key': 'properties.platformUpdateDomainCount', 'type': 'int'},
507        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
508        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
509        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
510        'statuses': {'key': 'properties.statuses', 'type': '[InstanceViewStatus]'},
511    }
512
513    def __init__(
514        self,
515        *,
516        tags: Optional[Dict[str, str]] = None,
517        sku: Optional["Sku"] = None,
518        platform_update_domain_count: Optional[int] = None,
519        platform_fault_domain_count: Optional[int] = None,
520        virtual_machines: Optional[List["SubResource"]] = None,
521        proximity_placement_group: Optional["SubResource"] = None,
522        **kwargs
523    ):
524        super(AvailabilitySetUpdate, self).__init__(tags=tags, **kwargs)
525        self.sku = sku
526        self.platform_update_domain_count = platform_update_domain_count
527        self.platform_fault_domain_count = platform_fault_domain_count
528        self.virtual_machines = virtual_machines
529        self.proximity_placement_group = proximity_placement_group
530        self.statuses = None
531
532
533class BillingProfile(msrest.serialization.Model):
534    """Specifies the billing related details of a Azure Spot VM or VMSS. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
535
536    :param max_price: Specifies the maximum price you are willing to pay for a Azure Spot VM/VMSS.
537     This price is in US Dollars. :code:`<br>`:code:`<br>` This price will be compared with the
538     current Azure Spot price for the VM size. Also, the prices are compared at the time of
539     create/update of Azure Spot VM/VMSS and the operation will only succeed if  the maxPrice is
540     greater than the current Azure Spot price. :code:`<br>`:code:`<br>` The maxPrice will also be
541     used for evicting a Azure Spot VM/VMSS if the current Azure Spot price goes beyond the maxPrice
542     after creation of VM/VMSS. :code:`<br>`:code:`<br>` Possible values are:
543     :code:`<br>`:code:`<br>` - Any decimal value greater than zero. Example: 0.01538
544     :code:`<br>`:code:`<br>` -1 – indicates default price to be up-to on-demand.
545     :code:`<br>`:code:`<br>` You can set the maxPrice to -1 to indicate that the Azure Spot VM/VMSS
546     should not be evicted for price reasons. Also, the default max price is -1 if it is not
547     provided by you. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
548    :type max_price: float
549    """
550
551    _attribute_map = {
552        'max_price': {'key': 'maxPrice', 'type': 'float'},
553    }
554
555    def __init__(
556        self,
557        *,
558        max_price: Optional[float] = None,
559        **kwargs
560    ):
561        super(BillingProfile, self).__init__(**kwargs)
562        self.max_price = max_price
563
564
565class BootDiagnostics(msrest.serialization.Model):
566    """Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a screenshot of the VM from the hypervisor.
567
568    :param enabled: Whether boot diagnostics should be enabled on the Virtual Machine.
569    :type enabled: bool
570    :param storage_uri: Uri of the storage account to use for placing the console output and
571     screenshot.
572    :type storage_uri: str
573    """
574
575    _attribute_map = {
576        'enabled': {'key': 'enabled', 'type': 'bool'},
577        'storage_uri': {'key': 'storageUri', 'type': 'str'},
578    }
579
580    def __init__(
581        self,
582        *,
583        enabled: Optional[bool] = None,
584        storage_uri: Optional[str] = None,
585        **kwargs
586    ):
587        super(BootDiagnostics, self).__init__(**kwargs)
588        self.enabled = enabled
589        self.storage_uri = storage_uri
590
591
592class BootDiagnosticsInstanceView(msrest.serialization.Model):
593    """The instance view of a virtual machine boot diagnostics.
594
595    Variables are only populated by the server, and will be ignored when sending a request.
596
597    :ivar console_screenshot_blob_uri: The console screenshot blob URI.
598    :vartype console_screenshot_blob_uri: str
599    :ivar serial_console_log_blob_uri: The Linux serial console log blob Uri.
600    :vartype serial_console_log_blob_uri: str
601    :ivar status: The boot diagnostics status information for the VM. :code:`<br>`:code:`<br>`
602     NOTE: It will be set only if there are errors encountered in enabling boot diagnostics.
603    :vartype status: ~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus
604    """
605
606    _validation = {
607        'console_screenshot_blob_uri': {'readonly': True},
608        'serial_console_log_blob_uri': {'readonly': True},
609        'status': {'readonly': True},
610    }
611
612    _attribute_map = {
613        'console_screenshot_blob_uri': {'key': 'consoleScreenshotBlobUri', 'type': 'str'},
614        'serial_console_log_blob_uri': {'key': 'serialConsoleLogBlobUri', 'type': 'str'},
615        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
616    }
617
618    def __init__(
619        self,
620        **kwargs
621    ):
622        super(BootDiagnosticsInstanceView, self).__init__(**kwargs)
623        self.console_screenshot_blob_uri = None
624        self.serial_console_log_blob_uri = None
625        self.status = None
626
627
628class ComputeOperationListResult(msrest.serialization.Model):
629    """The List Compute Operation operation response.
630
631    Variables are only populated by the server, and will be ignored when sending a request.
632
633    :ivar value: The list of compute operations.
634    :vartype value: list[~azure.mgmt.compute.v2019_03_01.models.ComputeOperationValue]
635    """
636
637    _validation = {
638        'value': {'readonly': True},
639    }
640
641    _attribute_map = {
642        'value': {'key': 'value', 'type': '[ComputeOperationValue]'},
643    }
644
645    def __init__(
646        self,
647        **kwargs
648    ):
649        super(ComputeOperationListResult, self).__init__(**kwargs)
650        self.value = None
651
652
653class ComputeOperationValue(msrest.serialization.Model):
654    """Describes the properties of a Compute Operation value.
655
656    Variables are only populated by the server, and will be ignored when sending a request.
657
658    :ivar origin: The origin of the compute operation.
659    :vartype origin: str
660    :ivar name: The name of the compute operation.
661    :vartype name: str
662    :ivar operation: The display name of the compute operation.
663    :vartype operation: str
664    :ivar resource: The display name of the resource the operation applies to.
665    :vartype resource: str
666    :ivar description: The description of the operation.
667    :vartype description: str
668    :ivar provider: The resource provider for the operation.
669    :vartype provider: str
670    """
671
672    _validation = {
673        'origin': {'readonly': True},
674        'name': {'readonly': True},
675        'operation': {'readonly': True},
676        'resource': {'readonly': True},
677        'description': {'readonly': True},
678        'provider': {'readonly': True},
679    }
680
681    _attribute_map = {
682        'origin': {'key': 'origin', 'type': 'str'},
683        'name': {'key': 'name', 'type': 'str'},
684        'operation': {'key': 'display.operation', 'type': 'str'},
685        'resource': {'key': 'display.resource', 'type': 'str'},
686        'description': {'key': 'display.description', 'type': 'str'},
687        'provider': {'key': 'display.provider', 'type': 'str'},
688    }
689
690    def __init__(
691        self,
692        **kwargs
693    ):
694        super(ComputeOperationValue, self).__init__(**kwargs)
695        self.origin = None
696        self.name = None
697        self.operation = None
698        self.resource = None
699        self.description = None
700        self.provider = None
701
702
703class CreationData(msrest.serialization.Model):
704    """Data used when creating a disk.
705
706    Variables are only populated by the server, and will be ignored when sending a request.
707
708    All required parameters must be populated in order to send to Azure.
709
710    :param create_option: Required. This enumerates the possible sources of a disk's creation.
711     Possible values include: "Empty", "Attach", "FromImage", "Import", "Copy", "Restore", "Upload".
712    :type create_option: str or ~azure.mgmt.compute.v2019_03_01.models.DiskCreateOption
713    :param storage_account_id: If createOption is Import, the Azure Resource Manager identifier of
714     the storage account containing the blob to import as a disk. Required only if the blob is in a
715     different subscription.
716    :type storage_account_id: str
717    :param image_reference: Disk source information.
718    :type image_reference: ~azure.mgmt.compute.v2019_03_01.models.ImageDiskReference
719    :param source_uri: If createOption is Import, this is the URI of a blob to be imported into a
720     managed disk.
721    :type source_uri: str
722    :param source_resource_id: If createOption is Copy, this is the ARM id of the source snapshot
723     or disk.
724    :type source_resource_id: str
725    :ivar source_unique_id: If this field is set, this is the unique id identifying the source of
726     this resource.
727    :vartype source_unique_id: str
728    :param upload_size_bytes: If createOption is Upload, this is the size of the contents of the
729     upload including the VHD footer. This value should be between 20972032 (20 MiB + 512 bytes for
730     the VHD footer) and 35183298347520 bytes (32 TiB + 512 bytes for the VHD footer).
731    :type upload_size_bytes: long
732    """
733
734    _validation = {
735        'create_option': {'required': True},
736        'source_unique_id': {'readonly': True},
737    }
738
739    _attribute_map = {
740        'create_option': {'key': 'createOption', 'type': 'str'},
741        'storage_account_id': {'key': 'storageAccountId', 'type': 'str'},
742        'image_reference': {'key': 'imageReference', 'type': 'ImageDiskReference'},
743        'source_uri': {'key': 'sourceUri', 'type': 'str'},
744        'source_resource_id': {'key': 'sourceResourceId', 'type': 'str'},
745        'source_unique_id': {'key': 'sourceUniqueId', 'type': 'str'},
746        'upload_size_bytes': {'key': 'uploadSizeBytes', 'type': 'long'},
747    }
748
749    def __init__(
750        self,
751        *,
752        create_option: Union[str, "DiskCreateOption"],
753        storage_account_id: Optional[str] = None,
754        image_reference: Optional["ImageDiskReference"] = None,
755        source_uri: Optional[str] = None,
756        source_resource_id: Optional[str] = None,
757        upload_size_bytes: Optional[int] = None,
758        **kwargs
759    ):
760        super(CreationData, self).__init__(**kwargs)
761        self.create_option = create_option
762        self.storage_account_id = storage_account_id
763        self.image_reference = image_reference
764        self.source_uri = source_uri
765        self.source_resource_id = source_resource_id
766        self.source_unique_id = None
767        self.upload_size_bytes = upload_size_bytes
768
769
770class DataDisk(msrest.serialization.Model):
771    """Describes a data disk.
772
773    All required parameters must be populated in order to send to Azure.
774
775    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
776     identify data disks within the VM and therefore must be unique for each data disk attached to a
777     VM.
778    :type lun: int
779    :param name: The disk name.
780    :type name: str
781    :param vhd: The virtual hard disk.
782    :type vhd: ~azure.mgmt.compute.v2019_03_01.models.VirtualHardDisk
783    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
784     before being attached to the virtual machine. If SourceImage is provided, the destination
785     virtual hard drive must not exist.
786    :type image: ~azure.mgmt.compute.v2019_03_01.models.VirtualHardDisk
787    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
788     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
789     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
790     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
791     "ReadWrite".
792    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
793    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
794     disabled on the disk.
795    :type write_accelerator_enabled: bool
796    :param create_option: Required. Specifies how the virtual machine should be
797     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
798     This value is used when you are using a specialized disk to create the virtual
799     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
800     image to create the virtual machine. If you are using a platform image, you also use the
801     imageReference element described above. If you are using a marketplace image, you  also use the
802     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
803    :type create_option: str or ~azure.mgmt.compute.v2019_03_01.models.DiskCreateOptionTypes
804    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
805     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
806     This value cannot be larger than 1023 GB.
807    :type disk_size_gb: int
808    :param managed_disk: The managed disk parameters.
809    :type managed_disk: ~azure.mgmt.compute.v2019_03_01.models.ManagedDiskParameters
810    :param to_be_detached: Specifies whether the data disk is in process of detachment from the
811     VirtualMachine/VirtualMachineScaleset.
812    :type to_be_detached: bool
813    """
814
815    _validation = {
816        'lun': {'required': True},
817        'create_option': {'required': True},
818    }
819
820    _attribute_map = {
821        'lun': {'key': 'lun', 'type': 'int'},
822        'name': {'key': 'name', 'type': 'str'},
823        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
824        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
825        'caching': {'key': 'caching', 'type': 'str'},
826        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
827        'create_option': {'key': 'createOption', 'type': 'str'},
828        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
829        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
830        'to_be_detached': {'key': 'toBeDetached', 'type': 'bool'},
831    }
832
833    def __init__(
834        self,
835        *,
836        lun: int,
837        create_option: Union[str, "DiskCreateOptionTypes"],
838        name: Optional[str] = None,
839        vhd: Optional["VirtualHardDisk"] = None,
840        image: Optional["VirtualHardDisk"] = None,
841        caching: Optional[Union[str, "CachingTypes"]] = None,
842        write_accelerator_enabled: Optional[bool] = None,
843        disk_size_gb: Optional[int] = None,
844        managed_disk: Optional["ManagedDiskParameters"] = None,
845        to_be_detached: Optional[bool] = None,
846        **kwargs
847    ):
848        super(DataDisk, self).__init__(**kwargs)
849        self.lun = lun
850        self.name = name
851        self.vhd = vhd
852        self.image = image
853        self.caching = caching
854        self.write_accelerator_enabled = write_accelerator_enabled
855        self.create_option = create_option
856        self.disk_size_gb = disk_size_gb
857        self.managed_disk = managed_disk
858        self.to_be_detached = to_be_detached
859
860
861class DataDiskImage(msrest.serialization.Model):
862    """Contains the data disk images information.
863
864    Variables are only populated by the server, and will be ignored when sending a request.
865
866    :ivar lun: Specifies the logical unit number of the data disk. This value is used to identify
867     data disks within the VM and therefore must be unique for each data disk attached to a VM.
868    :vartype lun: int
869    """
870
871    _validation = {
872        'lun': {'readonly': True},
873    }
874
875    _attribute_map = {
876        'lun': {'key': 'lun', 'type': 'int'},
877    }
878
879    def __init__(
880        self,
881        **kwargs
882    ):
883        super(DataDiskImage, self).__init__(**kwargs)
884        self.lun = None
885
886
887class DedicatedHost(Resource):
888    """Specifies information about the Dedicated host.
889
890    Variables are only populated by the server, and will be ignored when sending a request.
891
892    All required parameters must be populated in order to send to Azure.
893
894    :ivar id: Resource Id.
895    :vartype id: str
896    :ivar name: Resource name.
897    :vartype name: str
898    :ivar type: Resource type.
899    :vartype type: str
900    :param location: Required. Resource location.
901    :type location: str
902    :param tags: A set of tags. Resource tags.
903    :type tags: dict[str, str]
904    :param sku: Required. SKU of the dedicated host for Hardware Generation and VM family. Only
905     name is required to be set. List Microsoft.Compute SKUs for a list of possible values.
906    :type sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
907    :param platform_fault_domain: Fault domain of the dedicated host within a dedicated host group.
908    :type platform_fault_domain: int
909    :param auto_replace_on_failure: Specifies whether the dedicated host should be replaced
910     automatically in case of a failure. The value is defaulted to 'true' when not provided.
911    :type auto_replace_on_failure: bool
912    :ivar host_id: A unique id generated and assigned to the dedicated host by the platform.
913     :code:`<br>`:code:`<br>` Does not change throughout the lifetime of the host.
914    :vartype host_id: str
915    :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host.
916    :vartype virtual_machines: list[~azure.mgmt.compute.v2019_03_01.models.SubResourceReadOnly]
917    :param license_type: Specifies the software license type that will be applied to the VMs
918     deployed on the dedicated host. :code:`<br>`:code:`<br>` Possible values are:
919     :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **Windows_Server_Hybrid**
920     :code:`<br>`:code:`<br>` **Windows_Server_Perpetual** :code:`<br>`:code:`<br>` Default:
921     **None**. Possible values include: "None", "Windows_Server_Hybrid", "Windows_Server_Perpetual".
922    :type license_type: str or ~azure.mgmt.compute.v2019_03_01.models.DedicatedHostLicenseTypes
923    :ivar provisioning_time: The date when the host was first provisioned.
924    :vartype provisioning_time: ~datetime.datetime
925    :ivar provisioning_state: The provisioning state, which only appears in the response.
926    :vartype provisioning_state: str
927    :ivar instance_view: The dedicated host instance view.
928    :vartype instance_view: ~azure.mgmt.compute.v2019_03_01.models.DedicatedHostInstanceView
929    """
930
931    _validation = {
932        'id': {'readonly': True},
933        'name': {'readonly': True},
934        'type': {'readonly': True},
935        'location': {'required': True},
936        'sku': {'required': True},
937        'platform_fault_domain': {'maximum': 2, 'minimum': 0},
938        'host_id': {'readonly': True},
939        'virtual_machines': {'readonly': True},
940        'provisioning_time': {'readonly': True},
941        'provisioning_state': {'readonly': True},
942        'instance_view': {'readonly': True},
943    }
944
945    _attribute_map = {
946        'id': {'key': 'id', 'type': 'str'},
947        'name': {'key': 'name', 'type': 'str'},
948        'type': {'key': 'type', 'type': 'str'},
949        'location': {'key': 'location', 'type': 'str'},
950        'tags': {'key': 'tags', 'type': '{str}'},
951        'sku': {'key': 'sku', 'type': 'Sku'},
952        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
953        'auto_replace_on_failure': {'key': 'properties.autoReplaceOnFailure', 'type': 'bool'},
954        'host_id': {'key': 'properties.hostId', 'type': 'str'},
955        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceReadOnly]'},
956        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
957        'provisioning_time': {'key': 'properties.provisioningTime', 'type': 'iso-8601'},
958        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
959        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostInstanceView'},
960    }
961
962    def __init__(
963        self,
964        *,
965        location: str,
966        sku: "Sku",
967        tags: Optional[Dict[str, str]] = None,
968        platform_fault_domain: Optional[int] = None,
969        auto_replace_on_failure: Optional[bool] = None,
970        license_type: Optional[Union[str, "DedicatedHostLicenseTypes"]] = None,
971        **kwargs
972    ):
973        super(DedicatedHost, self).__init__(location=location, tags=tags, **kwargs)
974        self.sku = sku
975        self.platform_fault_domain = platform_fault_domain
976        self.auto_replace_on_failure = auto_replace_on_failure
977        self.host_id = None
978        self.virtual_machines = None
979        self.license_type = license_type
980        self.provisioning_time = None
981        self.provisioning_state = None
982        self.instance_view = None
983
984
985class DedicatedHostAllocatableVM(msrest.serialization.Model):
986    """Represents the dedicated host unutilized capacity in terms of a specific VM size.
987
988    :param vm_size: VM size in terms of which the unutilized capacity is represented.
989    :type vm_size: str
990    :param count: Maximum number of VMs of size vmSize that can fit in the dedicated host's
991     remaining capacity.
992    :type count: float
993    """
994
995    _attribute_map = {
996        'vm_size': {'key': 'vmSize', 'type': 'str'},
997        'count': {'key': 'count', 'type': 'float'},
998    }
999
1000    def __init__(
1001        self,
1002        *,
1003        vm_size: Optional[str] = None,
1004        count: Optional[float] = None,
1005        **kwargs
1006    ):
1007        super(DedicatedHostAllocatableVM, self).__init__(**kwargs)
1008        self.vm_size = vm_size
1009        self.count = count
1010
1011
1012class DedicatedHostAvailableCapacity(msrest.serialization.Model):
1013    """Dedicated host unutilized capacity.
1014
1015    :param allocatable_v_ms: The unutilized capacity of the dedicated host represented in terms of
1016     each VM size that is allowed to be deployed to the dedicated host.
1017    :type allocatable_v_ms: list[~azure.mgmt.compute.v2019_03_01.models.DedicatedHostAllocatableVM]
1018    """
1019
1020    _attribute_map = {
1021        'allocatable_v_ms': {'key': 'allocatableVMs', 'type': '[DedicatedHostAllocatableVM]'},
1022    }
1023
1024    def __init__(
1025        self,
1026        *,
1027        allocatable_v_ms: Optional[List["DedicatedHostAllocatableVM"]] = None,
1028        **kwargs
1029    ):
1030        super(DedicatedHostAvailableCapacity, self).__init__(**kwargs)
1031        self.allocatable_v_ms = allocatable_v_ms
1032
1033
1034class DedicatedHostGroup(Resource):
1035    """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.
1036
1037    Variables are only populated by the server, and will be ignored when sending a request.
1038
1039    All required parameters must be populated in order to send to Azure.
1040
1041    :ivar id: Resource Id.
1042    :vartype id: str
1043    :ivar name: Resource name.
1044    :vartype name: str
1045    :ivar type: Resource type.
1046    :vartype type: str
1047    :param location: Required. Resource location.
1048    :type location: str
1049    :param tags: A set of tags. Resource tags.
1050    :type tags: dict[str, str]
1051    :param zones: Availability Zone to use for this host group. Only single zone is supported. The
1052     zone can be assigned only during creation. If not provided, the group supports all zones in the
1053     region. If provided, enforces each host in the group to be in the same zone.
1054    :type zones: list[str]
1055    :param platform_fault_domain_count: Number of fault domains that the host group can span.
1056    :type platform_fault_domain_count: int
1057    :ivar hosts: A list of references to all dedicated hosts in the dedicated host group.
1058    :vartype hosts: list[~azure.mgmt.compute.v2019_03_01.models.SubResourceReadOnly]
1059    """
1060
1061    _validation = {
1062        'id': {'readonly': True},
1063        'name': {'readonly': True},
1064        'type': {'readonly': True},
1065        'location': {'required': True},
1066        'platform_fault_domain_count': {'maximum': 3, 'minimum': 1},
1067        'hosts': {'readonly': True},
1068    }
1069
1070    _attribute_map = {
1071        'id': {'key': 'id', 'type': 'str'},
1072        'name': {'key': 'name', 'type': 'str'},
1073        'type': {'key': 'type', 'type': 'str'},
1074        'location': {'key': 'location', 'type': 'str'},
1075        'tags': {'key': 'tags', 'type': '{str}'},
1076        'zones': {'key': 'zones', 'type': '[str]'},
1077        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
1078        'hosts': {'key': 'properties.hosts', 'type': '[SubResourceReadOnly]'},
1079    }
1080
1081    def __init__(
1082        self,
1083        *,
1084        location: str,
1085        tags: Optional[Dict[str, str]] = None,
1086        zones: Optional[List[str]] = None,
1087        platform_fault_domain_count: Optional[int] = None,
1088        **kwargs
1089    ):
1090        super(DedicatedHostGroup, self).__init__(location=location, tags=tags, **kwargs)
1091        self.zones = zones
1092        self.platform_fault_domain_count = platform_fault_domain_count
1093        self.hosts = None
1094
1095
1096class DedicatedHostGroupListResult(msrest.serialization.Model):
1097    """The List Dedicated Host Group with resource group response.
1098
1099    All required parameters must be populated in order to send to Azure.
1100
1101    :param value: Required. The list of dedicated host groups.
1102    :type value: list[~azure.mgmt.compute.v2019_03_01.models.DedicatedHostGroup]
1103    :param next_link: The URI to fetch the next page of Dedicated Host Groups. Call ListNext() with
1104     this URI to fetch the next page of Dedicated Host Groups.
1105    :type next_link: str
1106    """
1107
1108    _validation = {
1109        'value': {'required': True},
1110    }
1111
1112    _attribute_map = {
1113        'value': {'key': 'value', 'type': '[DedicatedHostGroup]'},
1114        'next_link': {'key': 'nextLink', 'type': 'str'},
1115    }
1116
1117    def __init__(
1118        self,
1119        *,
1120        value: List["DedicatedHostGroup"],
1121        next_link: Optional[str] = None,
1122        **kwargs
1123    ):
1124        super(DedicatedHostGroupListResult, self).__init__(**kwargs)
1125        self.value = value
1126        self.next_link = next_link
1127
1128
1129class DedicatedHostGroupUpdate(UpdateResource):
1130    """Specifies information about the dedicated host group that the dedicated host should be assigned to. Only tags may be updated.
1131
1132    Variables are only populated by the server, and will be ignored when sending a request.
1133
1134    :param tags: A set of tags. Resource tags.
1135    :type tags: dict[str, str]
1136    :param zones: Availability Zone to use for this host group. Only single zone is supported. The
1137     zone can be assigned only during creation. If not provided, the group supports all zones in the
1138     region. If provided, enforces each host in the group to be in the same zone.
1139    :type zones: list[str]
1140    :param platform_fault_domain_count: Number of fault domains that the host group can span.
1141    :type platform_fault_domain_count: int
1142    :ivar hosts: A list of references to all dedicated hosts in the dedicated host group.
1143    :vartype hosts: list[~azure.mgmt.compute.v2019_03_01.models.SubResourceReadOnly]
1144    """
1145
1146    _validation = {
1147        'platform_fault_domain_count': {'maximum': 3, 'minimum': 1},
1148        'hosts': {'readonly': True},
1149    }
1150
1151    _attribute_map = {
1152        'tags': {'key': 'tags', 'type': '{str}'},
1153        'zones': {'key': 'zones', 'type': '[str]'},
1154        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
1155        'hosts': {'key': 'properties.hosts', 'type': '[SubResourceReadOnly]'},
1156    }
1157
1158    def __init__(
1159        self,
1160        *,
1161        tags: Optional[Dict[str, str]] = None,
1162        zones: Optional[List[str]] = None,
1163        platform_fault_domain_count: Optional[int] = None,
1164        **kwargs
1165    ):
1166        super(DedicatedHostGroupUpdate, self).__init__(tags=tags, **kwargs)
1167        self.zones = zones
1168        self.platform_fault_domain_count = platform_fault_domain_count
1169        self.hosts = None
1170
1171
1172class DedicatedHostInstanceView(msrest.serialization.Model):
1173    """The instance view of a dedicated host.
1174
1175    Variables are only populated by the server, and will be ignored when sending a request.
1176
1177    :ivar asset_id: Specifies the unique id of the dedicated physical machine on which the
1178     dedicated host resides.
1179    :vartype asset_id: str
1180    :param available_capacity: Unutilized capacity of the dedicated host.
1181    :type available_capacity: ~azure.mgmt.compute.v2019_03_01.models.DedicatedHostAvailableCapacity
1182    :param statuses: The resource status information.
1183    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
1184    """
1185
1186    _validation = {
1187        'asset_id': {'readonly': True},
1188    }
1189
1190    _attribute_map = {
1191        'asset_id': {'key': 'assetId', 'type': 'str'},
1192        'available_capacity': {'key': 'availableCapacity', 'type': 'DedicatedHostAvailableCapacity'},
1193        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
1194    }
1195
1196    def __init__(
1197        self,
1198        *,
1199        available_capacity: Optional["DedicatedHostAvailableCapacity"] = None,
1200        statuses: Optional[List["InstanceViewStatus"]] = None,
1201        **kwargs
1202    ):
1203        super(DedicatedHostInstanceView, self).__init__(**kwargs)
1204        self.asset_id = None
1205        self.available_capacity = available_capacity
1206        self.statuses = statuses
1207
1208
1209class DedicatedHostListResult(msrest.serialization.Model):
1210    """The list dedicated host operation response.
1211
1212    All required parameters must be populated in order to send to Azure.
1213
1214    :param value: Required. The list of dedicated hosts.
1215    :type value: list[~azure.mgmt.compute.v2019_03_01.models.DedicatedHost]
1216    :param next_link: The URI to fetch the next page of dedicated hosts. Call ListNext() with this
1217     URI to fetch the next page of dedicated hosts.
1218    :type next_link: str
1219    """
1220
1221    _validation = {
1222        'value': {'required': True},
1223    }
1224
1225    _attribute_map = {
1226        'value': {'key': 'value', 'type': '[DedicatedHost]'},
1227        'next_link': {'key': 'nextLink', 'type': 'str'},
1228    }
1229
1230    def __init__(
1231        self,
1232        *,
1233        value: List["DedicatedHost"],
1234        next_link: Optional[str] = None,
1235        **kwargs
1236    ):
1237        super(DedicatedHostListResult, self).__init__(**kwargs)
1238        self.value = value
1239        self.next_link = next_link
1240
1241
1242class DedicatedHostUpdate(UpdateResource):
1243    """Specifies information about the dedicated host. Only tags, autoReplaceOnFailure and licenseType may be updated.
1244
1245    Variables are only populated by the server, and will be ignored when sending a request.
1246
1247    :param tags: A set of tags. Resource tags.
1248    :type tags: dict[str, str]
1249    :param platform_fault_domain: Fault domain of the dedicated host within a dedicated host group.
1250    :type platform_fault_domain: int
1251    :param auto_replace_on_failure: Specifies whether the dedicated host should be replaced
1252     automatically in case of a failure. The value is defaulted to 'true' when not provided.
1253    :type auto_replace_on_failure: bool
1254    :ivar host_id: A unique id generated and assigned to the dedicated host by the platform.
1255     :code:`<br>`:code:`<br>` Does not change throughout the lifetime of the host.
1256    :vartype host_id: str
1257    :ivar virtual_machines: A list of references to all virtual machines in the Dedicated Host.
1258    :vartype virtual_machines: list[~azure.mgmt.compute.v2019_03_01.models.SubResourceReadOnly]
1259    :param license_type: Specifies the software license type that will be applied to the VMs
1260     deployed on the dedicated host. :code:`<br>`:code:`<br>` Possible values are:
1261     :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **Windows_Server_Hybrid**
1262     :code:`<br>`:code:`<br>` **Windows_Server_Perpetual** :code:`<br>`:code:`<br>` Default:
1263     **None**. Possible values include: "None", "Windows_Server_Hybrid", "Windows_Server_Perpetual".
1264    :type license_type: str or ~azure.mgmt.compute.v2019_03_01.models.DedicatedHostLicenseTypes
1265    :ivar provisioning_time: The date when the host was first provisioned.
1266    :vartype provisioning_time: ~datetime.datetime
1267    :ivar provisioning_state: The provisioning state, which only appears in the response.
1268    :vartype provisioning_state: str
1269    :ivar instance_view: The dedicated host instance view.
1270    :vartype instance_view: ~azure.mgmt.compute.v2019_03_01.models.DedicatedHostInstanceView
1271    """
1272
1273    _validation = {
1274        'platform_fault_domain': {'maximum': 2, 'minimum': 0},
1275        'host_id': {'readonly': True},
1276        'virtual_machines': {'readonly': True},
1277        'provisioning_time': {'readonly': True},
1278        'provisioning_state': {'readonly': True},
1279        'instance_view': {'readonly': True},
1280    }
1281
1282    _attribute_map = {
1283        'tags': {'key': 'tags', 'type': '{str}'},
1284        'platform_fault_domain': {'key': 'properties.platformFaultDomain', 'type': 'int'},
1285        'auto_replace_on_failure': {'key': 'properties.autoReplaceOnFailure', 'type': 'bool'},
1286        'host_id': {'key': 'properties.hostId', 'type': 'str'},
1287        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResourceReadOnly]'},
1288        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
1289        'provisioning_time': {'key': 'properties.provisioningTime', 'type': 'iso-8601'},
1290        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1291        'instance_view': {'key': 'properties.instanceView', 'type': 'DedicatedHostInstanceView'},
1292    }
1293
1294    def __init__(
1295        self,
1296        *,
1297        tags: Optional[Dict[str, str]] = None,
1298        platform_fault_domain: Optional[int] = None,
1299        auto_replace_on_failure: Optional[bool] = None,
1300        license_type: Optional[Union[str, "DedicatedHostLicenseTypes"]] = None,
1301        **kwargs
1302    ):
1303        super(DedicatedHostUpdate, self).__init__(tags=tags, **kwargs)
1304        self.platform_fault_domain = platform_fault_domain
1305        self.auto_replace_on_failure = auto_replace_on_failure
1306        self.host_id = None
1307        self.virtual_machines = None
1308        self.license_type = license_type
1309        self.provisioning_time = None
1310        self.provisioning_state = None
1311        self.instance_view = None
1312
1313
1314class DiagnosticsProfile(msrest.serialization.Model):
1315    """Specifies the boot diagnostic settings state. :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
1316
1317    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
1318     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
1319     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
1320     screenshot of the VM from the hypervisor.
1321    :type boot_diagnostics: ~azure.mgmt.compute.v2019_03_01.models.BootDiagnostics
1322    """
1323
1324    _attribute_map = {
1325        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnostics'},
1326    }
1327
1328    def __init__(
1329        self,
1330        *,
1331        boot_diagnostics: Optional["BootDiagnostics"] = None,
1332        **kwargs
1333    ):
1334        super(DiagnosticsProfile, self).__init__(**kwargs)
1335        self.boot_diagnostics = boot_diagnostics
1336
1337
1338class DiffDiskSettings(msrest.serialization.Model):
1339    """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.
1340
1341    :param option: Specifies the ephemeral disk settings for operating system disk. Possible values
1342     include: "Local".
1343    :type option: str or ~azure.mgmt.compute.v2019_03_01.models.DiffDiskOptions
1344    """
1345
1346    _attribute_map = {
1347        'option': {'key': 'option', 'type': 'str'},
1348    }
1349
1350    def __init__(
1351        self,
1352        *,
1353        option: Optional[Union[str, "DiffDiskOptions"]] = None,
1354        **kwargs
1355    ):
1356        super(DiffDiskSettings, self).__init__(**kwargs)
1357        self.option = option
1358
1359
1360class Disallowed(msrest.serialization.Model):
1361    """Describes the disallowed disk types.
1362
1363    :param disk_types: A list of disk types.
1364    :type disk_types: list[str]
1365    """
1366
1367    _attribute_map = {
1368        'disk_types': {'key': 'diskTypes', 'type': '[str]'},
1369    }
1370
1371    def __init__(
1372        self,
1373        *,
1374        disk_types: Optional[List[str]] = None,
1375        **kwargs
1376    ):
1377        super(Disallowed, self).__init__(**kwargs)
1378        self.disk_types = disk_types
1379
1380
1381class Disk(Resource):
1382    """Disk resource.
1383
1384    Variables are only populated by the server, and will be ignored when sending a request.
1385
1386    All required parameters must be populated in order to send to Azure.
1387
1388    :ivar id: Resource Id.
1389    :vartype id: str
1390    :ivar name: Resource name.
1391    :vartype name: str
1392    :ivar type: Resource type.
1393    :vartype type: str
1394    :param location: Required. Resource location.
1395    :type location: str
1396    :param tags: A set of tags. Resource tags.
1397    :type tags: dict[str, str]
1398    :ivar managed_by: A relative URI containing the ID of the VM that has the disk attached.
1399    :vartype managed_by: str
1400    :param sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, or
1401     UltraSSD_LRS.
1402    :type sku: ~azure.mgmt.compute.v2019_03_01.models.DiskSku
1403    :param zones: The Logical zone list for Disk.
1404    :type zones: list[str]
1405    :ivar time_created: The time when the disk was created.
1406    :vartype time_created: ~datetime.datetime
1407    :param os_type: The Operating System type. Possible values include: "Windows", "Linux".
1408    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
1409    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
1410     disks only. Possible values include: "V1", "V2".
1411    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_03_01.models.HyperVGeneration
1412    :param creation_data: Disk source information. CreationData information cannot be changed after
1413     the disk has been created.
1414    :type creation_data: ~azure.mgmt.compute.v2019_03_01.models.CreationData
1415    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
1416     indicates the size of the disk to create. If this field is present for updates or creation with
1417     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
1418     running VM, and can only increase the disk's size.
1419    :type disk_size_gb: int
1420    :ivar disk_size_bytes: The size of the disk in bytes. This field is read only.
1421    :vartype disk_size_bytes: long
1422    :ivar unique_id: Unique Guid identifying the resource.
1423    :vartype unique_id: str
1424    :param encryption_settings_collection: Encryption settings collection used for Azure Disk
1425     Encryption, can contain multiple encryption settings per disk or snapshot.
1426    :type encryption_settings_collection:
1427     ~azure.mgmt.compute.v2019_03_01.models.EncryptionSettingsCollection
1428    :ivar provisioning_state: The disk provisioning state.
1429    :vartype provisioning_state: str
1430    :param disk_iops_read_write: The number of IOPS allowed for this disk; only settable for
1431     UltraSSD disks. One operation can transfer between 4k and 256k bytes.
1432    :type disk_iops_read_write: long
1433    :param disk_m_bps_read_write: The bandwidth allowed for this disk; only settable for UltraSSD
1434     disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of
1435     10.
1436    :type disk_m_bps_read_write: int
1437    :ivar disk_state: The state of the disk. Possible values include: "Unattached", "Attached",
1438     "Reserved", "ActiveSAS", "ReadyToUpload", "ActiveUpload".
1439    :vartype disk_state: str or ~azure.mgmt.compute.v2019_03_01.models.DiskState
1440    """
1441
1442    _validation = {
1443        'id': {'readonly': True},
1444        'name': {'readonly': True},
1445        'type': {'readonly': True},
1446        'location': {'required': True},
1447        'managed_by': {'readonly': True},
1448        'time_created': {'readonly': True},
1449        'disk_size_bytes': {'readonly': True},
1450        'unique_id': {'readonly': True},
1451        'provisioning_state': {'readonly': True},
1452        'disk_state': {'readonly': True},
1453    }
1454
1455    _attribute_map = {
1456        'id': {'key': 'id', 'type': 'str'},
1457        'name': {'key': 'name', 'type': 'str'},
1458        'type': {'key': 'type', 'type': 'str'},
1459        'location': {'key': 'location', 'type': 'str'},
1460        'tags': {'key': 'tags', 'type': '{str}'},
1461        'managed_by': {'key': 'managedBy', 'type': 'str'},
1462        'sku': {'key': 'sku', 'type': 'DiskSku'},
1463        'zones': {'key': 'zones', 'type': '[str]'},
1464        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
1465        'os_type': {'key': 'properties.osType', 'type': 'str'},
1466        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
1467        'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'},
1468        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
1469        'disk_size_bytes': {'key': 'properties.diskSizeBytes', 'type': 'long'},
1470        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
1471        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
1472        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1473        'disk_iops_read_write': {'key': 'properties.diskIOPSReadWrite', 'type': 'long'},
1474        'disk_m_bps_read_write': {'key': 'properties.diskMBpsReadWrite', 'type': 'int'},
1475        'disk_state': {'key': 'properties.diskState', 'type': 'str'},
1476    }
1477
1478    def __init__(
1479        self,
1480        *,
1481        location: str,
1482        tags: Optional[Dict[str, str]] = None,
1483        sku: Optional["DiskSku"] = None,
1484        zones: Optional[List[str]] = None,
1485        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1486        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
1487        creation_data: Optional["CreationData"] = None,
1488        disk_size_gb: Optional[int] = None,
1489        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
1490        disk_iops_read_write: Optional[int] = None,
1491        disk_m_bps_read_write: Optional[int] = None,
1492        **kwargs
1493    ):
1494        super(Disk, self).__init__(location=location, tags=tags, **kwargs)
1495        self.managed_by = None
1496        self.sku = sku
1497        self.zones = zones
1498        self.time_created = None
1499        self.os_type = os_type
1500        self.hyper_v_generation = hyper_v_generation
1501        self.creation_data = creation_data
1502        self.disk_size_gb = disk_size_gb
1503        self.disk_size_bytes = None
1504        self.unique_id = None
1505        self.encryption_settings_collection = encryption_settings_collection
1506        self.provisioning_state = None
1507        self.disk_iops_read_write = disk_iops_read_write
1508        self.disk_m_bps_read_write = disk_m_bps_read_write
1509        self.disk_state = None
1510
1511
1512class DiskEncryptionSettings(msrest.serialization.Model):
1513    """Describes a Encryption Settings for a Disk.
1514
1515    :param disk_encryption_key: Specifies the location of the disk encryption key, which is a Key
1516     Vault Secret.
1517    :type disk_encryption_key: ~azure.mgmt.compute.v2019_03_01.models.KeyVaultSecretReference
1518    :param key_encryption_key: Specifies the location of the key encryption key in Key Vault.
1519    :type key_encryption_key: ~azure.mgmt.compute.v2019_03_01.models.KeyVaultKeyReference
1520    :param enabled: Specifies whether disk encryption should be enabled on the virtual machine.
1521    :type enabled: bool
1522    """
1523
1524    _attribute_map = {
1525        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultSecretReference'},
1526        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultKeyReference'},
1527        'enabled': {'key': 'enabled', 'type': 'bool'},
1528    }
1529
1530    def __init__(
1531        self,
1532        *,
1533        disk_encryption_key: Optional["KeyVaultSecretReference"] = None,
1534        key_encryption_key: Optional["KeyVaultKeyReference"] = None,
1535        enabled: Optional[bool] = None,
1536        **kwargs
1537    ):
1538        super(DiskEncryptionSettings, self).__init__(**kwargs)
1539        self.disk_encryption_key = disk_encryption_key
1540        self.key_encryption_key = key_encryption_key
1541        self.enabled = enabled
1542
1543
1544class DiskInstanceView(msrest.serialization.Model):
1545    """The instance view of the disk.
1546
1547    :param name: The disk name.
1548    :type name: str
1549    :param encryption_settings: Specifies the encryption settings for the OS Disk.
1550     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
1551    :type encryption_settings: list[~azure.mgmt.compute.v2019_03_01.models.DiskEncryptionSettings]
1552    :param statuses: The resource status information.
1553    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
1554    """
1555
1556    _attribute_map = {
1557        'name': {'key': 'name', 'type': 'str'},
1558        'encryption_settings': {'key': 'encryptionSettings', 'type': '[DiskEncryptionSettings]'},
1559        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
1560    }
1561
1562    def __init__(
1563        self,
1564        *,
1565        name: Optional[str] = None,
1566        encryption_settings: Optional[List["DiskEncryptionSettings"]] = None,
1567        statuses: Optional[List["InstanceViewStatus"]] = None,
1568        **kwargs
1569    ):
1570        super(DiskInstanceView, self).__init__(**kwargs)
1571        self.name = name
1572        self.encryption_settings = encryption_settings
1573        self.statuses = statuses
1574
1575
1576class DiskList(msrest.serialization.Model):
1577    """The List Disks operation response.
1578
1579    All required parameters must be populated in order to send to Azure.
1580
1581    :param value: Required. A list of disks.
1582    :type value: list[~azure.mgmt.compute.v2019_03_01.models.Disk]
1583    :param next_link: The uri to fetch the next page of disks. Call ListNext() with this to fetch
1584     the next page of disks.
1585    :type next_link: str
1586    """
1587
1588    _validation = {
1589        'value': {'required': True},
1590    }
1591
1592    _attribute_map = {
1593        'value': {'key': 'value', 'type': '[Disk]'},
1594        'next_link': {'key': 'nextLink', 'type': 'str'},
1595    }
1596
1597    def __init__(
1598        self,
1599        *,
1600        value: List["Disk"],
1601        next_link: Optional[str] = None,
1602        **kwargs
1603    ):
1604        super(DiskList, self).__init__(**kwargs)
1605        self.value = value
1606        self.next_link = next_link
1607
1608
1609class DiskSku(msrest.serialization.Model):
1610    """The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, or UltraSSD_LRS.
1611
1612    Variables are only populated by the server, and will be ignored when sending a request.
1613
1614    :param name: The sku name. Possible values include: "Standard_LRS", "Premium_LRS",
1615     "StandardSSD_LRS", "UltraSSD_LRS".
1616    :type name: str or ~azure.mgmt.compute.v2019_03_01.models.DiskStorageAccountTypes
1617    :ivar tier: The sku tier.
1618    :vartype tier: str
1619    """
1620
1621    _validation = {
1622        'tier': {'readonly': True},
1623    }
1624
1625    _attribute_map = {
1626        'name': {'key': 'name', 'type': 'str'},
1627        'tier': {'key': 'tier', 'type': 'str'},
1628    }
1629
1630    def __init__(
1631        self,
1632        *,
1633        name: Optional[Union[str, "DiskStorageAccountTypes"]] = None,
1634        **kwargs
1635    ):
1636        super(DiskSku, self).__init__(**kwargs)
1637        self.name = name
1638        self.tier = None
1639
1640
1641class DiskUpdate(msrest.serialization.Model):
1642    """Disk update resource.
1643
1644    :param tags: A set of tags. Resource tags.
1645    :type tags: dict[str, str]
1646    :param sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, or
1647     UltraSSD_LRS.
1648    :type sku: ~azure.mgmt.compute.v2019_03_01.models.DiskSku
1649    :param os_type: the Operating System type. Possible values include: "Windows", "Linux".
1650    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
1651    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
1652     indicates the size of the disk to create. If this field is present for updates or creation with
1653     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
1654     running VM, and can only increase the disk's size.
1655    :type disk_size_gb: int
1656    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
1657     Encryption, can contain multiple encryption settings per disk or snapshot.
1658    :type encryption_settings_collection:
1659     ~azure.mgmt.compute.v2019_03_01.models.EncryptionSettingsCollection
1660    :param disk_iops_read_write: The number of IOPS allowed for this disk; only settable for
1661     UltraSSD disks. One operation can transfer between 4k and 256k bytes.
1662    :type disk_iops_read_write: long
1663    :param disk_m_bps_read_write: The bandwidth allowed for this disk; only settable for UltraSSD
1664     disks. MBps means millions of bytes per second - MB here uses the ISO notation, of powers of
1665     10.
1666    :type disk_m_bps_read_write: int
1667    """
1668
1669    _attribute_map = {
1670        'tags': {'key': 'tags', 'type': '{str}'},
1671        'sku': {'key': 'sku', 'type': 'DiskSku'},
1672        'os_type': {'key': 'properties.osType', 'type': 'str'},
1673        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
1674        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
1675        'disk_iops_read_write': {'key': 'properties.diskIOPSReadWrite', 'type': 'long'},
1676        'disk_m_bps_read_write': {'key': 'properties.diskMBpsReadWrite', 'type': 'int'},
1677    }
1678
1679    def __init__(
1680        self,
1681        *,
1682        tags: Optional[Dict[str, str]] = None,
1683        sku: Optional["DiskSku"] = None,
1684        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1685        disk_size_gb: Optional[int] = None,
1686        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
1687        disk_iops_read_write: Optional[int] = None,
1688        disk_m_bps_read_write: Optional[int] = None,
1689        **kwargs
1690    ):
1691        super(DiskUpdate, self).__init__(**kwargs)
1692        self.tags = tags
1693        self.sku = sku
1694        self.os_type = os_type
1695        self.disk_size_gb = disk_size_gb
1696        self.encryption_settings_collection = encryption_settings_collection
1697        self.disk_iops_read_write = disk_iops_read_write
1698        self.disk_m_bps_read_write = disk_m_bps_read_write
1699
1700
1701class EncryptionSettingsCollection(msrest.serialization.Model):
1702    """Encryption settings for disk or snapshot.
1703
1704    All required parameters must be populated in order to send to Azure.
1705
1706    :param enabled: Required. Set this flag to true and provide DiskEncryptionKey and optional
1707     KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and
1708     KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object,
1709     the existing settings remain unchanged.
1710    :type enabled: bool
1711    :param encryption_settings: A collection of encryption settings, one for each disk volume.
1712    :type encryption_settings:
1713     list[~azure.mgmt.compute.v2019_03_01.models.EncryptionSettingsElement]
1714    :param encryption_settings_version: Describes what type of encryption is used for the disks.
1715     Once this field is set, it cannot be overwritten. '1.0' corresponds to Azure Disk Encryption
1716     with AAD app.'1.1' corresponds to Azure Disk Encryption.
1717    :type encryption_settings_version: str
1718    """
1719
1720    _validation = {
1721        'enabled': {'required': True},
1722    }
1723
1724    _attribute_map = {
1725        'enabled': {'key': 'enabled', 'type': 'bool'},
1726        'encryption_settings': {'key': 'encryptionSettings', 'type': '[EncryptionSettingsElement]'},
1727        'encryption_settings_version': {'key': 'encryptionSettingsVersion', 'type': 'str'},
1728    }
1729
1730    def __init__(
1731        self,
1732        *,
1733        enabled: bool,
1734        encryption_settings: Optional[List["EncryptionSettingsElement"]] = None,
1735        encryption_settings_version: Optional[str] = None,
1736        **kwargs
1737    ):
1738        super(EncryptionSettingsCollection, self).__init__(**kwargs)
1739        self.enabled = enabled
1740        self.encryption_settings = encryption_settings
1741        self.encryption_settings_version = encryption_settings_version
1742
1743
1744class EncryptionSettingsElement(msrest.serialization.Model):
1745    """Encryption settings for one disk volume.
1746
1747    :param disk_encryption_key: Key Vault Secret Url and vault id of the disk encryption key.
1748    :type disk_encryption_key: ~azure.mgmt.compute.v2019_03_01.models.KeyVaultAndSecretReference
1749    :param key_encryption_key: Key Vault Key Url and vault id of the key encryption key.
1750     KeyEncryptionKey is optional and when provided is used to unwrap the disk encryption key.
1751    :type key_encryption_key: ~azure.mgmt.compute.v2019_03_01.models.KeyVaultAndKeyReference
1752    """
1753
1754    _attribute_map = {
1755        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultAndSecretReference'},
1756        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultAndKeyReference'},
1757    }
1758
1759    def __init__(
1760        self,
1761        *,
1762        disk_encryption_key: Optional["KeyVaultAndSecretReference"] = None,
1763        key_encryption_key: Optional["KeyVaultAndKeyReference"] = None,
1764        **kwargs
1765    ):
1766        super(EncryptionSettingsElement, self).__init__(**kwargs)
1767        self.disk_encryption_key = disk_encryption_key
1768        self.key_encryption_key = key_encryption_key
1769
1770
1771class Gallery(Resource):
1772    """Specifies information about the Shared Image Gallery that you want to create or update.
1773
1774    Variables are only populated by the server, and will be ignored when sending a request.
1775
1776    All required parameters must be populated in order to send to Azure.
1777
1778    :ivar id: Resource Id.
1779    :vartype id: str
1780    :ivar name: Resource name.
1781    :vartype name: str
1782    :ivar type: Resource type.
1783    :vartype type: str
1784    :param location: Required. Resource location.
1785    :type location: str
1786    :param tags: A set of tags. Resource tags.
1787    :type tags: dict[str, str]
1788    :param description: The description of this Shared Image Gallery resource. This property is
1789     updatable.
1790    :type description: str
1791    :param identifier: Describes the gallery unique name.
1792    :type identifier: ~azure.mgmt.compute.v2019_03_01.models.GalleryIdentifier
1793    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
1794     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
1795    :vartype provisioning_state: str or
1796     ~azure.mgmt.compute.v2019_03_01.models.GalleryPropertiesProvisioningState
1797    """
1798
1799    _validation = {
1800        'id': {'readonly': True},
1801        'name': {'readonly': True},
1802        'type': {'readonly': True},
1803        'location': {'required': True},
1804        'provisioning_state': {'readonly': True},
1805    }
1806
1807    _attribute_map = {
1808        'id': {'key': 'id', 'type': 'str'},
1809        'name': {'key': 'name', 'type': 'str'},
1810        'type': {'key': 'type', 'type': 'str'},
1811        'location': {'key': 'location', 'type': 'str'},
1812        'tags': {'key': 'tags', 'type': '{str}'},
1813        'description': {'key': 'properties.description', 'type': 'str'},
1814        'identifier': {'key': 'properties.identifier', 'type': 'GalleryIdentifier'},
1815        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1816    }
1817
1818    def __init__(
1819        self,
1820        *,
1821        location: str,
1822        tags: Optional[Dict[str, str]] = None,
1823        description: Optional[str] = None,
1824        identifier: Optional["GalleryIdentifier"] = None,
1825        **kwargs
1826    ):
1827        super(Gallery, self).__init__(location=location, tags=tags, **kwargs)
1828        self.description = description
1829        self.identifier = identifier
1830        self.provisioning_state = None
1831
1832
1833class GalleryApplication(Resource):
1834    """Specifies information about the gallery Application Definition that you want to create or update.
1835
1836    Variables are only populated by the server, and will be ignored when sending a request.
1837
1838    All required parameters must be populated in order to send to Azure.
1839
1840    :ivar id: Resource Id.
1841    :vartype id: str
1842    :ivar name: Resource name.
1843    :vartype name: str
1844    :ivar type: Resource type.
1845    :vartype type: str
1846    :param location: Required. Resource location.
1847    :type location: str
1848    :param tags: A set of tags. Resource tags.
1849    :type tags: dict[str, str]
1850    :param description: The description of this gallery Application Definition resource. This
1851     property is updatable.
1852    :type description: str
1853    :param eula: The Eula agreement for the gallery Application Definition.
1854    :type eula: str
1855    :param privacy_statement_uri: The privacy statement uri.
1856    :type privacy_statement_uri: str
1857    :param release_note_uri: The release note uri.
1858    :type release_note_uri: str
1859    :param end_of_life_date: The end of life date of the gallery Application Definition. This
1860     property can be used for decommissioning purposes. This property is updatable.
1861    :type end_of_life_date: ~datetime.datetime
1862    :param supported_os_type: This property allows you to specify the supported type of the OS that
1863     application is built for. :code:`<br>`:code:`<br>` Possible values are:
1864     :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible values
1865     include: "Windows", "Linux".
1866    :type supported_os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
1867    """
1868
1869    _validation = {
1870        'id': {'readonly': True},
1871        'name': {'readonly': True},
1872        'type': {'readonly': True},
1873        'location': {'required': True},
1874    }
1875
1876    _attribute_map = {
1877        'id': {'key': 'id', 'type': 'str'},
1878        'name': {'key': 'name', 'type': 'str'},
1879        'type': {'key': 'type', 'type': 'str'},
1880        'location': {'key': 'location', 'type': 'str'},
1881        'tags': {'key': 'tags', 'type': '{str}'},
1882        'description': {'key': 'properties.description', 'type': 'str'},
1883        'eula': {'key': 'properties.eula', 'type': 'str'},
1884        'privacy_statement_uri': {'key': 'properties.privacyStatementUri', 'type': 'str'},
1885        'release_note_uri': {'key': 'properties.releaseNoteUri', 'type': 'str'},
1886        'end_of_life_date': {'key': 'properties.endOfLifeDate', 'type': 'iso-8601'},
1887        'supported_os_type': {'key': 'properties.supportedOSType', 'type': 'str'},
1888    }
1889
1890    def __init__(
1891        self,
1892        *,
1893        location: str,
1894        tags: Optional[Dict[str, str]] = None,
1895        description: Optional[str] = None,
1896        eula: Optional[str] = None,
1897        privacy_statement_uri: Optional[str] = None,
1898        release_note_uri: Optional[str] = None,
1899        end_of_life_date: Optional[datetime.datetime] = None,
1900        supported_os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1901        **kwargs
1902    ):
1903        super(GalleryApplication, self).__init__(location=location, tags=tags, **kwargs)
1904        self.description = description
1905        self.eula = eula
1906        self.privacy_statement_uri = privacy_statement_uri
1907        self.release_note_uri = release_note_uri
1908        self.end_of_life_date = end_of_life_date
1909        self.supported_os_type = supported_os_type
1910
1911
1912class GalleryApplicationList(msrest.serialization.Model):
1913    """The List Gallery Applications operation response.
1914
1915    All required parameters must be populated in order to send to Azure.
1916
1917    :param value: Required. A list of Gallery Applications.
1918    :type value: list[~azure.mgmt.compute.v2019_03_01.models.GalleryApplication]
1919    :param next_link: The uri to fetch the next page of Application Definitions in the Application
1920     Gallery. Call ListNext() with this to fetch the next page of gallery Application Definitions.
1921    :type next_link: str
1922    """
1923
1924    _validation = {
1925        'value': {'required': True},
1926    }
1927
1928    _attribute_map = {
1929        'value': {'key': 'value', 'type': '[GalleryApplication]'},
1930        'next_link': {'key': 'nextLink', 'type': 'str'},
1931    }
1932
1933    def __init__(
1934        self,
1935        *,
1936        value: List["GalleryApplication"],
1937        next_link: Optional[str] = None,
1938        **kwargs
1939    ):
1940        super(GalleryApplicationList, self).__init__(**kwargs)
1941        self.value = value
1942        self.next_link = next_link
1943
1944
1945class GalleryApplicationVersion(Resource):
1946    """Specifies information about the gallery Application Version that you want to create or update.
1947
1948    Variables are only populated by the server, and will be ignored when sending a request.
1949
1950    All required parameters must be populated in order to send to Azure.
1951
1952    :ivar id: Resource Id.
1953    :vartype id: str
1954    :ivar name: Resource name.
1955    :vartype name: str
1956    :ivar type: Resource type.
1957    :vartype type: str
1958    :param location: Required. Resource location.
1959    :type location: str
1960    :param tags: A set of tags. Resource tags.
1961    :type tags: dict[str, str]
1962    :param publishing_profile: The publishing profile of a gallery image version.
1963    :type publishing_profile:
1964     ~azure.mgmt.compute.v2019_03_01.models.GalleryApplicationVersionPublishingProfile
1965    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
1966     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
1967    :vartype provisioning_state: str or
1968     ~azure.mgmt.compute.v2019_03_01.models.GalleryApplicationVersionPropertiesProvisioningState
1969    :ivar replication_status: This is the replication status of the gallery Image Version.
1970    :vartype replication_status: ~azure.mgmt.compute.v2019_03_01.models.ReplicationStatus
1971    """
1972
1973    _validation = {
1974        'id': {'readonly': True},
1975        'name': {'readonly': True},
1976        'type': {'readonly': True},
1977        'location': {'required': True},
1978        'provisioning_state': {'readonly': True},
1979        'replication_status': {'readonly': True},
1980    }
1981
1982    _attribute_map = {
1983        'id': {'key': 'id', 'type': 'str'},
1984        'name': {'key': 'name', 'type': 'str'},
1985        'type': {'key': 'type', 'type': 'str'},
1986        'location': {'key': 'location', 'type': 'str'},
1987        'tags': {'key': 'tags', 'type': '{str}'},
1988        'publishing_profile': {'key': 'properties.publishingProfile', 'type': 'GalleryApplicationVersionPublishingProfile'},
1989        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1990        'replication_status': {'key': 'properties.replicationStatus', 'type': 'ReplicationStatus'},
1991    }
1992
1993    def __init__(
1994        self,
1995        *,
1996        location: str,
1997        tags: Optional[Dict[str, str]] = None,
1998        publishing_profile: Optional["GalleryApplicationVersionPublishingProfile"] = None,
1999        **kwargs
2000    ):
2001        super(GalleryApplicationVersion, self).__init__(location=location, tags=tags, **kwargs)
2002        self.publishing_profile = publishing_profile
2003        self.provisioning_state = None
2004        self.replication_status = None
2005
2006
2007class GalleryApplicationVersionList(msrest.serialization.Model):
2008    """The List Gallery Application version operation response.
2009
2010    All required parameters must be populated in order to send to Azure.
2011
2012    :param value: Required. A list of gallery Application Versions.
2013    :type value: list[~azure.mgmt.compute.v2019_03_01.models.GalleryApplicationVersion]
2014    :param next_link: The uri to fetch the next page of gallery Application Versions. Call
2015     ListNext() with this to fetch the next page of gallery Application Versions.
2016    :type next_link: str
2017    """
2018
2019    _validation = {
2020        'value': {'required': True},
2021    }
2022
2023    _attribute_map = {
2024        'value': {'key': 'value', 'type': '[GalleryApplicationVersion]'},
2025        'next_link': {'key': 'nextLink', 'type': 'str'},
2026    }
2027
2028    def __init__(
2029        self,
2030        *,
2031        value: List["GalleryApplicationVersion"],
2032        next_link: Optional[str] = None,
2033        **kwargs
2034    ):
2035        super(GalleryApplicationVersionList, self).__init__(**kwargs)
2036        self.value = value
2037        self.next_link = next_link
2038
2039
2040class GalleryArtifactPublishingProfileBase(msrest.serialization.Model):
2041    """Describes the basic gallery artifact publishing profile.
2042
2043    Variables are only populated by the server, and will be ignored when sending a request.
2044
2045    :param target_regions: The target regions where the Image Version is going to be replicated to.
2046     This property is updatable.
2047    :type target_regions: list[~azure.mgmt.compute.v2019_03_01.models.TargetRegion]
2048    :param replica_count: The number of replicas of the Image Version to be created per region.
2049     This property would take effect for a region when regionalReplicaCount is not specified. This
2050     property is updatable.
2051    :type replica_count: int
2052    :param exclude_from_latest: If set to true, Virtual Machines deployed from the latest version
2053     of the Image Definition won't use this Image Version.
2054    :type exclude_from_latest: bool
2055    :ivar published_date: The timestamp for when the gallery Image Version is published.
2056    :vartype published_date: ~datetime.datetime
2057    :param end_of_life_date: The end of life date of the gallery Image Version. This property can
2058     be used for decommissioning purposes. This property is updatable.
2059    :type end_of_life_date: ~datetime.datetime
2060    :param storage_account_type: Specifies the storage account type to be used to store the image.
2061     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
2062    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountType
2063    """
2064
2065    _validation = {
2066        'published_date': {'readonly': True},
2067    }
2068
2069    _attribute_map = {
2070        'target_regions': {'key': 'targetRegions', 'type': '[TargetRegion]'},
2071        'replica_count': {'key': 'replicaCount', 'type': 'int'},
2072        'exclude_from_latest': {'key': 'excludeFromLatest', 'type': 'bool'},
2073        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
2074        'end_of_life_date': {'key': 'endOfLifeDate', 'type': 'iso-8601'},
2075        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2076    }
2077
2078    def __init__(
2079        self,
2080        *,
2081        target_regions: Optional[List["TargetRegion"]] = None,
2082        replica_count: Optional[int] = None,
2083        exclude_from_latest: Optional[bool] = None,
2084        end_of_life_date: Optional[datetime.datetime] = None,
2085        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
2086        **kwargs
2087    ):
2088        super(GalleryArtifactPublishingProfileBase, self).__init__(**kwargs)
2089        self.target_regions = target_regions
2090        self.replica_count = replica_count
2091        self.exclude_from_latest = exclude_from_latest
2092        self.published_date = None
2093        self.end_of_life_date = end_of_life_date
2094        self.storage_account_type = storage_account_type
2095
2096
2097class GalleryApplicationVersionPublishingProfile(GalleryArtifactPublishingProfileBase):
2098    """The publishing profile of a gallery image version.
2099
2100    Variables are only populated by the server, and will be ignored when sending a request.
2101
2102    All required parameters must be populated in order to send to Azure.
2103
2104    :param target_regions: The target regions where the Image Version is going to be replicated to.
2105     This property is updatable.
2106    :type target_regions: list[~azure.mgmt.compute.v2019_03_01.models.TargetRegion]
2107    :param replica_count: The number of replicas of the Image Version to be created per region.
2108     This property would take effect for a region when regionalReplicaCount is not specified. This
2109     property is updatable.
2110    :type replica_count: int
2111    :param exclude_from_latest: If set to true, Virtual Machines deployed from the latest version
2112     of the Image Definition won't use this Image Version.
2113    :type exclude_from_latest: bool
2114    :ivar published_date: The timestamp for when the gallery Image Version is published.
2115    :vartype published_date: ~datetime.datetime
2116    :param end_of_life_date: The end of life date of the gallery Image Version. This property can
2117     be used for decommissioning purposes. This property is updatable.
2118    :type end_of_life_date: ~datetime.datetime
2119    :param storage_account_type: Specifies the storage account type to be used to store the image.
2120     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
2121    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountType
2122    :param source: Required. The source image from which the Image Version is going to be created.
2123    :type source: ~azure.mgmt.compute.v2019_03_01.models.UserArtifactSource
2124    :param manage_actions:
2125    :type manage_actions: ~azure.mgmt.compute.v2019_03_01.models.UserArtifactManage
2126    :param enable_health_check: Optional. Whether or not this application reports health.
2127    :type enable_health_check: bool
2128    """
2129
2130    _validation = {
2131        'published_date': {'readonly': True},
2132        'source': {'required': True},
2133    }
2134
2135    _attribute_map = {
2136        'target_regions': {'key': 'targetRegions', 'type': '[TargetRegion]'},
2137        'replica_count': {'key': 'replicaCount', 'type': 'int'},
2138        'exclude_from_latest': {'key': 'excludeFromLatest', 'type': 'bool'},
2139        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
2140        'end_of_life_date': {'key': 'endOfLifeDate', 'type': 'iso-8601'},
2141        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2142        'source': {'key': 'source', 'type': 'UserArtifactSource'},
2143        'manage_actions': {'key': 'manageActions', 'type': 'UserArtifactManage'},
2144        'enable_health_check': {'key': 'enableHealthCheck', 'type': 'bool'},
2145    }
2146
2147    def __init__(
2148        self,
2149        *,
2150        source: "UserArtifactSource",
2151        target_regions: Optional[List["TargetRegion"]] = None,
2152        replica_count: Optional[int] = None,
2153        exclude_from_latest: Optional[bool] = None,
2154        end_of_life_date: Optional[datetime.datetime] = None,
2155        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
2156        manage_actions: Optional["UserArtifactManage"] = None,
2157        enable_health_check: Optional[bool] = None,
2158        **kwargs
2159    ):
2160        super(GalleryApplicationVersionPublishingProfile, self).__init__(target_regions=target_regions, replica_count=replica_count, exclude_from_latest=exclude_from_latest, end_of_life_date=end_of_life_date, storage_account_type=storage_account_type, **kwargs)
2161        self.source = source
2162        self.manage_actions = manage_actions
2163        self.enable_health_check = enable_health_check
2164
2165
2166class GalleryArtifactSource(msrest.serialization.Model):
2167    """The source image from which the Image Version is going to be created.
2168
2169    All required parameters must be populated in order to send to Azure.
2170
2171    :param managed_image: Required. The managed artifact.
2172    :type managed_image: ~azure.mgmt.compute.v2019_03_01.models.ManagedArtifact
2173    """
2174
2175    _validation = {
2176        'managed_image': {'required': True},
2177    }
2178
2179    _attribute_map = {
2180        'managed_image': {'key': 'managedImage', 'type': 'ManagedArtifact'},
2181    }
2182
2183    def __init__(
2184        self,
2185        *,
2186        managed_image: "ManagedArtifact",
2187        **kwargs
2188    ):
2189        super(GalleryArtifactSource, self).__init__(**kwargs)
2190        self.managed_image = managed_image
2191
2192
2193class GalleryDiskImage(msrest.serialization.Model):
2194    """This is the disk image base class.
2195
2196    Variables are only populated by the server, and will be ignored when sending a request.
2197
2198    :ivar size_in_gb: This property indicates the size of the VHD to be created.
2199    :vartype size_in_gb: int
2200    :ivar host_caching: The host caching of the disk. Valid values are 'None', 'ReadOnly', and
2201     'ReadWrite'. Possible values include: "None", "ReadOnly", "ReadWrite".
2202    :vartype host_caching: str or ~azure.mgmt.compute.v2019_03_01.models.HostCaching
2203    """
2204
2205    _validation = {
2206        'size_in_gb': {'readonly': True},
2207        'host_caching': {'readonly': True},
2208    }
2209
2210    _attribute_map = {
2211        'size_in_gb': {'key': 'sizeInGB', 'type': 'int'},
2212        'host_caching': {'key': 'hostCaching', 'type': 'str'},
2213    }
2214
2215    def __init__(
2216        self,
2217        **kwargs
2218    ):
2219        super(GalleryDiskImage, self).__init__(**kwargs)
2220        self.size_in_gb = None
2221        self.host_caching = None
2222
2223
2224class GalleryDataDiskImage(GalleryDiskImage):
2225    """This is the data disk image.
2226
2227    Variables are only populated by the server, and will be ignored when sending a request.
2228
2229    :ivar size_in_gb: This property indicates the size of the VHD to be created.
2230    :vartype size_in_gb: int
2231    :ivar host_caching: The host caching of the disk. Valid values are 'None', 'ReadOnly', and
2232     'ReadWrite'. Possible values include: "None", "ReadOnly", "ReadWrite".
2233    :vartype host_caching: str or ~azure.mgmt.compute.v2019_03_01.models.HostCaching
2234    :ivar lun: This property specifies the logical unit number of the data disk. This value is used
2235     to identify data disks within the Virtual Machine and therefore must be unique for each data
2236     disk attached to the Virtual Machine.
2237    :vartype lun: int
2238    """
2239
2240    _validation = {
2241        'size_in_gb': {'readonly': True},
2242        'host_caching': {'readonly': True},
2243        'lun': {'readonly': True},
2244    }
2245
2246    _attribute_map = {
2247        'size_in_gb': {'key': 'sizeInGB', 'type': 'int'},
2248        'host_caching': {'key': 'hostCaching', 'type': 'str'},
2249        'lun': {'key': 'lun', 'type': 'int'},
2250    }
2251
2252    def __init__(
2253        self,
2254        **kwargs
2255    ):
2256        super(GalleryDataDiskImage, self).__init__(**kwargs)
2257        self.lun = None
2258
2259
2260class GalleryIdentifier(msrest.serialization.Model):
2261    """Describes the gallery unique name.
2262
2263    Variables are only populated by the server, and will be ignored when sending a request.
2264
2265    :ivar unique_name: The unique name of the Shared Image Gallery. This name is generated
2266     automatically by Azure.
2267    :vartype unique_name: str
2268    """
2269
2270    _validation = {
2271        'unique_name': {'readonly': True},
2272    }
2273
2274    _attribute_map = {
2275        'unique_name': {'key': 'uniqueName', 'type': 'str'},
2276    }
2277
2278    def __init__(
2279        self,
2280        **kwargs
2281    ):
2282        super(GalleryIdentifier, self).__init__(**kwargs)
2283        self.unique_name = None
2284
2285
2286class GalleryImage(Resource):
2287    """Specifies information about the gallery Image Definition that you want to create or update.
2288
2289    Variables are only populated by the server, and will be ignored when sending a request.
2290
2291    All required parameters must be populated in order to send to Azure.
2292
2293    :ivar id: Resource Id.
2294    :vartype id: str
2295    :ivar name: Resource name.
2296    :vartype name: str
2297    :ivar type: Resource type.
2298    :vartype type: str
2299    :param location: Required. Resource location.
2300    :type location: str
2301    :param tags: A set of tags. Resource tags.
2302    :type tags: dict[str, str]
2303    :param description: The description of this gallery Image Definition resource. This property is
2304     updatable.
2305    :type description: str
2306    :param eula: The Eula agreement for the gallery Image Definition.
2307    :type eula: str
2308    :param privacy_statement_uri: The privacy statement uri.
2309    :type privacy_statement_uri: str
2310    :param release_note_uri: The release note uri.
2311    :type release_note_uri: str
2312    :param os_type: This property allows you to specify the type of the OS that is included in the
2313     disk when creating a VM from a managed image. :code:`<br>`:code:`<br>` Possible values are:
2314     :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible values
2315     include: "Windows", "Linux".
2316    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
2317    :param os_state: This property allows the user to specify whether the virtual machines created
2318     under this image are 'Generalized' or 'Specialized'. Possible values include: "Generalized",
2319     "Specialized".
2320    :type os_state: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemStateTypes
2321    :param end_of_life_date: The end of life date of the gallery Image Definition. This property
2322     can be used for decommissioning purposes. This property is updatable.
2323    :type end_of_life_date: ~datetime.datetime
2324    :param identifier: This is the gallery Image Definition identifier.
2325    :type identifier: ~azure.mgmt.compute.v2019_03_01.models.GalleryImageIdentifier
2326    :param recommended: The properties describe the recommended machine configuration for this
2327     Image Definition. These properties are updatable.
2328    :type recommended: ~azure.mgmt.compute.v2019_03_01.models.RecommendedMachineConfiguration
2329    :param disallowed: Describes the disallowed disk types.
2330    :type disallowed: ~azure.mgmt.compute.v2019_03_01.models.Disallowed
2331    :param purchase_plan: Describes the gallery Image Definition purchase plan. This is used by
2332     marketplace images.
2333    :type purchase_plan: ~azure.mgmt.compute.v2019_03_01.models.ImagePurchasePlan
2334    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2335     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2336    :vartype provisioning_state: str or
2337     ~azure.mgmt.compute.v2019_03_01.models.GalleryImagePropertiesProvisioningState
2338    """
2339
2340    _validation = {
2341        'id': {'readonly': True},
2342        'name': {'readonly': True},
2343        'type': {'readonly': True},
2344        'location': {'required': True},
2345        'provisioning_state': {'readonly': True},
2346    }
2347
2348    _attribute_map = {
2349        'id': {'key': 'id', 'type': 'str'},
2350        'name': {'key': 'name', 'type': 'str'},
2351        'type': {'key': 'type', 'type': 'str'},
2352        'location': {'key': 'location', 'type': 'str'},
2353        'tags': {'key': 'tags', 'type': '{str}'},
2354        'description': {'key': 'properties.description', 'type': 'str'},
2355        'eula': {'key': 'properties.eula', 'type': 'str'},
2356        'privacy_statement_uri': {'key': 'properties.privacyStatementUri', 'type': 'str'},
2357        'release_note_uri': {'key': 'properties.releaseNoteUri', 'type': 'str'},
2358        'os_type': {'key': 'properties.osType', 'type': 'str'},
2359        'os_state': {'key': 'properties.osState', 'type': 'str'},
2360        'end_of_life_date': {'key': 'properties.endOfLifeDate', 'type': 'iso-8601'},
2361        'identifier': {'key': 'properties.identifier', 'type': 'GalleryImageIdentifier'},
2362        'recommended': {'key': 'properties.recommended', 'type': 'RecommendedMachineConfiguration'},
2363        'disallowed': {'key': 'properties.disallowed', 'type': 'Disallowed'},
2364        'purchase_plan': {'key': 'properties.purchasePlan', 'type': 'ImagePurchasePlan'},
2365        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2366    }
2367
2368    def __init__(
2369        self,
2370        *,
2371        location: str,
2372        tags: Optional[Dict[str, str]] = None,
2373        description: Optional[str] = None,
2374        eula: Optional[str] = None,
2375        privacy_statement_uri: Optional[str] = None,
2376        release_note_uri: Optional[str] = None,
2377        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
2378        os_state: Optional[Union[str, "OperatingSystemStateTypes"]] = None,
2379        end_of_life_date: Optional[datetime.datetime] = None,
2380        identifier: Optional["GalleryImageIdentifier"] = None,
2381        recommended: Optional["RecommendedMachineConfiguration"] = None,
2382        disallowed: Optional["Disallowed"] = None,
2383        purchase_plan: Optional["ImagePurchasePlan"] = None,
2384        **kwargs
2385    ):
2386        super(GalleryImage, self).__init__(location=location, tags=tags, **kwargs)
2387        self.description = description
2388        self.eula = eula
2389        self.privacy_statement_uri = privacy_statement_uri
2390        self.release_note_uri = release_note_uri
2391        self.os_type = os_type
2392        self.os_state = os_state
2393        self.end_of_life_date = end_of_life_date
2394        self.identifier = identifier
2395        self.recommended = recommended
2396        self.disallowed = disallowed
2397        self.purchase_plan = purchase_plan
2398        self.provisioning_state = None
2399
2400
2401class GalleryImageIdentifier(msrest.serialization.Model):
2402    """This is the gallery Image Definition identifier.
2403
2404    All required parameters must be populated in order to send to Azure.
2405
2406    :param publisher: Required. The name of the gallery Image Definition publisher.
2407    :type publisher: str
2408    :param offer: Required. The name of the gallery Image Definition offer.
2409    :type offer: str
2410    :param sku: Required. The name of the gallery Image Definition SKU.
2411    :type sku: str
2412    """
2413
2414    _validation = {
2415        'publisher': {'required': True},
2416        'offer': {'required': True},
2417        'sku': {'required': True},
2418    }
2419
2420    _attribute_map = {
2421        'publisher': {'key': 'publisher', 'type': 'str'},
2422        'offer': {'key': 'offer', 'type': 'str'},
2423        'sku': {'key': 'sku', 'type': 'str'},
2424    }
2425
2426    def __init__(
2427        self,
2428        *,
2429        publisher: str,
2430        offer: str,
2431        sku: str,
2432        **kwargs
2433    ):
2434        super(GalleryImageIdentifier, self).__init__(**kwargs)
2435        self.publisher = publisher
2436        self.offer = offer
2437        self.sku = sku
2438
2439
2440class GalleryImageList(msrest.serialization.Model):
2441    """The List Gallery Images operation response.
2442
2443    All required parameters must be populated in order to send to Azure.
2444
2445    :param value: Required. A list of Shared Image Gallery images.
2446    :type value: list[~azure.mgmt.compute.v2019_03_01.models.GalleryImage]
2447    :param next_link: The uri to fetch the next page of Image Definitions in the Shared Image
2448     Gallery. Call ListNext() with this to fetch the next page of gallery Image Definitions.
2449    :type next_link: str
2450    """
2451
2452    _validation = {
2453        'value': {'required': True},
2454    }
2455
2456    _attribute_map = {
2457        'value': {'key': 'value', 'type': '[GalleryImage]'},
2458        'next_link': {'key': 'nextLink', 'type': 'str'},
2459    }
2460
2461    def __init__(
2462        self,
2463        *,
2464        value: List["GalleryImage"],
2465        next_link: Optional[str] = None,
2466        **kwargs
2467    ):
2468        super(GalleryImageList, self).__init__(**kwargs)
2469        self.value = value
2470        self.next_link = next_link
2471
2472
2473class GalleryImageVersion(Resource):
2474    """Specifies information about the gallery Image Version that you want to create or update.
2475
2476    Variables are only populated by the server, and will be ignored when sending a request.
2477
2478    All required parameters must be populated in order to send to Azure.
2479
2480    :ivar id: Resource Id.
2481    :vartype id: str
2482    :ivar name: Resource name.
2483    :vartype name: str
2484    :ivar type: Resource type.
2485    :vartype type: str
2486    :param location: Required. Resource location.
2487    :type location: str
2488    :param tags: A set of tags. Resource tags.
2489    :type tags: dict[str, str]
2490    :param publishing_profile: The publishing profile of a gallery Image Version.
2491    :type publishing_profile:
2492     ~azure.mgmt.compute.v2019_03_01.models.GalleryImageVersionPublishingProfile
2493    :ivar provisioning_state: The provisioning state, which only appears in the response. Possible
2494     values include: "Creating", "Updating", "Failed", "Succeeded", "Deleting", "Migrating".
2495    :vartype provisioning_state: str or
2496     ~azure.mgmt.compute.v2019_03_01.models.GalleryImageVersionPropertiesProvisioningState
2497    :ivar storage_profile: This is the storage profile of a Gallery Image Version.
2498    :vartype storage_profile:
2499     ~azure.mgmt.compute.v2019_03_01.models.GalleryImageVersionStorageProfile
2500    :ivar replication_status: This is the replication status of the gallery Image Version.
2501    :vartype replication_status: ~azure.mgmt.compute.v2019_03_01.models.ReplicationStatus
2502    """
2503
2504    _validation = {
2505        'id': {'readonly': True},
2506        'name': {'readonly': True},
2507        'type': {'readonly': True},
2508        'location': {'required': True},
2509        'provisioning_state': {'readonly': True},
2510        'storage_profile': {'readonly': True},
2511        'replication_status': {'readonly': True},
2512    }
2513
2514    _attribute_map = {
2515        'id': {'key': 'id', 'type': 'str'},
2516        'name': {'key': 'name', 'type': 'str'},
2517        'type': {'key': 'type', 'type': 'str'},
2518        'location': {'key': 'location', 'type': 'str'},
2519        'tags': {'key': 'tags', 'type': '{str}'},
2520        'publishing_profile': {'key': 'properties.publishingProfile', 'type': 'GalleryImageVersionPublishingProfile'},
2521        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2522        'storage_profile': {'key': 'properties.storageProfile', 'type': 'GalleryImageVersionStorageProfile'},
2523        'replication_status': {'key': 'properties.replicationStatus', 'type': 'ReplicationStatus'},
2524    }
2525
2526    def __init__(
2527        self,
2528        *,
2529        location: str,
2530        tags: Optional[Dict[str, str]] = None,
2531        publishing_profile: Optional["GalleryImageVersionPublishingProfile"] = None,
2532        **kwargs
2533    ):
2534        super(GalleryImageVersion, self).__init__(location=location, tags=tags, **kwargs)
2535        self.publishing_profile = publishing_profile
2536        self.provisioning_state = None
2537        self.storage_profile = None
2538        self.replication_status = None
2539
2540
2541class GalleryImageVersionList(msrest.serialization.Model):
2542    """The List Gallery Image version operation response.
2543
2544    All required parameters must be populated in order to send to Azure.
2545
2546    :param value: Required. A list of gallery Image Versions.
2547    :type value: list[~azure.mgmt.compute.v2019_03_01.models.GalleryImageVersion]
2548    :param next_link: The uri to fetch the next page of gallery Image Versions. Call ListNext()
2549     with this to fetch the next page of gallery Image Versions.
2550    :type next_link: str
2551    """
2552
2553    _validation = {
2554        'value': {'required': True},
2555    }
2556
2557    _attribute_map = {
2558        'value': {'key': 'value', 'type': '[GalleryImageVersion]'},
2559        'next_link': {'key': 'nextLink', 'type': 'str'},
2560    }
2561
2562    def __init__(
2563        self,
2564        *,
2565        value: List["GalleryImageVersion"],
2566        next_link: Optional[str] = None,
2567        **kwargs
2568    ):
2569        super(GalleryImageVersionList, self).__init__(**kwargs)
2570        self.value = value
2571        self.next_link = next_link
2572
2573
2574class GalleryImageVersionPublishingProfile(GalleryArtifactPublishingProfileBase):
2575    """The publishing profile of a gallery Image Version.
2576
2577    Variables are only populated by the server, and will be ignored when sending a request.
2578
2579    All required parameters must be populated in order to send to Azure.
2580
2581    :param target_regions: The target regions where the Image Version is going to be replicated to.
2582     This property is updatable.
2583    :type target_regions: list[~azure.mgmt.compute.v2019_03_01.models.TargetRegion]
2584    :param replica_count: The number of replicas of the Image Version to be created per region.
2585     This property would take effect for a region when regionalReplicaCount is not specified. This
2586     property is updatable.
2587    :type replica_count: int
2588    :param exclude_from_latest: If set to true, Virtual Machines deployed from the latest version
2589     of the Image Definition won't use this Image Version.
2590    :type exclude_from_latest: bool
2591    :ivar published_date: The timestamp for when the gallery Image Version is published.
2592    :vartype published_date: ~datetime.datetime
2593    :param end_of_life_date: The end of life date of the gallery Image Version. This property can
2594     be used for decommissioning purposes. This property is updatable.
2595    :type end_of_life_date: ~datetime.datetime
2596    :param storage_account_type: Specifies the storage account type to be used to store the image.
2597     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
2598    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountType
2599    :param source: Required. The source image from which the Image Version is going to be created.
2600    :type source: ~azure.mgmt.compute.v2019_03_01.models.GalleryArtifactSource
2601    """
2602
2603    _validation = {
2604        'published_date': {'readonly': True},
2605        'source': {'required': True},
2606    }
2607
2608    _attribute_map = {
2609        'target_regions': {'key': 'targetRegions', 'type': '[TargetRegion]'},
2610        'replica_count': {'key': 'replicaCount', 'type': 'int'},
2611        'exclude_from_latest': {'key': 'excludeFromLatest', 'type': 'bool'},
2612        'published_date': {'key': 'publishedDate', 'type': 'iso-8601'},
2613        'end_of_life_date': {'key': 'endOfLifeDate', 'type': 'iso-8601'},
2614        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2615        'source': {'key': 'source', 'type': 'GalleryArtifactSource'},
2616    }
2617
2618    def __init__(
2619        self,
2620        *,
2621        source: "GalleryArtifactSource",
2622        target_regions: Optional[List["TargetRegion"]] = None,
2623        replica_count: Optional[int] = None,
2624        exclude_from_latest: Optional[bool] = None,
2625        end_of_life_date: Optional[datetime.datetime] = None,
2626        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
2627        **kwargs
2628    ):
2629        super(GalleryImageVersionPublishingProfile, self).__init__(target_regions=target_regions, replica_count=replica_count, exclude_from_latest=exclude_from_latest, end_of_life_date=end_of_life_date, storage_account_type=storage_account_type, **kwargs)
2630        self.source = source
2631
2632
2633class GalleryImageVersionStorageProfile(msrest.serialization.Model):
2634    """This is the storage profile of a Gallery Image Version.
2635
2636    Variables are only populated by the server, and will be ignored when sending a request.
2637
2638    :ivar os_disk_image: This is the OS disk image.
2639    :vartype os_disk_image: ~azure.mgmt.compute.v2019_03_01.models.GalleryOSDiskImage
2640    :ivar data_disk_images: A list of data disk images.
2641    :vartype data_disk_images: list[~azure.mgmt.compute.v2019_03_01.models.GalleryDataDiskImage]
2642    """
2643
2644    _validation = {
2645        'os_disk_image': {'readonly': True},
2646        'data_disk_images': {'readonly': True},
2647    }
2648
2649    _attribute_map = {
2650        'os_disk_image': {'key': 'osDiskImage', 'type': 'GalleryOSDiskImage'},
2651        'data_disk_images': {'key': 'dataDiskImages', 'type': '[GalleryDataDiskImage]'},
2652    }
2653
2654    def __init__(
2655        self,
2656        **kwargs
2657    ):
2658        super(GalleryImageVersionStorageProfile, self).__init__(**kwargs)
2659        self.os_disk_image = None
2660        self.data_disk_images = None
2661
2662
2663class GalleryList(msrest.serialization.Model):
2664    """The List Galleries operation response.
2665
2666    All required parameters must be populated in order to send to Azure.
2667
2668    :param value: Required. A list of galleries.
2669    :type value: list[~azure.mgmt.compute.v2019_03_01.models.Gallery]
2670    :param next_link: The uri to fetch the next page of galleries. Call ListNext() with this to
2671     fetch the next page of galleries.
2672    :type next_link: str
2673    """
2674
2675    _validation = {
2676        'value': {'required': True},
2677    }
2678
2679    _attribute_map = {
2680        'value': {'key': 'value', 'type': '[Gallery]'},
2681        'next_link': {'key': 'nextLink', 'type': 'str'},
2682    }
2683
2684    def __init__(
2685        self,
2686        *,
2687        value: List["Gallery"],
2688        next_link: Optional[str] = None,
2689        **kwargs
2690    ):
2691        super(GalleryList, self).__init__(**kwargs)
2692        self.value = value
2693        self.next_link = next_link
2694
2695
2696class GalleryOSDiskImage(GalleryDiskImage):
2697    """This is the OS disk image.
2698
2699    Variables are only populated by the server, and will be ignored when sending a request.
2700
2701    :ivar size_in_gb: This property indicates the size of the VHD to be created.
2702    :vartype size_in_gb: int
2703    :ivar host_caching: The host caching of the disk. Valid values are 'None', 'ReadOnly', and
2704     'ReadWrite'. Possible values include: "None", "ReadOnly", "ReadWrite".
2705    :vartype host_caching: str or ~azure.mgmt.compute.v2019_03_01.models.HostCaching
2706    """
2707
2708    _validation = {
2709        'size_in_gb': {'readonly': True},
2710        'host_caching': {'readonly': True},
2711    }
2712
2713    _attribute_map = {
2714        'size_in_gb': {'key': 'sizeInGB', 'type': 'int'},
2715        'host_caching': {'key': 'hostCaching', 'type': 'str'},
2716    }
2717
2718    def __init__(
2719        self,
2720        **kwargs
2721    ):
2722        super(GalleryOSDiskImage, self).__init__(**kwargs)
2723
2724
2725class GrantAccessData(msrest.serialization.Model):
2726    """Data used for requesting a SAS.
2727
2728    All required parameters must be populated in order to send to Azure.
2729
2730    :param access: Required.  Possible values include: "None", "Read", "Write".
2731    :type access: str or ~azure.mgmt.compute.v2019_03_01.models.AccessLevel
2732    :param duration_in_seconds: Required. Time duration in seconds until the SAS access expires.
2733    :type duration_in_seconds: int
2734    """
2735
2736    _validation = {
2737        'access': {'required': True},
2738        'duration_in_seconds': {'required': True},
2739    }
2740
2741    _attribute_map = {
2742        'access': {'key': 'access', 'type': 'str'},
2743        'duration_in_seconds': {'key': 'durationInSeconds', 'type': 'int'},
2744    }
2745
2746    def __init__(
2747        self,
2748        *,
2749        access: Union[str, "AccessLevel"],
2750        duration_in_seconds: int,
2751        **kwargs
2752    ):
2753        super(GrantAccessData, self).__init__(**kwargs)
2754        self.access = access
2755        self.duration_in_seconds = duration_in_seconds
2756
2757
2758class HardwareProfile(msrest.serialization.Model):
2759    """Specifies the hardware settings for the virtual machine.
2760
2761    :param vm_size: Specifies the size of the virtual machine. For more information about virtual
2762     machine sizes, see `Sizes for virtual machines
2763     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
2764     :code:`<br>`:code:`<br>` The available VM sizes depend on region and availability set. For a
2765     list of available sizes use these APIs:  :code:`<br>`:code:`<br>` `List all available virtual
2766     machine sizes in an availability set
2767     <https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes>`_
2768     :code:`<br>`:code:`<br>` `List all available virtual machine sizes in a region
2769     <https://docs.microsoft.com/rest/api/compute/virtualmachinesizes/list>`_
2770     :code:`<br>`:code:`<br>` `List all available virtual machine sizes for resizing
2771     <https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes>`_. Possible
2772     values include: "Basic_A0", "Basic_A1", "Basic_A2", "Basic_A3", "Basic_A4", "Standard_A0",
2773     "Standard_A1", "Standard_A2", "Standard_A3", "Standard_A4", "Standard_A5", "Standard_A6",
2774     "Standard_A7", "Standard_A8", "Standard_A9", "Standard_A10", "Standard_A11", "Standard_A1_v2",
2775     "Standard_A2_v2", "Standard_A4_v2", "Standard_A8_v2", "Standard_A2m_v2", "Standard_A4m_v2",
2776     "Standard_A8m_v2", "Standard_B1s", "Standard_B1ms", "Standard_B2s", "Standard_B2ms",
2777     "Standard_B4ms", "Standard_B8ms", "Standard_D1", "Standard_D2", "Standard_D3", "Standard_D4",
2778     "Standard_D11", "Standard_D12", "Standard_D13", "Standard_D14", "Standard_D1_v2",
2779     "Standard_D2_v2", "Standard_D3_v2", "Standard_D4_v2", "Standard_D5_v2", "Standard_D2_v3",
2780     "Standard_D4_v3", "Standard_D8_v3", "Standard_D16_v3", "Standard_D32_v3", "Standard_D64_v3",
2781     "Standard_D2s_v3", "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3",
2782     "Standard_D32s_v3", "Standard_D64s_v3", "Standard_D11_v2", "Standard_D12_v2",
2783     "Standard_D13_v2", "Standard_D14_v2", "Standard_D15_v2", "Standard_DS1", "Standard_DS2",
2784     "Standard_DS3", "Standard_DS4", "Standard_DS11", "Standard_DS12", "Standard_DS13",
2785     "Standard_DS14", "Standard_DS1_v2", "Standard_DS2_v2", "Standard_DS3_v2", "Standard_DS4_v2",
2786     "Standard_DS5_v2", "Standard_DS11_v2", "Standard_DS12_v2", "Standard_DS13_v2",
2787     "Standard_DS14_v2", "Standard_DS15_v2", "Standard_DS13-4_v2", "Standard_DS13-2_v2",
2788     "Standard_DS14-8_v2", "Standard_DS14-4_v2", "Standard_E2_v3", "Standard_E4_v3",
2789     "Standard_E8_v3", "Standard_E16_v3", "Standard_E32_v3", "Standard_E64_v3", "Standard_E2s_v3",
2790     "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E32s_v3",
2791     "Standard_E64s_v3", "Standard_E32-16_v3", "Standard_E32-8s_v3", "Standard_E64-32s_v3",
2792     "Standard_E64-16s_v3", "Standard_F1", "Standard_F2", "Standard_F4", "Standard_F8",
2793     "Standard_F16", "Standard_F1s", "Standard_F2s", "Standard_F4s", "Standard_F8s",
2794     "Standard_F16s", "Standard_F2s_v2", "Standard_F4s_v2", "Standard_F8s_v2", "Standard_F16s_v2",
2795     "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_G1", "Standard_G2",
2796     "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", "Standard_GS3",
2797     "Standard_GS4", "Standard_GS5", "Standard_GS4-8", "Standard_GS4-4", "Standard_GS5-16",
2798     "Standard_GS5-8", "Standard_H8", "Standard_H16", "Standard_H8m", "Standard_H16m",
2799     "Standard_H16r", "Standard_H16mr", "Standard_L4s", "Standard_L8s", "Standard_L16s",
2800     "Standard_L32s", "Standard_M64s", "Standard_M64ms", "Standard_M128s", "Standard_M128ms",
2801     "Standard_M64-32ms", "Standard_M64-16ms", "Standard_M128-64ms", "Standard_M128-32ms",
2802     "Standard_NC6", "Standard_NC12", "Standard_NC24", "Standard_NC24r", "Standard_NC6s_v2",
2803     "Standard_NC12s_v2", "Standard_NC24s_v2", "Standard_NC24rs_v2", "Standard_NC6s_v3",
2804     "Standard_NC12s_v3", "Standard_NC24s_v3", "Standard_NC24rs_v3", "Standard_ND6s",
2805     "Standard_ND12s", "Standard_ND24s", "Standard_ND24rs", "Standard_NV6", "Standard_NV12",
2806     "Standard_NV24".
2807    :type vm_size: str or ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineSizeTypes
2808    """
2809
2810    _attribute_map = {
2811        'vm_size': {'key': 'vmSize', 'type': 'str'},
2812    }
2813
2814    def __init__(
2815        self,
2816        *,
2817        vm_size: Optional[Union[str, "VirtualMachineSizeTypes"]] = None,
2818        **kwargs
2819    ):
2820        super(HardwareProfile, self).__init__(**kwargs)
2821        self.vm_size = vm_size
2822
2823
2824class Image(Resource):
2825    """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.
2826
2827    Variables are only populated by the server, and will be ignored when sending a request.
2828
2829    All required parameters must be populated in order to send to Azure.
2830
2831    :ivar id: Resource Id.
2832    :vartype id: str
2833    :ivar name: Resource name.
2834    :vartype name: str
2835    :ivar type: Resource type.
2836    :vartype type: str
2837    :param location: Required. Resource location.
2838    :type location: str
2839    :param tags: A set of tags. Resource tags.
2840    :type tags: dict[str, str]
2841    :param source_virtual_machine: The source virtual machine from which Image is created.
2842    :type source_virtual_machine: ~azure.mgmt.compute.v2019_03_01.models.SubResource
2843    :param storage_profile: Specifies the storage settings for the virtual machine disks.
2844    :type storage_profile: ~azure.mgmt.compute.v2019_03_01.models.ImageStorageProfile
2845    :ivar provisioning_state: The provisioning state.
2846    :vartype provisioning_state: str
2847    :param hyper_v_generation: Gets the HyperVGenerationType of the VirtualMachine created from the
2848     image. Possible values include: "V1", "V2".
2849    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_03_01.models.HyperVGenerationTypes
2850    """
2851
2852    _validation = {
2853        'id': {'readonly': True},
2854        'name': {'readonly': True},
2855        'type': {'readonly': True},
2856        'location': {'required': True},
2857        'provisioning_state': {'readonly': True},
2858    }
2859
2860    _attribute_map = {
2861        'id': {'key': 'id', 'type': 'str'},
2862        'name': {'key': 'name', 'type': 'str'},
2863        'type': {'key': 'type', 'type': 'str'},
2864        'location': {'key': 'location', 'type': 'str'},
2865        'tags': {'key': 'tags', 'type': '{str}'},
2866        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
2867        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
2868        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2869        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
2870    }
2871
2872    def __init__(
2873        self,
2874        *,
2875        location: str,
2876        tags: Optional[Dict[str, str]] = None,
2877        source_virtual_machine: Optional["SubResource"] = None,
2878        storage_profile: Optional["ImageStorageProfile"] = None,
2879        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
2880        **kwargs
2881    ):
2882        super(Image, self).__init__(location=location, tags=tags, **kwargs)
2883        self.source_virtual_machine = source_virtual_machine
2884        self.storage_profile = storage_profile
2885        self.provisioning_state = None
2886        self.hyper_v_generation = hyper_v_generation
2887
2888
2889class ImageDataDisk(msrest.serialization.Model):
2890    """Describes a data disk.
2891
2892    All required parameters must be populated in order to send to Azure.
2893
2894    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
2895     identify data disks within the VM and therefore must be unique for each data disk attached to a
2896     VM.
2897    :type lun: int
2898    :param snapshot: The snapshot.
2899    :type snapshot: ~azure.mgmt.compute.v2019_03_01.models.SubResource
2900    :param managed_disk: The managedDisk.
2901    :type managed_disk: ~azure.mgmt.compute.v2019_03_01.models.SubResource
2902    :param blob_uri: The Virtual Hard Disk.
2903    :type blob_uri: str
2904    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
2905     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
2906     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
2907     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
2908     "ReadWrite".
2909    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
2910    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
2911     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
2912     This value cannot be larger than 1023 GB.
2913    :type disk_size_gb: int
2914    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
2915     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
2916     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
2917    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountTypes
2918    """
2919
2920    _validation = {
2921        'lun': {'required': True},
2922    }
2923
2924    _attribute_map = {
2925        'lun': {'key': 'lun', 'type': 'int'},
2926        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
2927        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
2928        'blob_uri': {'key': 'blobUri', 'type': 'str'},
2929        'caching': {'key': 'caching', 'type': 'str'},
2930        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
2931        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
2932    }
2933
2934    def __init__(
2935        self,
2936        *,
2937        lun: int,
2938        snapshot: Optional["SubResource"] = None,
2939        managed_disk: Optional["SubResource"] = None,
2940        blob_uri: Optional[str] = None,
2941        caching: Optional[Union[str, "CachingTypes"]] = None,
2942        disk_size_gb: Optional[int] = None,
2943        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
2944        **kwargs
2945    ):
2946        super(ImageDataDisk, self).__init__(**kwargs)
2947        self.lun = lun
2948        self.snapshot = snapshot
2949        self.managed_disk = managed_disk
2950        self.blob_uri = blob_uri
2951        self.caching = caching
2952        self.disk_size_gb = disk_size_gb
2953        self.storage_account_type = storage_account_type
2954
2955
2956class ImageDiskReference(msrest.serialization.Model):
2957    """The source image used for creating the disk.
2958
2959    All required parameters must be populated in order to send to Azure.
2960
2961    :param id: Required. A relative uri containing either a Platform Image Repository or user image
2962     reference.
2963    :type id: str
2964    :param lun: If the disk is created from an image's data disk, this is an index that indicates
2965     which of the data disks in the image to use. For OS disks, this field is null.
2966    :type lun: int
2967    """
2968
2969    _validation = {
2970        'id': {'required': True},
2971    }
2972
2973    _attribute_map = {
2974        'id': {'key': 'id', 'type': 'str'},
2975        'lun': {'key': 'lun', 'type': 'int'},
2976    }
2977
2978    def __init__(
2979        self,
2980        *,
2981        id: str,
2982        lun: Optional[int] = None,
2983        **kwargs
2984    ):
2985        super(ImageDiskReference, self).__init__(**kwargs)
2986        self.id = id
2987        self.lun = lun
2988
2989
2990class ImageListResult(msrest.serialization.Model):
2991    """The List Image operation response.
2992
2993    All required parameters must be populated in order to send to Azure.
2994
2995    :param value: Required. The list of Images.
2996    :type value: list[~azure.mgmt.compute.v2019_03_01.models.Image]
2997    :param next_link: The uri to fetch the next page of Images. Call ListNext() with this to fetch
2998     the next page of Images.
2999    :type next_link: str
3000    """
3001
3002    _validation = {
3003        'value': {'required': True},
3004    }
3005
3006    _attribute_map = {
3007        'value': {'key': 'value', 'type': '[Image]'},
3008        'next_link': {'key': 'nextLink', 'type': 'str'},
3009    }
3010
3011    def __init__(
3012        self,
3013        *,
3014        value: List["Image"],
3015        next_link: Optional[str] = None,
3016        **kwargs
3017    ):
3018        super(ImageListResult, self).__init__(**kwargs)
3019        self.value = value
3020        self.next_link = next_link
3021
3022
3023class ImageOSDisk(msrest.serialization.Model):
3024    """Describes an Operating System disk.
3025
3026    All required parameters must be populated in order to send to Azure.
3027
3028    :param os_type: Required. This property allows you to specify the type of the OS that is
3029     included in the disk if creating a VM from a custom image. :code:`<br>`:code:`<br>` Possible
3030     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
3031     values include: "Windows", "Linux".
3032    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
3033    :param os_state: Required. The OS State. Possible values include: "Generalized", "Specialized".
3034    :type os_state: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemStateTypes
3035    :param snapshot: The snapshot.
3036    :type snapshot: ~azure.mgmt.compute.v2019_03_01.models.SubResource
3037    :param managed_disk: The managedDisk.
3038    :type managed_disk: ~azure.mgmt.compute.v2019_03_01.models.SubResource
3039    :param blob_uri: The Virtual Hard Disk.
3040    :type blob_uri: str
3041    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
3042     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
3043     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
3044     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
3045     "ReadWrite".
3046    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
3047    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
3048     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
3049     This value cannot be larger than 1023 GB.
3050    :type disk_size_gb: int
3051    :param storage_account_type: Specifies the storage account type for the managed disk.
3052     UltraSSD_LRS cannot be used with OS Disk. Possible values include: "Standard_LRS",
3053     "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
3054    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountTypes
3055    """
3056
3057    _validation = {
3058        'os_type': {'required': True},
3059        'os_state': {'required': True},
3060    }
3061
3062    _attribute_map = {
3063        'os_type': {'key': 'osType', 'type': 'str'},
3064        'os_state': {'key': 'osState', 'type': 'str'},
3065        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
3066        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
3067        'blob_uri': {'key': 'blobUri', 'type': 'str'},
3068        'caching': {'key': 'caching', 'type': 'str'},
3069        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3070        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3071    }
3072
3073    def __init__(
3074        self,
3075        *,
3076        os_type: Union[str, "OperatingSystemTypes"],
3077        os_state: Union[str, "OperatingSystemStateTypes"],
3078        snapshot: Optional["SubResource"] = None,
3079        managed_disk: Optional["SubResource"] = None,
3080        blob_uri: Optional[str] = None,
3081        caching: Optional[Union[str, "CachingTypes"]] = None,
3082        disk_size_gb: Optional[int] = None,
3083        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3084        **kwargs
3085    ):
3086        super(ImageOSDisk, self).__init__(**kwargs)
3087        self.os_type = os_type
3088        self.os_state = os_state
3089        self.snapshot = snapshot
3090        self.managed_disk = managed_disk
3091        self.blob_uri = blob_uri
3092        self.caching = caching
3093        self.disk_size_gb = disk_size_gb
3094        self.storage_account_type = storage_account_type
3095
3096
3097class ImagePurchasePlan(msrest.serialization.Model):
3098    """Describes the gallery Image Definition purchase plan. This is used by marketplace images.
3099
3100    :param name: The plan ID.
3101    :type name: str
3102    :param publisher: The publisher ID.
3103    :type publisher: str
3104    :param product: The product ID.
3105    :type product: str
3106    """
3107
3108    _attribute_map = {
3109        'name': {'key': 'name', 'type': 'str'},
3110        'publisher': {'key': 'publisher', 'type': 'str'},
3111        'product': {'key': 'product', 'type': 'str'},
3112    }
3113
3114    def __init__(
3115        self,
3116        *,
3117        name: Optional[str] = None,
3118        publisher: Optional[str] = None,
3119        product: Optional[str] = None,
3120        **kwargs
3121    ):
3122        super(ImagePurchasePlan, self).__init__(**kwargs)
3123        self.name = name
3124        self.publisher = publisher
3125        self.product = product
3126
3127
3128class SubResource(msrest.serialization.Model):
3129    """SubResource.
3130
3131    :param id: Resource Id.
3132    :type id: str
3133    """
3134
3135    _attribute_map = {
3136        'id': {'key': 'id', 'type': 'str'},
3137    }
3138
3139    def __init__(
3140        self,
3141        *,
3142        id: Optional[str] = None,
3143        **kwargs
3144    ):
3145        super(SubResource, self).__init__(**kwargs)
3146        self.id = id
3147
3148
3149class ImageReference(SubResource):
3150    """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.
3151
3152    :param id: Resource Id.
3153    :type id: str
3154    :param publisher: The image publisher.
3155    :type publisher: str
3156    :param offer: Specifies the offer of the platform image or marketplace image used to create the
3157     virtual machine.
3158    :type offer: str
3159    :param sku: The image SKU.
3160    :type sku: str
3161    :param version: Specifies the version of the platform image or marketplace image used to create
3162     the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and
3163     Build are decimal numbers. Specify 'latest' to use the latest version of an image available at
3164     deploy time. Even if you use 'latest', the VM image will not automatically update after deploy
3165     time even if a new version becomes available.
3166    :type version: str
3167    """
3168
3169    _attribute_map = {
3170        'id': {'key': 'id', 'type': 'str'},
3171        'publisher': {'key': 'publisher', 'type': 'str'},
3172        'offer': {'key': 'offer', 'type': 'str'},
3173        'sku': {'key': 'sku', 'type': 'str'},
3174        'version': {'key': 'version', 'type': 'str'},
3175    }
3176
3177    def __init__(
3178        self,
3179        *,
3180        id: Optional[str] = None,
3181        publisher: Optional[str] = None,
3182        offer: Optional[str] = None,
3183        sku: Optional[str] = None,
3184        version: Optional[str] = None,
3185        **kwargs
3186    ):
3187        super(ImageReference, self).__init__(id=id, **kwargs)
3188        self.publisher = publisher
3189        self.offer = offer
3190        self.sku = sku
3191        self.version = version
3192
3193
3194class ImageStorageProfile(msrest.serialization.Model):
3195    """Describes a storage profile.
3196
3197    :param os_disk: Specifies information about the operating system disk used by the virtual
3198     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
3199     for Azure virtual machines
3200     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3201    :type os_disk: ~azure.mgmt.compute.v2019_03_01.models.ImageOSDisk
3202    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
3203     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
3204     for Azure virtual machines
3205     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3206    :type data_disks: list[~azure.mgmt.compute.v2019_03_01.models.ImageDataDisk]
3207    :param zone_resilient: Specifies whether an image is zone resilient or not. Default is false.
3208     Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS).
3209    :type zone_resilient: bool
3210    """
3211
3212    _attribute_map = {
3213        'os_disk': {'key': 'osDisk', 'type': 'ImageOSDisk'},
3214        'data_disks': {'key': 'dataDisks', 'type': '[ImageDataDisk]'},
3215        'zone_resilient': {'key': 'zoneResilient', 'type': 'bool'},
3216    }
3217
3218    def __init__(
3219        self,
3220        *,
3221        os_disk: Optional["ImageOSDisk"] = None,
3222        data_disks: Optional[List["ImageDataDisk"]] = None,
3223        zone_resilient: Optional[bool] = None,
3224        **kwargs
3225    ):
3226        super(ImageStorageProfile, self).__init__(**kwargs)
3227        self.os_disk = os_disk
3228        self.data_disks = data_disks
3229        self.zone_resilient = zone_resilient
3230
3231
3232class ImageUpdate(UpdateResource):
3233    """The source user image virtual hard disk. Only tags may be updated.
3234
3235    Variables are only populated by the server, and will be ignored when sending a request.
3236
3237    :param tags: A set of tags. Resource tags.
3238    :type tags: dict[str, str]
3239    :param source_virtual_machine: The source virtual machine from which Image is created.
3240    :type source_virtual_machine: ~azure.mgmt.compute.v2019_03_01.models.SubResource
3241    :param storage_profile: Specifies the storage settings for the virtual machine disks.
3242    :type storage_profile: ~azure.mgmt.compute.v2019_03_01.models.ImageStorageProfile
3243    :ivar provisioning_state: The provisioning state.
3244    :vartype provisioning_state: str
3245    :param hyper_v_generation: Gets the HyperVGenerationType of the VirtualMachine created from the
3246     image. Possible values include: "V1", "V2".
3247    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_03_01.models.HyperVGenerationTypes
3248    """
3249
3250    _validation = {
3251        'provisioning_state': {'readonly': True},
3252    }
3253
3254    _attribute_map = {
3255        'tags': {'key': 'tags', 'type': '{str}'},
3256        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
3257        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
3258        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3259        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
3260    }
3261
3262    def __init__(
3263        self,
3264        *,
3265        tags: Optional[Dict[str, str]] = None,
3266        source_virtual_machine: Optional["SubResource"] = None,
3267        storage_profile: Optional["ImageStorageProfile"] = None,
3268        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
3269        **kwargs
3270    ):
3271        super(ImageUpdate, self).__init__(tags=tags, **kwargs)
3272        self.source_virtual_machine = source_virtual_machine
3273        self.storage_profile = storage_profile
3274        self.provisioning_state = None
3275        self.hyper_v_generation = hyper_v_generation
3276
3277
3278class InnerError(msrest.serialization.Model):
3279    """Inner error details.
3280
3281    :param exceptiontype: The exception type.
3282    :type exceptiontype: str
3283    :param errordetail: The internal error message or exception dump.
3284    :type errordetail: str
3285    """
3286
3287    _attribute_map = {
3288        'exceptiontype': {'key': 'exceptiontype', 'type': 'str'},
3289        'errordetail': {'key': 'errordetail', 'type': 'str'},
3290    }
3291
3292    def __init__(
3293        self,
3294        *,
3295        exceptiontype: Optional[str] = None,
3296        errordetail: Optional[str] = None,
3297        **kwargs
3298    ):
3299        super(InnerError, self).__init__(**kwargs)
3300        self.exceptiontype = exceptiontype
3301        self.errordetail = errordetail
3302
3303
3304class InstanceViewStatus(msrest.serialization.Model):
3305    """Instance view status.
3306
3307    :param code: The status code.
3308    :type code: str
3309    :param level: The level code. Possible values include: "Info", "Warning", "Error".
3310    :type level: str or ~azure.mgmt.compute.v2019_03_01.models.StatusLevelTypes
3311    :param display_status: The short localizable label for the status.
3312    :type display_status: str
3313    :param message: The detailed status message, including for alerts and error messages.
3314    :type message: str
3315    :param time: The time of the status.
3316    :type time: ~datetime.datetime
3317    """
3318
3319    _attribute_map = {
3320        'code': {'key': 'code', 'type': 'str'},
3321        'level': {'key': 'level', 'type': 'str'},
3322        'display_status': {'key': 'displayStatus', 'type': 'str'},
3323        'message': {'key': 'message', 'type': 'str'},
3324        'time': {'key': 'time', 'type': 'iso-8601'},
3325    }
3326
3327    def __init__(
3328        self,
3329        *,
3330        code: Optional[str] = None,
3331        level: Optional[Union[str, "StatusLevelTypes"]] = None,
3332        display_status: Optional[str] = None,
3333        message: Optional[str] = None,
3334        time: Optional[datetime.datetime] = None,
3335        **kwargs
3336    ):
3337        super(InstanceViewStatus, self).__init__(**kwargs)
3338        self.code = code
3339        self.level = level
3340        self.display_status = display_status
3341        self.message = message
3342        self.time = time
3343
3344
3345class KeyVaultAndKeyReference(msrest.serialization.Model):
3346    """Key Vault Key Url and vault id of KeK, KeK is optional and when provided is used to unwrap the encryptionKey.
3347
3348    All required parameters must be populated in order to send to Azure.
3349
3350    :param source_vault: Required. Resource id of the KeyVault containing the key or secret.
3351    :type source_vault: ~azure.mgmt.compute.v2019_03_01.models.SourceVault
3352    :param key_url: Required. Url pointing to a key or secret in KeyVault.
3353    :type key_url: str
3354    """
3355
3356    _validation = {
3357        'source_vault': {'required': True},
3358        'key_url': {'required': True},
3359    }
3360
3361    _attribute_map = {
3362        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
3363        'key_url': {'key': 'keyUrl', 'type': 'str'},
3364    }
3365
3366    def __init__(
3367        self,
3368        *,
3369        source_vault: "SourceVault",
3370        key_url: str,
3371        **kwargs
3372    ):
3373        super(KeyVaultAndKeyReference, self).__init__(**kwargs)
3374        self.source_vault = source_vault
3375        self.key_url = key_url
3376
3377
3378class KeyVaultAndSecretReference(msrest.serialization.Model):
3379    """Key Vault Secret Url and vault id of the encryption key.
3380
3381    All required parameters must be populated in order to send to Azure.
3382
3383    :param source_vault: Required. Resource id of the KeyVault containing the key or secret.
3384    :type source_vault: ~azure.mgmt.compute.v2019_03_01.models.SourceVault
3385    :param secret_url: Required. Url pointing to a key or secret in KeyVault.
3386    :type secret_url: str
3387    """
3388
3389    _validation = {
3390        'source_vault': {'required': True},
3391        'secret_url': {'required': True},
3392    }
3393
3394    _attribute_map = {
3395        'source_vault': {'key': 'sourceVault', 'type': 'SourceVault'},
3396        'secret_url': {'key': 'secretUrl', 'type': 'str'},
3397    }
3398
3399    def __init__(
3400        self,
3401        *,
3402        source_vault: "SourceVault",
3403        secret_url: str,
3404        **kwargs
3405    ):
3406        super(KeyVaultAndSecretReference, self).__init__(**kwargs)
3407        self.source_vault = source_vault
3408        self.secret_url = secret_url
3409
3410
3411class KeyVaultKeyReference(msrest.serialization.Model):
3412    """Describes a reference to Key Vault Key.
3413
3414    All required parameters must be populated in order to send to Azure.
3415
3416    :param key_url: Required. The URL referencing a key encryption key in Key Vault.
3417    :type key_url: str
3418    :param source_vault: Required. The relative URL of the Key Vault containing the key.
3419    :type source_vault: ~azure.mgmt.compute.v2019_03_01.models.SubResource
3420    """
3421
3422    _validation = {
3423        'key_url': {'required': True},
3424        'source_vault': {'required': True},
3425    }
3426
3427    _attribute_map = {
3428        'key_url': {'key': 'keyUrl', 'type': 'str'},
3429        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
3430    }
3431
3432    def __init__(
3433        self,
3434        *,
3435        key_url: str,
3436        source_vault: "SubResource",
3437        **kwargs
3438    ):
3439        super(KeyVaultKeyReference, self).__init__(**kwargs)
3440        self.key_url = key_url
3441        self.source_vault = source_vault
3442
3443
3444class KeyVaultSecretReference(msrest.serialization.Model):
3445    """Describes a reference to Key Vault Secret.
3446
3447    All required parameters must be populated in order to send to Azure.
3448
3449    :param secret_url: Required. The URL referencing a secret in a Key Vault.
3450    :type secret_url: str
3451    :param source_vault: Required. The relative URL of the Key Vault containing the secret.
3452    :type source_vault: ~azure.mgmt.compute.v2019_03_01.models.SubResource
3453    """
3454
3455    _validation = {
3456        'secret_url': {'required': True},
3457        'source_vault': {'required': True},
3458    }
3459
3460    _attribute_map = {
3461        'secret_url': {'key': 'secretUrl', 'type': 'str'},
3462        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
3463    }
3464
3465    def __init__(
3466        self,
3467        *,
3468        secret_url: str,
3469        source_vault: "SubResource",
3470        **kwargs
3471    ):
3472        super(KeyVaultSecretReference, self).__init__(**kwargs)
3473        self.secret_url = secret_url
3474        self.source_vault = source_vault
3475
3476
3477class LinuxConfiguration(msrest.serialization.Model):
3478    """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>`_.
3479
3480    :param disable_password_authentication: Specifies whether password authentication should be
3481     disabled.
3482    :type disable_password_authentication: bool
3483    :param ssh: Specifies the ssh key configuration for a Linux OS.
3484    :type ssh: ~azure.mgmt.compute.v2019_03_01.models.SshConfiguration
3485    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
3486     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
3487     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
3488     the VM so that extensions can be added to the VM later.
3489    :type provision_vm_agent: bool
3490    """
3491
3492    _attribute_map = {
3493        'disable_password_authentication': {'key': 'disablePasswordAuthentication', 'type': 'bool'},
3494        'ssh': {'key': 'ssh', 'type': 'SshConfiguration'},
3495        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
3496    }
3497
3498    def __init__(
3499        self,
3500        *,
3501        disable_password_authentication: Optional[bool] = None,
3502        ssh: Optional["SshConfiguration"] = None,
3503        provision_vm_agent: Optional[bool] = None,
3504        **kwargs
3505    ):
3506        super(LinuxConfiguration, self).__init__(**kwargs)
3507        self.disable_password_authentication = disable_password_authentication
3508        self.ssh = ssh
3509        self.provision_vm_agent = provision_vm_agent
3510
3511
3512class ListUsagesResult(msrest.serialization.Model):
3513    """The List Usages operation response.
3514
3515    All required parameters must be populated in order to send to Azure.
3516
3517    :param value: Required. The list of compute resource usages.
3518    :type value: list[~azure.mgmt.compute.v2019_03_01.models.Usage]
3519    :param next_link: The URI to fetch the next page of compute resource usage information. Call
3520     ListNext() with this to fetch the next page of compute resource usage information.
3521    :type next_link: str
3522    """
3523
3524    _validation = {
3525        'value': {'required': True},
3526    }
3527
3528    _attribute_map = {
3529        'value': {'key': 'value', 'type': '[Usage]'},
3530        'next_link': {'key': 'nextLink', 'type': 'str'},
3531    }
3532
3533    def __init__(
3534        self,
3535        *,
3536        value: List["Usage"],
3537        next_link: Optional[str] = None,
3538        **kwargs
3539    ):
3540        super(ListUsagesResult, self).__init__(**kwargs)
3541        self.value = value
3542        self.next_link = next_link
3543
3544
3545class LogAnalyticsInputBase(msrest.serialization.Model):
3546    """Api input base class for LogAnalytics Api.
3547
3548    All required parameters must be populated in order to send to Azure.
3549
3550    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
3551     LogAnalytics Api writes output logs to.
3552    :type blob_container_sas_uri: str
3553    :param from_time: Required. From time of the query.
3554    :type from_time: ~datetime.datetime
3555    :param to_time: Required. To time of the query.
3556    :type to_time: ~datetime.datetime
3557    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
3558    :type group_by_throttle_policy: bool
3559    :param group_by_operation_name: Group query result by Operation Name.
3560    :type group_by_operation_name: bool
3561    :param group_by_resource_name: Group query result by Resource Name.
3562    :type group_by_resource_name: bool
3563    """
3564
3565    _validation = {
3566        'blob_container_sas_uri': {'required': True},
3567        'from_time': {'required': True},
3568        'to_time': {'required': True},
3569    }
3570
3571    _attribute_map = {
3572        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
3573        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
3574        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
3575        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
3576        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
3577        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
3578    }
3579
3580    def __init__(
3581        self,
3582        *,
3583        blob_container_sas_uri: str,
3584        from_time: datetime.datetime,
3585        to_time: datetime.datetime,
3586        group_by_throttle_policy: Optional[bool] = None,
3587        group_by_operation_name: Optional[bool] = None,
3588        group_by_resource_name: Optional[bool] = None,
3589        **kwargs
3590    ):
3591        super(LogAnalyticsInputBase, self).__init__(**kwargs)
3592        self.blob_container_sas_uri = blob_container_sas_uri
3593        self.from_time = from_time
3594        self.to_time = to_time
3595        self.group_by_throttle_policy = group_by_throttle_policy
3596        self.group_by_operation_name = group_by_operation_name
3597        self.group_by_resource_name = group_by_resource_name
3598
3599
3600class LogAnalyticsOperationResult(msrest.serialization.Model):
3601    """LogAnalytics operation status response.
3602
3603    Variables are only populated by the server, and will be ignored when sending a request.
3604
3605    :ivar properties: LogAnalyticsOutput.
3606    :vartype properties: ~azure.mgmt.compute.v2019_03_01.models.LogAnalyticsOutput
3607    """
3608
3609    _validation = {
3610        'properties': {'readonly': True},
3611    }
3612
3613    _attribute_map = {
3614        'properties': {'key': 'properties', 'type': 'LogAnalyticsOutput'},
3615    }
3616
3617    def __init__(
3618        self,
3619        **kwargs
3620    ):
3621        super(LogAnalyticsOperationResult, self).__init__(**kwargs)
3622        self.properties = None
3623
3624
3625class LogAnalyticsOutput(msrest.serialization.Model):
3626    """LogAnalytics output properties.
3627
3628    Variables are only populated by the server, and will be ignored when sending a request.
3629
3630    :ivar output: Output file Uri path to blob container.
3631    :vartype output: str
3632    """
3633
3634    _validation = {
3635        'output': {'readonly': True},
3636    }
3637
3638    _attribute_map = {
3639        'output': {'key': 'output', 'type': 'str'},
3640    }
3641
3642    def __init__(
3643        self,
3644        **kwargs
3645    ):
3646        super(LogAnalyticsOutput, self).__init__(**kwargs)
3647        self.output = None
3648
3649
3650class MaintenanceRedeployStatus(msrest.serialization.Model):
3651    """Maintenance Operation Status.
3652
3653    :param is_customer_initiated_maintenance_allowed: True, if customer is allowed to perform
3654     Maintenance.
3655    :type is_customer_initiated_maintenance_allowed: bool
3656    :param pre_maintenance_window_start_time: Start Time for the Pre Maintenance Window.
3657    :type pre_maintenance_window_start_time: ~datetime.datetime
3658    :param pre_maintenance_window_end_time: End Time for the Pre Maintenance Window.
3659    :type pre_maintenance_window_end_time: ~datetime.datetime
3660    :param maintenance_window_start_time: Start Time for the Maintenance Window.
3661    :type maintenance_window_start_time: ~datetime.datetime
3662    :param maintenance_window_end_time: End Time for the Maintenance Window.
3663    :type maintenance_window_end_time: ~datetime.datetime
3664    :param last_operation_result_code: The Last Maintenance Operation Result Code. Possible values
3665     include: "None", "RetryLater", "MaintenanceAborted", "MaintenanceCompleted".
3666    :type last_operation_result_code: str or
3667     ~azure.mgmt.compute.v2019_03_01.models.MaintenanceOperationResultCodeTypes
3668    :param last_operation_message: Message returned for the last Maintenance Operation.
3669    :type last_operation_message: str
3670    """
3671
3672    _attribute_map = {
3673        'is_customer_initiated_maintenance_allowed': {'key': 'isCustomerInitiatedMaintenanceAllowed', 'type': 'bool'},
3674        'pre_maintenance_window_start_time': {'key': 'preMaintenanceWindowStartTime', 'type': 'iso-8601'},
3675        'pre_maintenance_window_end_time': {'key': 'preMaintenanceWindowEndTime', 'type': 'iso-8601'},
3676        'maintenance_window_start_time': {'key': 'maintenanceWindowStartTime', 'type': 'iso-8601'},
3677        'maintenance_window_end_time': {'key': 'maintenanceWindowEndTime', 'type': 'iso-8601'},
3678        'last_operation_result_code': {'key': 'lastOperationResultCode', 'type': 'str'},
3679        'last_operation_message': {'key': 'lastOperationMessage', 'type': 'str'},
3680    }
3681
3682    def __init__(
3683        self,
3684        *,
3685        is_customer_initiated_maintenance_allowed: Optional[bool] = None,
3686        pre_maintenance_window_start_time: Optional[datetime.datetime] = None,
3687        pre_maintenance_window_end_time: Optional[datetime.datetime] = None,
3688        maintenance_window_start_time: Optional[datetime.datetime] = None,
3689        maintenance_window_end_time: Optional[datetime.datetime] = None,
3690        last_operation_result_code: Optional[Union[str, "MaintenanceOperationResultCodeTypes"]] = None,
3691        last_operation_message: Optional[str] = None,
3692        **kwargs
3693    ):
3694        super(MaintenanceRedeployStatus, self).__init__(**kwargs)
3695        self.is_customer_initiated_maintenance_allowed = is_customer_initiated_maintenance_allowed
3696        self.pre_maintenance_window_start_time = pre_maintenance_window_start_time
3697        self.pre_maintenance_window_end_time = pre_maintenance_window_end_time
3698        self.maintenance_window_start_time = maintenance_window_start_time
3699        self.maintenance_window_end_time = maintenance_window_end_time
3700        self.last_operation_result_code = last_operation_result_code
3701        self.last_operation_message = last_operation_message
3702
3703
3704class ManagedArtifact(msrest.serialization.Model):
3705    """The managed artifact.
3706
3707    All required parameters must be populated in order to send to Azure.
3708
3709    :param id: Required. The managed artifact id.
3710    :type id: str
3711    """
3712
3713    _validation = {
3714        'id': {'required': True},
3715    }
3716
3717    _attribute_map = {
3718        'id': {'key': 'id', 'type': 'str'},
3719    }
3720
3721    def __init__(
3722        self,
3723        *,
3724        id: str,
3725        **kwargs
3726    ):
3727        super(ManagedArtifact, self).__init__(**kwargs)
3728        self.id = id
3729
3730
3731class ManagedDiskParameters(SubResource):
3732    """The parameters of a managed disk.
3733
3734    :param id: Resource Id.
3735    :type id: str
3736    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
3737     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
3738     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
3739    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountTypes
3740    """
3741
3742    _attribute_map = {
3743        'id': {'key': 'id', 'type': 'str'},
3744        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
3745    }
3746
3747    def __init__(
3748        self,
3749        *,
3750        id: Optional[str] = None,
3751        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
3752        **kwargs
3753    ):
3754        super(ManagedDiskParameters, self).__init__(id=id, **kwargs)
3755        self.storage_account_type = storage_account_type
3756
3757
3758class NetworkInterfaceReference(SubResource):
3759    """Describes a network interface reference.
3760
3761    :param id: Resource Id.
3762    :type id: str
3763    :param primary: Specifies the primary network interface in case the virtual machine has more
3764     than 1 network interface.
3765    :type primary: bool
3766    """
3767
3768    _attribute_map = {
3769        'id': {'key': 'id', 'type': 'str'},
3770        'primary': {'key': 'properties.primary', 'type': 'bool'},
3771    }
3772
3773    def __init__(
3774        self,
3775        *,
3776        id: Optional[str] = None,
3777        primary: Optional[bool] = None,
3778        **kwargs
3779    ):
3780        super(NetworkInterfaceReference, self).__init__(id=id, **kwargs)
3781        self.primary = primary
3782
3783
3784class NetworkProfile(msrest.serialization.Model):
3785    """Specifies the network interfaces of the virtual machine.
3786
3787    :param network_interfaces: Specifies the list of resource Ids for the network interfaces
3788     associated with the virtual machine.
3789    :type network_interfaces:
3790     list[~azure.mgmt.compute.v2019_03_01.models.NetworkInterfaceReference]
3791    """
3792
3793    _attribute_map = {
3794        'network_interfaces': {'key': 'networkInterfaces', 'type': '[NetworkInterfaceReference]'},
3795    }
3796
3797    def __init__(
3798        self,
3799        *,
3800        network_interfaces: Optional[List["NetworkInterfaceReference"]] = None,
3801        **kwargs
3802    ):
3803        super(NetworkProfile, self).__init__(**kwargs)
3804        self.network_interfaces = network_interfaces
3805
3806
3807class OSDisk(msrest.serialization.Model):
3808    """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>`_.
3809
3810    All required parameters must be populated in order to send to Azure.
3811
3812    :param os_type: This property allows you to specify the type of the OS that is included in the
3813     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
3814     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
3815     values include: "Windows", "Linux".
3816    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
3817    :param encryption_settings: Specifies the encryption settings for the OS Disk.
3818     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
3819    :type encryption_settings: ~azure.mgmt.compute.v2019_03_01.models.DiskEncryptionSettings
3820    :param name: The disk name.
3821    :type name: str
3822    :param vhd: The virtual hard disk.
3823    :type vhd: ~azure.mgmt.compute.v2019_03_01.models.VirtualHardDisk
3824    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
3825     before being attached to the virtual machine. If SourceImage is provided, the destination
3826     virtual hard drive must not exist.
3827    :type image: ~azure.mgmt.compute.v2019_03_01.models.VirtualHardDisk
3828    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
3829     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
3830     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
3831     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
3832     "ReadWrite".
3833    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
3834    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
3835     disabled on the disk.
3836    :type write_accelerator_enabled: bool
3837    :param diff_disk_settings: Specifies the ephemeral Disk Settings for the operating system disk
3838     used by the virtual machine.
3839    :type diff_disk_settings: ~azure.mgmt.compute.v2019_03_01.models.DiffDiskSettings
3840    :param create_option: Required. Specifies how the virtual machine should be
3841     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
3842     This value is used when you are using a specialized disk to create the virtual
3843     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
3844     image to create the virtual machine. If you are using a platform image, you also use the
3845     imageReference element described above. If you are using a marketplace image, you  also use the
3846     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
3847    :type create_option: str or ~azure.mgmt.compute.v2019_03_01.models.DiskCreateOptionTypes
3848    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
3849     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
3850     This value cannot be larger than 1023 GB.
3851    :type disk_size_gb: int
3852    :param managed_disk: The managed disk parameters.
3853    :type managed_disk: ~azure.mgmt.compute.v2019_03_01.models.ManagedDiskParameters
3854    """
3855
3856    _validation = {
3857        'create_option': {'required': True},
3858    }
3859
3860    _attribute_map = {
3861        'os_type': {'key': 'osType', 'type': 'str'},
3862        'encryption_settings': {'key': 'encryptionSettings', 'type': 'DiskEncryptionSettings'},
3863        'name': {'key': 'name', 'type': 'str'},
3864        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
3865        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
3866        'caching': {'key': 'caching', 'type': 'str'},
3867        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
3868        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
3869        'create_option': {'key': 'createOption', 'type': 'str'},
3870        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
3871        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
3872    }
3873
3874    def __init__(
3875        self,
3876        *,
3877        create_option: Union[str, "DiskCreateOptionTypes"],
3878        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
3879        encryption_settings: Optional["DiskEncryptionSettings"] = None,
3880        name: Optional[str] = None,
3881        vhd: Optional["VirtualHardDisk"] = None,
3882        image: Optional["VirtualHardDisk"] = None,
3883        caching: Optional[Union[str, "CachingTypes"]] = None,
3884        write_accelerator_enabled: Optional[bool] = None,
3885        diff_disk_settings: Optional["DiffDiskSettings"] = None,
3886        disk_size_gb: Optional[int] = None,
3887        managed_disk: Optional["ManagedDiskParameters"] = None,
3888        **kwargs
3889    ):
3890        super(OSDisk, self).__init__(**kwargs)
3891        self.os_type = os_type
3892        self.encryption_settings = encryption_settings
3893        self.name = name
3894        self.vhd = vhd
3895        self.image = image
3896        self.caching = caching
3897        self.write_accelerator_enabled = write_accelerator_enabled
3898        self.diff_disk_settings = diff_disk_settings
3899        self.create_option = create_option
3900        self.disk_size_gb = disk_size_gb
3901        self.managed_disk = managed_disk
3902
3903
3904class OSDiskImage(msrest.serialization.Model):
3905    """Contains the os disk image information.
3906
3907    All required parameters must be populated in order to send to Azure.
3908
3909    :param operating_system: Required. The operating system of the osDiskImage. Possible values
3910     include: "Windows", "Linux".
3911    :type operating_system: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
3912    """
3913
3914    _validation = {
3915        'operating_system': {'required': True},
3916    }
3917
3918    _attribute_map = {
3919        'operating_system': {'key': 'operatingSystem', 'type': 'str'},
3920    }
3921
3922    def __init__(
3923        self,
3924        *,
3925        operating_system: Union[str, "OperatingSystemTypes"],
3926        **kwargs
3927    ):
3928        super(OSDiskImage, self).__init__(**kwargs)
3929        self.operating_system = operating_system
3930
3931
3932class OSProfile(msrest.serialization.Model):
3933    """Specifies the operating system settings for the virtual machine.
3934
3935    :param computer_name: Specifies the host OS name of the virtual machine.
3936     :code:`<br>`:code:`<br>` This name cannot be updated after the VM is created.
3937     :code:`<br>`:code:`<br>` **Max-length (Windows):** 15 characters :code:`<br>`:code:`<br>`
3938     **Max-length (Linux):** 64 characters. :code:`<br>`:code:`<br>` For naming conventions and
3939     restrictions see `Azure infrastructure services implementation guidelines
3940     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions>`_.
3941    :type computer_name: str
3942    :param admin_username: Specifies the name of the administrator account.
3943     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
3944     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
3945     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
3946     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
3947     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
3948     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
3949     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
3950     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
3951     root privileges on Linux virtual machines in Azure
3952     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
3953     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
3954     in this field, see `Selecting User Names for Linux on Azure
3955     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
3956    :type admin_username: str
3957    :param admin_password: Specifies the password of the administrator account.
3958     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
3959     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
3960     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
3961     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
3962     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
3963     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
3964     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
3965     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
3966     resetting the password, see `How to reset the Remote Desktop service or its login password in a
3967     Windows VM
3968     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
3969     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
3970     repair disks on Azure Linux VMs using the VMAccess Extension
3971     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
3972    :type admin_password: str
3973    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
3974     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
3975     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` For using cloud-init for
3976     your VM, see `Using cloud-init to customize a Linux VM during creation
3977     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
3978    :type custom_data: str
3979    :param windows_configuration: Specifies Windows operating system settings on the virtual
3980     machine.
3981    :type windows_configuration: ~azure.mgmt.compute.v2019_03_01.models.WindowsConfiguration
3982    :param linux_configuration: Specifies the Linux operating system settings on the virtual
3983     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
3984     Azure-Endorsed Distributions
3985     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
3986     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
3987     Non-Endorsed Distributions
3988     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
3989    :type linux_configuration: ~azure.mgmt.compute.v2019_03_01.models.LinuxConfiguration
3990    :param secrets: Specifies set of certificates that should be installed onto the virtual
3991     machine.
3992    :type secrets: list[~azure.mgmt.compute.v2019_03_01.models.VaultSecretGroup]
3993    :param allow_extension_operations: Specifies whether extension operations should be allowed on
3994     the virtual machine. :code:`<br>`:code:`<br>`This may only be set to False when no extensions
3995     are present on the virtual machine.
3996    :type allow_extension_operations: bool
3997    :param require_guest_provision_signal: Specifies whether the guest provision signal is required
3998     from the virtual machine.
3999    :type require_guest_provision_signal: bool
4000    """
4001
4002    _attribute_map = {
4003        'computer_name': {'key': 'computerName', 'type': 'str'},
4004        'admin_username': {'key': 'adminUsername', 'type': 'str'},
4005        'admin_password': {'key': 'adminPassword', 'type': 'str'},
4006        'custom_data': {'key': 'customData', 'type': 'str'},
4007        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
4008        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
4009        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
4010        'allow_extension_operations': {'key': 'allowExtensionOperations', 'type': 'bool'},
4011        'require_guest_provision_signal': {'key': 'requireGuestProvisionSignal', 'type': 'bool'},
4012    }
4013
4014    def __init__(
4015        self,
4016        *,
4017        computer_name: Optional[str] = None,
4018        admin_username: Optional[str] = None,
4019        admin_password: Optional[str] = None,
4020        custom_data: Optional[str] = None,
4021        windows_configuration: Optional["WindowsConfiguration"] = None,
4022        linux_configuration: Optional["LinuxConfiguration"] = None,
4023        secrets: Optional[List["VaultSecretGroup"]] = None,
4024        allow_extension_operations: Optional[bool] = None,
4025        require_guest_provision_signal: Optional[bool] = None,
4026        **kwargs
4027    ):
4028        super(OSProfile, self).__init__(**kwargs)
4029        self.computer_name = computer_name
4030        self.admin_username = admin_username
4031        self.admin_password = admin_password
4032        self.custom_data = custom_data
4033        self.windows_configuration = windows_configuration
4034        self.linux_configuration = linux_configuration
4035        self.secrets = secrets
4036        self.allow_extension_operations = allow_extension_operations
4037        self.require_guest_provision_signal = require_guest_provision_signal
4038
4039
4040class Plan(msrest.serialization.Model):
4041    """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**.
4042
4043    :param name: The plan ID.
4044    :type name: str
4045    :param publisher: The publisher ID.
4046    :type publisher: str
4047    :param product: Specifies the product of the image from the marketplace. This is the same value
4048     as Offer under the imageReference element.
4049    :type product: str
4050    :param promotion_code: The promotion code.
4051    :type promotion_code: str
4052    """
4053
4054    _attribute_map = {
4055        'name': {'key': 'name', 'type': 'str'},
4056        'publisher': {'key': 'publisher', 'type': 'str'},
4057        'product': {'key': 'product', 'type': 'str'},
4058        'promotion_code': {'key': 'promotionCode', 'type': 'str'},
4059    }
4060
4061    def __init__(
4062        self,
4063        *,
4064        name: Optional[str] = None,
4065        publisher: Optional[str] = None,
4066        product: Optional[str] = None,
4067        promotion_code: Optional[str] = None,
4068        **kwargs
4069    ):
4070        super(Plan, self).__init__(**kwargs)
4071        self.name = name
4072        self.publisher = publisher
4073        self.product = product
4074        self.promotion_code = promotion_code
4075
4076
4077class ProximityPlacementGroup(Resource):
4078    """Specifies information about the proximity placement group.
4079
4080    Variables are only populated by the server, and will be ignored when sending a request.
4081
4082    All required parameters must be populated in order to send to Azure.
4083
4084    :ivar id: Resource Id.
4085    :vartype id: str
4086    :ivar name: Resource name.
4087    :vartype name: str
4088    :ivar type: Resource type.
4089    :vartype type: str
4090    :param location: Required. Resource location.
4091    :type location: str
4092    :param tags: A set of tags. Resource tags.
4093    :type tags: dict[str, str]
4094    :param proximity_placement_group_type: Specifies the type of the proximity placement group.
4095     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Standard** : Co-locate
4096     resources within an Azure region or Availability Zone. :code:`<br>`:code:`<br>` **Ultra** : For
4097     future use. Possible values include: "Standard", "Ultra".
4098    :type proximity_placement_group_type: str or
4099     ~azure.mgmt.compute.v2019_03_01.models.ProximityPlacementGroupType
4100    :ivar virtual_machines: A list of references to all virtual machines in the proximity placement
4101     group.
4102    :vartype virtual_machines: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
4103    :ivar virtual_machine_scale_sets: A list of references to all virtual machine scale sets in the
4104     proximity placement group.
4105    :vartype virtual_machine_scale_sets: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
4106    :ivar availability_sets: A list of references to all availability sets in the proximity
4107     placement group.
4108    :vartype availability_sets: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
4109    """
4110
4111    _validation = {
4112        'id': {'readonly': True},
4113        'name': {'readonly': True},
4114        'type': {'readonly': True},
4115        'location': {'required': True},
4116        'virtual_machines': {'readonly': True},
4117        'virtual_machine_scale_sets': {'readonly': True},
4118        'availability_sets': {'readonly': True},
4119    }
4120
4121    _attribute_map = {
4122        'id': {'key': 'id', 'type': 'str'},
4123        'name': {'key': 'name', 'type': 'str'},
4124        'type': {'key': 'type', 'type': 'str'},
4125        'location': {'key': 'location', 'type': 'str'},
4126        'tags': {'key': 'tags', 'type': '{str}'},
4127        'proximity_placement_group_type': {'key': 'properties.proximityPlacementGroupType', 'type': 'str'},
4128        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
4129        'virtual_machine_scale_sets': {'key': 'properties.virtualMachineScaleSets', 'type': '[SubResource]'},
4130        'availability_sets': {'key': 'properties.availabilitySets', 'type': '[SubResource]'},
4131    }
4132
4133    def __init__(
4134        self,
4135        *,
4136        location: str,
4137        tags: Optional[Dict[str, str]] = None,
4138        proximity_placement_group_type: Optional[Union[str, "ProximityPlacementGroupType"]] = None,
4139        **kwargs
4140    ):
4141        super(ProximityPlacementGroup, self).__init__(location=location, tags=tags, **kwargs)
4142        self.proximity_placement_group_type = proximity_placement_group_type
4143        self.virtual_machines = None
4144        self.virtual_machine_scale_sets = None
4145        self.availability_sets = None
4146
4147
4148class ProximityPlacementGroupListResult(msrest.serialization.Model):
4149    """The List Proximity Placement Group operation response.
4150
4151    All required parameters must be populated in order to send to Azure.
4152
4153    :param value: Required. The list of proximity placement groups.
4154    :type value: list[~azure.mgmt.compute.v2019_03_01.models.ProximityPlacementGroup]
4155    :param next_link: The URI to fetch the next page of proximity placement groups.
4156    :type next_link: str
4157    """
4158
4159    _validation = {
4160        'value': {'required': True},
4161    }
4162
4163    _attribute_map = {
4164        'value': {'key': 'value', 'type': '[ProximityPlacementGroup]'},
4165        'next_link': {'key': 'nextLink', 'type': 'str'},
4166    }
4167
4168    def __init__(
4169        self,
4170        *,
4171        value: List["ProximityPlacementGroup"],
4172        next_link: Optional[str] = None,
4173        **kwargs
4174    ):
4175        super(ProximityPlacementGroupListResult, self).__init__(**kwargs)
4176        self.value = value
4177        self.next_link = next_link
4178
4179
4180class ProximityPlacementGroupUpdate(UpdateResource):
4181    """Specifies information about the proximity placement group.
4182
4183    :param tags: A set of tags. Resource tags.
4184    :type tags: dict[str, str]
4185    """
4186
4187    _attribute_map = {
4188        'tags': {'key': 'tags', 'type': '{str}'},
4189    }
4190
4191    def __init__(
4192        self,
4193        *,
4194        tags: Optional[Dict[str, str]] = None,
4195        **kwargs
4196    ):
4197        super(ProximityPlacementGroupUpdate, self).__init__(tags=tags, **kwargs)
4198
4199
4200class PurchasePlan(msrest.serialization.Model):
4201    """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
4202
4203    All required parameters must be populated in order to send to Azure.
4204
4205    :param publisher: Required. The publisher ID.
4206    :type publisher: str
4207    :param name: Required. The plan ID.
4208    :type name: str
4209    :param product: Required. Specifies the product of the image from the marketplace. This is the
4210     same value as Offer under the imageReference element.
4211    :type product: str
4212    """
4213
4214    _validation = {
4215        'publisher': {'required': True},
4216        'name': {'required': True},
4217        'product': {'required': True},
4218    }
4219
4220    _attribute_map = {
4221        'publisher': {'key': 'publisher', 'type': 'str'},
4222        'name': {'key': 'name', 'type': 'str'},
4223        'product': {'key': 'product', 'type': 'str'},
4224    }
4225
4226    def __init__(
4227        self,
4228        *,
4229        publisher: str,
4230        name: str,
4231        product: str,
4232        **kwargs
4233    ):
4234        super(PurchasePlan, self).__init__(**kwargs)
4235        self.publisher = publisher
4236        self.name = name
4237        self.product = product
4238
4239
4240class RecommendedMachineConfiguration(msrest.serialization.Model):
4241    """The properties describe the recommended machine configuration for this Image Definition. These properties are updatable.
4242
4243    :param v_cp_us: Describes the resource range.
4244    :type v_cp_us: ~azure.mgmt.compute.v2019_03_01.models.ResourceRange
4245    :param memory: Describes the resource range.
4246    :type memory: ~azure.mgmt.compute.v2019_03_01.models.ResourceRange
4247    """
4248
4249    _attribute_map = {
4250        'v_cp_us': {'key': 'vCPUs', 'type': 'ResourceRange'},
4251        'memory': {'key': 'memory', 'type': 'ResourceRange'},
4252    }
4253
4254    def __init__(
4255        self,
4256        *,
4257        v_cp_us: Optional["ResourceRange"] = None,
4258        memory: Optional["ResourceRange"] = None,
4259        **kwargs
4260    ):
4261        super(RecommendedMachineConfiguration, self).__init__(**kwargs)
4262        self.v_cp_us = v_cp_us
4263        self.memory = memory
4264
4265
4266class RecoveryWalkResponse(msrest.serialization.Model):
4267    """Response after calling a manual recovery walk.
4268
4269    Variables are only populated by the server, and will be ignored when sending a request.
4270
4271    :ivar walk_performed: Whether the recovery walk was performed.
4272    :vartype walk_performed: bool
4273    :ivar next_platform_update_domain: The next update domain that needs to be walked. Null means
4274     walk spanning all update domains has been completed.
4275    :vartype next_platform_update_domain: int
4276    """
4277
4278    _validation = {
4279        'walk_performed': {'readonly': True},
4280        'next_platform_update_domain': {'readonly': True},
4281    }
4282
4283    _attribute_map = {
4284        'walk_performed': {'key': 'walkPerformed', 'type': 'bool'},
4285        'next_platform_update_domain': {'key': 'nextPlatformUpdateDomain', 'type': 'int'},
4286    }
4287
4288    def __init__(
4289        self,
4290        **kwargs
4291    ):
4292        super(RecoveryWalkResponse, self).__init__(**kwargs)
4293        self.walk_performed = None
4294        self.next_platform_update_domain = None
4295
4296
4297class RegionalReplicationStatus(msrest.serialization.Model):
4298    """This is the regional replication status.
4299
4300    Variables are only populated by the server, and will be ignored when sending a request.
4301
4302    :ivar region: The region to which the gallery Image Version is being replicated to.
4303    :vartype region: str
4304    :ivar state: This is the regional replication state. Possible values include: "Unknown",
4305     "Replicating", "Completed", "Failed".
4306    :vartype state: str or ~azure.mgmt.compute.v2019_03_01.models.ReplicationState
4307    :ivar details: The details of the replication status.
4308    :vartype details: str
4309    :ivar progress: It indicates progress of the replication job.
4310    :vartype progress: int
4311    """
4312
4313    _validation = {
4314        'region': {'readonly': True},
4315        'state': {'readonly': True},
4316        'details': {'readonly': True},
4317        'progress': {'readonly': True},
4318    }
4319
4320    _attribute_map = {
4321        'region': {'key': 'region', 'type': 'str'},
4322        'state': {'key': 'state', 'type': 'str'},
4323        'details': {'key': 'details', 'type': 'str'},
4324        'progress': {'key': 'progress', 'type': 'int'},
4325    }
4326
4327    def __init__(
4328        self,
4329        **kwargs
4330    ):
4331        super(RegionalReplicationStatus, self).__init__(**kwargs)
4332        self.region = None
4333        self.state = None
4334        self.details = None
4335        self.progress = None
4336
4337
4338class ReplicationStatus(msrest.serialization.Model):
4339    """This is the replication status of the gallery Image Version.
4340
4341    Variables are only populated by the server, and will be ignored when sending a request.
4342
4343    :ivar aggregated_state: This is the aggregated replication status based on all the regional
4344     replication status flags. Possible values include: "Unknown", "InProgress", "Completed",
4345     "Failed".
4346    :vartype aggregated_state: str or
4347     ~azure.mgmt.compute.v2019_03_01.models.AggregatedReplicationState
4348    :ivar summary: This is a summary of replication status for each region.
4349    :vartype summary: list[~azure.mgmt.compute.v2019_03_01.models.RegionalReplicationStatus]
4350    """
4351
4352    _validation = {
4353        'aggregated_state': {'readonly': True},
4354        'summary': {'readonly': True},
4355    }
4356
4357    _attribute_map = {
4358        'aggregated_state': {'key': 'aggregatedState', 'type': 'str'},
4359        'summary': {'key': 'summary', 'type': '[RegionalReplicationStatus]'},
4360    }
4361
4362    def __init__(
4363        self,
4364        **kwargs
4365    ):
4366        super(ReplicationStatus, self).__init__(**kwargs)
4367        self.aggregated_state = None
4368        self.summary = None
4369
4370
4371class RequestRateByIntervalInput(LogAnalyticsInputBase):
4372    """Api request input for LogAnalytics getRequestRateByInterval Api.
4373
4374    All required parameters must be populated in order to send to Azure.
4375
4376    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
4377     LogAnalytics Api writes output logs to.
4378    :type blob_container_sas_uri: str
4379    :param from_time: Required. From time of the query.
4380    :type from_time: ~datetime.datetime
4381    :param to_time: Required. To time of the query.
4382    :type to_time: ~datetime.datetime
4383    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
4384    :type group_by_throttle_policy: bool
4385    :param group_by_operation_name: Group query result by Operation Name.
4386    :type group_by_operation_name: bool
4387    :param group_by_resource_name: Group query result by Resource Name.
4388    :type group_by_resource_name: bool
4389    :param interval_length: Required. Interval value in minutes used to create LogAnalytics call
4390     rate logs. Possible values include: "ThreeMins", "FiveMins", "ThirtyMins", "SixtyMins".
4391    :type interval_length: str or ~azure.mgmt.compute.v2019_03_01.models.IntervalInMins
4392    """
4393
4394    _validation = {
4395        'blob_container_sas_uri': {'required': True},
4396        'from_time': {'required': True},
4397        'to_time': {'required': True},
4398        'interval_length': {'required': True},
4399    }
4400
4401    _attribute_map = {
4402        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
4403        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
4404        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
4405        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
4406        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
4407        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
4408        'interval_length': {'key': 'intervalLength', 'type': 'str'},
4409    }
4410
4411    def __init__(
4412        self,
4413        *,
4414        blob_container_sas_uri: str,
4415        from_time: datetime.datetime,
4416        to_time: datetime.datetime,
4417        interval_length: Union[str, "IntervalInMins"],
4418        group_by_throttle_policy: Optional[bool] = None,
4419        group_by_operation_name: Optional[bool] = None,
4420        group_by_resource_name: Optional[bool] = None,
4421        **kwargs
4422    ):
4423        super(RequestRateByIntervalInput, self).__init__(blob_container_sas_uri=blob_container_sas_uri, from_time=from_time, to_time=to_time, group_by_throttle_policy=group_by_throttle_policy, group_by_operation_name=group_by_operation_name, group_by_resource_name=group_by_resource_name, **kwargs)
4424        self.interval_length = interval_length
4425
4426
4427class ResourceRange(msrest.serialization.Model):
4428    """Describes the resource range.
4429
4430    :param min: The minimum number of the resource.
4431    :type min: int
4432    :param max: The maximum number of the resource.
4433    :type max: int
4434    """
4435
4436    _attribute_map = {
4437        'min': {'key': 'min', 'type': 'int'},
4438        'max': {'key': 'max', 'type': 'int'},
4439    }
4440
4441    def __init__(
4442        self,
4443        *,
4444        min: Optional[int] = None,
4445        max: Optional[int] = None,
4446        **kwargs
4447    ):
4448        super(ResourceRange, self).__init__(**kwargs)
4449        self.min = min
4450        self.max = max
4451
4452
4453class RollbackStatusInfo(msrest.serialization.Model):
4454    """Information about rollback on failed VM instances after a OS Upgrade operation.
4455
4456    Variables are only populated by the server, and will be ignored when sending a request.
4457
4458    :ivar successfully_rolledback_instance_count: The number of instances which have been
4459     successfully rolled back.
4460    :vartype successfully_rolledback_instance_count: int
4461    :ivar failed_rolledback_instance_count: The number of instances which failed to rollback.
4462    :vartype failed_rolledback_instance_count: int
4463    :ivar rollback_error: Error details if OS rollback failed.
4464    :vartype rollback_error: ~azure.mgmt.compute.v2019_03_01.models.ApiError
4465    """
4466
4467    _validation = {
4468        'successfully_rolledback_instance_count': {'readonly': True},
4469        'failed_rolledback_instance_count': {'readonly': True},
4470        'rollback_error': {'readonly': True},
4471    }
4472
4473    _attribute_map = {
4474        'successfully_rolledback_instance_count': {'key': 'successfullyRolledbackInstanceCount', 'type': 'int'},
4475        'failed_rolledback_instance_count': {'key': 'failedRolledbackInstanceCount', 'type': 'int'},
4476        'rollback_error': {'key': 'rollbackError', 'type': 'ApiError'},
4477    }
4478
4479    def __init__(
4480        self,
4481        **kwargs
4482    ):
4483        super(RollbackStatusInfo, self).__init__(**kwargs)
4484        self.successfully_rolledback_instance_count = None
4485        self.failed_rolledback_instance_count = None
4486        self.rollback_error = None
4487
4488
4489class RollingUpgradePolicy(msrest.serialization.Model):
4490    """The configuration parameters used while performing a rolling upgrade.
4491
4492    :param max_batch_instance_percent: The maximum percent of total virtual machine instances that
4493     will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum,
4494     unhealthy instances in previous or future batches can cause the percentage of instances in a
4495     batch to decrease to ensure higher reliability. The default value for this parameter is 20%.
4496    :type max_batch_instance_percent: int
4497    :param max_unhealthy_instance_percent: The maximum percentage of the total virtual machine
4498     instances in the scale set that can be simultaneously unhealthy, either as a result of being
4499     upgraded, or by being found in an unhealthy state by the virtual machine health checks before
4500     the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The
4501     default value for this parameter is 20%.
4502    :type max_unhealthy_instance_percent: int
4503    :param max_unhealthy_upgraded_instance_percent: The maximum percentage of upgraded virtual
4504     machine instances that can be found to be in an unhealthy state. This check will happen after
4505     each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The
4506     default value for this parameter is 20%.
4507    :type max_unhealthy_upgraded_instance_percent: int
4508    :param pause_time_between_batches: The wait time between completing the update for all virtual
4509     machines in one batch and starting the next batch. The time duration should be specified in ISO
4510     8601 format. The default value is 0 seconds (PT0S).
4511    :type pause_time_between_batches: str
4512    """
4513
4514    _validation = {
4515        'max_batch_instance_percent': {'maximum': 100, 'minimum': 5},
4516        'max_unhealthy_instance_percent': {'maximum': 100, 'minimum': 5},
4517        'max_unhealthy_upgraded_instance_percent': {'maximum': 100, 'minimum': 0},
4518    }
4519
4520    _attribute_map = {
4521        'max_batch_instance_percent': {'key': 'maxBatchInstancePercent', 'type': 'int'},
4522        'max_unhealthy_instance_percent': {'key': 'maxUnhealthyInstancePercent', 'type': 'int'},
4523        'max_unhealthy_upgraded_instance_percent': {'key': 'maxUnhealthyUpgradedInstancePercent', 'type': 'int'},
4524        'pause_time_between_batches': {'key': 'pauseTimeBetweenBatches', 'type': 'str'},
4525    }
4526
4527    def __init__(
4528        self,
4529        *,
4530        max_batch_instance_percent: Optional[int] = None,
4531        max_unhealthy_instance_percent: Optional[int] = None,
4532        max_unhealthy_upgraded_instance_percent: Optional[int] = None,
4533        pause_time_between_batches: Optional[str] = None,
4534        **kwargs
4535    ):
4536        super(RollingUpgradePolicy, self).__init__(**kwargs)
4537        self.max_batch_instance_percent = max_batch_instance_percent
4538        self.max_unhealthy_instance_percent = max_unhealthy_instance_percent
4539        self.max_unhealthy_upgraded_instance_percent = max_unhealthy_upgraded_instance_percent
4540        self.pause_time_between_batches = pause_time_between_batches
4541
4542
4543class RollingUpgradeProgressInfo(msrest.serialization.Model):
4544    """Information about the number of virtual machine instances in each upgrade state.
4545
4546    Variables are only populated by the server, and will be ignored when sending a request.
4547
4548    :ivar successful_instance_count: The number of instances that have been successfully upgraded.
4549    :vartype successful_instance_count: int
4550    :ivar failed_instance_count: The number of instances that have failed to be upgraded
4551     successfully.
4552    :vartype failed_instance_count: int
4553    :ivar in_progress_instance_count: The number of instances that are currently being upgraded.
4554    :vartype in_progress_instance_count: int
4555    :ivar pending_instance_count: The number of instances that have not yet begun to be upgraded.
4556    :vartype pending_instance_count: int
4557    """
4558
4559    _validation = {
4560        'successful_instance_count': {'readonly': True},
4561        'failed_instance_count': {'readonly': True},
4562        'in_progress_instance_count': {'readonly': True},
4563        'pending_instance_count': {'readonly': True},
4564    }
4565
4566    _attribute_map = {
4567        'successful_instance_count': {'key': 'successfulInstanceCount', 'type': 'int'},
4568        'failed_instance_count': {'key': 'failedInstanceCount', 'type': 'int'},
4569        'in_progress_instance_count': {'key': 'inProgressInstanceCount', 'type': 'int'},
4570        'pending_instance_count': {'key': 'pendingInstanceCount', 'type': 'int'},
4571    }
4572
4573    def __init__(
4574        self,
4575        **kwargs
4576    ):
4577        super(RollingUpgradeProgressInfo, self).__init__(**kwargs)
4578        self.successful_instance_count = None
4579        self.failed_instance_count = None
4580        self.in_progress_instance_count = None
4581        self.pending_instance_count = None
4582
4583
4584class RollingUpgradeRunningStatus(msrest.serialization.Model):
4585    """Information about the current running state of the overall upgrade.
4586
4587    Variables are only populated by the server, and will be ignored when sending a request.
4588
4589    :ivar code: Code indicating the current status of the upgrade. Possible values include:
4590     "RollingForward", "Cancelled", "Completed", "Faulted".
4591    :vartype code: str or ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradeStatusCode
4592    :ivar start_time: Start time of the upgrade.
4593    :vartype start_time: ~datetime.datetime
4594    :ivar last_action: The last action performed on the rolling upgrade. Possible values include:
4595     "Start", "Cancel".
4596    :vartype last_action: str or ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradeActionType
4597    :ivar last_action_time: Last action time of the upgrade.
4598    :vartype last_action_time: ~datetime.datetime
4599    """
4600
4601    _validation = {
4602        'code': {'readonly': True},
4603        'start_time': {'readonly': True},
4604        'last_action': {'readonly': True},
4605        'last_action_time': {'readonly': True},
4606    }
4607
4608    _attribute_map = {
4609        'code': {'key': 'code', 'type': 'str'},
4610        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
4611        'last_action': {'key': 'lastAction', 'type': 'str'},
4612        'last_action_time': {'key': 'lastActionTime', 'type': 'iso-8601'},
4613    }
4614
4615    def __init__(
4616        self,
4617        **kwargs
4618    ):
4619        super(RollingUpgradeRunningStatus, self).__init__(**kwargs)
4620        self.code = None
4621        self.start_time = None
4622        self.last_action = None
4623        self.last_action_time = None
4624
4625
4626class RollingUpgradeStatusInfo(Resource):
4627    """The status of the latest virtual machine scale set rolling upgrade.
4628
4629    Variables are only populated by the server, and will be ignored when sending a request.
4630
4631    All required parameters must be populated in order to send to Azure.
4632
4633    :ivar id: Resource Id.
4634    :vartype id: str
4635    :ivar name: Resource name.
4636    :vartype name: str
4637    :ivar type: Resource type.
4638    :vartype type: str
4639    :param location: Required. Resource location.
4640    :type location: str
4641    :param tags: A set of tags. Resource tags.
4642    :type tags: dict[str, str]
4643    :ivar policy: The rolling upgrade policies applied for this upgrade.
4644    :vartype policy: ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradePolicy
4645    :ivar running_status: Information about the current running state of the overall upgrade.
4646    :vartype running_status: ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradeRunningStatus
4647    :ivar progress: Information about the number of virtual machine instances in each upgrade
4648     state.
4649    :vartype progress: ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradeProgressInfo
4650    :ivar error: Error details for this upgrade, if there are any.
4651    :vartype error: ~azure.mgmt.compute.v2019_03_01.models.ApiError
4652    """
4653
4654    _validation = {
4655        'id': {'readonly': True},
4656        'name': {'readonly': True},
4657        'type': {'readonly': True},
4658        'location': {'required': True},
4659        'policy': {'readonly': True},
4660        'running_status': {'readonly': True},
4661        'progress': {'readonly': True},
4662        'error': {'readonly': True},
4663    }
4664
4665    _attribute_map = {
4666        'id': {'key': 'id', 'type': 'str'},
4667        'name': {'key': 'name', 'type': 'str'},
4668        'type': {'key': 'type', 'type': 'str'},
4669        'location': {'key': 'location', 'type': 'str'},
4670        'tags': {'key': 'tags', 'type': '{str}'},
4671        'policy': {'key': 'properties.policy', 'type': 'RollingUpgradePolicy'},
4672        'running_status': {'key': 'properties.runningStatus', 'type': 'RollingUpgradeRunningStatus'},
4673        'progress': {'key': 'properties.progress', 'type': 'RollingUpgradeProgressInfo'},
4674        'error': {'key': 'properties.error', 'type': 'ApiError'},
4675    }
4676
4677    def __init__(
4678        self,
4679        *,
4680        location: str,
4681        tags: Optional[Dict[str, str]] = None,
4682        **kwargs
4683    ):
4684        super(RollingUpgradeStatusInfo, self).__init__(location=location, tags=tags, **kwargs)
4685        self.policy = None
4686        self.running_status = None
4687        self.progress = None
4688        self.error = None
4689
4690
4691class RunCommandDocumentBase(msrest.serialization.Model):
4692    """Describes the properties of a Run Command metadata.
4693
4694    All required parameters must be populated in order to send to Azure.
4695
4696    :param schema: Required. The VM run command schema.
4697    :type schema: str
4698    :param id: Required. The VM run command id.
4699    :type id: str
4700    :param os_type: Required. The Operating System type. Possible values include: "Windows",
4701     "Linux".
4702    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
4703    :param label: Required. The VM run command label.
4704    :type label: str
4705    :param description: Required. The VM run command description.
4706    :type description: str
4707    """
4708
4709    _validation = {
4710        'schema': {'required': True},
4711        'id': {'required': True},
4712        'os_type': {'required': True},
4713        'label': {'required': True},
4714        'description': {'required': True},
4715    }
4716
4717    _attribute_map = {
4718        'schema': {'key': '$schema', 'type': 'str'},
4719        'id': {'key': 'id', 'type': 'str'},
4720        'os_type': {'key': 'osType', 'type': 'str'},
4721        'label': {'key': 'label', 'type': 'str'},
4722        'description': {'key': 'description', 'type': 'str'},
4723    }
4724
4725    def __init__(
4726        self,
4727        *,
4728        schema: str,
4729        id: str,
4730        os_type: Union[str, "OperatingSystemTypes"],
4731        label: str,
4732        description: str,
4733        **kwargs
4734    ):
4735        super(RunCommandDocumentBase, self).__init__(**kwargs)
4736        self.schema = schema
4737        self.id = id
4738        self.os_type = os_type
4739        self.label = label
4740        self.description = description
4741
4742
4743class RunCommandDocument(RunCommandDocumentBase):
4744    """Describes the properties of a Run Command.
4745
4746    All required parameters must be populated in order to send to Azure.
4747
4748    :param schema: Required. The VM run command schema.
4749    :type schema: str
4750    :param id: Required. The VM run command id.
4751    :type id: str
4752    :param os_type: Required. The Operating System type. Possible values include: "Windows",
4753     "Linux".
4754    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
4755    :param label: Required. The VM run command label.
4756    :type label: str
4757    :param description: Required. The VM run command description.
4758    :type description: str
4759    :param script: Required. The script to be executed.
4760    :type script: list[str]
4761    :param parameters: The parameters used by the script.
4762    :type parameters: list[~azure.mgmt.compute.v2019_03_01.models.RunCommandParameterDefinition]
4763    """
4764
4765    _validation = {
4766        'schema': {'required': True},
4767        'id': {'required': True},
4768        'os_type': {'required': True},
4769        'label': {'required': True},
4770        'description': {'required': True},
4771        'script': {'required': True},
4772    }
4773
4774    _attribute_map = {
4775        'schema': {'key': '$schema', 'type': 'str'},
4776        'id': {'key': 'id', 'type': 'str'},
4777        'os_type': {'key': 'osType', 'type': 'str'},
4778        'label': {'key': 'label', 'type': 'str'},
4779        'description': {'key': 'description', 'type': 'str'},
4780        'script': {'key': 'script', 'type': '[str]'},
4781        'parameters': {'key': 'parameters', 'type': '[RunCommandParameterDefinition]'},
4782    }
4783
4784    def __init__(
4785        self,
4786        *,
4787        schema: str,
4788        id: str,
4789        os_type: Union[str, "OperatingSystemTypes"],
4790        label: str,
4791        description: str,
4792        script: List[str],
4793        parameters: Optional[List["RunCommandParameterDefinition"]] = None,
4794        **kwargs
4795    ):
4796        super(RunCommandDocument, self).__init__(schema=schema, id=id, os_type=os_type, label=label, description=description, **kwargs)
4797        self.script = script
4798        self.parameters = parameters
4799
4800
4801class RunCommandInput(msrest.serialization.Model):
4802    """Capture Virtual Machine parameters.
4803
4804    All required parameters must be populated in order to send to Azure.
4805
4806    :param command_id: Required. The run command id.
4807    :type command_id: str
4808    :param script: Optional. The script to be executed.  When this value is given, the given script
4809     will override the default script of the command.
4810    :type script: list[str]
4811    :param parameters: The run command parameters.
4812    :type parameters: list[~azure.mgmt.compute.v2019_03_01.models.RunCommandInputParameter]
4813    """
4814
4815    _validation = {
4816        'command_id': {'required': True},
4817    }
4818
4819    _attribute_map = {
4820        'command_id': {'key': 'commandId', 'type': 'str'},
4821        'script': {'key': 'script', 'type': '[str]'},
4822        'parameters': {'key': 'parameters', 'type': '[RunCommandInputParameter]'},
4823    }
4824
4825    def __init__(
4826        self,
4827        *,
4828        command_id: str,
4829        script: Optional[List[str]] = None,
4830        parameters: Optional[List["RunCommandInputParameter"]] = None,
4831        **kwargs
4832    ):
4833        super(RunCommandInput, self).__init__(**kwargs)
4834        self.command_id = command_id
4835        self.script = script
4836        self.parameters = parameters
4837
4838
4839class RunCommandInputParameter(msrest.serialization.Model):
4840    """Describes the properties of a run command parameter.
4841
4842    All required parameters must be populated in order to send to Azure.
4843
4844    :param name: Required. The run command parameter name.
4845    :type name: str
4846    :param value: Required. The run command parameter value.
4847    :type value: str
4848    """
4849
4850    _validation = {
4851        'name': {'required': True},
4852        'value': {'required': True},
4853    }
4854
4855    _attribute_map = {
4856        'name': {'key': 'name', 'type': 'str'},
4857        'value': {'key': 'value', 'type': 'str'},
4858    }
4859
4860    def __init__(
4861        self,
4862        *,
4863        name: str,
4864        value: str,
4865        **kwargs
4866    ):
4867        super(RunCommandInputParameter, self).__init__(**kwargs)
4868        self.name = name
4869        self.value = value
4870
4871
4872class RunCommandListResult(msrest.serialization.Model):
4873    """The List Virtual Machine operation response.
4874
4875    All required parameters must be populated in order to send to Azure.
4876
4877    :param value: Required. The list of virtual machine run commands.
4878    :type value: list[~azure.mgmt.compute.v2019_03_01.models.RunCommandDocumentBase]
4879    :param next_link: The uri to fetch the next page of run commands. Call ListNext() with this to
4880     fetch the next page of run commands.
4881    :type next_link: str
4882    """
4883
4884    _validation = {
4885        'value': {'required': True},
4886    }
4887
4888    _attribute_map = {
4889        'value': {'key': 'value', 'type': '[RunCommandDocumentBase]'},
4890        'next_link': {'key': 'nextLink', 'type': 'str'},
4891    }
4892
4893    def __init__(
4894        self,
4895        *,
4896        value: List["RunCommandDocumentBase"],
4897        next_link: Optional[str] = None,
4898        **kwargs
4899    ):
4900        super(RunCommandListResult, self).__init__(**kwargs)
4901        self.value = value
4902        self.next_link = next_link
4903
4904
4905class RunCommandParameterDefinition(msrest.serialization.Model):
4906    """Describes the properties of a run command parameter.
4907
4908    All required parameters must be populated in order to send to Azure.
4909
4910    :param name: Required. The run command parameter name.
4911    :type name: str
4912    :param type: Required. The run command parameter type.
4913    :type type: str
4914    :param default_value: The run command parameter default value.
4915    :type default_value: str
4916    :param required: The run command parameter required.
4917    :type required: bool
4918    """
4919
4920    _validation = {
4921        'name': {'required': True},
4922        'type': {'required': True},
4923    }
4924
4925    _attribute_map = {
4926        'name': {'key': 'name', 'type': 'str'},
4927        'type': {'key': 'type', 'type': 'str'},
4928        'default_value': {'key': 'defaultValue', 'type': 'str'},
4929        'required': {'key': 'required', 'type': 'bool'},
4930    }
4931
4932    def __init__(
4933        self,
4934        *,
4935        name: str,
4936        type: str,
4937        default_value: Optional[str] = None,
4938        required: Optional[bool] = False,
4939        **kwargs
4940    ):
4941        super(RunCommandParameterDefinition, self).__init__(**kwargs)
4942        self.name = name
4943        self.type = type
4944        self.default_value = default_value
4945        self.required = required
4946
4947
4948class RunCommandResult(msrest.serialization.Model):
4949    """RunCommandResult.
4950
4951    :param value: Run command operation response.
4952    :type value: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
4953    """
4954
4955    _attribute_map = {
4956        'value': {'key': 'value', 'type': '[InstanceViewStatus]'},
4957    }
4958
4959    def __init__(
4960        self,
4961        *,
4962        value: Optional[List["InstanceViewStatus"]] = None,
4963        **kwargs
4964    ):
4965        super(RunCommandResult, self).__init__(**kwargs)
4966        self.value = value
4967
4968
4969class ScaleInPolicy(msrest.serialization.Model):
4970    """Describes a scale-in policy for a virtual machine scale set.
4971
4972    :param rules: The rules to be followed when scaling-in a virtual machine scale set.
4973     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Default** When a
4974     virtual machine scale set is scaled in, the scale set will first be balanced across zones if it
4975     is a zonal scale set. Then, it will be balanced across Fault Domains as far as possible. Within
4976     each Fault Domain, the virtual machines chosen for removal will be the newest ones that are not
4977     protected from scale-in. :code:`<br>`:code:`<br>` **OldestVM** When a virtual machine scale set
4978     is being scaled-in, the oldest virtual machines that are not protected from scale-in will be
4979     chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced
4980     across zones. Within each zone, the oldest virtual machines that are not protected will be
4981     chosen for removal. :code:`<br>`:code:`<br>` **NewestVM** When a virtual machine scale set is
4982     being scaled-in, the newest virtual machines that are not protected from scale-in will be
4983     chosen for removal. For zonal virtual machine scale sets, the scale set will first be balanced
4984     across zones. Within each zone, the newest virtual machines that are not protected will be
4985     chosen for removal. :code:`<br>`:code:`<br>`.
4986    :type rules: list[str or
4987     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetScaleInRules]
4988    """
4989
4990    _attribute_map = {
4991        'rules': {'key': 'rules', 'type': '[str]'},
4992    }
4993
4994    def __init__(
4995        self,
4996        *,
4997        rules: Optional[List[Union[str, "VirtualMachineScaleSetScaleInRules"]]] = None,
4998        **kwargs
4999    ):
5000        super(ScaleInPolicy, self).__init__(**kwargs)
5001        self.rules = rules
5002
5003
5004class ScheduledEventsProfile(msrest.serialization.Model):
5005    """ScheduledEventsProfile.
5006
5007    :param terminate_notification_profile: Specifies Terminate Scheduled Event related
5008     configurations.
5009    :type terminate_notification_profile:
5010     ~azure.mgmt.compute.v2019_03_01.models.TerminateNotificationProfile
5011    """
5012
5013    _attribute_map = {
5014        'terminate_notification_profile': {'key': 'terminateNotificationProfile', 'type': 'TerminateNotificationProfile'},
5015    }
5016
5017    def __init__(
5018        self,
5019        *,
5020        terminate_notification_profile: Optional["TerminateNotificationProfile"] = None,
5021        **kwargs
5022    ):
5023        super(ScheduledEventsProfile, self).__init__(**kwargs)
5024        self.terminate_notification_profile = terminate_notification_profile
5025
5026
5027class Sku(msrest.serialization.Model):
5028    """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.
5029
5030    :param name: The sku name.
5031    :type name: str
5032    :param tier: Specifies the tier of virtual machines in a scale set.:code:`<br />`:code:`<br />`
5033     Possible Values::code:`<br />`:code:`<br />` **Standard**\ :code:`<br />`:code:`<br />`
5034     **Basic**.
5035    :type tier: str
5036    :param capacity: Specifies the number of virtual machines in the scale set.
5037    :type capacity: long
5038    """
5039
5040    _attribute_map = {
5041        'name': {'key': 'name', 'type': 'str'},
5042        'tier': {'key': 'tier', 'type': 'str'},
5043        'capacity': {'key': 'capacity', 'type': 'long'},
5044    }
5045
5046    def __init__(
5047        self,
5048        *,
5049        name: Optional[str] = None,
5050        tier: Optional[str] = None,
5051        capacity: Optional[int] = None,
5052        **kwargs
5053    ):
5054        super(Sku, self).__init__(**kwargs)
5055        self.name = name
5056        self.tier = tier
5057        self.capacity = capacity
5058
5059
5060class Snapshot(Resource):
5061    """Snapshot resource.
5062
5063    Variables are only populated by the server, and will be ignored when sending a request.
5064
5065    All required parameters must be populated in order to send to Azure.
5066
5067    :ivar id: Resource Id.
5068    :vartype id: str
5069    :ivar name: Resource name.
5070    :vartype name: str
5071    :ivar type: Resource type.
5072    :vartype type: str
5073    :param location: Required. Resource location.
5074    :type location: str
5075    :param tags: A set of tags. Resource tags.
5076    :type tags: dict[str, str]
5077    :ivar managed_by: Unused. Always Null.
5078    :vartype managed_by: str
5079    :param sku: The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.
5080    :type sku: ~azure.mgmt.compute.v2019_03_01.models.SnapshotSku
5081    :ivar time_created: The time when the disk was created.
5082    :vartype time_created: ~datetime.datetime
5083    :param os_type: The Operating System type. Possible values include: "Windows", "Linux".
5084    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
5085    :param hyper_v_generation: The hypervisor generation of the Virtual Machine. Applicable to OS
5086     disks only. Possible values include: "V1", "V2".
5087    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_03_01.models.HyperVGeneration
5088    :param creation_data: Disk source information. CreationData information cannot be changed after
5089     the disk has been created.
5090    :type creation_data: ~azure.mgmt.compute.v2019_03_01.models.CreationData
5091    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
5092     indicates the size of the disk to create. If this field is present for updates or creation with
5093     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
5094     running VM, and can only increase the disk's size.
5095    :type disk_size_gb: int
5096    :ivar disk_size_bytes: The size of the disk in bytes. This field is read only.
5097    :vartype disk_size_bytes: long
5098    :ivar unique_id: Unique Guid identifying the resource.
5099    :vartype unique_id: str
5100    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
5101     Encryption, can contain multiple encryption settings per disk or snapshot.
5102    :type encryption_settings_collection:
5103     ~azure.mgmt.compute.v2019_03_01.models.EncryptionSettingsCollection
5104    :ivar provisioning_state: The disk provisioning state.
5105    :vartype provisioning_state: str
5106    :param incremental: Whether a snapshot is incremental. Incremental snapshots on the same disk
5107     occupy less space than full snapshots and can be diffed.
5108    :type incremental: bool
5109    """
5110
5111    _validation = {
5112        'id': {'readonly': True},
5113        'name': {'readonly': True},
5114        'type': {'readonly': True},
5115        'location': {'required': True},
5116        'managed_by': {'readonly': True},
5117        'time_created': {'readonly': True},
5118        'disk_size_bytes': {'readonly': True},
5119        'unique_id': {'readonly': True},
5120        'provisioning_state': {'readonly': True},
5121    }
5122
5123    _attribute_map = {
5124        'id': {'key': 'id', 'type': 'str'},
5125        'name': {'key': 'name', 'type': 'str'},
5126        'type': {'key': 'type', 'type': 'str'},
5127        'location': {'key': 'location', 'type': 'str'},
5128        'tags': {'key': 'tags', 'type': '{str}'},
5129        'managed_by': {'key': 'managedBy', 'type': 'str'},
5130        'sku': {'key': 'sku', 'type': 'SnapshotSku'},
5131        'time_created': {'key': 'properties.timeCreated', 'type': 'iso-8601'},
5132        'os_type': {'key': 'properties.osType', 'type': 'str'},
5133        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
5134        'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'},
5135        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
5136        'disk_size_bytes': {'key': 'properties.diskSizeBytes', 'type': 'long'},
5137        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
5138        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
5139        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
5140        'incremental': {'key': 'properties.incremental', 'type': 'bool'},
5141    }
5142
5143    def __init__(
5144        self,
5145        *,
5146        location: str,
5147        tags: Optional[Dict[str, str]] = None,
5148        sku: Optional["SnapshotSku"] = None,
5149        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
5150        hyper_v_generation: Optional[Union[str, "HyperVGeneration"]] = None,
5151        creation_data: Optional["CreationData"] = None,
5152        disk_size_gb: Optional[int] = None,
5153        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
5154        incremental: Optional[bool] = None,
5155        **kwargs
5156    ):
5157        super(Snapshot, self).__init__(location=location, tags=tags, **kwargs)
5158        self.managed_by = None
5159        self.sku = sku
5160        self.time_created = None
5161        self.os_type = os_type
5162        self.hyper_v_generation = hyper_v_generation
5163        self.creation_data = creation_data
5164        self.disk_size_gb = disk_size_gb
5165        self.disk_size_bytes = None
5166        self.unique_id = None
5167        self.encryption_settings_collection = encryption_settings_collection
5168        self.provisioning_state = None
5169        self.incremental = incremental
5170
5171
5172class SnapshotList(msrest.serialization.Model):
5173    """The List Snapshots operation response.
5174
5175    All required parameters must be populated in order to send to Azure.
5176
5177    :param value: Required. A list of snapshots.
5178    :type value: list[~azure.mgmt.compute.v2019_03_01.models.Snapshot]
5179    :param next_link: The uri to fetch the next page of snapshots. Call ListNext() with this to
5180     fetch the next page of snapshots.
5181    :type next_link: str
5182    """
5183
5184    _validation = {
5185        'value': {'required': True},
5186    }
5187
5188    _attribute_map = {
5189        'value': {'key': 'value', 'type': '[Snapshot]'},
5190        'next_link': {'key': 'nextLink', 'type': 'str'},
5191    }
5192
5193    def __init__(
5194        self,
5195        *,
5196        value: List["Snapshot"],
5197        next_link: Optional[str] = None,
5198        **kwargs
5199    ):
5200        super(SnapshotList, self).__init__(**kwargs)
5201        self.value = value
5202        self.next_link = next_link
5203
5204
5205class SnapshotSku(msrest.serialization.Model):
5206    """The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.
5207
5208    Variables are only populated by the server, and will be ignored when sending a request.
5209
5210    :param name: The sku name. Possible values include: "Standard_LRS", "Premium_LRS",
5211     "Standard_ZRS".
5212    :type name: str or ~azure.mgmt.compute.v2019_03_01.models.SnapshotStorageAccountTypes
5213    :ivar tier: The sku tier.
5214    :vartype tier: str
5215    """
5216
5217    _validation = {
5218        'tier': {'readonly': True},
5219    }
5220
5221    _attribute_map = {
5222        'name': {'key': 'name', 'type': 'str'},
5223        'tier': {'key': 'tier', 'type': 'str'},
5224    }
5225
5226    def __init__(
5227        self,
5228        *,
5229        name: Optional[Union[str, "SnapshotStorageAccountTypes"]] = None,
5230        **kwargs
5231    ):
5232        super(SnapshotSku, self).__init__(**kwargs)
5233        self.name = name
5234        self.tier = None
5235
5236
5237class SnapshotUpdate(msrest.serialization.Model):
5238    """Snapshot update resource.
5239
5240    :param tags: A set of tags. Resource tags.
5241    :type tags: dict[str, str]
5242    :param sku: The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.
5243    :type sku: ~azure.mgmt.compute.v2019_03_01.models.SnapshotSku
5244    :param os_type: the Operating System type. Possible values include: "Windows", "Linux".
5245    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
5246    :param disk_size_gb: If creationData.createOption is Empty, this field is mandatory and it
5247     indicates the size of the disk to create. If this field is present for updates or creation with
5248     other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a
5249     running VM, and can only increase the disk's size.
5250    :type disk_size_gb: int
5251    :param encryption_settings_collection: Encryption settings collection used be Azure Disk
5252     Encryption, can contain multiple encryption settings per disk or snapshot.
5253    :type encryption_settings_collection:
5254     ~azure.mgmt.compute.v2019_03_01.models.EncryptionSettingsCollection
5255    """
5256
5257    _attribute_map = {
5258        'tags': {'key': 'tags', 'type': '{str}'},
5259        'sku': {'key': 'sku', 'type': 'SnapshotSku'},
5260        'os_type': {'key': 'properties.osType', 'type': 'str'},
5261        'disk_size_gb': {'key': 'properties.diskSizeGB', 'type': 'int'},
5262        'encryption_settings_collection': {'key': 'properties.encryptionSettingsCollection', 'type': 'EncryptionSettingsCollection'},
5263    }
5264
5265    def __init__(
5266        self,
5267        *,
5268        tags: Optional[Dict[str, str]] = None,
5269        sku: Optional["SnapshotSku"] = None,
5270        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
5271        disk_size_gb: Optional[int] = None,
5272        encryption_settings_collection: Optional["EncryptionSettingsCollection"] = None,
5273        **kwargs
5274    ):
5275        super(SnapshotUpdate, self).__init__(**kwargs)
5276        self.tags = tags
5277        self.sku = sku
5278        self.os_type = os_type
5279        self.disk_size_gb = disk_size_gb
5280        self.encryption_settings_collection = encryption_settings_collection
5281
5282
5283class SourceVault(msrest.serialization.Model):
5284    """The vault id is an Azure Resource Manager Resource id in the form /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}.
5285
5286    :param id: Resource Id.
5287    :type id: str
5288    """
5289
5290    _attribute_map = {
5291        'id': {'key': 'id', 'type': 'str'},
5292    }
5293
5294    def __init__(
5295        self,
5296        *,
5297        id: Optional[str] = None,
5298        **kwargs
5299    ):
5300        super(SourceVault, self).__init__(**kwargs)
5301        self.id = id
5302
5303
5304class SshConfiguration(msrest.serialization.Model):
5305    """SSH configuration for Linux based VMs running on Azure.
5306
5307    :param public_keys: The list of SSH public keys used to authenticate with linux based VMs.
5308    :type public_keys: list[~azure.mgmt.compute.v2019_03_01.models.SshPublicKey]
5309    """
5310
5311    _attribute_map = {
5312        'public_keys': {'key': 'publicKeys', 'type': '[SshPublicKey]'},
5313    }
5314
5315    def __init__(
5316        self,
5317        *,
5318        public_keys: Optional[List["SshPublicKey"]] = None,
5319        **kwargs
5320    ):
5321        super(SshConfiguration, self).__init__(**kwargs)
5322        self.public_keys = public_keys
5323
5324
5325class SshPublicKey(msrest.serialization.Model):
5326    """Contains information about SSH certificate public key and the path on the Linux VM where the public key is placed.
5327
5328    :param path: Specifies the full path on the created VM where ssh public key is stored. If the
5329     file already exists, the specified key is appended to the file. Example:
5330     /home/user/.ssh/authorized_keys.
5331    :type path: str
5332    :param key_data: SSH public key certificate used to authenticate with the VM through ssh. The
5333     key needs to be at least 2048-bit and in ssh-rsa format. :code:`<br>`:code:`<br>` For creating
5334     ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure
5335     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
5336    :type key_data: str
5337    """
5338
5339    _attribute_map = {
5340        'path': {'key': 'path', 'type': 'str'},
5341        'key_data': {'key': 'keyData', 'type': 'str'},
5342    }
5343
5344    def __init__(
5345        self,
5346        *,
5347        path: Optional[str] = None,
5348        key_data: Optional[str] = None,
5349        **kwargs
5350    ):
5351        super(SshPublicKey, self).__init__(**kwargs)
5352        self.path = path
5353        self.key_data = key_data
5354
5355
5356class StorageProfile(msrest.serialization.Model):
5357    """Specifies the storage settings for the virtual machine disks.
5358
5359    :param image_reference: Specifies information about the image to use. You can specify
5360     information about platform images, marketplace images, or virtual machine images. This element
5361     is required when you want to use a platform image, marketplace image, or virtual machine image,
5362     but is not used in other creation operations.
5363    :type image_reference: ~azure.mgmt.compute.v2019_03_01.models.ImageReference
5364    :param os_disk: Specifies information about the operating system disk used by the virtual
5365     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
5366     for Azure virtual machines
5367     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
5368    :type os_disk: ~azure.mgmt.compute.v2019_03_01.models.OSDisk
5369    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
5370     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
5371     for Azure virtual machines
5372     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
5373    :type data_disks: list[~azure.mgmt.compute.v2019_03_01.models.DataDisk]
5374    """
5375
5376    _attribute_map = {
5377        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
5378        'os_disk': {'key': 'osDisk', 'type': 'OSDisk'},
5379        'data_disks': {'key': 'dataDisks', 'type': '[DataDisk]'},
5380    }
5381
5382    def __init__(
5383        self,
5384        *,
5385        image_reference: Optional["ImageReference"] = None,
5386        os_disk: Optional["OSDisk"] = None,
5387        data_disks: Optional[List["DataDisk"]] = None,
5388        **kwargs
5389    ):
5390        super(StorageProfile, self).__init__(**kwargs)
5391        self.image_reference = image_reference
5392        self.os_disk = os_disk
5393        self.data_disks = data_disks
5394
5395
5396class SubResourceReadOnly(msrest.serialization.Model):
5397    """SubResourceReadOnly.
5398
5399    Variables are only populated by the server, and will be ignored when sending a request.
5400
5401    :ivar id: Resource Id.
5402    :vartype id: str
5403    """
5404
5405    _validation = {
5406        'id': {'readonly': True},
5407    }
5408
5409    _attribute_map = {
5410        'id': {'key': 'id', 'type': 'str'},
5411    }
5412
5413    def __init__(
5414        self,
5415        **kwargs
5416    ):
5417        super(SubResourceReadOnly, self).__init__(**kwargs)
5418        self.id = None
5419
5420
5421class TargetRegion(msrest.serialization.Model):
5422    """Describes the target region information.
5423
5424    All required parameters must be populated in order to send to Azure.
5425
5426    :param name: Required. The name of the region.
5427    :type name: str
5428    :param regional_replica_count: The number of replicas of the Image Version to be created per
5429     region. This property is updatable.
5430    :type regional_replica_count: int
5431    :param storage_account_type: Specifies the storage account type to be used to store the image.
5432     This property is not updatable. Possible values include: "Standard_LRS", "Standard_ZRS".
5433    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountType
5434    """
5435
5436    _validation = {
5437        'name': {'required': True},
5438    }
5439
5440    _attribute_map = {
5441        'name': {'key': 'name', 'type': 'str'},
5442        'regional_replica_count': {'key': 'regionalReplicaCount', 'type': 'int'},
5443        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
5444    }
5445
5446    def __init__(
5447        self,
5448        *,
5449        name: str,
5450        regional_replica_count: Optional[int] = None,
5451        storage_account_type: Optional[Union[str, "StorageAccountType"]] = None,
5452        **kwargs
5453    ):
5454        super(TargetRegion, self).__init__(**kwargs)
5455        self.name = name
5456        self.regional_replica_count = regional_replica_count
5457        self.storage_account_type = storage_account_type
5458
5459
5460class TerminateNotificationProfile(msrest.serialization.Model):
5461    """TerminateNotificationProfile.
5462
5463    :param not_before_timeout: Configurable length of time a Virtual Machine being deleted will
5464     have to potentially approve the Terminate Scheduled Event before the event is auto approved
5465     (timed out). The configuration must be specified in ISO 8601 format, the default value is 5
5466     minutes (PT5M).
5467    :type not_before_timeout: str
5468    :param enable: Specifies whether the Terminate Scheduled event is enabled or disabled.
5469    :type enable: bool
5470    """
5471
5472    _attribute_map = {
5473        'not_before_timeout': {'key': 'notBeforeTimeout', 'type': 'str'},
5474        'enable': {'key': 'enable', 'type': 'bool'},
5475    }
5476
5477    def __init__(
5478        self,
5479        *,
5480        not_before_timeout: Optional[str] = None,
5481        enable: Optional[bool] = None,
5482        **kwargs
5483    ):
5484        super(TerminateNotificationProfile, self).__init__(**kwargs)
5485        self.not_before_timeout = not_before_timeout
5486        self.enable = enable
5487
5488
5489class ThrottledRequestsInput(LogAnalyticsInputBase):
5490    """Api request input for LogAnalytics getThrottledRequests Api.
5491
5492    All required parameters must be populated in order to send to Azure.
5493
5494    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
5495     LogAnalytics Api writes output logs to.
5496    :type blob_container_sas_uri: str
5497    :param from_time: Required. From time of the query.
5498    :type from_time: ~datetime.datetime
5499    :param to_time: Required. To time of the query.
5500    :type to_time: ~datetime.datetime
5501    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
5502    :type group_by_throttle_policy: bool
5503    :param group_by_operation_name: Group query result by Operation Name.
5504    :type group_by_operation_name: bool
5505    :param group_by_resource_name: Group query result by Resource Name.
5506    :type group_by_resource_name: bool
5507    """
5508
5509    _validation = {
5510        'blob_container_sas_uri': {'required': True},
5511        'from_time': {'required': True},
5512        'to_time': {'required': True},
5513    }
5514
5515    _attribute_map = {
5516        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
5517        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
5518        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
5519        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
5520        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
5521        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
5522    }
5523
5524    def __init__(
5525        self,
5526        *,
5527        blob_container_sas_uri: str,
5528        from_time: datetime.datetime,
5529        to_time: datetime.datetime,
5530        group_by_throttle_policy: Optional[bool] = None,
5531        group_by_operation_name: Optional[bool] = None,
5532        group_by_resource_name: Optional[bool] = None,
5533        **kwargs
5534    ):
5535        super(ThrottledRequestsInput, self).__init__(blob_container_sas_uri=blob_container_sas_uri, from_time=from_time, to_time=to_time, group_by_throttle_policy=group_by_throttle_policy, group_by_operation_name=group_by_operation_name, group_by_resource_name=group_by_resource_name, **kwargs)
5536
5537
5538class UpgradeOperationHistoricalStatusInfo(msrest.serialization.Model):
5539    """Virtual Machine Scale Set OS Upgrade History operation response.
5540
5541    Variables are only populated by the server, and will be ignored when sending a request.
5542
5543    :ivar properties: Information about the properties of the upgrade operation.
5544    :vartype properties:
5545     ~azure.mgmt.compute.v2019_03_01.models.UpgradeOperationHistoricalStatusInfoProperties
5546    :ivar type: Resource type.
5547    :vartype type: str
5548    :ivar location: Resource location.
5549    :vartype location: str
5550    """
5551
5552    _validation = {
5553        'properties': {'readonly': True},
5554        'type': {'readonly': True},
5555        'location': {'readonly': True},
5556    }
5557
5558    _attribute_map = {
5559        'properties': {'key': 'properties', 'type': 'UpgradeOperationHistoricalStatusInfoProperties'},
5560        'type': {'key': 'type', 'type': 'str'},
5561        'location': {'key': 'location', 'type': 'str'},
5562    }
5563
5564    def __init__(
5565        self,
5566        **kwargs
5567    ):
5568        super(UpgradeOperationHistoricalStatusInfo, self).__init__(**kwargs)
5569        self.properties = None
5570        self.type = None
5571        self.location = None
5572
5573
5574class UpgradeOperationHistoricalStatusInfoProperties(msrest.serialization.Model):
5575    """Describes each OS upgrade on the Virtual Machine Scale Set.
5576
5577    Variables are only populated by the server, and will be ignored when sending a request.
5578
5579    :ivar running_status: Information about the overall status of the upgrade operation.
5580    :vartype running_status: ~azure.mgmt.compute.v2019_03_01.models.UpgradeOperationHistoryStatus
5581    :ivar progress: Counts of the VMs in each state.
5582    :vartype progress: ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradeProgressInfo
5583    :ivar error: Error Details for this upgrade if there are any.
5584    :vartype error: ~azure.mgmt.compute.v2019_03_01.models.ApiError
5585    :ivar started_by: Invoker of the Upgrade Operation. Possible values include: "Unknown", "User",
5586     "Platform".
5587    :vartype started_by: str or ~azure.mgmt.compute.v2019_03_01.models.UpgradeOperationInvoker
5588    :ivar target_image_reference: Image Reference details.
5589    :vartype target_image_reference: ~azure.mgmt.compute.v2019_03_01.models.ImageReference
5590    :ivar rollback_info: Information about OS rollback if performed.
5591    :vartype rollback_info: ~azure.mgmt.compute.v2019_03_01.models.RollbackStatusInfo
5592    """
5593
5594    _validation = {
5595        'running_status': {'readonly': True},
5596        'progress': {'readonly': True},
5597        'error': {'readonly': True},
5598        'started_by': {'readonly': True},
5599        'target_image_reference': {'readonly': True},
5600        'rollback_info': {'readonly': True},
5601    }
5602
5603    _attribute_map = {
5604        'running_status': {'key': 'runningStatus', 'type': 'UpgradeOperationHistoryStatus'},
5605        'progress': {'key': 'progress', 'type': 'RollingUpgradeProgressInfo'},
5606        'error': {'key': 'error', 'type': 'ApiError'},
5607        'started_by': {'key': 'startedBy', 'type': 'str'},
5608        'target_image_reference': {'key': 'targetImageReference', 'type': 'ImageReference'},
5609        'rollback_info': {'key': 'rollbackInfo', 'type': 'RollbackStatusInfo'},
5610    }
5611
5612    def __init__(
5613        self,
5614        **kwargs
5615    ):
5616        super(UpgradeOperationHistoricalStatusInfoProperties, self).__init__(**kwargs)
5617        self.running_status = None
5618        self.progress = None
5619        self.error = None
5620        self.started_by = None
5621        self.target_image_reference = None
5622        self.rollback_info = None
5623
5624
5625class UpgradeOperationHistoryStatus(msrest.serialization.Model):
5626    """Information about the current running state of the overall upgrade.
5627
5628    Variables are only populated by the server, and will be ignored when sending a request.
5629
5630    :ivar code: Code indicating the current status of the upgrade. Possible values include:
5631     "RollingForward", "Cancelled", "Completed", "Faulted".
5632    :vartype code: str or ~azure.mgmt.compute.v2019_03_01.models.UpgradeState
5633    :ivar start_time: Start time of the upgrade.
5634    :vartype start_time: ~datetime.datetime
5635    :ivar end_time: End time of the upgrade.
5636    :vartype end_time: ~datetime.datetime
5637    """
5638
5639    _validation = {
5640        'code': {'readonly': True},
5641        'start_time': {'readonly': True},
5642        'end_time': {'readonly': True},
5643    }
5644
5645    _attribute_map = {
5646        'code': {'key': 'code', 'type': 'str'},
5647        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
5648        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
5649    }
5650
5651    def __init__(
5652        self,
5653        **kwargs
5654    ):
5655        super(UpgradeOperationHistoryStatus, self).__init__(**kwargs)
5656        self.code = None
5657        self.start_time = None
5658        self.end_time = None
5659
5660
5661class UpgradePolicy(msrest.serialization.Model):
5662    """Describes an upgrade policy - automatic, manual, or rolling.
5663
5664    :param mode: Specifies the mode of an upgrade to virtual machines in the scale set.:code:`<br
5665     />`:code:`<br />` Possible values are::code:`<br />`:code:`<br />` **Manual** - You  control
5666     the application of updates to virtual machines in the scale set. You do this by using the
5667     manualUpgrade action.:code:`<br />`:code:`<br />` **Automatic** - All virtual machines in the
5668     scale set are  automatically updated at the same time. Possible values include: "Automatic",
5669     "Manual", "Rolling".
5670    :type mode: str or ~azure.mgmt.compute.v2019_03_01.models.UpgradeMode
5671    :param rolling_upgrade_policy: The configuration parameters used while performing a rolling
5672     upgrade.
5673    :type rolling_upgrade_policy: ~azure.mgmt.compute.v2019_03_01.models.RollingUpgradePolicy
5674    :param automatic_os_upgrade_policy: Configuration parameters used for performing automatic OS
5675     Upgrade.
5676    :type automatic_os_upgrade_policy:
5677     ~azure.mgmt.compute.v2019_03_01.models.AutomaticOSUpgradePolicy
5678    """
5679
5680    _attribute_map = {
5681        'mode': {'key': 'mode', 'type': 'str'},
5682        'rolling_upgrade_policy': {'key': 'rollingUpgradePolicy', 'type': 'RollingUpgradePolicy'},
5683        'automatic_os_upgrade_policy': {'key': 'automaticOSUpgradePolicy', 'type': 'AutomaticOSUpgradePolicy'},
5684    }
5685
5686    def __init__(
5687        self,
5688        *,
5689        mode: Optional[Union[str, "UpgradeMode"]] = None,
5690        rolling_upgrade_policy: Optional["RollingUpgradePolicy"] = None,
5691        automatic_os_upgrade_policy: Optional["AutomaticOSUpgradePolicy"] = None,
5692        **kwargs
5693    ):
5694        super(UpgradePolicy, self).__init__(**kwargs)
5695        self.mode = mode
5696        self.rolling_upgrade_policy = rolling_upgrade_policy
5697        self.automatic_os_upgrade_policy = automatic_os_upgrade_policy
5698
5699
5700class Usage(msrest.serialization.Model):
5701    """Describes Compute Resource Usage.
5702
5703    Variables are only populated by the server, and will be ignored when sending a request.
5704
5705    All required parameters must be populated in order to send to Azure.
5706
5707    :ivar unit: An enum describing the unit of usage measurement. Has constant value: "Count".
5708    :vartype unit: str
5709    :param current_value: Required. The current usage of the resource.
5710    :type current_value: int
5711    :param limit: Required. The maximum permitted usage of the resource.
5712    :type limit: long
5713    :param name: Required. The name of the type of usage.
5714    :type name: ~azure.mgmt.compute.v2019_03_01.models.UsageName
5715    """
5716
5717    _validation = {
5718        'unit': {'required': True, 'constant': True},
5719        'current_value': {'required': True},
5720        'limit': {'required': True},
5721        'name': {'required': True},
5722    }
5723
5724    _attribute_map = {
5725        'unit': {'key': 'unit', 'type': 'str'},
5726        'current_value': {'key': 'currentValue', 'type': 'int'},
5727        'limit': {'key': 'limit', 'type': 'long'},
5728        'name': {'key': 'name', 'type': 'UsageName'},
5729    }
5730
5731    unit = "Count"
5732
5733    def __init__(
5734        self,
5735        *,
5736        current_value: int,
5737        limit: int,
5738        name: "UsageName",
5739        **kwargs
5740    ):
5741        super(Usage, self).__init__(**kwargs)
5742        self.current_value = current_value
5743        self.limit = limit
5744        self.name = name
5745
5746
5747class UsageName(msrest.serialization.Model):
5748    """The Usage Names.
5749
5750    :param value: The name of the resource.
5751    :type value: str
5752    :param localized_value: The localized name of the resource.
5753    :type localized_value: str
5754    """
5755
5756    _attribute_map = {
5757        'value': {'key': 'value', 'type': 'str'},
5758        'localized_value': {'key': 'localizedValue', 'type': 'str'},
5759    }
5760
5761    def __init__(
5762        self,
5763        *,
5764        value: Optional[str] = None,
5765        localized_value: Optional[str] = None,
5766        **kwargs
5767    ):
5768        super(UsageName, self).__init__(**kwargs)
5769        self.value = value
5770        self.localized_value = localized_value
5771
5772
5773class UserArtifactManage(msrest.serialization.Model):
5774    """UserArtifactManage.
5775
5776    All required parameters must be populated in order to send to Azure.
5777
5778    :param install: Required. Required. The path and arguments to install the gallery application.
5779     This is limited to 4096 characters.
5780    :type install: str
5781    :param remove: Required. Required. The path and arguments to remove the gallery application.
5782     This is limited to 4096 characters.
5783    :type remove: str
5784    :param update: Optional. The path and arguments to update the gallery application. If not
5785     present, then update operation will invoke remove command on the previous version and install
5786     command on the current version of the gallery application. This is limited to 4096 characters.
5787    :type update: str
5788    """
5789
5790    _validation = {
5791        'install': {'required': True},
5792        'remove': {'required': True},
5793    }
5794
5795    _attribute_map = {
5796        'install': {'key': 'install', 'type': 'str'},
5797        'remove': {'key': 'remove', 'type': 'str'},
5798        'update': {'key': 'update', 'type': 'str'},
5799    }
5800
5801    def __init__(
5802        self,
5803        *,
5804        install: str,
5805        remove: str,
5806        update: Optional[str] = None,
5807        **kwargs
5808    ):
5809        super(UserArtifactManage, self).__init__(**kwargs)
5810        self.install = install
5811        self.remove = remove
5812        self.update = update
5813
5814
5815class UserArtifactSource(msrest.serialization.Model):
5816    """The source image from which the Image Version is going to be created.
5817
5818    All required parameters must be populated in order to send to Azure.
5819
5820    :param media_link: Required. Required. The mediaLink of the artifact, must be a readable
5821     storage page blob.
5822    :type media_link: str
5823    :param default_configuration_link: Optional. The defaultConfigurationLink of the artifact, must
5824     be a readable storage page blob.
5825    :type default_configuration_link: str
5826    """
5827
5828    _validation = {
5829        'media_link': {'required': True},
5830    }
5831
5832    _attribute_map = {
5833        'media_link': {'key': 'mediaLink', 'type': 'str'},
5834        'default_configuration_link': {'key': 'defaultConfigurationLink', 'type': 'str'},
5835    }
5836
5837    def __init__(
5838        self,
5839        *,
5840        media_link: str,
5841        default_configuration_link: Optional[str] = None,
5842        **kwargs
5843    ):
5844        super(UserArtifactSource, self).__init__(**kwargs)
5845        self.media_link = media_link
5846        self.default_configuration_link = default_configuration_link
5847
5848
5849class UserAssignedIdentitiesValue(msrest.serialization.Model):
5850    """UserAssignedIdentitiesValue.
5851
5852    Variables are only populated by the server, and will be ignored when sending a request.
5853
5854    :ivar principal_id: The principal id of user assigned identity.
5855    :vartype principal_id: str
5856    :ivar client_id: The client id of user assigned identity.
5857    :vartype client_id: str
5858    """
5859
5860    _validation = {
5861        'principal_id': {'readonly': True},
5862        'client_id': {'readonly': True},
5863    }
5864
5865    _attribute_map = {
5866        'principal_id': {'key': 'principalId', 'type': 'str'},
5867        'client_id': {'key': 'clientId', 'type': 'str'},
5868    }
5869
5870    def __init__(
5871        self,
5872        **kwargs
5873    ):
5874        super(UserAssignedIdentitiesValue, self).__init__(**kwargs)
5875        self.principal_id = None
5876        self.client_id = None
5877
5878
5879class VaultCertificate(msrest.serialization.Model):
5880    """Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.
5881
5882    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
5883     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
5884     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
5885     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
5886     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
5887     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
5888     "password":":code:`<pfx-file-password>`":code:`<br>`}.
5889    :type certificate_url: str
5890    :param certificate_store: For Windows VMs, specifies the certificate store on the Virtual
5891     Machine to which the certificate should be added. The specified certificate store is implicitly
5892     in the LocalMachine account. :code:`<br>`:code:`<br>`For Linux VMs, the certificate file is
5893     placed under the /var/lib/waagent directory, with the file name &lt;UppercaseThumbprint&gt;.crt
5894     for the X509 certificate file and &lt;UppercaseThumbprint&gt;.prv for private key. Both of
5895     these files are .pem formatted.
5896    :type certificate_store: str
5897    """
5898
5899    _attribute_map = {
5900        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
5901        'certificate_store': {'key': 'certificateStore', 'type': 'str'},
5902    }
5903
5904    def __init__(
5905        self,
5906        *,
5907        certificate_url: Optional[str] = None,
5908        certificate_store: Optional[str] = None,
5909        **kwargs
5910    ):
5911        super(VaultCertificate, self).__init__(**kwargs)
5912        self.certificate_url = certificate_url
5913        self.certificate_store = certificate_store
5914
5915
5916class VaultSecretGroup(msrest.serialization.Model):
5917    """Describes a set of certificates which are all in the same Key Vault.
5918
5919    :param source_vault: The relative URL of the Key Vault containing all of the certificates in
5920     VaultCertificates.
5921    :type source_vault: ~azure.mgmt.compute.v2019_03_01.models.SubResource
5922    :param vault_certificates: The list of key vault references in SourceVault which contain
5923     certificates.
5924    :type vault_certificates: list[~azure.mgmt.compute.v2019_03_01.models.VaultCertificate]
5925    """
5926
5927    _attribute_map = {
5928        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
5929        'vault_certificates': {'key': 'vaultCertificates', 'type': '[VaultCertificate]'},
5930    }
5931
5932    def __init__(
5933        self,
5934        *,
5935        source_vault: Optional["SubResource"] = None,
5936        vault_certificates: Optional[List["VaultCertificate"]] = None,
5937        **kwargs
5938    ):
5939        super(VaultSecretGroup, self).__init__(**kwargs)
5940        self.source_vault = source_vault
5941        self.vault_certificates = vault_certificates
5942
5943
5944class VirtualHardDisk(msrest.serialization.Model):
5945    """Describes the uri of a disk.
5946
5947    :param uri: Specifies the virtual hard disk's uri.
5948    :type uri: str
5949    """
5950
5951    _attribute_map = {
5952        'uri': {'key': 'uri', 'type': 'str'},
5953    }
5954
5955    def __init__(
5956        self,
5957        *,
5958        uri: Optional[str] = None,
5959        **kwargs
5960    ):
5961        super(VirtualHardDisk, self).__init__(**kwargs)
5962        self.uri = uri
5963
5964
5965class VirtualMachine(Resource):
5966    """Describes a Virtual Machine.
5967
5968    Variables are only populated by the server, and will be ignored when sending a request.
5969
5970    All required parameters must be populated in order to send to Azure.
5971
5972    :ivar id: Resource Id.
5973    :vartype id: str
5974    :ivar name: Resource name.
5975    :vartype name: str
5976    :ivar type: Resource type.
5977    :vartype type: str
5978    :param location: Required. Resource location.
5979    :type location: str
5980    :param tags: A set of tags. Resource tags.
5981    :type tags: dict[str, str]
5982    :param plan: Specifies information about the marketplace image used to create the virtual
5983     machine. This element is only used for marketplace images. Before you can use a marketplace
5984     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
5985     the marketplace image that you want to use and then click **Want to deploy programmatically,
5986     Get Started ->**. Enter any required information and then click **Save**.
5987    :type plan: ~azure.mgmt.compute.v2019_03_01.models.Plan
5988    :ivar resources: The virtual machine child extension resources.
5989    :vartype resources: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtension]
5990    :param identity: The identity of the virtual machine, if configured.
5991    :type identity: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineIdentity
5992    :param zones: The virtual machine zones.
5993    :type zones: list[str]
5994    :param hardware_profile: Specifies the hardware settings for the virtual machine.
5995    :type hardware_profile: ~azure.mgmt.compute.v2019_03_01.models.HardwareProfile
5996    :param storage_profile: Specifies the storage settings for the virtual machine disks.
5997    :type storage_profile: ~azure.mgmt.compute.v2019_03_01.models.StorageProfile
5998    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
5999     virtual machine.
6000    :type additional_capabilities: ~azure.mgmt.compute.v2019_03_01.models.AdditionalCapabilities
6001    :param os_profile: Specifies the operating system settings for the virtual machine.
6002    :type os_profile: ~azure.mgmt.compute.v2019_03_01.models.OSProfile
6003    :param network_profile: Specifies the network interfaces of the virtual machine.
6004    :type network_profile: ~azure.mgmt.compute.v2019_03_01.models.NetworkProfile
6005    :param diagnostics_profile: Specifies the boot diagnostic settings state.
6006     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
6007    :type diagnostics_profile: ~azure.mgmt.compute.v2019_03_01.models.DiagnosticsProfile
6008    :param availability_set: Specifies information about the availability set that the virtual
6009     machine should be assigned to. Virtual machines specified in the same availability set are
6010     allocated to different nodes to maximize availability. For more information about availability
6011     sets, see `Manage the availability of virtual machines
6012     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6013     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
6014     maintenance for virtual machines in Azure
6015     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6016     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
6017     time. An existing VM cannot be added to an availability set. :code:`<br>`:code:`<br>`This
6018     property cannot exist along with a non-null properties.virtualMachineScaleSet reference.
6019    :type availability_set: ~azure.mgmt.compute.v2019_03_01.models.SubResource
6020    :param virtual_machine_scale_set: Specifies information about the virtual machine scale set
6021     that the virtual machine should be assigned to. Virtual machines specified in the same virtual
6022     machine scale set are allocated to different nodes to maximize availability. Currently, a VM
6023     can only be added to virtual machine scale set at creation time. An existing VM cannot be added
6024     to a virtual machine scale set. :code:`<br>`:code:`<br>`This property cannot exist along with a
6025     non-null properties.availabilitySet reference. :code:`<br>`:code:`<br>`Minimum api‐version:
6026     2019‐03‐01.
6027    :type virtual_machine_scale_set: ~azure.mgmt.compute.v2019_03_01.models.SubResource
6028    :param proximity_placement_group: Specifies information about the proximity placement group
6029     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
6030     2018-04-01.
6031    :type proximity_placement_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
6032    :param priority: Specifies the priority for the virtual machine.
6033     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01. Possible values include: "Regular",
6034     "Low", "Spot".
6035    :type priority: str or ~azure.mgmt.compute.v2019_03_01.models.VirtualMachinePriorityTypes
6036    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine. Only
6037     supported value is 'Deallocate'. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
6038     Possible values include: "Deallocate", "Delete".
6039    :type eviction_policy: str or
6040     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineEvictionPolicyTypes
6041    :param billing_profile: Specifies the billing related details of a Azure Spot virtual machine.
6042     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
6043    :type billing_profile: ~azure.mgmt.compute.v2019_03_01.models.BillingProfile
6044    :param host: Specifies information about the dedicated host that the virtual machine resides
6045     in. :code:`<br>`:code:`<br>`Minimum api-version: 2018-10-01.
6046    :type host: ~azure.mgmt.compute.v2019_03_01.models.SubResource
6047    :ivar provisioning_state: The provisioning state, which only appears in the response.
6048    :vartype provisioning_state: str
6049    :ivar instance_view: The virtual machine instance view.
6050    :vartype instance_view: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineInstanceView
6051    :param license_type: Specifies that the image or disk that is being used was licensed
6052     on-premises. This element is only used for images that contain the Windows Server operating
6053     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
6054     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
6055     a request for an update, the value must match the initial value. This value cannot be updated.
6056     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
6057     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6058     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
6059    :type license_type: str
6060    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
6061     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
6062    :vartype vm_id: str
6063    """
6064
6065    _validation = {
6066        'id': {'readonly': True},
6067        'name': {'readonly': True},
6068        'type': {'readonly': True},
6069        'location': {'required': True},
6070        'resources': {'readonly': True},
6071        'provisioning_state': {'readonly': True},
6072        'instance_view': {'readonly': True},
6073        'vm_id': {'readonly': True},
6074    }
6075
6076    _attribute_map = {
6077        'id': {'key': 'id', 'type': 'str'},
6078        'name': {'key': 'name', 'type': 'str'},
6079        'type': {'key': 'type', 'type': 'str'},
6080        'location': {'key': 'location', 'type': 'str'},
6081        'tags': {'key': 'tags', 'type': '{str}'},
6082        'plan': {'key': 'plan', 'type': 'Plan'},
6083        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
6084        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
6085        'zones': {'key': 'zones', 'type': '[str]'},
6086        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
6087        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
6088        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
6089        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
6090        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
6091        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
6092        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
6093        'virtual_machine_scale_set': {'key': 'properties.virtualMachineScaleSet', 'type': 'SubResource'},
6094        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
6095        'priority': {'key': 'properties.priority', 'type': 'str'},
6096        'eviction_policy': {'key': 'properties.evictionPolicy', 'type': 'str'},
6097        'billing_profile': {'key': 'properties.billingProfile', 'type': 'BillingProfile'},
6098        'host': {'key': 'properties.host', 'type': 'SubResource'},
6099        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6100        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
6101        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
6102        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
6103    }
6104
6105    def __init__(
6106        self,
6107        *,
6108        location: str,
6109        tags: Optional[Dict[str, str]] = None,
6110        plan: Optional["Plan"] = None,
6111        identity: Optional["VirtualMachineIdentity"] = None,
6112        zones: Optional[List[str]] = None,
6113        hardware_profile: Optional["HardwareProfile"] = None,
6114        storage_profile: Optional["StorageProfile"] = None,
6115        additional_capabilities: Optional["AdditionalCapabilities"] = None,
6116        os_profile: Optional["OSProfile"] = None,
6117        network_profile: Optional["NetworkProfile"] = None,
6118        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
6119        availability_set: Optional["SubResource"] = None,
6120        virtual_machine_scale_set: Optional["SubResource"] = None,
6121        proximity_placement_group: Optional["SubResource"] = None,
6122        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
6123        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
6124        billing_profile: Optional["BillingProfile"] = None,
6125        host: Optional["SubResource"] = None,
6126        license_type: Optional[str] = None,
6127        **kwargs
6128    ):
6129        super(VirtualMachine, self).__init__(location=location, tags=tags, **kwargs)
6130        self.plan = plan
6131        self.resources = None
6132        self.identity = identity
6133        self.zones = zones
6134        self.hardware_profile = hardware_profile
6135        self.storage_profile = storage_profile
6136        self.additional_capabilities = additional_capabilities
6137        self.os_profile = os_profile
6138        self.network_profile = network_profile
6139        self.diagnostics_profile = diagnostics_profile
6140        self.availability_set = availability_set
6141        self.virtual_machine_scale_set = virtual_machine_scale_set
6142        self.proximity_placement_group = proximity_placement_group
6143        self.priority = priority
6144        self.eviction_policy = eviction_policy
6145        self.billing_profile = billing_profile
6146        self.host = host
6147        self.provisioning_state = None
6148        self.instance_view = None
6149        self.license_type = license_type
6150        self.vm_id = None
6151
6152
6153class VirtualMachineAgentInstanceView(msrest.serialization.Model):
6154    """The instance view of the VM Agent running on the virtual machine.
6155
6156    :param vm_agent_version: The VM Agent full version.
6157    :type vm_agent_version: str
6158    :param extension_handlers: The virtual machine extension handler instance view.
6159    :type extension_handlers:
6160     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtensionHandlerInstanceView]
6161    :param statuses: The resource status information.
6162    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
6163    """
6164
6165    _attribute_map = {
6166        'vm_agent_version': {'key': 'vmAgentVersion', 'type': 'str'},
6167        'extension_handlers': {'key': 'extensionHandlers', 'type': '[VirtualMachineExtensionHandlerInstanceView]'},
6168        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
6169    }
6170
6171    def __init__(
6172        self,
6173        *,
6174        vm_agent_version: Optional[str] = None,
6175        extension_handlers: Optional[List["VirtualMachineExtensionHandlerInstanceView"]] = None,
6176        statuses: Optional[List["InstanceViewStatus"]] = None,
6177        **kwargs
6178    ):
6179        super(VirtualMachineAgentInstanceView, self).__init__(**kwargs)
6180        self.vm_agent_version = vm_agent_version
6181        self.extension_handlers = extension_handlers
6182        self.statuses = statuses
6183
6184
6185class VirtualMachineCaptureParameters(msrest.serialization.Model):
6186    """Capture Virtual Machine parameters.
6187
6188    All required parameters must be populated in order to send to Azure.
6189
6190    :param vhd_prefix: Required. The captured virtual hard disk's name prefix.
6191    :type vhd_prefix: str
6192    :param destination_container_name: Required. The destination container name.
6193    :type destination_container_name: str
6194    :param overwrite_vhds: Required. Specifies whether to overwrite the destination virtual hard
6195     disk, in case of conflict.
6196    :type overwrite_vhds: bool
6197    """
6198
6199    _validation = {
6200        'vhd_prefix': {'required': True},
6201        'destination_container_name': {'required': True},
6202        'overwrite_vhds': {'required': True},
6203    }
6204
6205    _attribute_map = {
6206        'vhd_prefix': {'key': 'vhdPrefix', 'type': 'str'},
6207        'destination_container_name': {'key': 'destinationContainerName', 'type': 'str'},
6208        'overwrite_vhds': {'key': 'overwriteVhds', 'type': 'bool'},
6209    }
6210
6211    def __init__(
6212        self,
6213        *,
6214        vhd_prefix: str,
6215        destination_container_name: str,
6216        overwrite_vhds: bool,
6217        **kwargs
6218    ):
6219        super(VirtualMachineCaptureParameters, self).__init__(**kwargs)
6220        self.vhd_prefix = vhd_prefix
6221        self.destination_container_name = destination_container_name
6222        self.overwrite_vhds = overwrite_vhds
6223
6224
6225class VirtualMachineCaptureResult(SubResource):
6226    """Output of virtual machine capture operation.
6227
6228    Variables are only populated by the server, and will be ignored when sending a request.
6229
6230    :param id: Resource Id.
6231    :type id: str
6232    :ivar schema: the schema of the captured virtual machine.
6233    :vartype schema: str
6234    :ivar content_version: the version of the content.
6235    :vartype content_version: str
6236    :ivar parameters: parameters of the captured virtual machine.
6237    :vartype parameters: any
6238    :ivar resources: a list of resource items of the captured virtual machine.
6239    :vartype resources: list[any]
6240    """
6241
6242    _validation = {
6243        'schema': {'readonly': True},
6244        'content_version': {'readonly': True},
6245        'parameters': {'readonly': True},
6246        'resources': {'readonly': True},
6247    }
6248
6249    _attribute_map = {
6250        'id': {'key': 'id', 'type': 'str'},
6251        'schema': {'key': '$schema', 'type': 'str'},
6252        'content_version': {'key': 'contentVersion', 'type': 'str'},
6253        'parameters': {'key': 'parameters', 'type': 'object'},
6254        'resources': {'key': 'resources', 'type': '[object]'},
6255    }
6256
6257    def __init__(
6258        self,
6259        *,
6260        id: Optional[str] = None,
6261        **kwargs
6262    ):
6263        super(VirtualMachineCaptureResult, self).__init__(id=id, **kwargs)
6264        self.schema = None
6265        self.content_version = None
6266        self.parameters = None
6267        self.resources = None
6268
6269
6270class VirtualMachineExtension(Resource):
6271    """Describes a Virtual Machine Extension.
6272
6273    Variables are only populated by the server, and will be ignored when sending a request.
6274
6275    All required parameters must be populated in order to send to Azure.
6276
6277    :ivar id: Resource Id.
6278    :vartype id: str
6279    :ivar name: Resource name.
6280    :vartype name: str
6281    :ivar type: Resource type.
6282    :vartype type: str
6283    :param location: Required. Resource location.
6284    :type location: str
6285    :param tags: A set of tags. Resource tags.
6286    :type tags: dict[str, str]
6287    :param force_update_tag: How the extension handler should be forced to update even if the
6288     extension configuration has not changed.
6289    :type force_update_tag: str
6290    :param publisher: The name of the extension handler publisher.
6291    :type publisher: str
6292    :param type_properties_type: Specifies the type of the extension; an example is
6293     "CustomScriptExtension".
6294    :type type_properties_type: str
6295    :param type_handler_version: Specifies the version of the script handler.
6296    :type type_handler_version: str
6297    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
6298     version if one is available at deployment time. Once deployed, however, the extension will not
6299     upgrade minor versions unless redeployed, even with this property set to true.
6300    :type auto_upgrade_minor_version: bool
6301    :param settings: Json formatted public settings for the extension.
6302    :type settings: any
6303    :param protected_settings: The extension can contain either protectedSettings or
6304     protectedSettingsFromKeyVault or no protected settings at all.
6305    :type protected_settings: any
6306    :ivar provisioning_state: The provisioning state, which only appears in the response.
6307    :vartype provisioning_state: str
6308    :param instance_view: The virtual machine extension instance view.
6309    :type instance_view: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtensionInstanceView
6310    """
6311
6312    _validation = {
6313        'id': {'readonly': True},
6314        'name': {'readonly': True},
6315        'type': {'readonly': True},
6316        'location': {'required': True},
6317        'provisioning_state': {'readonly': True},
6318    }
6319
6320    _attribute_map = {
6321        'id': {'key': 'id', 'type': 'str'},
6322        'name': {'key': 'name', 'type': 'str'},
6323        'type': {'key': 'type', 'type': 'str'},
6324        'location': {'key': 'location', 'type': 'str'},
6325        'tags': {'key': 'tags', 'type': '{str}'},
6326        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
6327        'publisher': {'key': 'properties.publisher', 'type': 'str'},
6328        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
6329        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
6330        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
6331        'settings': {'key': 'properties.settings', 'type': 'object'},
6332        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
6333        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6334        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineExtensionInstanceView'},
6335    }
6336
6337    def __init__(
6338        self,
6339        *,
6340        location: str,
6341        tags: Optional[Dict[str, str]] = None,
6342        force_update_tag: Optional[str] = None,
6343        publisher: Optional[str] = None,
6344        type_properties_type: Optional[str] = None,
6345        type_handler_version: Optional[str] = None,
6346        auto_upgrade_minor_version: Optional[bool] = None,
6347        settings: Optional[Any] = None,
6348        protected_settings: Optional[Any] = None,
6349        instance_view: Optional["VirtualMachineExtensionInstanceView"] = None,
6350        **kwargs
6351    ):
6352        super(VirtualMachineExtension, self).__init__(location=location, tags=tags, **kwargs)
6353        self.force_update_tag = force_update_tag
6354        self.publisher = publisher
6355        self.type_properties_type = type_properties_type
6356        self.type_handler_version = type_handler_version
6357        self.auto_upgrade_minor_version = auto_upgrade_minor_version
6358        self.settings = settings
6359        self.protected_settings = protected_settings
6360        self.provisioning_state = None
6361        self.instance_view = instance_view
6362
6363
6364class VirtualMachineExtensionHandlerInstanceView(msrest.serialization.Model):
6365    """The instance view of a virtual machine extension handler.
6366
6367    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
6368    :type type: str
6369    :param type_handler_version: Specifies the version of the script handler.
6370    :type type_handler_version: str
6371    :param status: The extension handler status.
6372    :type status: ~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus
6373    """
6374
6375    _attribute_map = {
6376        'type': {'key': 'type', 'type': 'str'},
6377        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
6378        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
6379    }
6380
6381    def __init__(
6382        self,
6383        *,
6384        type: Optional[str] = None,
6385        type_handler_version: Optional[str] = None,
6386        status: Optional["InstanceViewStatus"] = None,
6387        **kwargs
6388    ):
6389        super(VirtualMachineExtensionHandlerInstanceView, self).__init__(**kwargs)
6390        self.type = type
6391        self.type_handler_version = type_handler_version
6392        self.status = status
6393
6394
6395class VirtualMachineExtensionImage(Resource):
6396    """Describes a Virtual Machine Extension Image.
6397
6398    Variables are only populated by the server, and will be ignored when sending a request.
6399
6400    All required parameters must be populated in order to send to Azure.
6401
6402    :ivar id: Resource Id.
6403    :vartype id: str
6404    :ivar name: Resource name.
6405    :vartype name: str
6406    :ivar type: Resource type.
6407    :vartype type: str
6408    :param location: Required. Resource location.
6409    :type location: str
6410    :param tags: A set of tags. Resource tags.
6411    :type tags: dict[str, str]
6412    :param operating_system: The operating system this extension supports.
6413    :type operating_system: str
6414    :param compute_role: The type of role (IaaS or PaaS) this extension supports.
6415    :type compute_role: str
6416    :param handler_schema: The schema defined by publisher, where extension consumers should
6417     provide settings in a matching schema.
6418    :type handler_schema: str
6419    :param vm_scale_set_enabled: Whether the extension can be used on xRP VMScaleSets. By default
6420     existing extensions are usable on scalesets, but there might be cases where a publisher wants
6421     to explicitly indicate the extension is only enabled for CRP VMs but not VMSS.
6422    :type vm_scale_set_enabled: bool
6423    :param supports_multiple_extensions: Whether the handler can support multiple extensions.
6424    :type supports_multiple_extensions: bool
6425    """
6426
6427    _validation = {
6428        'id': {'readonly': True},
6429        'name': {'readonly': True},
6430        'type': {'readonly': True},
6431        'location': {'required': True},
6432    }
6433
6434    _attribute_map = {
6435        'id': {'key': 'id', 'type': 'str'},
6436        'name': {'key': 'name', 'type': 'str'},
6437        'type': {'key': 'type', 'type': 'str'},
6438        'location': {'key': 'location', 'type': 'str'},
6439        'tags': {'key': 'tags', 'type': '{str}'},
6440        'operating_system': {'key': 'properties.operatingSystem', 'type': 'str'},
6441        'compute_role': {'key': 'properties.computeRole', 'type': 'str'},
6442        'handler_schema': {'key': 'properties.handlerSchema', 'type': 'str'},
6443        'vm_scale_set_enabled': {'key': 'properties.vmScaleSetEnabled', 'type': 'bool'},
6444        'supports_multiple_extensions': {'key': 'properties.supportsMultipleExtensions', 'type': 'bool'},
6445    }
6446
6447    def __init__(
6448        self,
6449        *,
6450        location: str,
6451        tags: Optional[Dict[str, str]] = None,
6452        operating_system: Optional[str] = None,
6453        compute_role: Optional[str] = None,
6454        handler_schema: Optional[str] = None,
6455        vm_scale_set_enabled: Optional[bool] = None,
6456        supports_multiple_extensions: Optional[bool] = None,
6457        **kwargs
6458    ):
6459        super(VirtualMachineExtensionImage, self).__init__(location=location, tags=tags, **kwargs)
6460        self.operating_system = operating_system
6461        self.compute_role = compute_role
6462        self.handler_schema = handler_schema
6463        self.vm_scale_set_enabled = vm_scale_set_enabled
6464        self.supports_multiple_extensions = supports_multiple_extensions
6465
6466
6467class VirtualMachineExtensionInstanceView(msrest.serialization.Model):
6468    """The instance view of a virtual machine extension.
6469
6470    :param name: The virtual machine extension name.
6471    :type name: str
6472    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
6473    :type type: str
6474    :param type_handler_version: Specifies the version of the script handler.
6475    :type type_handler_version: str
6476    :param substatuses: The resource status information.
6477    :type substatuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
6478    :param statuses: The resource status information.
6479    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
6480    """
6481
6482    _attribute_map = {
6483        'name': {'key': 'name', 'type': 'str'},
6484        'type': {'key': 'type', 'type': 'str'},
6485        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
6486        'substatuses': {'key': 'substatuses', 'type': '[InstanceViewStatus]'},
6487        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
6488    }
6489
6490    def __init__(
6491        self,
6492        *,
6493        name: Optional[str] = None,
6494        type: Optional[str] = None,
6495        type_handler_version: Optional[str] = None,
6496        substatuses: Optional[List["InstanceViewStatus"]] = None,
6497        statuses: Optional[List["InstanceViewStatus"]] = None,
6498        **kwargs
6499    ):
6500        super(VirtualMachineExtensionInstanceView, self).__init__(**kwargs)
6501        self.name = name
6502        self.type = type
6503        self.type_handler_version = type_handler_version
6504        self.substatuses = substatuses
6505        self.statuses = statuses
6506
6507
6508class VirtualMachineExtensionsListResult(msrest.serialization.Model):
6509    """The List Extension operation response.
6510
6511    :param value: The list of extensions.
6512    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtension]
6513    """
6514
6515    _attribute_map = {
6516        'value': {'key': 'value', 'type': '[VirtualMachineExtension]'},
6517    }
6518
6519    def __init__(
6520        self,
6521        *,
6522        value: Optional[List["VirtualMachineExtension"]] = None,
6523        **kwargs
6524    ):
6525        super(VirtualMachineExtensionsListResult, self).__init__(**kwargs)
6526        self.value = value
6527
6528
6529class VirtualMachineExtensionUpdate(UpdateResource):
6530    """Describes a Virtual Machine Extension.
6531
6532    :param tags: A set of tags. Resource tags.
6533    :type tags: dict[str, str]
6534    :param force_update_tag: How the extension handler should be forced to update even if the
6535     extension configuration has not changed.
6536    :type force_update_tag: str
6537    :param publisher: The name of the extension handler publisher.
6538    :type publisher: str
6539    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
6540    :type type: str
6541    :param type_handler_version: Specifies the version of the script handler.
6542    :type type_handler_version: str
6543    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
6544     version if one is available at deployment time. Once deployed, however, the extension will not
6545     upgrade minor versions unless redeployed, even with this property set to true.
6546    :type auto_upgrade_minor_version: bool
6547    :param settings: Json formatted public settings for the extension.
6548    :type settings: any
6549    :param protected_settings: The extension can contain either protectedSettings or
6550     protectedSettingsFromKeyVault or no protected settings at all.
6551    :type protected_settings: any
6552    """
6553
6554    _attribute_map = {
6555        'tags': {'key': 'tags', 'type': '{str}'},
6556        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
6557        'publisher': {'key': 'properties.publisher', 'type': 'str'},
6558        'type': {'key': 'properties.type', 'type': 'str'},
6559        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
6560        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
6561        'settings': {'key': 'properties.settings', 'type': 'object'},
6562        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
6563    }
6564
6565    def __init__(
6566        self,
6567        *,
6568        tags: Optional[Dict[str, str]] = None,
6569        force_update_tag: Optional[str] = None,
6570        publisher: Optional[str] = None,
6571        type: Optional[str] = None,
6572        type_handler_version: Optional[str] = None,
6573        auto_upgrade_minor_version: Optional[bool] = None,
6574        settings: Optional[Any] = None,
6575        protected_settings: Optional[Any] = None,
6576        **kwargs
6577    ):
6578        super(VirtualMachineExtensionUpdate, self).__init__(tags=tags, **kwargs)
6579        self.force_update_tag = force_update_tag
6580        self.publisher = publisher
6581        self.type = type
6582        self.type_handler_version = type_handler_version
6583        self.auto_upgrade_minor_version = auto_upgrade_minor_version
6584        self.settings = settings
6585        self.protected_settings = protected_settings
6586
6587
6588class VirtualMachineHealthStatus(msrest.serialization.Model):
6589    """The health status of the VM.
6590
6591    Variables are only populated by the server, and will be ignored when sending a request.
6592
6593    :ivar status: The health status information for the VM.
6594    :vartype status: ~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus
6595    """
6596
6597    _validation = {
6598        'status': {'readonly': True},
6599    }
6600
6601    _attribute_map = {
6602        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
6603    }
6604
6605    def __init__(
6606        self,
6607        **kwargs
6608    ):
6609        super(VirtualMachineHealthStatus, self).__init__(**kwargs)
6610        self.status = None
6611
6612
6613class VirtualMachineIdentity(msrest.serialization.Model):
6614    """Identity for the virtual machine.
6615
6616    Variables are only populated by the server, and will be ignored when sending a request.
6617
6618    :ivar principal_id: The principal id of virtual machine identity. This property will only be
6619     provided for a system assigned identity.
6620    :vartype principal_id: str
6621    :ivar tenant_id: The tenant id associated with the virtual machine. This property will only be
6622     provided for a system assigned identity.
6623    :vartype tenant_id: str
6624    :param type: The type of identity used for the virtual machine. The type 'SystemAssigned,
6625     UserAssigned' includes both an implicitly created identity and a set of user assigned
6626     identities. The type 'None' will remove any identities from the virtual machine. Possible
6627     values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", "None".
6628    :type type: str or ~azure.mgmt.compute.v2019_03_01.models.ResourceIdentityType
6629    :param user_assigned_identities: The list of user identities associated with the Virtual
6630     Machine. The user identity dictionary key references will be ARM resource ids in the form:
6631     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
6632    :type user_assigned_identities: dict[str,
6633     ~azure.mgmt.compute.v2019_03_01.models.UserAssignedIdentitiesValue]
6634    """
6635
6636    _validation = {
6637        'principal_id': {'readonly': True},
6638        'tenant_id': {'readonly': True},
6639    }
6640
6641    _attribute_map = {
6642        'principal_id': {'key': 'principalId', 'type': 'str'},
6643        'tenant_id': {'key': 'tenantId', 'type': 'str'},
6644        'type': {'key': 'type', 'type': 'str'},
6645        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserAssignedIdentitiesValue}'},
6646    }
6647
6648    def __init__(
6649        self,
6650        *,
6651        type: Optional[Union[str, "ResourceIdentityType"]] = None,
6652        user_assigned_identities: Optional[Dict[str, "UserAssignedIdentitiesValue"]] = None,
6653        **kwargs
6654    ):
6655        super(VirtualMachineIdentity, self).__init__(**kwargs)
6656        self.principal_id = None
6657        self.tenant_id = None
6658        self.type = type
6659        self.user_assigned_identities = user_assigned_identities
6660
6661
6662class VirtualMachineImageResource(SubResource):
6663    """Virtual machine image resource information.
6664
6665    All required parameters must be populated in order to send to Azure.
6666
6667    :param id: Resource Id.
6668    :type id: str
6669    :param name: Required. The name of the resource.
6670    :type name: str
6671    :param location: Required. The supported Azure location of the resource.
6672    :type location: str
6673    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
6674     more information about using tags, see `Using tags to organize your Azure resources
6675     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
6676    :type tags: dict[str, str]
6677    """
6678
6679    _validation = {
6680        'name': {'required': True},
6681        'location': {'required': True},
6682    }
6683
6684    _attribute_map = {
6685        'id': {'key': 'id', 'type': 'str'},
6686        'name': {'key': 'name', 'type': 'str'},
6687        'location': {'key': 'location', 'type': 'str'},
6688        'tags': {'key': 'tags', 'type': '{str}'},
6689    }
6690
6691    def __init__(
6692        self,
6693        *,
6694        name: str,
6695        location: str,
6696        id: Optional[str] = None,
6697        tags: Optional[Dict[str, str]] = None,
6698        **kwargs
6699    ):
6700        super(VirtualMachineImageResource, self).__init__(id=id, **kwargs)
6701        self.name = name
6702        self.location = location
6703        self.tags = tags
6704
6705
6706class VirtualMachineImage(VirtualMachineImageResource):
6707    """Describes a Virtual Machine Image.
6708
6709    All required parameters must be populated in order to send to Azure.
6710
6711    :param id: Resource Id.
6712    :type id: str
6713    :param name: Required. The name of the resource.
6714    :type name: str
6715    :param location: Required. The supported Azure location of the resource.
6716    :type location: str
6717    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
6718     more information about using tags, see `Using tags to organize your Azure resources
6719     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
6720    :type tags: dict[str, str]
6721    :param plan: Used for establishing the purchase context of any 3rd Party artifact through
6722     MarketPlace.
6723    :type plan: ~azure.mgmt.compute.v2019_03_01.models.PurchasePlan
6724    :param os_disk_image: Contains the os disk image information.
6725    :type os_disk_image: ~azure.mgmt.compute.v2019_03_01.models.OSDiskImage
6726    :param data_disk_images:
6727    :type data_disk_images: list[~azure.mgmt.compute.v2019_03_01.models.DataDiskImage]
6728    :param automatic_os_upgrade_properties: Describes automatic OS upgrade properties on the image.
6729    :type automatic_os_upgrade_properties:
6730     ~azure.mgmt.compute.v2019_03_01.models.AutomaticOSUpgradeProperties
6731    :param hyper_v_generation: Specifies the HyperVGeneration Type. Possible values include: "V1",
6732     "V2".
6733    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_03_01.models.HyperVGenerationTypes
6734    """
6735
6736    _validation = {
6737        'name': {'required': True},
6738        'location': {'required': True},
6739    }
6740
6741    _attribute_map = {
6742        'id': {'key': 'id', 'type': 'str'},
6743        'name': {'key': 'name', 'type': 'str'},
6744        'location': {'key': 'location', 'type': 'str'},
6745        'tags': {'key': 'tags', 'type': '{str}'},
6746        'plan': {'key': 'properties.plan', 'type': 'PurchasePlan'},
6747        'os_disk_image': {'key': 'properties.osDiskImage', 'type': 'OSDiskImage'},
6748        'data_disk_images': {'key': 'properties.dataDiskImages', 'type': '[DataDiskImage]'},
6749        'automatic_os_upgrade_properties': {'key': 'properties.automaticOSUpgradeProperties', 'type': 'AutomaticOSUpgradeProperties'},
6750        'hyper_v_generation': {'key': 'properties.hyperVGeneration', 'type': 'str'},
6751    }
6752
6753    def __init__(
6754        self,
6755        *,
6756        name: str,
6757        location: str,
6758        id: Optional[str] = None,
6759        tags: Optional[Dict[str, str]] = None,
6760        plan: Optional["PurchasePlan"] = None,
6761        os_disk_image: Optional["OSDiskImage"] = None,
6762        data_disk_images: Optional[List["DataDiskImage"]] = None,
6763        automatic_os_upgrade_properties: Optional["AutomaticOSUpgradeProperties"] = None,
6764        hyper_v_generation: Optional[Union[str, "HyperVGenerationTypes"]] = None,
6765        **kwargs
6766    ):
6767        super(VirtualMachineImage, self).__init__(id=id, name=name, location=location, tags=tags, **kwargs)
6768        self.plan = plan
6769        self.os_disk_image = os_disk_image
6770        self.data_disk_images = data_disk_images
6771        self.automatic_os_upgrade_properties = automatic_os_upgrade_properties
6772        self.hyper_v_generation = hyper_v_generation
6773
6774
6775class VirtualMachineInstanceView(msrest.serialization.Model):
6776    """The instance view of a virtual machine.
6777
6778    :param platform_update_domain: Specifies the update domain of the virtual machine.
6779    :type platform_update_domain: int
6780    :param platform_fault_domain: Specifies the fault domain of the virtual machine.
6781    :type platform_fault_domain: int
6782    :param computer_name: The computer name assigned to the virtual machine.
6783    :type computer_name: str
6784    :param os_name: The Operating System running on the virtual machine.
6785    :type os_name: str
6786    :param os_version: The version of Operating System running on the virtual machine.
6787    :type os_version: str
6788    :param hyper_v_generation: Specifies the HyperVGeneration Type associated with a resource.
6789     Possible values include: "V1", "V2".
6790    :type hyper_v_generation: str or ~azure.mgmt.compute.v2019_03_01.models.HyperVGenerationType
6791    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
6792    :type rdp_thumb_print: str
6793    :param vm_agent: The VM Agent running on the virtual machine.
6794    :type vm_agent: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineAgentInstanceView
6795    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
6796    :type maintenance_redeploy_status:
6797     ~azure.mgmt.compute.v2019_03_01.models.MaintenanceRedeployStatus
6798    :param disks: The virtual machine disk information.
6799    :type disks: list[~azure.mgmt.compute.v2019_03_01.models.DiskInstanceView]
6800    :param extensions: The extensions information.
6801    :type extensions:
6802     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtensionInstanceView]
6803    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
6804     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
6805     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
6806     screenshot of the VM from the hypervisor.
6807    :type boot_diagnostics: ~azure.mgmt.compute.v2019_03_01.models.BootDiagnosticsInstanceView
6808    :param statuses: The resource status information.
6809    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
6810    """
6811
6812    _attribute_map = {
6813        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
6814        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
6815        'computer_name': {'key': 'computerName', 'type': 'str'},
6816        'os_name': {'key': 'osName', 'type': 'str'},
6817        'os_version': {'key': 'osVersion', 'type': 'str'},
6818        'hyper_v_generation': {'key': 'hyperVGeneration', 'type': 'str'},
6819        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
6820        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
6821        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
6822        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
6823        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
6824        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
6825        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
6826    }
6827
6828    def __init__(
6829        self,
6830        *,
6831        platform_update_domain: Optional[int] = None,
6832        platform_fault_domain: Optional[int] = None,
6833        computer_name: Optional[str] = None,
6834        os_name: Optional[str] = None,
6835        os_version: Optional[str] = None,
6836        hyper_v_generation: Optional[Union[str, "HyperVGenerationType"]] = None,
6837        rdp_thumb_print: Optional[str] = None,
6838        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
6839        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
6840        disks: Optional[List["DiskInstanceView"]] = None,
6841        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
6842        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
6843        statuses: Optional[List["InstanceViewStatus"]] = None,
6844        **kwargs
6845    ):
6846        super(VirtualMachineInstanceView, self).__init__(**kwargs)
6847        self.platform_update_domain = platform_update_domain
6848        self.platform_fault_domain = platform_fault_domain
6849        self.computer_name = computer_name
6850        self.os_name = os_name
6851        self.os_version = os_version
6852        self.hyper_v_generation = hyper_v_generation
6853        self.rdp_thumb_print = rdp_thumb_print
6854        self.vm_agent = vm_agent
6855        self.maintenance_redeploy_status = maintenance_redeploy_status
6856        self.disks = disks
6857        self.extensions = extensions
6858        self.boot_diagnostics = boot_diagnostics
6859        self.statuses = statuses
6860
6861
6862class VirtualMachineListResult(msrest.serialization.Model):
6863    """The List Virtual Machine operation response.
6864
6865    All required parameters must be populated in order to send to Azure.
6866
6867    :param value: Required. The list of virtual machines.
6868    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachine]
6869    :param next_link: The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch
6870     the next page of Virtual Machines.
6871    :type next_link: str
6872    """
6873
6874    _validation = {
6875        'value': {'required': True},
6876    }
6877
6878    _attribute_map = {
6879        'value': {'key': 'value', 'type': '[VirtualMachine]'},
6880        'next_link': {'key': 'nextLink', 'type': 'str'},
6881    }
6882
6883    def __init__(
6884        self,
6885        *,
6886        value: List["VirtualMachine"],
6887        next_link: Optional[str] = None,
6888        **kwargs
6889    ):
6890        super(VirtualMachineListResult, self).__init__(**kwargs)
6891        self.value = value
6892        self.next_link = next_link
6893
6894
6895class VirtualMachineReimageParameters(msrest.serialization.Model):
6896    """Parameters for Reimaging Virtual Machine. NOTE: Virtual Machine OS disk will always be reimaged.
6897
6898    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
6899     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
6900    :type temp_disk: bool
6901    """
6902
6903    _attribute_map = {
6904        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
6905    }
6906
6907    def __init__(
6908        self,
6909        *,
6910        temp_disk: Optional[bool] = None,
6911        **kwargs
6912    ):
6913        super(VirtualMachineReimageParameters, self).__init__(**kwargs)
6914        self.temp_disk = temp_disk
6915
6916
6917class VirtualMachineScaleSet(Resource):
6918    """Describes a Virtual Machine Scale Set.
6919
6920    Variables are only populated by the server, and will be ignored when sending a request.
6921
6922    All required parameters must be populated in order to send to Azure.
6923
6924    :ivar id: Resource Id.
6925    :vartype id: str
6926    :ivar name: Resource name.
6927    :vartype name: str
6928    :ivar type: Resource type.
6929    :vartype type: str
6930    :param location: Required. Resource location.
6931    :type location: str
6932    :param tags: A set of tags. Resource tags.
6933    :type tags: dict[str, str]
6934    :param sku: The virtual machine scale set sku.
6935    :type sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
6936    :param plan: Specifies information about the marketplace image used to create the virtual
6937     machine. This element is only used for marketplace images. Before you can use a marketplace
6938     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
6939     the marketplace image that you want to use and then click **Want to deploy programmatically,
6940     Get Started ->**. Enter any required information and then click **Save**.
6941    :type plan: ~azure.mgmt.compute.v2019_03_01.models.Plan
6942    :param identity: The identity of the virtual machine scale set, if configured.
6943    :type identity: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetIdentity
6944    :param zones: The virtual machine scale set zones. NOTE: Availability zones can only be set
6945     when you create the scale set.
6946    :type zones: list[str]
6947    :param upgrade_policy: The upgrade policy.
6948    :type upgrade_policy: ~azure.mgmt.compute.v2019_03_01.models.UpgradePolicy
6949    :param automatic_repairs_policy: Policy for automatic repairs.
6950    :type automatic_repairs_policy: ~azure.mgmt.compute.v2019_03_01.models.AutomaticRepairsPolicy
6951    :param virtual_machine_profile: The virtual machine profile.
6952    :type virtual_machine_profile:
6953     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetVMProfile
6954    :ivar provisioning_state: The provisioning state, which only appears in the response.
6955    :vartype provisioning_state: str
6956    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
6957     overprovisioned.
6958    :type overprovision: bool
6959    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
6960     are launched only on the requested number of VMs which are finally kept. This property will
6961     hence ensure that the extensions do not run on the extra overprovisioned VMs.
6962    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
6963    :ivar unique_id: Specifies the ID which uniquely identifies a Virtual Machine Scale Set.
6964    :vartype unique_id: str
6965    :param single_placement_group: When true this limits the scale set to a single placement group,
6966     of max size 100 virtual machines.
6967    :type single_placement_group: bool
6968    :param zone_balance: Whether to force strictly even Virtual Machine distribution cross x-zones
6969     in case there is zone outage.
6970    :type zone_balance: bool
6971    :param platform_fault_domain_count: Fault Domain count for each placement group.
6972    :type platform_fault_domain_count: int
6973    :param proximity_placement_group: Specifies information about the proximity placement group
6974     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
6975     api-version: 2018-04-01.
6976    :type proximity_placement_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
6977    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
6978     Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines
6979     have the capability to support attaching managed data disks with UltraSSD_LRS storage account
6980     type.
6981    :type additional_capabilities: ~azure.mgmt.compute.v2019_03_01.models.AdditionalCapabilities
6982    :param scale_in_policy: Specifies the scale-in policy that decides which virtual machines are
6983     chosen for removal when a Virtual Machine Scale Set is scaled-in.
6984    :type scale_in_policy: ~azure.mgmt.compute.v2019_03_01.models.ScaleInPolicy
6985    """
6986
6987    _validation = {
6988        'id': {'readonly': True},
6989        'name': {'readonly': True},
6990        'type': {'readonly': True},
6991        'location': {'required': True},
6992        'provisioning_state': {'readonly': True},
6993        'unique_id': {'readonly': True},
6994    }
6995
6996    _attribute_map = {
6997        'id': {'key': 'id', 'type': 'str'},
6998        'name': {'key': 'name', 'type': 'str'},
6999        'type': {'key': 'type', 'type': 'str'},
7000        'location': {'key': 'location', 'type': 'str'},
7001        'tags': {'key': 'tags', 'type': '{str}'},
7002        'sku': {'key': 'sku', 'type': 'Sku'},
7003        'plan': {'key': 'plan', 'type': 'Plan'},
7004        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
7005        'zones': {'key': 'zones', 'type': '[str]'},
7006        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
7007        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
7008        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetVMProfile'},
7009        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7010        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
7011        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
7012        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
7013        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
7014        'zone_balance': {'key': 'properties.zoneBalance', 'type': 'bool'},
7015        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
7016        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
7017        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
7018        'scale_in_policy': {'key': 'properties.scaleInPolicy', 'type': 'ScaleInPolicy'},
7019    }
7020
7021    def __init__(
7022        self,
7023        *,
7024        location: str,
7025        tags: Optional[Dict[str, str]] = None,
7026        sku: Optional["Sku"] = None,
7027        plan: Optional["Plan"] = None,
7028        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
7029        zones: Optional[List[str]] = None,
7030        upgrade_policy: Optional["UpgradePolicy"] = None,
7031        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
7032        virtual_machine_profile: Optional["VirtualMachineScaleSetVMProfile"] = None,
7033        overprovision: Optional[bool] = None,
7034        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
7035        single_placement_group: Optional[bool] = None,
7036        zone_balance: Optional[bool] = None,
7037        platform_fault_domain_count: Optional[int] = None,
7038        proximity_placement_group: Optional["SubResource"] = None,
7039        additional_capabilities: Optional["AdditionalCapabilities"] = None,
7040        scale_in_policy: Optional["ScaleInPolicy"] = None,
7041        **kwargs
7042    ):
7043        super(VirtualMachineScaleSet, self).__init__(location=location, tags=tags, **kwargs)
7044        self.sku = sku
7045        self.plan = plan
7046        self.identity = identity
7047        self.zones = zones
7048        self.upgrade_policy = upgrade_policy
7049        self.automatic_repairs_policy = automatic_repairs_policy
7050        self.virtual_machine_profile = virtual_machine_profile
7051        self.provisioning_state = None
7052        self.overprovision = overprovision
7053        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
7054        self.unique_id = None
7055        self.single_placement_group = single_placement_group
7056        self.zone_balance = zone_balance
7057        self.platform_fault_domain_count = platform_fault_domain_count
7058        self.proximity_placement_group = proximity_placement_group
7059        self.additional_capabilities = additional_capabilities
7060        self.scale_in_policy = scale_in_policy
7061
7062
7063class VirtualMachineScaleSetDataDisk(msrest.serialization.Model):
7064    """Describes a virtual machine scale set data disk.
7065
7066    All required parameters must be populated in order to send to Azure.
7067
7068    :param name: The disk name.
7069    :type name: str
7070    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
7071     identify data disks within the VM and therefore must be unique for each data disk attached to a
7072     VM.
7073    :type lun: int
7074    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
7075     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
7076     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
7077     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
7078     "ReadWrite".
7079    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
7080    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
7081     disabled on the disk.
7082    :type write_accelerator_enabled: bool
7083    :param create_option: Required. The create option. Possible values include: "FromImage",
7084     "Empty", "Attach".
7085    :type create_option: str or ~azure.mgmt.compute.v2019_03_01.models.DiskCreateOptionTypes
7086    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
7087     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
7088     This value cannot be larger than 1023 GB.
7089    :type disk_size_gb: int
7090    :param managed_disk: The managed disk parameters.
7091    :type managed_disk:
7092     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetManagedDiskParameters
7093    """
7094
7095    _validation = {
7096        'lun': {'required': True},
7097        'create_option': {'required': True},
7098    }
7099
7100    _attribute_map = {
7101        'name': {'key': 'name', 'type': 'str'},
7102        'lun': {'key': 'lun', 'type': 'int'},
7103        'caching': {'key': 'caching', 'type': 'str'},
7104        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
7105        'create_option': {'key': 'createOption', 'type': 'str'},
7106        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
7107        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
7108    }
7109
7110    def __init__(
7111        self,
7112        *,
7113        lun: int,
7114        create_option: Union[str, "DiskCreateOptionTypes"],
7115        name: Optional[str] = None,
7116        caching: Optional[Union[str, "CachingTypes"]] = None,
7117        write_accelerator_enabled: Optional[bool] = None,
7118        disk_size_gb: Optional[int] = None,
7119        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
7120        **kwargs
7121    ):
7122        super(VirtualMachineScaleSetDataDisk, self).__init__(**kwargs)
7123        self.name = name
7124        self.lun = lun
7125        self.caching = caching
7126        self.write_accelerator_enabled = write_accelerator_enabled
7127        self.create_option = create_option
7128        self.disk_size_gb = disk_size_gb
7129        self.managed_disk = managed_disk
7130
7131
7132class VirtualMachineScaleSetExtension(SubResourceReadOnly):
7133    """Describes a Virtual Machine Scale Set Extension.
7134
7135    Variables are only populated by the server, and will be ignored when sending a request.
7136
7137    :ivar id: Resource Id.
7138    :vartype id: str
7139    :param name: The name of the extension.
7140    :type name: str
7141    :param force_update_tag: If a value is provided and is different from the previous value, the
7142     extension handler will be forced to update even if the extension configuration has not changed.
7143    :type force_update_tag: str
7144    :param publisher: The name of the extension handler publisher.
7145    :type publisher: str
7146    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
7147    :type type: str
7148    :param type_handler_version: Specifies the version of the script handler.
7149    :type type_handler_version: str
7150    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
7151     version if one is available at deployment time. Once deployed, however, the extension will not
7152     upgrade minor versions unless redeployed, even with this property set to true.
7153    :type auto_upgrade_minor_version: bool
7154    :param settings: Json formatted public settings for the extension.
7155    :type settings: any
7156    :param protected_settings: The extension can contain either protectedSettings or
7157     protectedSettingsFromKeyVault or no protected settings at all.
7158    :type protected_settings: any
7159    :ivar provisioning_state: The provisioning state, which only appears in the response.
7160    :vartype provisioning_state: str
7161    :param provision_after_extensions: Collection of extension names after which this extension
7162     needs to be provisioned.
7163    :type provision_after_extensions: list[str]
7164    """
7165
7166    _validation = {
7167        'id': {'readonly': True},
7168        'provisioning_state': {'readonly': True},
7169    }
7170
7171    _attribute_map = {
7172        'id': {'key': 'id', 'type': 'str'},
7173        'name': {'key': 'name', 'type': 'str'},
7174        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
7175        'publisher': {'key': 'properties.publisher', 'type': 'str'},
7176        'type': {'key': 'properties.type', 'type': 'str'},
7177        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
7178        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
7179        'settings': {'key': 'properties.settings', 'type': 'object'},
7180        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
7181        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
7182        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
7183    }
7184
7185    def __init__(
7186        self,
7187        *,
7188        name: Optional[str] = None,
7189        force_update_tag: Optional[str] = None,
7190        publisher: Optional[str] = None,
7191        type: Optional[str] = None,
7192        type_handler_version: Optional[str] = None,
7193        auto_upgrade_minor_version: Optional[bool] = None,
7194        settings: Optional[Any] = None,
7195        protected_settings: Optional[Any] = None,
7196        provision_after_extensions: Optional[List[str]] = None,
7197        **kwargs
7198    ):
7199        super(VirtualMachineScaleSetExtension, self).__init__(**kwargs)
7200        self.name = name
7201        self.force_update_tag = force_update_tag
7202        self.publisher = publisher
7203        self.type = type
7204        self.type_handler_version = type_handler_version
7205        self.auto_upgrade_minor_version = auto_upgrade_minor_version
7206        self.settings = settings
7207        self.protected_settings = protected_settings
7208        self.provisioning_state = None
7209        self.provision_after_extensions = provision_after_extensions
7210
7211
7212class VirtualMachineScaleSetExtensionListResult(msrest.serialization.Model):
7213    """The List VM scale set extension operation response.
7214
7215    All required parameters must be populated in order to send to Azure.
7216
7217    :param value: Required. The list of VM scale set extensions.
7218    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetExtension]
7219    :param next_link: The uri to fetch the next page of VM scale set extensions. Call ListNext()
7220     with this to fetch the next page of VM scale set extensions.
7221    :type next_link: str
7222    """
7223
7224    _validation = {
7225        'value': {'required': True},
7226    }
7227
7228    _attribute_map = {
7229        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetExtension]'},
7230        'next_link': {'key': 'nextLink', 'type': 'str'},
7231    }
7232
7233    def __init__(
7234        self,
7235        *,
7236        value: List["VirtualMachineScaleSetExtension"],
7237        next_link: Optional[str] = None,
7238        **kwargs
7239    ):
7240        super(VirtualMachineScaleSetExtensionListResult, self).__init__(**kwargs)
7241        self.value = value
7242        self.next_link = next_link
7243
7244
7245class VirtualMachineScaleSetExtensionProfile(msrest.serialization.Model):
7246    """Describes a virtual machine scale set extension profile.
7247
7248    :param extensions: The virtual machine scale set child extension resources.
7249    :type extensions: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetExtension]
7250    """
7251
7252    _attribute_map = {
7253        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetExtension]'},
7254    }
7255
7256    def __init__(
7257        self,
7258        *,
7259        extensions: Optional[List["VirtualMachineScaleSetExtension"]] = None,
7260        **kwargs
7261    ):
7262        super(VirtualMachineScaleSetExtensionProfile, self).__init__(**kwargs)
7263        self.extensions = extensions
7264
7265
7266class VirtualMachineScaleSetIdentity(msrest.serialization.Model):
7267    """Identity for the virtual machine scale set.
7268
7269    Variables are only populated by the server, and will be ignored when sending a request.
7270
7271    :ivar principal_id: The principal id of virtual machine scale set identity. This property will
7272     only be provided for a system assigned identity.
7273    :vartype principal_id: str
7274    :ivar tenant_id: The tenant id associated with the virtual machine scale set. This property
7275     will only be provided for a system assigned identity.
7276    :vartype tenant_id: str
7277    :param type: The type of identity used for the virtual machine scale set. The type
7278     'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user
7279     assigned identities. The type 'None' will remove any identities from the virtual machine scale
7280     set. Possible values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned",
7281     "None".
7282    :type type: str or ~azure.mgmt.compute.v2019_03_01.models.ResourceIdentityType
7283    :param user_assigned_identities: The list of user identities associated with the virtual
7284     machine scale set. The user identity dictionary key references will be ARM resource ids in the
7285     form:
7286     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
7287    :type user_assigned_identities: dict[str,
7288     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue]
7289    """
7290
7291    _validation = {
7292        'principal_id': {'readonly': True},
7293        'tenant_id': {'readonly': True},
7294    }
7295
7296    _attribute_map = {
7297        'principal_id': {'key': 'principalId', 'type': 'str'},
7298        'tenant_id': {'key': 'tenantId', 'type': 'str'},
7299        'type': {'key': 'type', 'type': 'str'},
7300        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue}'},
7301    }
7302
7303    def __init__(
7304        self,
7305        *,
7306        type: Optional[Union[str, "ResourceIdentityType"]] = None,
7307        user_assigned_identities: Optional[Dict[str, "VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue"]] = None,
7308        **kwargs
7309    ):
7310        super(VirtualMachineScaleSetIdentity, self).__init__(**kwargs)
7311        self.principal_id = None
7312        self.tenant_id = None
7313        self.type = type
7314        self.user_assigned_identities = user_assigned_identities
7315
7316
7317class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(msrest.serialization.Model):
7318    """VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue.
7319
7320    Variables are only populated by the server, and will be ignored when sending a request.
7321
7322    :ivar principal_id: The principal id of user assigned identity.
7323    :vartype principal_id: str
7324    :ivar client_id: The client id of user assigned identity.
7325    :vartype client_id: str
7326    """
7327
7328    _validation = {
7329        'principal_id': {'readonly': True},
7330        'client_id': {'readonly': True},
7331    }
7332
7333    _attribute_map = {
7334        'principal_id': {'key': 'principalId', 'type': 'str'},
7335        'client_id': {'key': 'clientId', 'type': 'str'},
7336    }
7337
7338    def __init__(
7339        self,
7340        **kwargs
7341    ):
7342        super(VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue, self).__init__(**kwargs)
7343        self.principal_id = None
7344        self.client_id = None
7345
7346
7347class VirtualMachineScaleSetInstanceView(msrest.serialization.Model):
7348    """The instance view of a virtual machine scale set.
7349
7350    Variables are only populated by the server, and will be ignored when sending a request.
7351
7352    :ivar virtual_machine: The instance view status summary for the virtual machine scale set.
7353    :vartype virtual_machine:
7354     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetInstanceViewStatusesSummary
7355    :ivar extensions: The extensions information.
7356    :vartype extensions:
7357     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetVMExtensionsSummary]
7358    :param statuses: The resource status information.
7359    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
7360    """
7361
7362    _validation = {
7363        'virtual_machine': {'readonly': True},
7364        'extensions': {'readonly': True},
7365    }
7366
7367    _attribute_map = {
7368        'virtual_machine': {'key': 'virtualMachine', 'type': 'VirtualMachineScaleSetInstanceViewStatusesSummary'},
7369        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetVMExtensionsSummary]'},
7370        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
7371    }
7372
7373    def __init__(
7374        self,
7375        *,
7376        statuses: Optional[List["InstanceViewStatus"]] = None,
7377        **kwargs
7378    ):
7379        super(VirtualMachineScaleSetInstanceView, self).__init__(**kwargs)
7380        self.virtual_machine = None
7381        self.extensions = None
7382        self.statuses = statuses
7383
7384
7385class VirtualMachineScaleSetInstanceViewStatusesSummary(msrest.serialization.Model):
7386    """Instance view statuses summary for virtual machines of a virtual machine scale set.
7387
7388    Variables are only populated by the server, and will be ignored when sending a request.
7389
7390    :ivar statuses_summary: The extensions information.
7391    :vartype statuses_summary:
7392     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineStatusCodeCount]
7393    """
7394
7395    _validation = {
7396        'statuses_summary': {'readonly': True},
7397    }
7398
7399    _attribute_map = {
7400        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
7401    }
7402
7403    def __init__(
7404        self,
7405        **kwargs
7406    ):
7407        super(VirtualMachineScaleSetInstanceViewStatusesSummary, self).__init__(**kwargs)
7408        self.statuses_summary = None
7409
7410
7411class VirtualMachineScaleSetIPConfiguration(SubResource):
7412    """Describes a virtual machine scale set network profile's IP configuration.
7413
7414    All required parameters must be populated in order to send to Azure.
7415
7416    :param id: Resource Id.
7417    :type id: str
7418    :param name: Required. The IP configuration name.
7419    :type name: str
7420    :param subnet: Specifies the identifier of the subnet.
7421    :type subnet: ~azure.mgmt.compute.v2019_03_01.models.ApiEntityReference
7422    :param primary: Specifies the primary network interface in case the virtual machine has more
7423     than 1 network interface.
7424    :type primary: bool
7425    :param public_ip_address_configuration: The publicIPAddressConfiguration.
7426    :type public_ip_address_configuration:
7427     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration
7428    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
7429     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
7430     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
7431    :type private_ip_address_version: str or ~azure.mgmt.compute.v2019_03_01.models.IPVersion
7432    :param application_gateway_backend_address_pools: Specifies an array of references to backend
7433     address pools of application gateways. A scale set can reference backend address pools of
7434     multiple application gateways. Multiple scale sets cannot use the same application gateway.
7435    :type application_gateway_backend_address_pools:
7436     list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
7437    :param application_security_groups: Specifies an array of references to application security
7438     group.
7439    :type application_security_groups: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
7440    :param load_balancer_backend_address_pools: Specifies an array of references to backend address
7441     pools of load balancers. A scale set can reference backend address pools of one public and one
7442     internal load balancer. Multiple scale sets cannot use the same load balancer.
7443    :type load_balancer_backend_address_pools:
7444     list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
7445    :param load_balancer_inbound_nat_pools: Specifies an array of references to inbound Nat pools
7446     of the load balancers. A scale set can reference inbound nat pools of one public and one
7447     internal load balancer. Multiple scale sets cannot use the same load balancer.
7448    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
7449    """
7450
7451    _validation = {
7452        'name': {'required': True},
7453    }
7454
7455    _attribute_map = {
7456        'id': {'key': 'id', 'type': 'str'},
7457        'name': {'key': 'name', 'type': 'str'},
7458        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
7459        'primary': {'key': 'properties.primary', 'type': 'bool'},
7460        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetPublicIPAddressConfiguration'},
7461        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
7462        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
7463        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
7464        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
7465        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
7466    }
7467
7468    def __init__(
7469        self,
7470        *,
7471        name: str,
7472        id: Optional[str] = None,
7473        subnet: Optional["ApiEntityReference"] = None,
7474        primary: Optional[bool] = None,
7475        public_ip_address_configuration: Optional["VirtualMachineScaleSetPublicIPAddressConfiguration"] = None,
7476        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
7477        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
7478        application_security_groups: Optional[List["SubResource"]] = None,
7479        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
7480        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
7481        **kwargs
7482    ):
7483        super(VirtualMachineScaleSetIPConfiguration, self).__init__(id=id, **kwargs)
7484        self.name = name
7485        self.subnet = subnet
7486        self.primary = primary
7487        self.public_ip_address_configuration = public_ip_address_configuration
7488        self.private_ip_address_version = private_ip_address_version
7489        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
7490        self.application_security_groups = application_security_groups
7491        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
7492        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
7493
7494
7495class VirtualMachineScaleSetIpTag(msrest.serialization.Model):
7496    """Contains the IP tag associated with the public IP address.
7497
7498    :param ip_tag_type: IP tag type. Example: FirstPartyUsage.
7499    :type ip_tag_type: str
7500    :param tag: IP tag associated with the public IP. Example: SQL, Storage etc.
7501    :type tag: str
7502    """
7503
7504    _attribute_map = {
7505        'ip_tag_type': {'key': 'ipTagType', 'type': 'str'},
7506        'tag': {'key': 'tag', 'type': 'str'},
7507    }
7508
7509    def __init__(
7510        self,
7511        *,
7512        ip_tag_type: Optional[str] = None,
7513        tag: Optional[str] = None,
7514        **kwargs
7515    ):
7516        super(VirtualMachineScaleSetIpTag, self).__init__(**kwargs)
7517        self.ip_tag_type = ip_tag_type
7518        self.tag = tag
7519
7520
7521class VirtualMachineScaleSetListOSUpgradeHistory(msrest.serialization.Model):
7522    """List of Virtual Machine Scale Set OS Upgrade History operation response.
7523
7524    All required parameters must be populated in order to send to Azure.
7525
7526    :param value: Required. The list of OS upgrades performed on the virtual machine scale set.
7527    :type value: list[~azure.mgmt.compute.v2019_03_01.models.UpgradeOperationHistoricalStatusInfo]
7528    :param next_link: The uri to fetch the next page of OS Upgrade History. Call ListNext() with
7529     this to fetch the next page of history of upgrades.
7530    :type next_link: str
7531    """
7532
7533    _validation = {
7534        'value': {'required': True},
7535    }
7536
7537    _attribute_map = {
7538        'value': {'key': 'value', 'type': '[UpgradeOperationHistoricalStatusInfo]'},
7539        'next_link': {'key': 'nextLink', 'type': 'str'},
7540    }
7541
7542    def __init__(
7543        self,
7544        *,
7545        value: List["UpgradeOperationHistoricalStatusInfo"],
7546        next_link: Optional[str] = None,
7547        **kwargs
7548    ):
7549        super(VirtualMachineScaleSetListOSUpgradeHistory, self).__init__(**kwargs)
7550        self.value = value
7551        self.next_link = next_link
7552
7553
7554class VirtualMachineScaleSetListResult(msrest.serialization.Model):
7555    """The List Virtual Machine operation response.
7556
7557    All required parameters must be populated in order to send to Azure.
7558
7559    :param value: Required. The list of virtual machine scale sets.
7560    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSet]
7561    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
7562     with this to fetch the next page of VMSS.
7563    :type next_link: str
7564    """
7565
7566    _validation = {
7567        'value': {'required': True},
7568    }
7569
7570    _attribute_map = {
7571        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
7572        'next_link': {'key': 'nextLink', 'type': 'str'},
7573    }
7574
7575    def __init__(
7576        self,
7577        *,
7578        value: List["VirtualMachineScaleSet"],
7579        next_link: Optional[str] = None,
7580        **kwargs
7581    ):
7582        super(VirtualMachineScaleSetListResult, self).__init__(**kwargs)
7583        self.value = value
7584        self.next_link = next_link
7585
7586
7587class VirtualMachineScaleSetListSkusResult(msrest.serialization.Model):
7588    """The Virtual Machine Scale Set List Skus operation response.
7589
7590    All required parameters must be populated in order to send to Azure.
7591
7592    :param value: Required. The list of skus available for the virtual machine scale set.
7593    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetSku]
7594    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set Skus. Call
7595     ListNext() with this to fetch the next page of VMSS Skus.
7596    :type next_link: str
7597    """
7598
7599    _validation = {
7600        'value': {'required': True},
7601    }
7602
7603    _attribute_map = {
7604        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetSku]'},
7605        'next_link': {'key': 'nextLink', 'type': 'str'},
7606    }
7607
7608    def __init__(
7609        self,
7610        *,
7611        value: List["VirtualMachineScaleSetSku"],
7612        next_link: Optional[str] = None,
7613        **kwargs
7614    ):
7615        super(VirtualMachineScaleSetListSkusResult, self).__init__(**kwargs)
7616        self.value = value
7617        self.next_link = next_link
7618
7619
7620class VirtualMachineScaleSetListWithLinkResult(msrest.serialization.Model):
7621    """The List Virtual Machine operation response.
7622
7623    All required parameters must be populated in order to send to Azure.
7624
7625    :param value: Required. The list of virtual machine scale sets.
7626    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSet]
7627    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
7628     with this to fetch the next page of Virtual Machine Scale Sets.
7629    :type next_link: str
7630    """
7631
7632    _validation = {
7633        'value': {'required': True},
7634    }
7635
7636    _attribute_map = {
7637        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
7638        'next_link': {'key': 'nextLink', 'type': 'str'},
7639    }
7640
7641    def __init__(
7642        self,
7643        *,
7644        value: List["VirtualMachineScaleSet"],
7645        next_link: Optional[str] = None,
7646        **kwargs
7647    ):
7648        super(VirtualMachineScaleSetListWithLinkResult, self).__init__(**kwargs)
7649        self.value = value
7650        self.next_link = next_link
7651
7652
7653class VirtualMachineScaleSetManagedDiskParameters(msrest.serialization.Model):
7654    """Describes the parameters of a ScaleSet managed disk.
7655
7656    :param storage_account_type: Specifies the storage account type for the managed disk. Managed
7657     OS disk storage account type can only be set when you create the scale set. NOTE: UltraSSD_LRS
7658     can only be used with data disks, it cannot be used with OS Disk. Possible values include:
7659     "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
7660    :type storage_account_type: str or ~azure.mgmt.compute.v2019_03_01.models.StorageAccountTypes
7661    """
7662
7663    _attribute_map = {
7664        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
7665    }
7666
7667    def __init__(
7668        self,
7669        *,
7670        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
7671        **kwargs
7672    ):
7673        super(VirtualMachineScaleSetManagedDiskParameters, self).__init__(**kwargs)
7674        self.storage_account_type = storage_account_type
7675
7676
7677class VirtualMachineScaleSetNetworkConfiguration(SubResource):
7678    """Describes a virtual machine scale set network profile's network configurations.
7679
7680    All required parameters must be populated in order to send to Azure.
7681
7682    :param id: Resource Id.
7683    :type id: str
7684    :param name: Required. The network configuration name.
7685    :type name: str
7686    :param primary: Specifies the primary network interface in case the virtual machine has more
7687     than 1 network interface.
7688    :type primary: bool
7689    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
7690     networking-enabled.
7691    :type enable_accelerated_networking: bool
7692    :param network_security_group: The network security group.
7693    :type network_security_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
7694    :param dns_settings: The dns settings to be applied on the network interfaces.
7695    :type dns_settings:
7696     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
7697    :param ip_configurations: Specifies the IP configurations of the network interface.
7698    :type ip_configurations:
7699     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetIPConfiguration]
7700    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
7701    :type enable_ip_forwarding: bool
7702    """
7703
7704    _validation = {
7705        'name': {'required': True},
7706    }
7707
7708    _attribute_map = {
7709        'id': {'key': 'id', 'type': 'str'},
7710        'name': {'key': 'name', 'type': 'str'},
7711        'primary': {'key': 'properties.primary', 'type': 'bool'},
7712        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
7713        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
7714        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
7715        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetIPConfiguration]'},
7716        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
7717    }
7718
7719    def __init__(
7720        self,
7721        *,
7722        name: str,
7723        id: Optional[str] = None,
7724        primary: Optional[bool] = None,
7725        enable_accelerated_networking: Optional[bool] = None,
7726        network_security_group: Optional["SubResource"] = None,
7727        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
7728        ip_configurations: Optional[List["VirtualMachineScaleSetIPConfiguration"]] = None,
7729        enable_ip_forwarding: Optional[bool] = None,
7730        **kwargs
7731    ):
7732        super(VirtualMachineScaleSetNetworkConfiguration, self).__init__(id=id, **kwargs)
7733        self.name = name
7734        self.primary = primary
7735        self.enable_accelerated_networking = enable_accelerated_networking
7736        self.network_security_group = network_security_group
7737        self.dns_settings = dns_settings
7738        self.ip_configurations = ip_configurations
7739        self.enable_ip_forwarding = enable_ip_forwarding
7740
7741
7742class VirtualMachineScaleSetNetworkConfigurationDnsSettings(msrest.serialization.Model):
7743    """Describes a virtual machines scale sets network configuration's DNS settings.
7744
7745    :param dns_servers: List of DNS servers IP addresses.
7746    :type dns_servers: list[str]
7747    """
7748
7749    _attribute_map = {
7750        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
7751    }
7752
7753    def __init__(
7754        self,
7755        *,
7756        dns_servers: Optional[List[str]] = None,
7757        **kwargs
7758    ):
7759        super(VirtualMachineScaleSetNetworkConfigurationDnsSettings, self).__init__(**kwargs)
7760        self.dns_servers = dns_servers
7761
7762
7763class VirtualMachineScaleSetNetworkProfile(msrest.serialization.Model):
7764    """Describes a virtual machine scale set network profile.
7765
7766    :param health_probe: A reference to a load balancer probe used to determine the health of an
7767     instance in the virtual machine scale set. The reference will be in the form:
7768     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
7769    :type health_probe: ~azure.mgmt.compute.v2019_03_01.models.ApiEntityReference
7770    :param network_interface_configurations: The list of network configurations.
7771    :type network_interface_configurations:
7772     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetNetworkConfiguration]
7773    """
7774
7775    _attribute_map = {
7776        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
7777        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
7778    }
7779
7780    def __init__(
7781        self,
7782        *,
7783        health_probe: Optional["ApiEntityReference"] = None,
7784        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
7785        **kwargs
7786    ):
7787        super(VirtualMachineScaleSetNetworkProfile, self).__init__(**kwargs)
7788        self.health_probe = health_probe
7789        self.network_interface_configurations = network_interface_configurations
7790
7791
7792class VirtualMachineScaleSetOSDisk(msrest.serialization.Model):
7793    """Describes a virtual machine scale set operating system disk.
7794
7795    All required parameters must be populated in order to send to Azure.
7796
7797    :param name: The disk name.
7798    :type name: str
7799    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
7800     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
7801     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
7802     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
7803     "ReadWrite".
7804    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
7805    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
7806     disabled on the disk.
7807    :type write_accelerator_enabled: bool
7808    :param create_option: Required. Specifies how the virtual machines in the scale set should be
7809     created.:code:`<br>`:code:`<br>` The only allowed value is: **FromImage** \u2013 This value is
7810     used when you are using an image to create the virtual machine. If you are using a platform
7811     image, you also use the imageReference element described above. If you are using a marketplace
7812     image, you  also use the plan element previously described. Possible values include:
7813     "FromImage", "Empty", "Attach".
7814    :type create_option: str or ~azure.mgmt.compute.v2019_03_01.models.DiskCreateOptionTypes
7815    :param diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk
7816     used by the virtual machine scale set.
7817    :type diff_disk_settings: ~azure.mgmt.compute.v2019_03_01.models.DiffDiskSettings
7818    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
7819     can be used to overwrite the size of the disk in a virtual machine image.
7820     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
7821    :type disk_size_gb: int
7822    :param os_type: This property allows you to specify the type of the OS that is included in the
7823     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
7824     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
7825     values include: "Windows", "Linux".
7826    :type os_type: str or ~azure.mgmt.compute.v2019_03_01.models.OperatingSystemTypes
7827    :param image: Specifies information about the unmanaged user image to base the scale set on.
7828    :type image: ~azure.mgmt.compute.v2019_03_01.models.VirtualHardDisk
7829    :param vhd_containers: Specifies the container urls that are used to store operating system
7830     disks for the scale set.
7831    :type vhd_containers: list[str]
7832    :param managed_disk: The managed disk parameters.
7833    :type managed_disk:
7834     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetManagedDiskParameters
7835    """
7836
7837    _validation = {
7838        'create_option': {'required': True},
7839    }
7840
7841    _attribute_map = {
7842        'name': {'key': 'name', 'type': 'str'},
7843        'caching': {'key': 'caching', 'type': 'str'},
7844        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
7845        'create_option': {'key': 'createOption', 'type': 'str'},
7846        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
7847        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
7848        'os_type': {'key': 'osType', 'type': 'str'},
7849        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
7850        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
7851        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
7852    }
7853
7854    def __init__(
7855        self,
7856        *,
7857        create_option: Union[str, "DiskCreateOptionTypes"],
7858        name: Optional[str] = None,
7859        caching: Optional[Union[str, "CachingTypes"]] = None,
7860        write_accelerator_enabled: Optional[bool] = None,
7861        diff_disk_settings: Optional["DiffDiskSettings"] = None,
7862        disk_size_gb: Optional[int] = None,
7863        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
7864        image: Optional["VirtualHardDisk"] = None,
7865        vhd_containers: Optional[List[str]] = None,
7866        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
7867        **kwargs
7868    ):
7869        super(VirtualMachineScaleSetOSDisk, self).__init__(**kwargs)
7870        self.name = name
7871        self.caching = caching
7872        self.write_accelerator_enabled = write_accelerator_enabled
7873        self.create_option = create_option
7874        self.diff_disk_settings = diff_disk_settings
7875        self.disk_size_gb = disk_size_gb
7876        self.os_type = os_type
7877        self.image = image
7878        self.vhd_containers = vhd_containers
7879        self.managed_disk = managed_disk
7880
7881
7882class VirtualMachineScaleSetOSProfile(msrest.serialization.Model):
7883    """Describes a virtual machine scale set OS profile.
7884
7885    :param computer_name_prefix: Specifies the computer name prefix for all of the virtual machines
7886     in the scale set. Computer name prefixes must be 1 to 15 characters long.
7887    :type computer_name_prefix: str
7888    :param admin_username: Specifies the name of the administrator account.
7889     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
7890     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
7891     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
7892     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
7893     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
7894     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
7895     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
7896     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
7897     root privileges on Linux virtual machines in Azure
7898     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
7899     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
7900     in this field, see `Selecting User Names for Linux on Azure
7901     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
7902    :type admin_username: str
7903    :param admin_password: Specifies the password of the administrator account.
7904     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
7905     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
7906     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
7907     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
7908     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
7909     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
7910     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
7911     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
7912     resetting the password, see `How to reset the Remote Desktop service or its login password in a
7913     Windows VM
7914     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
7915     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
7916     repair disks on Azure Linux VMs using the VMAccess Extension
7917     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
7918    :type admin_password: str
7919    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
7920     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
7921     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` For using cloud-init for
7922     your VM, see `Using cloud-init to customize a Linux VM during creation
7923     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
7924    :type custom_data: str
7925    :param windows_configuration: Specifies Windows operating system settings on the virtual
7926     machine.
7927    :type windows_configuration: ~azure.mgmt.compute.v2019_03_01.models.WindowsConfiguration
7928    :param linux_configuration: Specifies the Linux operating system settings on the virtual
7929     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
7930     Azure-Endorsed Distributions
7931     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
7932     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
7933     Non-Endorsed Distributions
7934     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
7935    :type linux_configuration: ~azure.mgmt.compute.v2019_03_01.models.LinuxConfiguration
7936    :param secrets: Specifies set of certificates that should be installed onto the virtual
7937     machines in the scale set.
7938    :type secrets: list[~azure.mgmt.compute.v2019_03_01.models.VaultSecretGroup]
7939    """
7940
7941    _attribute_map = {
7942        'computer_name_prefix': {'key': 'computerNamePrefix', 'type': 'str'},
7943        'admin_username': {'key': 'adminUsername', 'type': 'str'},
7944        'admin_password': {'key': 'adminPassword', 'type': 'str'},
7945        'custom_data': {'key': 'customData', 'type': 'str'},
7946        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
7947        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
7948        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
7949    }
7950
7951    def __init__(
7952        self,
7953        *,
7954        computer_name_prefix: Optional[str] = None,
7955        admin_username: Optional[str] = None,
7956        admin_password: Optional[str] = None,
7957        custom_data: Optional[str] = None,
7958        windows_configuration: Optional["WindowsConfiguration"] = None,
7959        linux_configuration: Optional["LinuxConfiguration"] = None,
7960        secrets: Optional[List["VaultSecretGroup"]] = None,
7961        **kwargs
7962    ):
7963        super(VirtualMachineScaleSetOSProfile, self).__init__(**kwargs)
7964        self.computer_name_prefix = computer_name_prefix
7965        self.admin_username = admin_username
7966        self.admin_password = admin_password
7967        self.custom_data = custom_data
7968        self.windows_configuration = windows_configuration
7969        self.linux_configuration = linux_configuration
7970        self.secrets = secrets
7971
7972
7973class VirtualMachineScaleSetPublicIPAddressConfiguration(msrest.serialization.Model):
7974    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
7975
7976    All required parameters must be populated in order to send to Azure.
7977
7978    :param name: Required. The publicIP address configuration name.
7979    :type name: str
7980    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
7981    :type idle_timeout_in_minutes: int
7982    :param dns_settings: The dns settings to be applied on the publicIP addresses .
7983    :type dns_settings:
7984     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
7985    :param ip_tags: The list of IP tags associated with the public IP address.
7986    :type ip_tags: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetIpTag]
7987    :param public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses.
7988    :type public_ip_prefix: ~azure.mgmt.compute.v2019_03_01.models.SubResource
7989    """
7990
7991    _validation = {
7992        'name': {'required': True},
7993    }
7994
7995    _attribute_map = {
7996        'name': {'key': 'name', 'type': 'str'},
7997        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
7998        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
7999        'ip_tags': {'key': 'properties.ipTags', 'type': '[VirtualMachineScaleSetIpTag]'},
8000        'public_ip_prefix': {'key': 'properties.publicIPPrefix', 'type': 'SubResource'},
8001    }
8002
8003    def __init__(
8004        self,
8005        *,
8006        name: str,
8007        idle_timeout_in_minutes: Optional[int] = None,
8008        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
8009        ip_tags: Optional[List["VirtualMachineScaleSetIpTag"]] = None,
8010        public_ip_prefix: Optional["SubResource"] = None,
8011        **kwargs
8012    ):
8013        super(VirtualMachineScaleSetPublicIPAddressConfiguration, self).__init__(**kwargs)
8014        self.name = name
8015        self.idle_timeout_in_minutes = idle_timeout_in_minutes
8016        self.dns_settings = dns_settings
8017        self.ip_tags = ip_tags
8018        self.public_ip_prefix = public_ip_prefix
8019
8020
8021class VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings(msrest.serialization.Model):
8022    """Describes a virtual machines scale sets network configuration's DNS settings.
8023
8024    All required parameters must be populated in order to send to Azure.
8025
8026    :param domain_name_label: Required. The Domain name label.The concatenation of the domain name
8027     label and vm index will be the domain name labels of the PublicIPAddress resources that will be
8028     created.
8029    :type domain_name_label: str
8030    """
8031
8032    _validation = {
8033        'domain_name_label': {'required': True},
8034    }
8035
8036    _attribute_map = {
8037        'domain_name_label': {'key': 'domainNameLabel', 'type': 'str'},
8038    }
8039
8040    def __init__(
8041        self,
8042        *,
8043        domain_name_label: str,
8044        **kwargs
8045    ):
8046        super(VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings, self).__init__(**kwargs)
8047        self.domain_name_label = domain_name_label
8048
8049
8050class VirtualMachineScaleSetVMReimageParameters(VirtualMachineReimageParameters):
8051    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
8052
8053    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
8054     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
8055    :type temp_disk: bool
8056    """
8057
8058    _attribute_map = {
8059        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
8060    }
8061
8062    def __init__(
8063        self,
8064        *,
8065        temp_disk: Optional[bool] = None,
8066        **kwargs
8067    ):
8068        super(VirtualMachineScaleSetVMReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
8069
8070
8071class VirtualMachineScaleSetReimageParameters(VirtualMachineScaleSetVMReimageParameters):
8072    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
8073
8074    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
8075     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
8076    :type temp_disk: bool
8077    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
8078     scale set instance ids will result in the operation being performed on all virtual machines in
8079     the virtual machine scale set.
8080    :type instance_ids: list[str]
8081    """
8082
8083    _attribute_map = {
8084        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
8085        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
8086    }
8087
8088    def __init__(
8089        self,
8090        *,
8091        temp_disk: Optional[bool] = None,
8092        instance_ids: Optional[List[str]] = None,
8093        **kwargs
8094    ):
8095        super(VirtualMachineScaleSetReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
8096        self.instance_ids = instance_ids
8097
8098
8099class VirtualMachineScaleSetSku(msrest.serialization.Model):
8100    """Describes an available virtual machine scale set sku.
8101
8102    Variables are only populated by the server, and will be ignored when sending a request.
8103
8104    :ivar resource_type: The type of resource the sku applies to.
8105    :vartype resource_type: str
8106    :ivar sku: The Sku.
8107    :vartype sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
8108    :ivar capacity: Specifies the number of virtual machines in the scale set.
8109    :vartype capacity: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetSkuCapacity
8110    """
8111
8112    _validation = {
8113        'resource_type': {'readonly': True},
8114        'sku': {'readonly': True},
8115        'capacity': {'readonly': True},
8116    }
8117
8118    _attribute_map = {
8119        'resource_type': {'key': 'resourceType', 'type': 'str'},
8120        'sku': {'key': 'sku', 'type': 'Sku'},
8121        'capacity': {'key': 'capacity', 'type': 'VirtualMachineScaleSetSkuCapacity'},
8122    }
8123
8124    def __init__(
8125        self,
8126        **kwargs
8127    ):
8128        super(VirtualMachineScaleSetSku, self).__init__(**kwargs)
8129        self.resource_type = None
8130        self.sku = None
8131        self.capacity = None
8132
8133
8134class VirtualMachineScaleSetSkuCapacity(msrest.serialization.Model):
8135    """Describes scaling information of a sku.
8136
8137    Variables are only populated by the server, and will be ignored when sending a request.
8138
8139    :ivar minimum: The minimum capacity.
8140    :vartype minimum: long
8141    :ivar maximum: The maximum capacity that can be set.
8142    :vartype maximum: long
8143    :ivar default_capacity: The default capacity.
8144    :vartype default_capacity: long
8145    :ivar scale_type: The scale type applicable to the sku. Possible values include: "Automatic",
8146     "None".
8147    :vartype scale_type: str or
8148     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetSkuScaleType
8149    """
8150
8151    _validation = {
8152        'minimum': {'readonly': True},
8153        'maximum': {'readonly': True},
8154        'default_capacity': {'readonly': True},
8155        'scale_type': {'readonly': True},
8156    }
8157
8158    _attribute_map = {
8159        'minimum': {'key': 'minimum', 'type': 'long'},
8160        'maximum': {'key': 'maximum', 'type': 'long'},
8161        'default_capacity': {'key': 'defaultCapacity', 'type': 'long'},
8162        'scale_type': {'key': 'scaleType', 'type': 'str'},
8163    }
8164
8165    def __init__(
8166        self,
8167        **kwargs
8168    ):
8169        super(VirtualMachineScaleSetSkuCapacity, self).__init__(**kwargs)
8170        self.minimum = None
8171        self.maximum = None
8172        self.default_capacity = None
8173        self.scale_type = None
8174
8175
8176class VirtualMachineScaleSetStorageProfile(msrest.serialization.Model):
8177    """Describes a virtual machine scale set storage profile.
8178
8179    :param image_reference: Specifies information about the image to use. You can specify
8180     information about platform images, marketplace images, or virtual machine images. This element
8181     is required when you want to use a platform image, marketplace image, or virtual machine image,
8182     but is not used in other creation operations.
8183    :type image_reference: ~azure.mgmt.compute.v2019_03_01.models.ImageReference
8184    :param os_disk: Specifies information about the operating system disk used by the virtual
8185     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
8186     `About disks and VHDs for Azure virtual machines
8187     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
8188    :type os_disk: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetOSDisk
8189    :param data_disks: Specifies the parameters that are used to add data disks to the virtual
8190     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
8191     `About disks and VHDs for Azure virtual machines
8192     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
8193    :type data_disks: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetDataDisk]
8194    """
8195
8196    _attribute_map = {
8197        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
8198        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetOSDisk'},
8199        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
8200    }
8201
8202    def __init__(
8203        self,
8204        *,
8205        image_reference: Optional["ImageReference"] = None,
8206        os_disk: Optional["VirtualMachineScaleSetOSDisk"] = None,
8207        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
8208        **kwargs
8209    ):
8210        super(VirtualMachineScaleSetStorageProfile, self).__init__(**kwargs)
8211        self.image_reference = image_reference
8212        self.os_disk = os_disk
8213        self.data_disks = data_disks
8214
8215
8216class VirtualMachineScaleSetUpdate(UpdateResource):
8217    """Describes a Virtual Machine Scale Set.
8218
8219    :param tags: A set of tags. Resource tags.
8220    :type tags: dict[str, str]
8221    :param sku: The virtual machine scale set sku.
8222    :type sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
8223    :param plan: The purchase plan when deploying a virtual machine scale set from VM Marketplace
8224     images.
8225    :type plan: ~azure.mgmt.compute.v2019_03_01.models.Plan
8226    :param identity: The identity of the virtual machine scale set, if configured.
8227    :type identity: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetIdentity
8228    :param upgrade_policy: The upgrade policy.
8229    :type upgrade_policy: ~azure.mgmt.compute.v2019_03_01.models.UpgradePolicy
8230    :param automatic_repairs_policy: Policy for automatic repairs.
8231    :type automatic_repairs_policy: ~azure.mgmt.compute.v2019_03_01.models.AutomaticRepairsPolicy
8232    :param virtual_machine_profile: The virtual machine profile.
8233    :type virtual_machine_profile:
8234     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateVMProfile
8235    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
8236     overprovisioned.
8237    :type overprovision: bool
8238    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
8239     are launched only on the requested number of VMs which are finally kept. This property will
8240     hence ensure that the extensions do not run on the extra overprovisioned VMs.
8241    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
8242    :param single_placement_group: When true this limits the scale set to a single placement group,
8243     of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to
8244     false. However, if singlePlacementGroup is false, it may not be modified to true.
8245    :type single_placement_group: bool
8246    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
8247     Virtual Machines in the Virtual Machine Scale Set. For instance: whether the Virtual Machines
8248     have the capability to support attaching managed data disks with UltraSSD_LRS storage account
8249     type.
8250    :type additional_capabilities: ~azure.mgmt.compute.v2019_03_01.models.AdditionalCapabilities
8251    :param scale_in_policy: Specifies the scale-in policy that decides which virtual machines are
8252     chosen for removal when a Virtual Machine Scale Set is scaled-in.
8253    :type scale_in_policy: ~azure.mgmt.compute.v2019_03_01.models.ScaleInPolicy
8254    :param proximity_placement_group: Specifies information about the proximity placement group
8255     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
8256     api-version: 2018-04-01.
8257    :type proximity_placement_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
8258    """
8259
8260    _attribute_map = {
8261        'tags': {'key': 'tags', 'type': '{str}'},
8262        'sku': {'key': 'sku', 'type': 'Sku'},
8263        'plan': {'key': 'plan', 'type': 'Plan'},
8264        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
8265        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
8266        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
8267        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetUpdateVMProfile'},
8268        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
8269        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
8270        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
8271        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
8272        'scale_in_policy': {'key': 'properties.scaleInPolicy', 'type': 'ScaleInPolicy'},
8273        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
8274    }
8275
8276    def __init__(
8277        self,
8278        *,
8279        tags: Optional[Dict[str, str]] = None,
8280        sku: Optional["Sku"] = None,
8281        plan: Optional["Plan"] = None,
8282        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
8283        upgrade_policy: Optional["UpgradePolicy"] = None,
8284        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
8285        virtual_machine_profile: Optional["VirtualMachineScaleSetUpdateVMProfile"] = None,
8286        overprovision: Optional[bool] = None,
8287        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
8288        single_placement_group: Optional[bool] = None,
8289        additional_capabilities: Optional["AdditionalCapabilities"] = None,
8290        scale_in_policy: Optional["ScaleInPolicy"] = None,
8291        proximity_placement_group: Optional["SubResource"] = None,
8292        **kwargs
8293    ):
8294        super(VirtualMachineScaleSetUpdate, self).__init__(tags=tags, **kwargs)
8295        self.sku = sku
8296        self.plan = plan
8297        self.identity = identity
8298        self.upgrade_policy = upgrade_policy
8299        self.automatic_repairs_policy = automatic_repairs_policy
8300        self.virtual_machine_profile = virtual_machine_profile
8301        self.overprovision = overprovision
8302        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
8303        self.single_placement_group = single_placement_group
8304        self.additional_capabilities = additional_capabilities
8305        self.scale_in_policy = scale_in_policy
8306        self.proximity_placement_group = proximity_placement_group
8307
8308
8309class VirtualMachineScaleSetUpdateIPConfiguration(SubResource):
8310    """Describes a virtual machine scale set network profile's IP configuration.
8311
8312    :param id: Resource Id.
8313    :type id: str
8314    :param name: The IP configuration name.
8315    :type name: str
8316    :param subnet: The subnet.
8317    :type subnet: ~azure.mgmt.compute.v2019_03_01.models.ApiEntityReference
8318    :param primary: Specifies the primary IP Configuration in case the network interface has more
8319     than one IP Configuration.
8320    :type primary: bool
8321    :param public_ip_address_configuration: The publicIPAddressConfiguration.
8322    :type public_ip_address_configuration:
8323     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration
8324    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
8325     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
8326     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
8327    :type private_ip_address_version: str or ~azure.mgmt.compute.v2019_03_01.models.IPVersion
8328    :param application_gateway_backend_address_pools: The application gateway backend address
8329     pools.
8330    :type application_gateway_backend_address_pools:
8331     list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
8332    :param application_security_groups: Specifies an array of references to application security
8333     group.
8334    :type application_security_groups: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
8335    :param load_balancer_backend_address_pools: The load balancer backend address pools.
8336    :type load_balancer_backend_address_pools:
8337     list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
8338    :param load_balancer_inbound_nat_pools: The load balancer inbound nat pools.
8339    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2019_03_01.models.SubResource]
8340    """
8341
8342    _attribute_map = {
8343        'id': {'key': 'id', 'type': 'str'},
8344        'name': {'key': 'name', 'type': 'str'},
8345        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
8346        'primary': {'key': 'properties.primary', 'type': 'bool'},
8347        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetUpdatePublicIPAddressConfiguration'},
8348        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
8349        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
8350        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
8351        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
8352        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
8353    }
8354
8355    def __init__(
8356        self,
8357        *,
8358        id: Optional[str] = None,
8359        name: Optional[str] = None,
8360        subnet: Optional["ApiEntityReference"] = None,
8361        primary: Optional[bool] = None,
8362        public_ip_address_configuration: Optional["VirtualMachineScaleSetUpdatePublicIPAddressConfiguration"] = None,
8363        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
8364        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
8365        application_security_groups: Optional[List["SubResource"]] = None,
8366        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
8367        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
8368        **kwargs
8369    ):
8370        super(VirtualMachineScaleSetUpdateIPConfiguration, self).__init__(id=id, **kwargs)
8371        self.name = name
8372        self.subnet = subnet
8373        self.primary = primary
8374        self.public_ip_address_configuration = public_ip_address_configuration
8375        self.private_ip_address_version = private_ip_address_version
8376        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
8377        self.application_security_groups = application_security_groups
8378        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
8379        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
8380
8381
8382class VirtualMachineScaleSetUpdateNetworkConfiguration(SubResource):
8383    """Describes a virtual machine scale set network profile's network configurations.
8384
8385    :param id: Resource Id.
8386    :type id: str
8387    :param name: The network configuration name.
8388    :type name: str
8389    :param primary: Whether this is a primary NIC on a virtual machine.
8390    :type primary: bool
8391    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
8392     networking-enabled.
8393    :type enable_accelerated_networking: bool
8394    :param network_security_group: The network security group.
8395    :type network_security_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
8396    :param dns_settings: The dns settings to be applied on the network interfaces.
8397    :type dns_settings:
8398     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
8399    :param ip_configurations: The virtual machine scale set IP Configuration.
8400    :type ip_configurations:
8401     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateIPConfiguration]
8402    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
8403    :type enable_ip_forwarding: bool
8404    """
8405
8406    _attribute_map = {
8407        'id': {'key': 'id', 'type': 'str'},
8408        'name': {'key': 'name', 'type': 'str'},
8409        'primary': {'key': 'properties.primary', 'type': 'bool'},
8410        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
8411        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
8412        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
8413        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetUpdateIPConfiguration]'},
8414        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
8415    }
8416
8417    def __init__(
8418        self,
8419        *,
8420        id: Optional[str] = None,
8421        name: Optional[str] = None,
8422        primary: Optional[bool] = None,
8423        enable_accelerated_networking: Optional[bool] = None,
8424        network_security_group: Optional["SubResource"] = None,
8425        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
8426        ip_configurations: Optional[List["VirtualMachineScaleSetUpdateIPConfiguration"]] = None,
8427        enable_ip_forwarding: Optional[bool] = None,
8428        **kwargs
8429    ):
8430        super(VirtualMachineScaleSetUpdateNetworkConfiguration, self).__init__(id=id, **kwargs)
8431        self.name = name
8432        self.primary = primary
8433        self.enable_accelerated_networking = enable_accelerated_networking
8434        self.network_security_group = network_security_group
8435        self.dns_settings = dns_settings
8436        self.ip_configurations = ip_configurations
8437        self.enable_ip_forwarding = enable_ip_forwarding
8438
8439
8440class VirtualMachineScaleSetUpdateNetworkProfile(msrest.serialization.Model):
8441    """Describes a virtual machine scale set network profile.
8442
8443    :param health_probe: A reference to a load balancer probe used to determine the health of an
8444     instance in the virtual machine scale set. The reference will be in the form:
8445     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
8446    :type health_probe: ~azure.mgmt.compute.v2019_03_01.models.ApiEntityReference
8447    :param network_interface_configurations: The list of network configurations.
8448    :type network_interface_configurations:
8449     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration]
8450    """
8451
8452    _attribute_map = {
8453        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
8454        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetUpdateNetworkConfiguration]'},
8455    }
8456
8457    def __init__(
8458        self,
8459        *,
8460        health_probe: Optional["ApiEntityReference"] = None,
8461        network_interface_configurations: Optional[List["VirtualMachineScaleSetUpdateNetworkConfiguration"]] = None,
8462        **kwargs
8463    ):
8464        super(VirtualMachineScaleSetUpdateNetworkProfile, self).__init__(**kwargs)
8465        self.health_probe = health_probe
8466        self.network_interface_configurations = network_interface_configurations
8467
8468
8469class VirtualMachineScaleSetUpdateOSDisk(msrest.serialization.Model):
8470    """Describes virtual machine scale set operating system disk Update Object. This should be used for Updating VMSS OS Disk.
8471
8472    :param caching: The caching type. Possible values include: "None", "ReadOnly", "ReadWrite".
8473    :type caching: str or ~azure.mgmt.compute.v2019_03_01.models.CachingTypes
8474    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
8475     disabled on the disk.
8476    :type write_accelerator_enabled: bool
8477    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
8478     can be used to overwrite the size of the disk in a virtual machine image.
8479     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
8480    :type disk_size_gb: int
8481    :param image: The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before
8482     using it to attach to the Virtual Machine. If SourceImage is provided, the destination
8483     VirtualHardDisk should not exist.
8484    :type image: ~azure.mgmt.compute.v2019_03_01.models.VirtualHardDisk
8485    :param vhd_containers: The list of virtual hard disk container uris.
8486    :type vhd_containers: list[str]
8487    :param managed_disk: The managed disk parameters.
8488    :type managed_disk:
8489     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetManagedDiskParameters
8490    """
8491
8492    _attribute_map = {
8493        'caching': {'key': 'caching', 'type': 'str'},
8494        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
8495        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
8496        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
8497        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
8498        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
8499    }
8500
8501    def __init__(
8502        self,
8503        *,
8504        caching: Optional[Union[str, "CachingTypes"]] = None,
8505        write_accelerator_enabled: Optional[bool] = None,
8506        disk_size_gb: Optional[int] = None,
8507        image: Optional["VirtualHardDisk"] = None,
8508        vhd_containers: Optional[List[str]] = None,
8509        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
8510        **kwargs
8511    ):
8512        super(VirtualMachineScaleSetUpdateOSDisk, self).__init__(**kwargs)
8513        self.caching = caching
8514        self.write_accelerator_enabled = write_accelerator_enabled
8515        self.disk_size_gb = disk_size_gb
8516        self.image = image
8517        self.vhd_containers = vhd_containers
8518        self.managed_disk = managed_disk
8519
8520
8521class VirtualMachineScaleSetUpdateOSProfile(msrest.serialization.Model):
8522    """Describes a virtual machine scale set OS profile.
8523
8524    :param custom_data: A base-64 encoded string of custom data.
8525    :type custom_data: str
8526    :param windows_configuration: The Windows Configuration of the OS profile.
8527    :type windows_configuration: ~azure.mgmt.compute.v2019_03_01.models.WindowsConfiguration
8528    :param linux_configuration: The Linux Configuration of the OS profile.
8529    :type linux_configuration: ~azure.mgmt.compute.v2019_03_01.models.LinuxConfiguration
8530    :param secrets: The List of certificates for addition to the VM.
8531    :type secrets: list[~azure.mgmt.compute.v2019_03_01.models.VaultSecretGroup]
8532    """
8533
8534    _attribute_map = {
8535        'custom_data': {'key': 'customData', 'type': 'str'},
8536        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
8537        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
8538        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
8539    }
8540
8541    def __init__(
8542        self,
8543        *,
8544        custom_data: Optional[str] = None,
8545        windows_configuration: Optional["WindowsConfiguration"] = None,
8546        linux_configuration: Optional["LinuxConfiguration"] = None,
8547        secrets: Optional[List["VaultSecretGroup"]] = None,
8548        **kwargs
8549    ):
8550        super(VirtualMachineScaleSetUpdateOSProfile, self).__init__(**kwargs)
8551        self.custom_data = custom_data
8552        self.windows_configuration = windows_configuration
8553        self.linux_configuration = linux_configuration
8554        self.secrets = secrets
8555
8556
8557class VirtualMachineScaleSetUpdatePublicIPAddressConfiguration(msrest.serialization.Model):
8558    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
8559
8560    :param name: The publicIP address configuration name.
8561    :type name: str
8562    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
8563    :type idle_timeout_in_minutes: int
8564    :param dns_settings: The dns settings to be applied on the publicIP addresses .
8565    :type dns_settings:
8566     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
8567    """
8568
8569    _attribute_map = {
8570        'name': {'key': 'name', 'type': 'str'},
8571        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
8572        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
8573    }
8574
8575    def __init__(
8576        self,
8577        *,
8578        name: Optional[str] = None,
8579        idle_timeout_in_minutes: Optional[int] = None,
8580        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
8581        **kwargs
8582    ):
8583        super(VirtualMachineScaleSetUpdatePublicIPAddressConfiguration, self).__init__(**kwargs)
8584        self.name = name
8585        self.idle_timeout_in_minutes = idle_timeout_in_minutes
8586        self.dns_settings = dns_settings
8587
8588
8589class VirtualMachineScaleSetUpdateStorageProfile(msrest.serialization.Model):
8590    """Describes a virtual machine scale set storage profile.
8591
8592    :param image_reference: The image reference.
8593    :type image_reference: ~azure.mgmt.compute.v2019_03_01.models.ImageReference
8594    :param os_disk: The OS disk.
8595    :type os_disk: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateOSDisk
8596    :param data_disks: The data disks.
8597    :type data_disks: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetDataDisk]
8598    """
8599
8600    _attribute_map = {
8601        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
8602        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetUpdateOSDisk'},
8603        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
8604    }
8605
8606    def __init__(
8607        self,
8608        *,
8609        image_reference: Optional["ImageReference"] = None,
8610        os_disk: Optional["VirtualMachineScaleSetUpdateOSDisk"] = None,
8611        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
8612        **kwargs
8613    ):
8614        super(VirtualMachineScaleSetUpdateStorageProfile, self).__init__(**kwargs)
8615        self.image_reference = image_reference
8616        self.os_disk = os_disk
8617        self.data_disks = data_disks
8618
8619
8620class VirtualMachineScaleSetUpdateVMProfile(msrest.serialization.Model):
8621    """Describes a virtual machine scale set virtual machine profile.
8622
8623    :param os_profile: The virtual machine scale set OS profile.
8624    :type os_profile: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateOSProfile
8625    :param storage_profile: The virtual machine scale set storage profile.
8626    :type storage_profile:
8627     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateStorageProfile
8628    :param network_profile: The virtual machine scale set network profile.
8629    :type network_profile:
8630     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetUpdateNetworkProfile
8631    :param diagnostics_profile: The virtual machine scale set diagnostics profile.
8632    :type diagnostics_profile: ~azure.mgmt.compute.v2019_03_01.models.DiagnosticsProfile
8633    :param extension_profile: The virtual machine scale set extension profile.
8634    :type extension_profile:
8635     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetExtensionProfile
8636    :param license_type: The license type, which is for bring your own license scenario.
8637    :type license_type: str
8638    :param billing_profile: Specifies the billing related details of a low priority VMSS.
8639     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
8640    :type billing_profile: ~azure.mgmt.compute.v2019_03_01.models.BillingProfile
8641    :param scheduled_events_profile: Specifies Scheduled Event related configurations.
8642    :type scheduled_events_profile: ~azure.mgmt.compute.v2019_03_01.models.ScheduledEventsProfile
8643    """
8644
8645    _attribute_map = {
8646        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetUpdateOSProfile'},
8647        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetUpdateStorageProfile'},
8648        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetUpdateNetworkProfile'},
8649        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
8650        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
8651        'license_type': {'key': 'licenseType', 'type': 'str'},
8652        'billing_profile': {'key': 'billingProfile', 'type': 'BillingProfile'},
8653        'scheduled_events_profile': {'key': 'scheduledEventsProfile', 'type': 'ScheduledEventsProfile'},
8654    }
8655
8656    def __init__(
8657        self,
8658        *,
8659        os_profile: Optional["VirtualMachineScaleSetUpdateOSProfile"] = None,
8660        storage_profile: Optional["VirtualMachineScaleSetUpdateStorageProfile"] = None,
8661        network_profile: Optional["VirtualMachineScaleSetUpdateNetworkProfile"] = None,
8662        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
8663        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
8664        license_type: Optional[str] = None,
8665        billing_profile: Optional["BillingProfile"] = None,
8666        scheduled_events_profile: Optional["ScheduledEventsProfile"] = None,
8667        **kwargs
8668    ):
8669        super(VirtualMachineScaleSetUpdateVMProfile, self).__init__(**kwargs)
8670        self.os_profile = os_profile
8671        self.storage_profile = storage_profile
8672        self.network_profile = network_profile
8673        self.diagnostics_profile = diagnostics_profile
8674        self.extension_profile = extension_profile
8675        self.license_type = license_type
8676        self.billing_profile = billing_profile
8677        self.scheduled_events_profile = scheduled_events_profile
8678
8679
8680class VirtualMachineScaleSetVM(Resource):
8681    """Describes a virtual machine scale set virtual machine.
8682
8683    Variables are only populated by the server, and will be ignored when sending a request.
8684
8685    All required parameters must be populated in order to send to Azure.
8686
8687    :ivar id: Resource Id.
8688    :vartype id: str
8689    :ivar name: Resource name.
8690    :vartype name: str
8691    :ivar type: Resource type.
8692    :vartype type: str
8693    :param location: Required. Resource location.
8694    :type location: str
8695    :param tags: A set of tags. Resource tags.
8696    :type tags: dict[str, str]
8697    :ivar instance_id: The virtual machine instance ID.
8698    :vartype instance_id: str
8699    :ivar sku: The virtual machine SKU.
8700    :vartype sku: ~azure.mgmt.compute.v2019_03_01.models.Sku
8701    :param plan: Specifies information about the marketplace image used to create the virtual
8702     machine. This element is only used for marketplace images. Before you can use a marketplace
8703     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
8704     the marketplace image that you want to use and then click **Want to deploy programmatically,
8705     Get Started ->**. Enter any required information and then click **Save**.
8706    :type plan: ~azure.mgmt.compute.v2019_03_01.models.Plan
8707    :ivar resources: The virtual machine child extension resources.
8708    :vartype resources: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtension]
8709    :ivar zones: The virtual machine zones.
8710    :vartype zones: list[str]
8711    :ivar latest_model_applied: Specifies whether the latest model has been applied to the virtual
8712     machine.
8713    :vartype latest_model_applied: bool
8714    :ivar vm_id: Azure VM unique ID.
8715    :vartype vm_id: str
8716    :ivar instance_view: The virtual machine instance view.
8717    :vartype instance_view:
8718     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetVMInstanceView
8719    :param hardware_profile: Specifies the hardware settings for the virtual machine.
8720    :type hardware_profile: ~azure.mgmt.compute.v2019_03_01.models.HardwareProfile
8721    :param storage_profile: Specifies the storage settings for the virtual machine disks.
8722    :type storage_profile: ~azure.mgmt.compute.v2019_03_01.models.StorageProfile
8723    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
8724     virtual machine in the scale set. For instance: whether the virtual machine has the capability
8725     to support attaching managed data disks with UltraSSD_LRS storage account type.
8726    :type additional_capabilities: ~azure.mgmt.compute.v2019_03_01.models.AdditionalCapabilities
8727    :param os_profile: Specifies the operating system settings for the virtual machine.
8728    :type os_profile: ~azure.mgmt.compute.v2019_03_01.models.OSProfile
8729    :param network_profile: Specifies the network interfaces of the virtual machine.
8730    :type network_profile: ~azure.mgmt.compute.v2019_03_01.models.NetworkProfile
8731    :param network_profile_configuration: Specifies the network profile configuration of the
8732     virtual machine.
8733    :type network_profile_configuration:
8734     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetVMNetworkProfileConfiguration
8735    :param diagnostics_profile: Specifies the boot diagnostic settings state.
8736     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
8737    :type diagnostics_profile: ~azure.mgmt.compute.v2019_03_01.models.DiagnosticsProfile
8738    :param availability_set: Specifies information about the availability set that the virtual
8739     machine should be assigned to. Virtual machines specified in the same availability set are
8740     allocated to different nodes to maximize availability. For more information about availability
8741     sets, see `Manage the availability of virtual machines
8742     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
8743     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
8744     maintenance for virtual machines in Azure
8745     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
8746     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
8747     time. An existing VM cannot be added to an availability set.
8748    :type availability_set: ~azure.mgmt.compute.v2019_03_01.models.SubResource
8749    :ivar provisioning_state: The provisioning state, which only appears in the response.
8750    :vartype provisioning_state: str
8751    :param license_type: Specifies that the image or disk that is being used was licensed
8752     on-premises. This element is only used for images that contain the Windows Server operating
8753     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
8754     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
8755     a request for an update, the value must match the initial value. This value cannot be updated.
8756     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
8757     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
8758     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
8759    :type license_type: str
8760    :ivar model_definition_applied: Specifies whether the model applied to the virtual machine is
8761     the model of the virtual machine scale set or the customized model for the virtual machine.
8762    :vartype model_definition_applied: str
8763    :param protection_policy: Specifies the protection policy of the virtual machine.
8764    :type protection_policy:
8765     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetVMProtectionPolicy
8766    """
8767
8768    _validation = {
8769        'id': {'readonly': True},
8770        'name': {'readonly': True},
8771        'type': {'readonly': True},
8772        'location': {'required': True},
8773        'instance_id': {'readonly': True},
8774        'sku': {'readonly': True},
8775        'resources': {'readonly': True},
8776        'zones': {'readonly': True},
8777        'latest_model_applied': {'readonly': True},
8778        'vm_id': {'readonly': True},
8779        'instance_view': {'readonly': True},
8780        'provisioning_state': {'readonly': True},
8781        'model_definition_applied': {'readonly': True},
8782    }
8783
8784    _attribute_map = {
8785        'id': {'key': 'id', 'type': 'str'},
8786        'name': {'key': 'name', 'type': 'str'},
8787        'type': {'key': 'type', 'type': 'str'},
8788        'location': {'key': 'location', 'type': 'str'},
8789        'tags': {'key': 'tags', 'type': '{str}'},
8790        'instance_id': {'key': 'instanceId', 'type': 'str'},
8791        'sku': {'key': 'sku', 'type': 'Sku'},
8792        'plan': {'key': 'plan', 'type': 'Plan'},
8793        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
8794        'zones': {'key': 'zones', 'type': '[str]'},
8795        'latest_model_applied': {'key': 'properties.latestModelApplied', 'type': 'bool'},
8796        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
8797        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineScaleSetVMInstanceView'},
8798        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
8799        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
8800        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
8801        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
8802        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
8803        'network_profile_configuration': {'key': 'properties.networkProfileConfiguration', 'type': 'VirtualMachineScaleSetVMNetworkProfileConfiguration'},
8804        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
8805        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
8806        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
8807        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
8808        'model_definition_applied': {'key': 'properties.modelDefinitionApplied', 'type': 'str'},
8809        'protection_policy': {'key': 'properties.protectionPolicy', 'type': 'VirtualMachineScaleSetVMProtectionPolicy'},
8810    }
8811
8812    def __init__(
8813        self,
8814        *,
8815        location: str,
8816        tags: Optional[Dict[str, str]] = None,
8817        plan: Optional["Plan"] = None,
8818        hardware_profile: Optional["HardwareProfile"] = None,
8819        storage_profile: Optional["StorageProfile"] = None,
8820        additional_capabilities: Optional["AdditionalCapabilities"] = None,
8821        os_profile: Optional["OSProfile"] = None,
8822        network_profile: Optional["NetworkProfile"] = None,
8823        network_profile_configuration: Optional["VirtualMachineScaleSetVMNetworkProfileConfiguration"] = None,
8824        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
8825        availability_set: Optional["SubResource"] = None,
8826        license_type: Optional[str] = None,
8827        protection_policy: Optional["VirtualMachineScaleSetVMProtectionPolicy"] = None,
8828        **kwargs
8829    ):
8830        super(VirtualMachineScaleSetVM, self).__init__(location=location, tags=tags, **kwargs)
8831        self.instance_id = None
8832        self.sku = None
8833        self.plan = plan
8834        self.resources = None
8835        self.zones = None
8836        self.latest_model_applied = None
8837        self.vm_id = None
8838        self.instance_view = None
8839        self.hardware_profile = hardware_profile
8840        self.storage_profile = storage_profile
8841        self.additional_capabilities = additional_capabilities
8842        self.os_profile = os_profile
8843        self.network_profile = network_profile
8844        self.network_profile_configuration = network_profile_configuration
8845        self.diagnostics_profile = diagnostics_profile
8846        self.availability_set = availability_set
8847        self.provisioning_state = None
8848        self.license_type = license_type
8849        self.model_definition_applied = None
8850        self.protection_policy = protection_policy
8851
8852
8853class VirtualMachineScaleSetVMExtensionsSummary(msrest.serialization.Model):
8854    """Extensions summary for virtual machines of a virtual machine scale set.
8855
8856    Variables are only populated by the server, and will be ignored when sending a request.
8857
8858    :ivar name: The extension name.
8859    :vartype name: str
8860    :ivar statuses_summary: The extensions information.
8861    :vartype statuses_summary:
8862     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineStatusCodeCount]
8863    """
8864
8865    _validation = {
8866        'name': {'readonly': True},
8867        'statuses_summary': {'readonly': True},
8868    }
8869
8870    _attribute_map = {
8871        'name': {'key': 'name', 'type': 'str'},
8872        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
8873    }
8874
8875    def __init__(
8876        self,
8877        **kwargs
8878    ):
8879        super(VirtualMachineScaleSetVMExtensionsSummary, self).__init__(**kwargs)
8880        self.name = None
8881        self.statuses_summary = None
8882
8883
8884class VirtualMachineScaleSetVMInstanceIDs(msrest.serialization.Model):
8885    """Specifies a list of virtual machine instance IDs from the VM scale set.
8886
8887    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
8888     scale set instance ids will result in the operation being performed on all virtual machines in
8889     the virtual machine scale set.
8890    :type instance_ids: list[str]
8891    """
8892
8893    _attribute_map = {
8894        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
8895    }
8896
8897    def __init__(
8898        self,
8899        *,
8900        instance_ids: Optional[List[str]] = None,
8901        **kwargs
8902    ):
8903        super(VirtualMachineScaleSetVMInstanceIDs, self).__init__(**kwargs)
8904        self.instance_ids = instance_ids
8905
8906
8907class VirtualMachineScaleSetVMInstanceRequiredIDs(msrest.serialization.Model):
8908    """Specifies a list of virtual machine instance IDs from the VM scale set.
8909
8910    All required parameters must be populated in order to send to Azure.
8911
8912    :param instance_ids: Required. The virtual machine scale set instance ids.
8913    :type instance_ids: list[str]
8914    """
8915
8916    _validation = {
8917        'instance_ids': {'required': True},
8918    }
8919
8920    _attribute_map = {
8921        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
8922    }
8923
8924    def __init__(
8925        self,
8926        *,
8927        instance_ids: List[str],
8928        **kwargs
8929    ):
8930        super(VirtualMachineScaleSetVMInstanceRequiredIDs, self).__init__(**kwargs)
8931        self.instance_ids = instance_ids
8932
8933
8934class VirtualMachineScaleSetVMInstanceView(msrest.serialization.Model):
8935    """The instance view of a virtual machine scale set VM.
8936
8937    Variables are only populated by the server, and will be ignored when sending a request.
8938
8939    :param platform_update_domain: The Update Domain count.
8940    :type platform_update_domain: int
8941    :param platform_fault_domain: The Fault Domain count.
8942    :type platform_fault_domain: int
8943    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
8944    :type rdp_thumb_print: str
8945    :param vm_agent: The VM Agent running on the virtual machine.
8946    :type vm_agent: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineAgentInstanceView
8947    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
8948    :type maintenance_redeploy_status:
8949     ~azure.mgmt.compute.v2019_03_01.models.MaintenanceRedeployStatus
8950    :param disks: The disks information.
8951    :type disks: list[~azure.mgmt.compute.v2019_03_01.models.DiskInstanceView]
8952    :param extensions: The extensions information.
8953    :type extensions:
8954     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineExtensionInstanceView]
8955    :ivar vm_health: The health status for the VM.
8956    :vartype vm_health: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineHealthStatus
8957    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
8958     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
8959     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
8960     screenshot of the VM from the hypervisor.
8961    :type boot_diagnostics: ~azure.mgmt.compute.v2019_03_01.models.BootDiagnosticsInstanceView
8962    :param statuses: The resource status information.
8963    :type statuses: list[~azure.mgmt.compute.v2019_03_01.models.InstanceViewStatus]
8964    :param placement_group_id: The placement group in which the VM is running. If the VM is
8965     deallocated it will not have a placementGroupId.
8966    :type placement_group_id: str
8967    """
8968
8969    _validation = {
8970        'vm_health': {'readonly': True},
8971    }
8972
8973    _attribute_map = {
8974        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
8975        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
8976        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
8977        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
8978        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
8979        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
8980        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
8981        'vm_health': {'key': 'vmHealth', 'type': 'VirtualMachineHealthStatus'},
8982        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
8983        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
8984        'placement_group_id': {'key': 'placementGroupId', 'type': 'str'},
8985    }
8986
8987    def __init__(
8988        self,
8989        *,
8990        platform_update_domain: Optional[int] = None,
8991        platform_fault_domain: Optional[int] = None,
8992        rdp_thumb_print: Optional[str] = None,
8993        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
8994        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
8995        disks: Optional[List["DiskInstanceView"]] = None,
8996        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
8997        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
8998        statuses: Optional[List["InstanceViewStatus"]] = None,
8999        placement_group_id: Optional[str] = None,
9000        **kwargs
9001    ):
9002        super(VirtualMachineScaleSetVMInstanceView, self).__init__(**kwargs)
9003        self.platform_update_domain = platform_update_domain
9004        self.platform_fault_domain = platform_fault_domain
9005        self.rdp_thumb_print = rdp_thumb_print
9006        self.vm_agent = vm_agent
9007        self.maintenance_redeploy_status = maintenance_redeploy_status
9008        self.disks = disks
9009        self.extensions = extensions
9010        self.vm_health = None
9011        self.boot_diagnostics = boot_diagnostics
9012        self.statuses = statuses
9013        self.placement_group_id = placement_group_id
9014
9015
9016class VirtualMachineScaleSetVMListResult(msrest.serialization.Model):
9017    """The List Virtual Machine Scale Set VMs operation response.
9018
9019    All required parameters must be populated in order to send to Azure.
9020
9021    :param value: Required. The list of virtual machine scale sets VMs.
9022    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetVM]
9023    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set VMs. Call
9024     ListNext() with this to fetch the next page of VMSS VMs.
9025    :type next_link: str
9026    """
9027
9028    _validation = {
9029        'value': {'required': True},
9030    }
9031
9032    _attribute_map = {
9033        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetVM]'},
9034        'next_link': {'key': 'nextLink', 'type': 'str'},
9035    }
9036
9037    def __init__(
9038        self,
9039        *,
9040        value: List["VirtualMachineScaleSetVM"],
9041        next_link: Optional[str] = None,
9042        **kwargs
9043    ):
9044        super(VirtualMachineScaleSetVMListResult, self).__init__(**kwargs)
9045        self.value = value
9046        self.next_link = next_link
9047
9048
9049class VirtualMachineScaleSetVMNetworkProfileConfiguration(msrest.serialization.Model):
9050    """Describes a virtual machine scale set VM network profile.
9051
9052    :param network_interface_configurations: The list of network configurations.
9053    :type network_interface_configurations:
9054     list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetNetworkConfiguration]
9055    """
9056
9057    _attribute_map = {
9058        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
9059    }
9060
9061    def __init__(
9062        self,
9063        *,
9064        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
9065        **kwargs
9066    ):
9067        super(VirtualMachineScaleSetVMNetworkProfileConfiguration, self).__init__(**kwargs)
9068        self.network_interface_configurations = network_interface_configurations
9069
9070
9071class VirtualMachineScaleSetVMProfile(msrest.serialization.Model):
9072    """Describes a virtual machine scale set virtual machine profile.
9073
9074    :param os_profile: Specifies the operating system settings for the virtual machines in the
9075     scale set.
9076    :type os_profile: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetOSProfile
9077    :param storage_profile: Specifies the storage settings for the virtual machine disks.
9078    :type storage_profile:
9079     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetStorageProfile
9080    :param network_profile: Specifies properties of the network interfaces of the virtual machines
9081     in the scale set.
9082    :type network_profile:
9083     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetNetworkProfile
9084    :param diagnostics_profile: Specifies the boot diagnostic settings state.
9085     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
9086    :type diagnostics_profile: ~azure.mgmt.compute.v2019_03_01.models.DiagnosticsProfile
9087    :param extension_profile: Specifies a collection of settings for extensions installed on
9088     virtual machines in the scale set.
9089    :type extension_profile:
9090     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineScaleSetExtensionProfile
9091    :param license_type: Specifies that the image or disk that is being used was licensed
9092     on-premises. This element is only used for images that contain the Windows Server operating
9093     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
9094     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
9095     a request for an update, the value must match the initial value. This value cannot be updated.
9096     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
9097     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9098     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
9099    :type license_type: str
9100    :param priority: Specifies the priority for the virtual machines in the scale set.
9101     :code:`<br>`:code:`<br>`Minimum api-version: 2017-10-30-preview. Possible values include:
9102     "Regular", "Low", "Spot".
9103    :type priority: str or ~azure.mgmt.compute.v2019_03_01.models.VirtualMachinePriorityTypes
9104    :param eviction_policy: Specifies the eviction policy for virtual machines in a Azure Spot
9105     scale set. :code:`<br>`:code:`<br>`Minimum api-version: 2017-10-30-preview. Possible values
9106     include: "Deallocate", "Delete".
9107    :type eviction_policy: str or
9108     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineEvictionPolicyTypes
9109    :param billing_profile: Specifies the billing related details of a Azure Spot VMSS.
9110     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
9111    :type billing_profile: ~azure.mgmt.compute.v2019_03_01.models.BillingProfile
9112    :param scheduled_events_profile: Specifies Scheduled Event related configurations.
9113    :type scheduled_events_profile: ~azure.mgmt.compute.v2019_03_01.models.ScheduledEventsProfile
9114    """
9115
9116    _attribute_map = {
9117        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetOSProfile'},
9118        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetStorageProfile'},
9119        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetNetworkProfile'},
9120        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
9121        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
9122        'license_type': {'key': 'licenseType', 'type': 'str'},
9123        'priority': {'key': 'priority', 'type': 'str'},
9124        'eviction_policy': {'key': 'evictionPolicy', 'type': 'str'},
9125        'billing_profile': {'key': 'billingProfile', 'type': 'BillingProfile'},
9126        'scheduled_events_profile': {'key': 'scheduledEventsProfile', 'type': 'ScheduledEventsProfile'},
9127    }
9128
9129    def __init__(
9130        self,
9131        *,
9132        os_profile: Optional["VirtualMachineScaleSetOSProfile"] = None,
9133        storage_profile: Optional["VirtualMachineScaleSetStorageProfile"] = None,
9134        network_profile: Optional["VirtualMachineScaleSetNetworkProfile"] = None,
9135        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
9136        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
9137        license_type: Optional[str] = None,
9138        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
9139        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
9140        billing_profile: Optional["BillingProfile"] = None,
9141        scheduled_events_profile: Optional["ScheduledEventsProfile"] = None,
9142        **kwargs
9143    ):
9144        super(VirtualMachineScaleSetVMProfile, self).__init__(**kwargs)
9145        self.os_profile = os_profile
9146        self.storage_profile = storage_profile
9147        self.network_profile = network_profile
9148        self.diagnostics_profile = diagnostics_profile
9149        self.extension_profile = extension_profile
9150        self.license_type = license_type
9151        self.priority = priority
9152        self.eviction_policy = eviction_policy
9153        self.billing_profile = billing_profile
9154        self.scheduled_events_profile = scheduled_events_profile
9155
9156
9157class VirtualMachineScaleSetVMProtectionPolicy(msrest.serialization.Model):
9158    """The protection policy of a virtual machine scale set VM.
9159
9160    :param protect_from_scale_in: Indicates that the virtual machine scale set VM shouldn't be
9161     considered for deletion during a scale-in operation.
9162    :type protect_from_scale_in: bool
9163    :param protect_from_scale_set_actions: Indicates that model updates or actions (including
9164     scale-in) initiated on the virtual machine scale set should not be applied to the virtual
9165     machine scale set VM.
9166    :type protect_from_scale_set_actions: bool
9167    """
9168
9169    _attribute_map = {
9170        'protect_from_scale_in': {'key': 'protectFromScaleIn', 'type': 'bool'},
9171        'protect_from_scale_set_actions': {'key': 'protectFromScaleSetActions', 'type': 'bool'},
9172    }
9173
9174    def __init__(
9175        self,
9176        *,
9177        protect_from_scale_in: Optional[bool] = None,
9178        protect_from_scale_set_actions: Optional[bool] = None,
9179        **kwargs
9180    ):
9181        super(VirtualMachineScaleSetVMProtectionPolicy, self).__init__(**kwargs)
9182        self.protect_from_scale_in = protect_from_scale_in
9183        self.protect_from_scale_set_actions = protect_from_scale_set_actions
9184
9185
9186class VirtualMachineSize(msrest.serialization.Model):
9187    """Describes the properties of a VM size.
9188
9189    :param name: The name of the virtual machine size.
9190    :type name: str
9191    :param number_of_cores: The number of cores supported by the virtual machine size.
9192    :type number_of_cores: int
9193    :param os_disk_size_in_mb: The OS disk size, in MB, allowed by the virtual machine size.
9194    :type os_disk_size_in_mb: int
9195    :param resource_disk_size_in_mb: The resource disk size, in MB, allowed by the virtual machine
9196     size.
9197    :type resource_disk_size_in_mb: int
9198    :param memory_in_mb: The amount of memory, in MB, supported by the virtual machine size.
9199    :type memory_in_mb: int
9200    :param max_data_disk_count: The maximum number of data disks that can be attached to the
9201     virtual machine size.
9202    :type max_data_disk_count: int
9203    """
9204
9205    _attribute_map = {
9206        'name': {'key': 'name', 'type': 'str'},
9207        'number_of_cores': {'key': 'numberOfCores', 'type': 'int'},
9208        'os_disk_size_in_mb': {'key': 'osDiskSizeInMB', 'type': 'int'},
9209        'resource_disk_size_in_mb': {'key': 'resourceDiskSizeInMB', 'type': 'int'},
9210        'memory_in_mb': {'key': 'memoryInMB', 'type': 'int'},
9211        'max_data_disk_count': {'key': 'maxDataDiskCount', 'type': 'int'},
9212    }
9213
9214    def __init__(
9215        self,
9216        *,
9217        name: Optional[str] = None,
9218        number_of_cores: Optional[int] = None,
9219        os_disk_size_in_mb: Optional[int] = None,
9220        resource_disk_size_in_mb: Optional[int] = None,
9221        memory_in_mb: Optional[int] = None,
9222        max_data_disk_count: Optional[int] = None,
9223        **kwargs
9224    ):
9225        super(VirtualMachineSize, self).__init__(**kwargs)
9226        self.name = name
9227        self.number_of_cores = number_of_cores
9228        self.os_disk_size_in_mb = os_disk_size_in_mb
9229        self.resource_disk_size_in_mb = resource_disk_size_in_mb
9230        self.memory_in_mb = memory_in_mb
9231        self.max_data_disk_count = max_data_disk_count
9232
9233
9234class VirtualMachineSizeListResult(msrest.serialization.Model):
9235    """The List Virtual Machine operation response.
9236
9237    :param value: The list of virtual machine sizes.
9238    :type value: list[~azure.mgmt.compute.v2019_03_01.models.VirtualMachineSize]
9239    """
9240
9241    _attribute_map = {
9242        'value': {'key': 'value', 'type': '[VirtualMachineSize]'},
9243    }
9244
9245    def __init__(
9246        self,
9247        *,
9248        value: Optional[List["VirtualMachineSize"]] = None,
9249        **kwargs
9250    ):
9251        super(VirtualMachineSizeListResult, self).__init__(**kwargs)
9252        self.value = value
9253
9254
9255class VirtualMachineStatusCodeCount(msrest.serialization.Model):
9256    """The status code and count of the virtual machine scale set instance view status summary.
9257
9258    Variables are only populated by the server, and will be ignored when sending a request.
9259
9260    :ivar code: The instance view status code.
9261    :vartype code: str
9262    :ivar count: The number of instances having a particular status code.
9263    :vartype count: int
9264    """
9265
9266    _validation = {
9267        'code': {'readonly': True},
9268        'count': {'readonly': True},
9269    }
9270
9271    _attribute_map = {
9272        'code': {'key': 'code', 'type': 'str'},
9273        'count': {'key': 'count', 'type': 'int'},
9274    }
9275
9276    def __init__(
9277        self,
9278        **kwargs
9279    ):
9280        super(VirtualMachineStatusCodeCount, self).__init__(**kwargs)
9281        self.code = None
9282        self.count = None
9283
9284
9285class VirtualMachineUpdate(UpdateResource):
9286    """Describes a Virtual Machine Update.
9287
9288    Variables are only populated by the server, and will be ignored when sending a request.
9289
9290    :param tags: A set of tags. Resource tags.
9291    :type tags: dict[str, str]
9292    :param plan: Specifies information about the marketplace image used to create the virtual
9293     machine. This element is only used for marketplace images. Before you can use a marketplace
9294     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
9295     the marketplace image that you want to use and then click **Want to deploy programmatically,
9296     Get Started ->**. Enter any required information and then click **Save**.
9297    :type plan: ~azure.mgmt.compute.v2019_03_01.models.Plan
9298    :param identity: The identity of the virtual machine, if configured.
9299    :type identity: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineIdentity
9300    :param zones: The virtual machine zones.
9301    :type zones: list[str]
9302    :param hardware_profile: Specifies the hardware settings for the virtual machine.
9303    :type hardware_profile: ~azure.mgmt.compute.v2019_03_01.models.HardwareProfile
9304    :param storage_profile: Specifies the storage settings for the virtual machine disks.
9305    :type storage_profile: ~azure.mgmt.compute.v2019_03_01.models.StorageProfile
9306    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
9307     virtual machine.
9308    :type additional_capabilities: ~azure.mgmt.compute.v2019_03_01.models.AdditionalCapabilities
9309    :param os_profile: Specifies the operating system settings for the virtual machine.
9310    :type os_profile: ~azure.mgmt.compute.v2019_03_01.models.OSProfile
9311    :param network_profile: Specifies the network interfaces of the virtual machine.
9312    :type network_profile: ~azure.mgmt.compute.v2019_03_01.models.NetworkProfile
9313    :param diagnostics_profile: Specifies the boot diagnostic settings state.
9314     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
9315    :type diagnostics_profile: ~azure.mgmt.compute.v2019_03_01.models.DiagnosticsProfile
9316    :param availability_set: Specifies information about the availability set that the virtual
9317     machine should be assigned to. Virtual machines specified in the same availability set are
9318     allocated to different nodes to maximize availability. For more information about availability
9319     sets, see `Manage the availability of virtual machines
9320     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
9321     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
9322     maintenance for virtual machines in Azure
9323     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9324     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
9325     time. An existing VM cannot be added to an availability set. :code:`<br>`:code:`<br>`This
9326     property cannot exist along with a non-null properties.virtualMachineScaleSet reference.
9327    :type availability_set: ~azure.mgmt.compute.v2019_03_01.models.SubResource
9328    :param virtual_machine_scale_set: Specifies information about the virtual machine scale set
9329     that the virtual machine should be assigned to. Virtual machines specified in the same virtual
9330     machine scale set are allocated to different nodes to maximize availability. Currently, a VM
9331     can only be added to virtual machine scale set at creation time. An existing VM cannot be added
9332     to a virtual machine scale set. :code:`<br>`:code:`<br>`This property cannot exist along with a
9333     non-null properties.availabilitySet reference. :code:`<br>`:code:`<br>`Minimum api‐version:
9334     2019‐03‐01.
9335    :type virtual_machine_scale_set: ~azure.mgmt.compute.v2019_03_01.models.SubResource
9336    :param proximity_placement_group: Specifies information about the proximity placement group
9337     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
9338     2018-04-01.
9339    :type proximity_placement_group: ~azure.mgmt.compute.v2019_03_01.models.SubResource
9340    :param priority: Specifies the priority for the virtual machine.
9341     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01. Possible values include: "Regular",
9342     "Low", "Spot".
9343    :type priority: str or ~azure.mgmt.compute.v2019_03_01.models.VirtualMachinePriorityTypes
9344    :param eviction_policy: Specifies the eviction policy for the Azure Spot virtual machine. Only
9345     supported value is 'Deallocate'. :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
9346     Possible values include: "Deallocate", "Delete".
9347    :type eviction_policy: str or
9348     ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineEvictionPolicyTypes
9349    :param billing_profile: Specifies the billing related details of a Azure Spot virtual machine.
9350     :code:`<br>`:code:`<br>`Minimum api-version: 2019-03-01.
9351    :type billing_profile: ~azure.mgmt.compute.v2019_03_01.models.BillingProfile
9352    :param host: Specifies information about the dedicated host that the virtual machine resides
9353     in. :code:`<br>`:code:`<br>`Minimum api-version: 2018-10-01.
9354    :type host: ~azure.mgmt.compute.v2019_03_01.models.SubResource
9355    :ivar provisioning_state: The provisioning state, which only appears in the response.
9356    :vartype provisioning_state: str
9357    :ivar instance_view: The virtual machine instance view.
9358    :vartype instance_view: ~azure.mgmt.compute.v2019_03_01.models.VirtualMachineInstanceView
9359    :param license_type: Specifies that the image or disk that is being used was licensed
9360     on-premises. This element is only used for images that contain the Windows Server operating
9361     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
9362     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
9363     a request for an update, the value must match the initial value. This value cannot be updated.
9364     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
9365     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
9366     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
9367    :type license_type: str
9368    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
9369     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
9370    :vartype vm_id: str
9371    """
9372
9373    _validation = {
9374        'provisioning_state': {'readonly': True},
9375        'instance_view': {'readonly': True},
9376        'vm_id': {'readonly': True},
9377    }
9378
9379    _attribute_map = {
9380        'tags': {'key': 'tags', 'type': '{str}'},
9381        'plan': {'key': 'plan', 'type': 'Plan'},
9382        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
9383        'zones': {'key': 'zones', 'type': '[str]'},
9384        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
9385        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
9386        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
9387        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
9388        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
9389        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
9390        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
9391        'virtual_machine_scale_set': {'key': 'properties.virtualMachineScaleSet', 'type': 'SubResource'},
9392        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
9393        'priority': {'key': 'properties.priority', 'type': 'str'},
9394        'eviction_policy': {'key': 'properties.evictionPolicy', 'type': 'str'},
9395        'billing_profile': {'key': 'properties.billingProfile', 'type': 'BillingProfile'},
9396        'host': {'key': 'properties.host', 'type': 'SubResource'},
9397        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
9398        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
9399        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
9400        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
9401    }
9402
9403    def __init__(
9404        self,
9405        *,
9406        tags: Optional[Dict[str, str]] = None,
9407        plan: Optional["Plan"] = None,
9408        identity: Optional["VirtualMachineIdentity"] = None,
9409        zones: Optional[List[str]] = None,
9410        hardware_profile: Optional["HardwareProfile"] = None,
9411        storage_profile: Optional["StorageProfile"] = None,
9412        additional_capabilities: Optional["AdditionalCapabilities"] = None,
9413        os_profile: Optional["OSProfile"] = None,
9414        network_profile: Optional["NetworkProfile"] = None,
9415        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
9416        availability_set: Optional["SubResource"] = None,
9417        virtual_machine_scale_set: Optional["SubResource"] = None,
9418        proximity_placement_group: Optional["SubResource"] = None,
9419        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
9420        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
9421        billing_profile: Optional["BillingProfile"] = None,
9422        host: Optional["SubResource"] = None,
9423        license_type: Optional[str] = None,
9424        **kwargs
9425    ):
9426        super(VirtualMachineUpdate, self).__init__(tags=tags, **kwargs)
9427        self.plan = plan
9428        self.identity = identity
9429        self.zones = zones
9430        self.hardware_profile = hardware_profile
9431        self.storage_profile = storage_profile
9432        self.additional_capabilities = additional_capabilities
9433        self.os_profile = os_profile
9434        self.network_profile = network_profile
9435        self.diagnostics_profile = diagnostics_profile
9436        self.availability_set = availability_set
9437        self.virtual_machine_scale_set = virtual_machine_scale_set
9438        self.proximity_placement_group = proximity_placement_group
9439        self.priority = priority
9440        self.eviction_policy = eviction_policy
9441        self.billing_profile = billing_profile
9442        self.host = host
9443        self.provisioning_state = None
9444        self.instance_view = None
9445        self.license_type = license_type
9446        self.vm_id = None
9447
9448
9449class VMScaleSetConvertToSinglePlacementGroupInput(msrest.serialization.Model):
9450    """VMScaleSetConvertToSinglePlacementGroupInput.
9451
9452    :param active_placement_group_id: Id of the placement group in which you want future virtual
9453     machine instances to be placed. To query placement group Id, please use Virtual Machine Scale
9454     Set VMs - Get API. If not provided, the platform will choose one with maximum number of virtual
9455     machine instances.
9456    :type active_placement_group_id: str
9457    """
9458
9459    _attribute_map = {
9460        'active_placement_group_id': {'key': 'activePlacementGroupId', 'type': 'str'},
9461    }
9462
9463    def __init__(
9464        self,
9465        *,
9466        active_placement_group_id: Optional[str] = None,
9467        **kwargs
9468    ):
9469        super(VMScaleSetConvertToSinglePlacementGroupInput, self).__init__(**kwargs)
9470        self.active_placement_group_id = active_placement_group_id
9471
9472
9473class WindowsConfiguration(msrest.serialization.Model):
9474    """Specifies Windows operating system settings on the virtual machine.
9475
9476    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
9477     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
9478     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
9479     the VM so that extensions can be added to the VM later.
9480    :type provision_vm_agent: bool
9481    :param enable_automatic_updates: Indicates whether Automatic Updates is enabled for the Windows
9482     virtual machine. Default value is true. :code:`<br>`:code:`<br>` For virtual machine scale
9483     sets, this property can be updated and updates will take effect on OS reprovisioning.
9484    :type enable_automatic_updates: bool
9485    :param time_zone: Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".
9486    :type time_zone: str
9487    :param additional_unattend_content: Specifies additional base-64 encoded XML formatted
9488     information that can be included in the Unattend.xml file, which is used by Windows Setup.
9489    :type additional_unattend_content:
9490     list[~azure.mgmt.compute.v2019_03_01.models.AdditionalUnattendContent]
9491    :param win_rm: Specifies the Windows Remote Management listeners. This enables remote Windows
9492     PowerShell.
9493    :type win_rm: ~azure.mgmt.compute.v2019_03_01.models.WinRMConfiguration
9494    """
9495
9496    _attribute_map = {
9497        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
9498        'enable_automatic_updates': {'key': 'enableAutomaticUpdates', 'type': 'bool'},
9499        'time_zone': {'key': 'timeZone', 'type': 'str'},
9500        'additional_unattend_content': {'key': 'additionalUnattendContent', 'type': '[AdditionalUnattendContent]'},
9501        'win_rm': {'key': 'winRM', 'type': 'WinRMConfiguration'},
9502    }
9503
9504    def __init__(
9505        self,
9506        *,
9507        provision_vm_agent: Optional[bool] = None,
9508        enable_automatic_updates: Optional[bool] = None,
9509        time_zone: Optional[str] = None,
9510        additional_unattend_content: Optional[List["AdditionalUnattendContent"]] = None,
9511        win_rm: Optional["WinRMConfiguration"] = None,
9512        **kwargs
9513    ):
9514        super(WindowsConfiguration, self).__init__(**kwargs)
9515        self.provision_vm_agent = provision_vm_agent
9516        self.enable_automatic_updates = enable_automatic_updates
9517        self.time_zone = time_zone
9518        self.additional_unattend_content = additional_unattend_content
9519        self.win_rm = win_rm
9520
9521
9522class WinRMConfiguration(msrest.serialization.Model):
9523    """Describes Windows Remote Management configuration of the VM.
9524
9525    :param listeners: The list of Windows Remote Management listeners.
9526    :type listeners: list[~azure.mgmt.compute.v2019_03_01.models.WinRMListener]
9527    """
9528
9529    _attribute_map = {
9530        'listeners': {'key': 'listeners', 'type': '[WinRMListener]'},
9531    }
9532
9533    def __init__(
9534        self,
9535        *,
9536        listeners: Optional[List["WinRMListener"]] = None,
9537        **kwargs
9538    ):
9539        super(WinRMConfiguration, self).__init__(**kwargs)
9540        self.listeners = listeners
9541
9542
9543class WinRMListener(msrest.serialization.Model):
9544    """Describes Protocol and thumbprint of Windows Remote Management listener.
9545
9546    :param protocol: Specifies the protocol of listener. :code:`<br>`:code:`<br>` Possible values
9547     are: :code:`<br>`\ **http** :code:`<br>`:code:`<br>` **https**. Possible values include:
9548     "Http", "Https".
9549    :type protocol: str or ~azure.mgmt.compute.v2019_03_01.models.ProtocolTypes
9550    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
9551     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
9552     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
9553     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
9554     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
9555     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
9556     "password":":code:`<pfx-file-password>`":code:`<br>`}.
9557    :type certificate_url: str
9558    """
9559
9560    _attribute_map = {
9561        'protocol': {'key': 'protocol', 'type': 'str'},
9562        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
9563    }
9564
9565    def __init__(
9566        self,
9567        *,
9568        protocol: Optional[Union[str, "ProtocolTypes"]] = None,
9569        certificate_url: Optional[str] = None,
9570        **kwargs
9571    ):
9572        super(WinRMListener, self).__init__(**kwargs)
9573        self.protocol = protocol
9574        self.certificate_url = certificate_url
9575