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 AdditionalCapabilities(msrest.serialization.Model):
18    """Enables or disables a capability on the virtual machine or virtual machine scale set.
19
20    :param ultra_ssd_enabled: The flag that enables or disables a capability to have one or more
21     managed data disks with UltraSSD_LRS storage account type on the VM or VMSS. Managed disks with
22     storage account type UltraSSD_LRS can be added to a virtual machine or virtual machine scale
23     set only if this property is enabled.
24    :type ultra_ssd_enabled: bool
25    """
26
27    _attribute_map = {
28        'ultra_ssd_enabled': {'key': 'ultraSSDEnabled', 'type': 'bool'},
29    }
30
31    def __init__(
32        self,
33        *,
34        ultra_ssd_enabled: Optional[bool] = None,
35        **kwargs
36    ):
37        super(AdditionalCapabilities, self).__init__(**kwargs)
38        self.ultra_ssd_enabled = ultra_ssd_enabled
39
40
41class AdditionalUnattendContent(msrest.serialization.Model):
42    """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.
43
44    :param pass_name: The pass name. Currently, the only allowable value is OobeSystem. The only
45     acceptable values to pass in are None and "OobeSystem". The default value is None.
46    :type pass_name: str
47    :param component_name: The component name. Currently, the only allowable value is
48     Microsoft-Windows-Shell-Setup. The only acceptable values to pass in are None and
49     "Microsoft-Windows-Shell-Setup". The default value is None.
50    :type component_name: str
51    :param setting_name: Specifies the name of the setting to which the content applies. Possible
52     values are: FirstLogonCommands and AutoLogon. Possible values include: "AutoLogon",
53     "FirstLogonCommands".
54    :type setting_name: str or ~azure.mgmt.compute.v2018_10_01.models.SettingNames
55    :param content: Specifies the XML formatted content that is added to the unattend.xml file for
56     the specified path and component. The XML must be less than 4KB and must include the root
57     element for the setting or feature that is being inserted.
58    :type content: str
59    """
60
61    _attribute_map = {
62        'pass_name': {'key': 'passName', 'type': 'str'},
63        'component_name': {'key': 'componentName', 'type': 'str'},
64        'setting_name': {'key': 'settingName', 'type': 'str'},
65        'content': {'key': 'content', 'type': 'str'},
66    }
67
68    def __init__(
69        self,
70        *,
71        pass_name: Optional[str] = None,
72        component_name: Optional[str] = None,
73        setting_name: Optional[Union[str, "SettingNames"]] = None,
74        content: Optional[str] = None,
75        **kwargs
76    ):
77        super(AdditionalUnattendContent, self).__init__(**kwargs)
78        self.pass_name = pass_name
79        self.component_name = component_name
80        self.setting_name = setting_name
81        self.content = content
82
83
84class ApiEntityReference(msrest.serialization.Model):
85    """The API entity reference.
86
87    :param id: The ARM resource id in the form of
88     /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/...
89    :type id: str
90    """
91
92    _attribute_map = {
93        'id': {'key': 'id', 'type': 'str'},
94    }
95
96    def __init__(
97        self,
98        *,
99        id: Optional[str] = None,
100        **kwargs
101    ):
102        super(ApiEntityReference, self).__init__(**kwargs)
103        self.id = id
104
105
106class ApiError(msrest.serialization.Model):
107    """Api error.
108
109    :param details: The Api error details.
110    :type details: list[~azure.mgmt.compute.v2018_10_01.models.ApiErrorBase]
111    :param innererror: The Api inner error.
112    :type innererror: ~azure.mgmt.compute.v2018_10_01.models.InnerError
113    :param code: The error code.
114    :type code: str
115    :param target: The target of the particular error.
116    :type target: str
117    :param message: The error message.
118    :type message: str
119    """
120
121    _attribute_map = {
122        'details': {'key': 'details', 'type': '[ApiErrorBase]'},
123        'innererror': {'key': 'innererror', 'type': 'InnerError'},
124        'code': {'key': 'code', 'type': 'str'},
125        'target': {'key': 'target', 'type': 'str'},
126        'message': {'key': 'message', 'type': 'str'},
127    }
128
129    def __init__(
130        self,
131        *,
132        details: Optional[List["ApiErrorBase"]] = None,
133        innererror: Optional["InnerError"] = None,
134        code: Optional[str] = None,
135        target: Optional[str] = None,
136        message: Optional[str] = None,
137        **kwargs
138    ):
139        super(ApiError, self).__init__(**kwargs)
140        self.details = details
141        self.innererror = innererror
142        self.code = code
143        self.target = target
144        self.message = message
145
146
147class ApiErrorBase(msrest.serialization.Model):
148    """Api error base.
149
150    :param code: The error code.
151    :type code: str
152    :param target: The target of the particular error.
153    :type target: str
154    :param message: The error message.
155    :type message: str
156    """
157
158    _attribute_map = {
159        'code': {'key': 'code', 'type': 'str'},
160        'target': {'key': 'target', 'type': 'str'},
161        'message': {'key': 'message', 'type': 'str'},
162    }
163
164    def __init__(
165        self,
166        *,
167        code: Optional[str] = None,
168        target: Optional[str] = None,
169        message: Optional[str] = None,
170        **kwargs
171    ):
172        super(ApiErrorBase, self).__init__(**kwargs)
173        self.code = code
174        self.target = target
175        self.message = message
176
177
178class AutomaticOSUpgradePolicy(msrest.serialization.Model):
179    """The configuration parameters used for performing automatic OS upgrade.
180
181    :param enable_automatic_os_upgrade: Indicates whether OS upgrades should automatically be
182     applied to scale set instances in a rolling fashion when a newer version of the OS image
183     becomes available. Default value is false. If this is set to true for Windows based scale sets,
184     recommendation is to set `enableAutomaticUpdates
185     <https://docs.microsoft.com/dotnet/api/microsoft.azure.management.compute.models.windowsconfiguration.enableautomaticupdates?view=azure-dotnet>`_
186     to false.
187    :type enable_automatic_os_upgrade: bool
188    :param disable_automatic_rollback: Whether OS image rollback feature should be disabled.
189     Default value is false.
190    :type disable_automatic_rollback: bool
191    """
192
193    _attribute_map = {
194        'enable_automatic_os_upgrade': {'key': 'enableAutomaticOSUpgrade', 'type': 'bool'},
195        'disable_automatic_rollback': {'key': 'disableAutomaticRollback', 'type': 'bool'},
196    }
197
198    def __init__(
199        self,
200        *,
201        enable_automatic_os_upgrade: Optional[bool] = None,
202        disable_automatic_rollback: Optional[bool] = None,
203        **kwargs
204    ):
205        super(AutomaticOSUpgradePolicy, self).__init__(**kwargs)
206        self.enable_automatic_os_upgrade = enable_automatic_os_upgrade
207        self.disable_automatic_rollback = disable_automatic_rollback
208
209
210class AutomaticOSUpgradeProperties(msrest.serialization.Model):
211    """Describes automatic OS upgrade properties on the image.
212
213    All required parameters must be populated in order to send to Azure.
214
215    :param automatic_os_upgrade_supported: Required. Specifies whether automatic OS upgrade is
216     supported on the image.
217    :type automatic_os_upgrade_supported: bool
218    """
219
220    _validation = {
221        'automatic_os_upgrade_supported': {'required': True},
222    }
223
224    _attribute_map = {
225        'automatic_os_upgrade_supported': {'key': 'automaticOSUpgradeSupported', 'type': 'bool'},
226    }
227
228    def __init__(
229        self,
230        *,
231        automatic_os_upgrade_supported: bool,
232        **kwargs
233    ):
234        super(AutomaticOSUpgradeProperties, self).__init__(**kwargs)
235        self.automatic_os_upgrade_supported = automatic_os_upgrade_supported
236
237
238class AutomaticRepairsPolicy(msrest.serialization.Model):
239    """Specifies the configuration parameters for automatic repairs on the virtual machine scale set.
240
241    :param enabled: Specifies whether automatic repairs should be enabled on the virtual machine
242     scale set. The default value is false.
243    :type enabled: bool
244    :param grace_period: The amount of time for which automatic repairs are suspended due to a
245     state change on VM. The grace time starts after the state change has completed. This helps
246     avoid premature or accidental repairs. The time duration should be specified in ISO 8601
247     format. The minimum allowed grace period is 30 minutes (PT30M), which is also the default
248     value. The maximum allowed grace period is 90 minutes (PT90M).
249    :type grace_period: str
250    """
251
252    _attribute_map = {
253        'enabled': {'key': 'enabled', 'type': 'bool'},
254        'grace_period': {'key': 'gracePeriod', 'type': 'str'},
255    }
256
257    def __init__(
258        self,
259        *,
260        enabled: Optional[bool] = None,
261        grace_period: Optional[str] = None,
262        **kwargs
263    ):
264        super(AutomaticRepairsPolicy, self).__init__(**kwargs)
265        self.enabled = enabled
266        self.grace_period = grace_period
267
268
269class Resource(msrest.serialization.Model):
270    """The Resource model definition.
271
272    Variables are only populated by the server, and will be ignored when sending a request.
273
274    All required parameters must be populated in order to send to Azure.
275
276    :ivar id: Resource Id.
277    :vartype id: str
278    :ivar name: Resource name.
279    :vartype name: str
280    :ivar type: Resource type.
281    :vartype type: str
282    :param location: Required. Resource location.
283    :type location: str
284    :param tags: A set of tags. Resource tags.
285    :type tags: dict[str, str]
286    """
287
288    _validation = {
289        'id': {'readonly': True},
290        'name': {'readonly': True},
291        'type': {'readonly': True},
292        'location': {'required': True},
293    }
294
295    _attribute_map = {
296        'id': {'key': 'id', 'type': 'str'},
297        'name': {'key': 'name', 'type': 'str'},
298        'type': {'key': 'type', 'type': 'str'},
299        'location': {'key': 'location', 'type': 'str'},
300        'tags': {'key': 'tags', 'type': '{str}'},
301    }
302
303    def __init__(
304        self,
305        *,
306        location: str,
307        tags: Optional[Dict[str, str]] = None,
308        **kwargs
309    ):
310        super(Resource, self).__init__(**kwargs)
311        self.id = None
312        self.name = None
313        self.type = None
314        self.location = location
315        self.tags = tags
316
317
318class AvailabilitySet(Resource):
319    """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.
320
321    Variables are only populated by the server, and will be ignored when sending a request.
322
323    All required parameters must be populated in order to send to Azure.
324
325    :ivar id: Resource Id.
326    :vartype id: str
327    :ivar name: Resource name.
328    :vartype name: str
329    :ivar type: Resource type.
330    :vartype type: str
331    :param location: Required. Resource location.
332    :type location: str
333    :param tags: A set of tags. Resource tags.
334    :type tags: dict[str, str]
335    :param sku: Sku of the availability set, only name is required to be set. See
336     AvailabilitySetSkuTypes for possible set of values. Use 'Aligned' for virtual machines with
337     managed disks and 'Classic' for virtual machines with unmanaged disks. Default value is
338     'Classic'.
339    :type sku: ~azure.mgmt.compute.v2018_10_01.models.Sku
340    :param platform_update_domain_count: Update Domain count.
341    :type platform_update_domain_count: int
342    :param platform_fault_domain_count: Fault Domain count.
343    :type platform_fault_domain_count: int
344    :param virtual_machines: A list of references to all virtual machines in the availability set.
345    :type virtual_machines: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
346    :param proximity_placement_group: Specifies information about the proximity placement group
347     that the availability set should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
348     2018-04-01.
349    :type proximity_placement_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
350    :ivar statuses: The resource status information.
351    :vartype statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
352    """
353
354    _validation = {
355        'id': {'readonly': True},
356        'name': {'readonly': True},
357        'type': {'readonly': True},
358        'location': {'required': True},
359        'statuses': {'readonly': True},
360    }
361
362    _attribute_map = {
363        'id': {'key': 'id', 'type': 'str'},
364        'name': {'key': 'name', 'type': 'str'},
365        'type': {'key': 'type', 'type': 'str'},
366        'location': {'key': 'location', 'type': 'str'},
367        'tags': {'key': 'tags', 'type': '{str}'},
368        'sku': {'key': 'sku', 'type': 'Sku'},
369        'platform_update_domain_count': {'key': 'properties.platformUpdateDomainCount', 'type': 'int'},
370        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
371        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
372        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
373        'statuses': {'key': 'properties.statuses', 'type': '[InstanceViewStatus]'},
374    }
375
376    def __init__(
377        self,
378        *,
379        location: str,
380        tags: Optional[Dict[str, str]] = None,
381        sku: Optional["Sku"] = None,
382        platform_update_domain_count: Optional[int] = None,
383        platform_fault_domain_count: Optional[int] = None,
384        virtual_machines: Optional[List["SubResource"]] = None,
385        proximity_placement_group: Optional["SubResource"] = None,
386        **kwargs
387    ):
388        super(AvailabilitySet, self).__init__(location=location, tags=tags, **kwargs)
389        self.sku = sku
390        self.platform_update_domain_count = platform_update_domain_count
391        self.platform_fault_domain_count = platform_fault_domain_count
392        self.virtual_machines = virtual_machines
393        self.proximity_placement_group = proximity_placement_group
394        self.statuses = None
395
396
397class AvailabilitySetListResult(msrest.serialization.Model):
398    """The List Availability Set operation response.
399
400    All required parameters must be populated in order to send to Azure.
401
402    :param value: Required. The list of availability sets.
403    :type value: list[~azure.mgmt.compute.v2018_10_01.models.AvailabilitySet]
404    :param next_link: The URI to fetch the next page of AvailabilitySets. Call ListNext() with this
405     URI to fetch the next page of AvailabilitySets.
406    :type next_link: str
407    """
408
409    _validation = {
410        'value': {'required': True},
411    }
412
413    _attribute_map = {
414        'value': {'key': 'value', 'type': '[AvailabilitySet]'},
415        'next_link': {'key': 'nextLink', 'type': 'str'},
416    }
417
418    def __init__(
419        self,
420        *,
421        value: List["AvailabilitySet"],
422        next_link: Optional[str] = None,
423        **kwargs
424    ):
425        super(AvailabilitySetListResult, self).__init__(**kwargs)
426        self.value = value
427        self.next_link = next_link
428
429
430class UpdateResource(msrest.serialization.Model):
431    """The Update Resource model definition.
432
433    :param tags: A set of tags. Resource tags.
434    :type tags: dict[str, str]
435    """
436
437    _attribute_map = {
438        'tags': {'key': 'tags', 'type': '{str}'},
439    }
440
441    def __init__(
442        self,
443        *,
444        tags: Optional[Dict[str, str]] = None,
445        **kwargs
446    ):
447        super(UpdateResource, self).__init__(**kwargs)
448        self.tags = tags
449
450
451class AvailabilitySetUpdate(UpdateResource):
452    """Specifies information about the availability set that the virtual machine should be assigned to. Only tags may be updated.
453
454    Variables are only populated by the server, and will be ignored when sending a request.
455
456    :param tags: A set of tags. Resource tags.
457    :type tags: dict[str, str]
458    :param sku: Sku of the availability set.
459    :type sku: ~azure.mgmt.compute.v2018_10_01.models.Sku
460    :param platform_update_domain_count: Update Domain count.
461    :type platform_update_domain_count: int
462    :param platform_fault_domain_count: Fault Domain count.
463    :type platform_fault_domain_count: int
464    :param virtual_machines: A list of references to all virtual machines in the availability set.
465    :type virtual_machines: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
466    :param proximity_placement_group: Specifies information about the proximity placement group
467     that the availability set should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
468     2018-04-01.
469    :type proximity_placement_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
470    :ivar statuses: The resource status information.
471    :vartype statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
472    """
473
474    _validation = {
475        'statuses': {'readonly': True},
476    }
477
478    _attribute_map = {
479        'tags': {'key': 'tags', 'type': '{str}'},
480        'sku': {'key': 'sku', 'type': 'Sku'},
481        'platform_update_domain_count': {'key': 'properties.platformUpdateDomainCount', 'type': 'int'},
482        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
483        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
484        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
485        'statuses': {'key': 'properties.statuses', 'type': '[InstanceViewStatus]'},
486    }
487
488    def __init__(
489        self,
490        *,
491        tags: Optional[Dict[str, str]] = None,
492        sku: Optional["Sku"] = None,
493        platform_update_domain_count: Optional[int] = None,
494        platform_fault_domain_count: Optional[int] = None,
495        virtual_machines: Optional[List["SubResource"]] = None,
496        proximity_placement_group: Optional["SubResource"] = None,
497        **kwargs
498    ):
499        super(AvailabilitySetUpdate, self).__init__(tags=tags, **kwargs)
500        self.sku = sku
501        self.platform_update_domain_count = platform_update_domain_count
502        self.platform_fault_domain_count = platform_fault_domain_count
503        self.virtual_machines = virtual_machines
504        self.proximity_placement_group = proximity_placement_group
505        self.statuses = None
506
507
508class BootDiagnostics(msrest.serialization.Model):
509    """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.
510
511    :param enabled: Whether boot diagnostics should be enabled on the Virtual Machine.
512    :type enabled: bool
513    :param storage_uri: Uri of the storage account to use for placing the console output and
514     screenshot.
515    :type storage_uri: str
516    """
517
518    _attribute_map = {
519        'enabled': {'key': 'enabled', 'type': 'bool'},
520        'storage_uri': {'key': 'storageUri', 'type': 'str'},
521    }
522
523    def __init__(
524        self,
525        *,
526        enabled: Optional[bool] = None,
527        storage_uri: Optional[str] = None,
528        **kwargs
529    ):
530        super(BootDiagnostics, self).__init__(**kwargs)
531        self.enabled = enabled
532        self.storage_uri = storage_uri
533
534
535class BootDiagnosticsInstanceView(msrest.serialization.Model):
536    """The instance view of a virtual machine boot diagnostics.
537
538    Variables are only populated by the server, and will be ignored when sending a request.
539
540    :ivar console_screenshot_blob_uri: The console screenshot blob URI.
541    :vartype console_screenshot_blob_uri: str
542    :ivar serial_console_log_blob_uri: The Linux serial console log blob Uri.
543    :vartype serial_console_log_blob_uri: str
544    :ivar status: The boot diagnostics status information for the VM. :code:`<br>`:code:`<br>`
545     NOTE: It will be set only if there are errors encountered in enabling boot diagnostics.
546    :vartype status: ~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus
547    """
548
549    _validation = {
550        'console_screenshot_blob_uri': {'readonly': True},
551        'serial_console_log_blob_uri': {'readonly': True},
552        'status': {'readonly': True},
553    }
554
555    _attribute_map = {
556        'console_screenshot_blob_uri': {'key': 'consoleScreenshotBlobUri', 'type': 'str'},
557        'serial_console_log_blob_uri': {'key': 'serialConsoleLogBlobUri', 'type': 'str'},
558        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
559    }
560
561    def __init__(
562        self,
563        **kwargs
564    ):
565        super(BootDiagnosticsInstanceView, self).__init__(**kwargs)
566        self.console_screenshot_blob_uri = None
567        self.serial_console_log_blob_uri = None
568        self.status = None
569
570
571class ComputeOperationListResult(msrest.serialization.Model):
572    """The List Compute Operation operation response.
573
574    Variables are only populated by the server, and will be ignored when sending a request.
575
576    :ivar value: The list of compute operations.
577    :vartype value: list[~azure.mgmt.compute.v2018_10_01.models.ComputeOperationValue]
578    """
579
580    _validation = {
581        'value': {'readonly': True},
582    }
583
584    _attribute_map = {
585        'value': {'key': 'value', 'type': '[ComputeOperationValue]'},
586    }
587
588    def __init__(
589        self,
590        **kwargs
591    ):
592        super(ComputeOperationListResult, self).__init__(**kwargs)
593        self.value = None
594
595
596class ComputeOperationValue(msrest.serialization.Model):
597    """Describes the properties of a Compute Operation value.
598
599    Variables are only populated by the server, and will be ignored when sending a request.
600
601    :ivar origin: The origin of the compute operation.
602    :vartype origin: str
603    :ivar name: The name of the compute operation.
604    :vartype name: str
605    :ivar operation: The display name of the compute operation.
606    :vartype operation: str
607    :ivar resource: The display name of the resource the operation applies to.
608    :vartype resource: str
609    :ivar description: The description of the operation.
610    :vartype description: str
611    :ivar provider: The resource provider for the operation.
612    :vartype provider: str
613    """
614
615    _validation = {
616        'origin': {'readonly': True},
617        'name': {'readonly': True},
618        'operation': {'readonly': True},
619        'resource': {'readonly': True},
620        'description': {'readonly': True},
621        'provider': {'readonly': True},
622    }
623
624    _attribute_map = {
625        'origin': {'key': 'origin', 'type': 'str'},
626        'name': {'key': 'name', 'type': 'str'},
627        'operation': {'key': 'display.operation', 'type': 'str'},
628        'resource': {'key': 'display.resource', 'type': 'str'},
629        'description': {'key': 'display.description', 'type': 'str'},
630        'provider': {'key': 'display.provider', 'type': 'str'},
631    }
632
633    def __init__(
634        self,
635        **kwargs
636    ):
637        super(ComputeOperationValue, self).__init__(**kwargs)
638        self.origin = None
639        self.name = None
640        self.operation = None
641        self.resource = None
642        self.description = None
643        self.provider = None
644
645
646class DataDisk(msrest.serialization.Model):
647    """Describes a data disk.
648
649    All required parameters must be populated in order to send to Azure.
650
651    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
652     identify data disks within the VM and therefore must be unique for each data disk attached to a
653     VM.
654    :type lun: int
655    :param name: The disk name.
656    :type name: str
657    :param vhd: The virtual hard disk.
658    :type vhd: ~azure.mgmt.compute.v2018_10_01.models.VirtualHardDisk
659    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
660     before being attached to the virtual machine. If SourceImage is provided, the destination
661     virtual hard drive must not exist.
662    :type image: ~azure.mgmt.compute.v2018_10_01.models.VirtualHardDisk
663    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
664     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
665     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
666     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
667     "ReadWrite".
668    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
669    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
670     disabled on the disk.
671    :type write_accelerator_enabled: bool
672    :param create_option: Required. Specifies how the virtual machine should be
673     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
674     This value is used when you are using a specialized disk to create the virtual
675     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
676     image to create the virtual machine. If you are using a platform image, you also use the
677     imageReference element described above. If you are using a marketplace image, you  also use the
678     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
679    :type create_option: str or ~azure.mgmt.compute.v2018_10_01.models.DiskCreateOptionTypes
680    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
681     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
682     This value cannot be larger than 1023 GB.
683    :type disk_size_gb: int
684    :param managed_disk: The managed disk parameters.
685    :type managed_disk: ~azure.mgmt.compute.v2018_10_01.models.ManagedDiskParameters
686    """
687
688    _validation = {
689        'lun': {'required': True},
690        'create_option': {'required': True},
691    }
692
693    _attribute_map = {
694        'lun': {'key': 'lun', 'type': 'int'},
695        'name': {'key': 'name', 'type': 'str'},
696        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
697        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
698        'caching': {'key': 'caching', 'type': 'str'},
699        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
700        'create_option': {'key': 'createOption', 'type': 'str'},
701        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
702        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
703    }
704
705    def __init__(
706        self,
707        *,
708        lun: int,
709        create_option: Union[str, "DiskCreateOptionTypes"],
710        name: Optional[str] = None,
711        vhd: Optional["VirtualHardDisk"] = None,
712        image: Optional["VirtualHardDisk"] = None,
713        caching: Optional[Union[str, "CachingTypes"]] = None,
714        write_accelerator_enabled: Optional[bool] = None,
715        disk_size_gb: Optional[int] = None,
716        managed_disk: Optional["ManagedDiskParameters"] = None,
717        **kwargs
718    ):
719        super(DataDisk, self).__init__(**kwargs)
720        self.lun = lun
721        self.name = name
722        self.vhd = vhd
723        self.image = image
724        self.caching = caching
725        self.write_accelerator_enabled = write_accelerator_enabled
726        self.create_option = create_option
727        self.disk_size_gb = disk_size_gb
728        self.managed_disk = managed_disk
729
730
731class DataDiskImage(msrest.serialization.Model):
732    """Contains the data disk images information.
733
734    Variables are only populated by the server, and will be ignored when sending a request.
735
736    :ivar lun: Specifies the logical unit number of the data disk. This value is used to identify
737     data disks within the VM and therefore must be unique for each data disk attached to a VM.
738    :vartype lun: int
739    """
740
741    _validation = {
742        'lun': {'readonly': True},
743    }
744
745    _attribute_map = {
746        'lun': {'key': 'lun', 'type': 'int'},
747    }
748
749    def __init__(
750        self,
751        **kwargs
752    ):
753        super(DataDiskImage, self).__init__(**kwargs)
754        self.lun = None
755
756
757class DiagnosticsProfile(msrest.serialization.Model):
758    """Specifies the boot diagnostic settings state. :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
759
760    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
761     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
762     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
763     screenshot of the VM from the hypervisor.
764    :type boot_diagnostics: ~azure.mgmt.compute.v2018_10_01.models.BootDiagnostics
765    """
766
767    _attribute_map = {
768        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnostics'},
769    }
770
771    def __init__(
772        self,
773        *,
774        boot_diagnostics: Optional["BootDiagnostics"] = None,
775        **kwargs
776    ):
777        super(DiagnosticsProfile, self).__init__(**kwargs)
778        self.boot_diagnostics = boot_diagnostics
779
780
781class DiffDiskSettings(msrest.serialization.Model):
782    """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.
783
784    :param option: Specifies the ephemeral disk settings for operating system disk. Possible values
785     include: "Local".
786    :type option: str or ~azure.mgmt.compute.v2018_10_01.models.DiffDiskOptions
787    """
788
789    _attribute_map = {
790        'option': {'key': 'option', 'type': 'str'},
791    }
792
793    def __init__(
794        self,
795        *,
796        option: Optional[Union[str, "DiffDiskOptions"]] = None,
797        **kwargs
798    ):
799        super(DiffDiskSettings, self).__init__(**kwargs)
800        self.option = option
801
802
803class DiskEncryptionSettings(msrest.serialization.Model):
804    """Describes a Encryption Settings for a Disk.
805
806    :param disk_encryption_key: Specifies the location of the disk encryption key, which is a Key
807     Vault Secret.
808    :type disk_encryption_key: ~azure.mgmt.compute.v2018_10_01.models.KeyVaultSecretReference
809    :param key_encryption_key: Specifies the location of the key encryption key in Key Vault.
810    :type key_encryption_key: ~azure.mgmt.compute.v2018_10_01.models.KeyVaultKeyReference
811    :param enabled: Specifies whether disk encryption should be enabled on the virtual machine.
812    :type enabled: bool
813    """
814
815    _attribute_map = {
816        'disk_encryption_key': {'key': 'diskEncryptionKey', 'type': 'KeyVaultSecretReference'},
817        'key_encryption_key': {'key': 'keyEncryptionKey', 'type': 'KeyVaultKeyReference'},
818        'enabled': {'key': 'enabled', 'type': 'bool'},
819    }
820
821    def __init__(
822        self,
823        *,
824        disk_encryption_key: Optional["KeyVaultSecretReference"] = None,
825        key_encryption_key: Optional["KeyVaultKeyReference"] = None,
826        enabled: Optional[bool] = None,
827        **kwargs
828    ):
829        super(DiskEncryptionSettings, self).__init__(**kwargs)
830        self.disk_encryption_key = disk_encryption_key
831        self.key_encryption_key = key_encryption_key
832        self.enabled = enabled
833
834
835class DiskInstanceView(msrest.serialization.Model):
836    """The instance view of the disk.
837
838    :param name: The disk name.
839    :type name: str
840    :param encryption_settings: Specifies the encryption settings for the OS Disk.
841     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
842    :type encryption_settings: list[~azure.mgmt.compute.v2018_10_01.models.DiskEncryptionSettings]
843    :param statuses: The resource status information.
844    :type statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
845    """
846
847    _attribute_map = {
848        'name': {'key': 'name', 'type': 'str'},
849        'encryption_settings': {'key': 'encryptionSettings', 'type': '[DiskEncryptionSettings]'},
850        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
851    }
852
853    def __init__(
854        self,
855        *,
856        name: Optional[str] = None,
857        encryption_settings: Optional[List["DiskEncryptionSettings"]] = None,
858        statuses: Optional[List["InstanceViewStatus"]] = None,
859        **kwargs
860    ):
861        super(DiskInstanceView, self).__init__(**kwargs)
862        self.name = name
863        self.encryption_settings = encryption_settings
864        self.statuses = statuses
865
866
867class HardwareProfile(msrest.serialization.Model):
868    """Specifies the hardware settings for the virtual machine.
869
870    :param vm_size: Specifies the size of the virtual machine. For more information about virtual
871     machine sizes, see `Sizes for virtual machines
872     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
873     :code:`<br>`:code:`<br>` The available VM sizes depend on region and availability set. For a
874     list of available sizes use these APIs:  :code:`<br>`:code:`<br>` `List all available virtual
875     machine sizes in an availability set
876     <https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes>`_
877     :code:`<br>`:code:`<br>` `List all available virtual machine sizes in a region
878     <https://docs.microsoft.com/rest/api/compute/virtualmachinesizes/list>`_
879     :code:`<br>`:code:`<br>` `List all available virtual machine sizes for resizing
880     <https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes>`_. Possible
881     values include: "Basic_A0", "Basic_A1", "Basic_A2", "Basic_A3", "Basic_A4", "Standard_A0",
882     "Standard_A1", "Standard_A2", "Standard_A3", "Standard_A4", "Standard_A5", "Standard_A6",
883     "Standard_A7", "Standard_A8", "Standard_A9", "Standard_A10", "Standard_A11", "Standard_A1_v2",
884     "Standard_A2_v2", "Standard_A4_v2", "Standard_A8_v2", "Standard_A2m_v2", "Standard_A4m_v2",
885     "Standard_A8m_v2", "Standard_B1s", "Standard_B1ms", "Standard_B2s", "Standard_B2ms",
886     "Standard_B4ms", "Standard_B8ms", "Standard_D1", "Standard_D2", "Standard_D3", "Standard_D4",
887     "Standard_D11", "Standard_D12", "Standard_D13", "Standard_D14", "Standard_D1_v2",
888     "Standard_D2_v2", "Standard_D3_v2", "Standard_D4_v2", "Standard_D5_v2", "Standard_D2_v3",
889     "Standard_D4_v3", "Standard_D8_v3", "Standard_D16_v3", "Standard_D32_v3", "Standard_D64_v3",
890     "Standard_D2s_v3", "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3",
891     "Standard_D32s_v3", "Standard_D64s_v3", "Standard_D11_v2", "Standard_D12_v2",
892     "Standard_D13_v2", "Standard_D14_v2", "Standard_D15_v2", "Standard_DS1", "Standard_DS2",
893     "Standard_DS3", "Standard_DS4", "Standard_DS11", "Standard_DS12", "Standard_DS13",
894     "Standard_DS14", "Standard_DS1_v2", "Standard_DS2_v2", "Standard_DS3_v2", "Standard_DS4_v2",
895     "Standard_DS5_v2", "Standard_DS11_v2", "Standard_DS12_v2", "Standard_DS13_v2",
896     "Standard_DS14_v2", "Standard_DS15_v2", "Standard_DS13-4_v2", "Standard_DS13-2_v2",
897     "Standard_DS14-8_v2", "Standard_DS14-4_v2", "Standard_E2_v3", "Standard_E4_v3",
898     "Standard_E8_v3", "Standard_E16_v3", "Standard_E32_v3", "Standard_E64_v3", "Standard_E2s_v3",
899     "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E32s_v3",
900     "Standard_E64s_v3", "Standard_E32-16_v3", "Standard_E32-8s_v3", "Standard_E64-32s_v3",
901     "Standard_E64-16s_v3", "Standard_F1", "Standard_F2", "Standard_F4", "Standard_F8",
902     "Standard_F16", "Standard_F1s", "Standard_F2s", "Standard_F4s", "Standard_F8s",
903     "Standard_F16s", "Standard_F2s_v2", "Standard_F4s_v2", "Standard_F8s_v2", "Standard_F16s_v2",
904     "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_G1", "Standard_G2",
905     "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", "Standard_GS3",
906     "Standard_GS4", "Standard_GS5", "Standard_GS4-8", "Standard_GS4-4", "Standard_GS5-16",
907     "Standard_GS5-8", "Standard_H8", "Standard_H16", "Standard_H8m", "Standard_H16m",
908     "Standard_H16r", "Standard_H16mr", "Standard_L4s", "Standard_L8s", "Standard_L16s",
909     "Standard_L32s", "Standard_M64s", "Standard_M64ms", "Standard_M128s", "Standard_M128ms",
910     "Standard_M64-32ms", "Standard_M64-16ms", "Standard_M128-64ms", "Standard_M128-32ms",
911     "Standard_NC6", "Standard_NC12", "Standard_NC24", "Standard_NC24r", "Standard_NC6s_v2",
912     "Standard_NC12s_v2", "Standard_NC24s_v2", "Standard_NC24rs_v2", "Standard_NC6s_v3",
913     "Standard_NC12s_v3", "Standard_NC24s_v3", "Standard_NC24rs_v3", "Standard_ND6s",
914     "Standard_ND12s", "Standard_ND24s", "Standard_ND24rs", "Standard_NV6", "Standard_NV12",
915     "Standard_NV24".
916    :type vm_size: str or ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineSizeTypes
917    """
918
919    _attribute_map = {
920        'vm_size': {'key': 'vmSize', 'type': 'str'},
921    }
922
923    def __init__(
924        self,
925        *,
926        vm_size: Optional[Union[str, "VirtualMachineSizeTypes"]] = None,
927        **kwargs
928    ):
929        super(HardwareProfile, self).__init__(**kwargs)
930        self.vm_size = vm_size
931
932
933class Image(Resource):
934    """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.
935
936    Variables are only populated by the server, and will be ignored when sending a request.
937
938    All required parameters must be populated in order to send to Azure.
939
940    :ivar id: Resource Id.
941    :vartype id: str
942    :ivar name: Resource name.
943    :vartype name: str
944    :ivar type: Resource type.
945    :vartype type: str
946    :param location: Required. Resource location.
947    :type location: str
948    :param tags: A set of tags. Resource tags.
949    :type tags: dict[str, str]
950    :param source_virtual_machine: The source virtual machine from which Image is created.
951    :type source_virtual_machine: ~azure.mgmt.compute.v2018_10_01.models.SubResource
952    :param storage_profile: Specifies the storage settings for the virtual machine disks.
953    :type storage_profile: ~azure.mgmt.compute.v2018_10_01.models.ImageStorageProfile
954    :ivar provisioning_state: The provisioning state.
955    :vartype provisioning_state: str
956    """
957
958    _validation = {
959        'id': {'readonly': True},
960        'name': {'readonly': True},
961        'type': {'readonly': True},
962        'location': {'required': True},
963        'provisioning_state': {'readonly': True},
964    }
965
966    _attribute_map = {
967        'id': {'key': 'id', 'type': 'str'},
968        'name': {'key': 'name', 'type': 'str'},
969        'type': {'key': 'type', 'type': 'str'},
970        'location': {'key': 'location', 'type': 'str'},
971        'tags': {'key': 'tags', 'type': '{str}'},
972        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
973        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
974        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
975    }
976
977    def __init__(
978        self,
979        *,
980        location: str,
981        tags: Optional[Dict[str, str]] = None,
982        source_virtual_machine: Optional["SubResource"] = None,
983        storage_profile: Optional["ImageStorageProfile"] = None,
984        **kwargs
985    ):
986        super(Image, self).__init__(location=location, tags=tags, **kwargs)
987        self.source_virtual_machine = source_virtual_machine
988        self.storage_profile = storage_profile
989        self.provisioning_state = None
990
991
992class ImageDataDisk(msrest.serialization.Model):
993    """Describes a data disk.
994
995    All required parameters must be populated in order to send to Azure.
996
997    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
998     identify data disks within the VM and therefore must be unique for each data disk attached to a
999     VM.
1000    :type lun: int
1001    :param snapshot: The snapshot.
1002    :type snapshot: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1003    :param managed_disk: The managedDisk.
1004    :type managed_disk: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1005    :param blob_uri: The Virtual Hard Disk.
1006    :type blob_uri: str
1007    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
1008     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
1009     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
1010     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
1011     "ReadWrite".
1012    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
1013    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
1014     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
1015     This value cannot be larger than 1023 GB.
1016    :type disk_size_gb: int
1017    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
1018     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
1019     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
1020    :type storage_account_type: str or ~azure.mgmt.compute.v2018_10_01.models.StorageAccountTypes
1021    """
1022
1023    _validation = {
1024        'lun': {'required': True},
1025    }
1026
1027    _attribute_map = {
1028        'lun': {'key': 'lun', 'type': 'int'},
1029        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
1030        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
1031        'blob_uri': {'key': 'blobUri', 'type': 'str'},
1032        'caching': {'key': 'caching', 'type': 'str'},
1033        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
1034        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
1035    }
1036
1037    def __init__(
1038        self,
1039        *,
1040        lun: int,
1041        snapshot: Optional["SubResource"] = None,
1042        managed_disk: Optional["SubResource"] = None,
1043        blob_uri: Optional[str] = None,
1044        caching: Optional[Union[str, "CachingTypes"]] = None,
1045        disk_size_gb: Optional[int] = None,
1046        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
1047        **kwargs
1048    ):
1049        super(ImageDataDisk, self).__init__(**kwargs)
1050        self.lun = lun
1051        self.snapshot = snapshot
1052        self.managed_disk = managed_disk
1053        self.blob_uri = blob_uri
1054        self.caching = caching
1055        self.disk_size_gb = disk_size_gb
1056        self.storage_account_type = storage_account_type
1057
1058
1059class ImageListResult(msrest.serialization.Model):
1060    """The List Image operation response.
1061
1062    All required parameters must be populated in order to send to Azure.
1063
1064    :param value: Required. The list of Images.
1065    :type value: list[~azure.mgmt.compute.v2018_10_01.models.Image]
1066    :param next_link: The uri to fetch the next page of Images. Call ListNext() with this to fetch
1067     the next page of Images.
1068    :type next_link: str
1069    """
1070
1071    _validation = {
1072        'value': {'required': True},
1073    }
1074
1075    _attribute_map = {
1076        'value': {'key': 'value', 'type': '[Image]'},
1077        'next_link': {'key': 'nextLink', 'type': 'str'},
1078    }
1079
1080    def __init__(
1081        self,
1082        *,
1083        value: List["Image"],
1084        next_link: Optional[str] = None,
1085        **kwargs
1086    ):
1087        super(ImageListResult, self).__init__(**kwargs)
1088        self.value = value
1089        self.next_link = next_link
1090
1091
1092class ImageOSDisk(msrest.serialization.Model):
1093    """Describes an Operating System disk.
1094
1095    All required parameters must be populated in order to send to Azure.
1096
1097    :param os_type: Required. This property allows you to specify the type of the OS that is
1098     included in the disk if creating a VM from a custom image. :code:`<br>`:code:`<br>` Possible
1099     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
1100     values include: "Windows", "Linux".
1101    :type os_type: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemTypes
1102    :param os_state: Required. The OS State. Possible values include: "Generalized", "Specialized".
1103    :type os_state: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemStateTypes
1104    :param snapshot: The snapshot.
1105    :type snapshot: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1106    :param managed_disk: The managedDisk.
1107    :type managed_disk: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1108    :param blob_uri: The Virtual Hard Disk.
1109    :type blob_uri: str
1110    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
1111     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
1112     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
1113     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
1114     "ReadWrite".
1115    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
1116    :param disk_size_gb: Specifies the size of empty data disks in gigabytes. This element can be
1117     used to overwrite the name of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
1118     This value cannot be larger than 1023 GB.
1119    :type disk_size_gb: int
1120    :param storage_account_type: Specifies the storage account type for the managed disk.
1121     UltraSSD_LRS cannot be used with OS Disk. Possible values include: "Standard_LRS",
1122     "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
1123    :type storage_account_type: str or ~azure.mgmt.compute.v2018_10_01.models.StorageAccountTypes
1124    """
1125
1126    _validation = {
1127        'os_type': {'required': True},
1128        'os_state': {'required': True},
1129    }
1130
1131    _attribute_map = {
1132        'os_type': {'key': 'osType', 'type': 'str'},
1133        'os_state': {'key': 'osState', 'type': 'str'},
1134        'snapshot': {'key': 'snapshot', 'type': 'SubResource'},
1135        'managed_disk': {'key': 'managedDisk', 'type': 'SubResource'},
1136        'blob_uri': {'key': 'blobUri', 'type': 'str'},
1137        'caching': {'key': 'caching', 'type': 'str'},
1138        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
1139        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
1140    }
1141
1142    def __init__(
1143        self,
1144        *,
1145        os_type: Union[str, "OperatingSystemTypes"],
1146        os_state: Union[str, "OperatingSystemStateTypes"],
1147        snapshot: Optional["SubResource"] = None,
1148        managed_disk: Optional["SubResource"] = None,
1149        blob_uri: Optional[str] = None,
1150        caching: Optional[Union[str, "CachingTypes"]] = None,
1151        disk_size_gb: Optional[int] = None,
1152        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
1153        **kwargs
1154    ):
1155        super(ImageOSDisk, self).__init__(**kwargs)
1156        self.os_type = os_type
1157        self.os_state = os_state
1158        self.snapshot = snapshot
1159        self.managed_disk = managed_disk
1160        self.blob_uri = blob_uri
1161        self.caching = caching
1162        self.disk_size_gb = disk_size_gb
1163        self.storage_account_type = storage_account_type
1164
1165
1166class SubResource(msrest.serialization.Model):
1167    """SubResource.
1168
1169    :param id: Resource Id.
1170    :type id: str
1171    """
1172
1173    _attribute_map = {
1174        'id': {'key': 'id', 'type': 'str'},
1175    }
1176
1177    def __init__(
1178        self,
1179        *,
1180        id: Optional[str] = None,
1181        **kwargs
1182    ):
1183        super(SubResource, self).__init__(**kwargs)
1184        self.id = id
1185
1186
1187class ImageReference(SubResource):
1188    """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.
1189
1190    :param id: Resource Id.
1191    :type id: str
1192    :param publisher: The image publisher.
1193    :type publisher: str
1194    :param offer: Specifies the offer of the platform image or marketplace image used to create the
1195     virtual machine.
1196    :type offer: str
1197    :param sku: The image SKU.
1198    :type sku: str
1199    :param version: Specifies the version of the platform image or marketplace image used to create
1200     the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and
1201     Build are decimal numbers. Specify 'latest' to use the latest version of an image available at
1202     deploy time. Even if you use 'latest', the VM image will not automatically update after deploy
1203     time even if a new version becomes available.
1204    :type version: str
1205    """
1206
1207    _attribute_map = {
1208        'id': {'key': 'id', 'type': 'str'},
1209        'publisher': {'key': 'publisher', 'type': 'str'},
1210        'offer': {'key': 'offer', 'type': 'str'},
1211        'sku': {'key': 'sku', 'type': 'str'},
1212        'version': {'key': 'version', 'type': 'str'},
1213    }
1214
1215    def __init__(
1216        self,
1217        *,
1218        id: Optional[str] = None,
1219        publisher: Optional[str] = None,
1220        offer: Optional[str] = None,
1221        sku: Optional[str] = None,
1222        version: Optional[str] = None,
1223        **kwargs
1224    ):
1225        super(ImageReference, self).__init__(id=id, **kwargs)
1226        self.publisher = publisher
1227        self.offer = offer
1228        self.sku = sku
1229        self.version = version
1230
1231
1232class ImageStorageProfile(msrest.serialization.Model):
1233    """Describes a storage profile.
1234
1235    :param os_disk: Specifies information about the operating system disk used by the virtual
1236     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
1237     for Azure virtual machines
1238     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
1239    :type os_disk: ~azure.mgmt.compute.v2018_10_01.models.ImageOSDisk
1240    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
1241     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
1242     for Azure virtual machines
1243     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
1244    :type data_disks: list[~azure.mgmt.compute.v2018_10_01.models.ImageDataDisk]
1245    :param zone_resilient: Specifies whether an image is zone resilient or not. Default is false.
1246     Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS).
1247    :type zone_resilient: bool
1248    """
1249
1250    _attribute_map = {
1251        'os_disk': {'key': 'osDisk', 'type': 'ImageOSDisk'},
1252        'data_disks': {'key': 'dataDisks', 'type': '[ImageDataDisk]'},
1253        'zone_resilient': {'key': 'zoneResilient', 'type': 'bool'},
1254    }
1255
1256    def __init__(
1257        self,
1258        *,
1259        os_disk: Optional["ImageOSDisk"] = None,
1260        data_disks: Optional[List["ImageDataDisk"]] = None,
1261        zone_resilient: Optional[bool] = None,
1262        **kwargs
1263    ):
1264        super(ImageStorageProfile, self).__init__(**kwargs)
1265        self.os_disk = os_disk
1266        self.data_disks = data_disks
1267        self.zone_resilient = zone_resilient
1268
1269
1270class ImageUpdate(UpdateResource):
1271    """The source user image virtual hard disk. Only tags may be updated.
1272
1273    Variables are only populated by the server, and will be ignored when sending a request.
1274
1275    :param tags: A set of tags. Resource tags.
1276    :type tags: dict[str, str]
1277    :param source_virtual_machine: The source virtual machine from which Image is created.
1278    :type source_virtual_machine: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1279    :param storage_profile: Specifies the storage settings for the virtual machine disks.
1280    :type storage_profile: ~azure.mgmt.compute.v2018_10_01.models.ImageStorageProfile
1281    :ivar provisioning_state: The provisioning state.
1282    :vartype provisioning_state: str
1283    """
1284
1285    _validation = {
1286        'provisioning_state': {'readonly': True},
1287    }
1288
1289    _attribute_map = {
1290        'tags': {'key': 'tags', 'type': '{str}'},
1291        'source_virtual_machine': {'key': 'properties.sourceVirtualMachine', 'type': 'SubResource'},
1292        'storage_profile': {'key': 'properties.storageProfile', 'type': 'ImageStorageProfile'},
1293        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1294    }
1295
1296    def __init__(
1297        self,
1298        *,
1299        tags: Optional[Dict[str, str]] = None,
1300        source_virtual_machine: Optional["SubResource"] = None,
1301        storage_profile: Optional["ImageStorageProfile"] = None,
1302        **kwargs
1303    ):
1304        super(ImageUpdate, self).__init__(tags=tags, **kwargs)
1305        self.source_virtual_machine = source_virtual_machine
1306        self.storage_profile = storage_profile
1307        self.provisioning_state = None
1308
1309
1310class InnerError(msrest.serialization.Model):
1311    """Inner error details.
1312
1313    :param exceptiontype: The exception type.
1314    :type exceptiontype: str
1315    :param errordetail: The internal error message or exception dump.
1316    :type errordetail: str
1317    """
1318
1319    _attribute_map = {
1320        'exceptiontype': {'key': 'exceptiontype', 'type': 'str'},
1321        'errordetail': {'key': 'errordetail', 'type': 'str'},
1322    }
1323
1324    def __init__(
1325        self,
1326        *,
1327        exceptiontype: Optional[str] = None,
1328        errordetail: Optional[str] = None,
1329        **kwargs
1330    ):
1331        super(InnerError, self).__init__(**kwargs)
1332        self.exceptiontype = exceptiontype
1333        self.errordetail = errordetail
1334
1335
1336class InstanceViewStatus(msrest.serialization.Model):
1337    """Instance view status.
1338
1339    :param code: The status code.
1340    :type code: str
1341    :param level: The level code. Possible values include: "Info", "Warning", "Error".
1342    :type level: str or ~azure.mgmt.compute.v2018_10_01.models.StatusLevelTypes
1343    :param display_status: The short localizable label for the status.
1344    :type display_status: str
1345    :param message: The detailed status message, including for alerts and error messages.
1346    :type message: str
1347    :param time: The time of the status.
1348    :type time: ~datetime.datetime
1349    """
1350
1351    _attribute_map = {
1352        'code': {'key': 'code', 'type': 'str'},
1353        'level': {'key': 'level', 'type': 'str'},
1354        'display_status': {'key': 'displayStatus', 'type': 'str'},
1355        'message': {'key': 'message', 'type': 'str'},
1356        'time': {'key': 'time', 'type': 'iso-8601'},
1357    }
1358
1359    def __init__(
1360        self,
1361        *,
1362        code: Optional[str] = None,
1363        level: Optional[Union[str, "StatusLevelTypes"]] = None,
1364        display_status: Optional[str] = None,
1365        message: Optional[str] = None,
1366        time: Optional[datetime.datetime] = None,
1367        **kwargs
1368    ):
1369        super(InstanceViewStatus, self).__init__(**kwargs)
1370        self.code = code
1371        self.level = level
1372        self.display_status = display_status
1373        self.message = message
1374        self.time = time
1375
1376
1377class KeyVaultKeyReference(msrest.serialization.Model):
1378    """Describes a reference to Key Vault Key.
1379
1380    All required parameters must be populated in order to send to Azure.
1381
1382    :param key_url: Required. The URL referencing a key encryption key in Key Vault.
1383    :type key_url: str
1384    :param source_vault: Required. The relative URL of the Key Vault containing the key.
1385    :type source_vault: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1386    """
1387
1388    _validation = {
1389        'key_url': {'required': True},
1390        'source_vault': {'required': True},
1391    }
1392
1393    _attribute_map = {
1394        'key_url': {'key': 'keyUrl', 'type': 'str'},
1395        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
1396    }
1397
1398    def __init__(
1399        self,
1400        *,
1401        key_url: str,
1402        source_vault: "SubResource",
1403        **kwargs
1404    ):
1405        super(KeyVaultKeyReference, self).__init__(**kwargs)
1406        self.key_url = key_url
1407        self.source_vault = source_vault
1408
1409
1410class KeyVaultSecretReference(msrest.serialization.Model):
1411    """Describes a reference to Key Vault Secret.
1412
1413    All required parameters must be populated in order to send to Azure.
1414
1415    :param secret_url: Required. The URL referencing a secret in a Key Vault.
1416    :type secret_url: str
1417    :param source_vault: Required. The relative URL of the Key Vault containing the secret.
1418    :type source_vault: ~azure.mgmt.compute.v2018_10_01.models.SubResource
1419    """
1420
1421    _validation = {
1422        'secret_url': {'required': True},
1423        'source_vault': {'required': True},
1424    }
1425
1426    _attribute_map = {
1427        'secret_url': {'key': 'secretUrl', 'type': 'str'},
1428        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
1429    }
1430
1431    def __init__(
1432        self,
1433        *,
1434        secret_url: str,
1435        source_vault: "SubResource",
1436        **kwargs
1437    ):
1438        super(KeyVaultSecretReference, self).__init__(**kwargs)
1439        self.secret_url = secret_url
1440        self.source_vault = source_vault
1441
1442
1443class LinuxConfiguration(msrest.serialization.Model):
1444    """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>`_.
1445
1446    :param disable_password_authentication: Specifies whether password authentication should be
1447     disabled.
1448    :type disable_password_authentication: bool
1449    :param ssh: Specifies the ssh key configuration for a Linux OS.
1450    :type ssh: ~azure.mgmt.compute.v2018_10_01.models.SshConfiguration
1451    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
1452     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
1453     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
1454     the VM so that extensions can be added to the VM later.
1455    :type provision_vm_agent: bool
1456    """
1457
1458    _attribute_map = {
1459        'disable_password_authentication': {'key': 'disablePasswordAuthentication', 'type': 'bool'},
1460        'ssh': {'key': 'ssh', 'type': 'SshConfiguration'},
1461        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
1462    }
1463
1464    def __init__(
1465        self,
1466        *,
1467        disable_password_authentication: Optional[bool] = None,
1468        ssh: Optional["SshConfiguration"] = None,
1469        provision_vm_agent: Optional[bool] = None,
1470        **kwargs
1471    ):
1472        super(LinuxConfiguration, self).__init__(**kwargs)
1473        self.disable_password_authentication = disable_password_authentication
1474        self.ssh = ssh
1475        self.provision_vm_agent = provision_vm_agent
1476
1477
1478class ListUsagesResult(msrest.serialization.Model):
1479    """The List Usages operation response.
1480
1481    All required parameters must be populated in order to send to Azure.
1482
1483    :param value: Required. The list of compute resource usages.
1484    :type value: list[~azure.mgmt.compute.v2018_10_01.models.Usage]
1485    :param next_link: The URI to fetch the next page of compute resource usage information. Call
1486     ListNext() with this to fetch the next page of compute resource usage information.
1487    :type next_link: str
1488    """
1489
1490    _validation = {
1491        'value': {'required': True},
1492    }
1493
1494    _attribute_map = {
1495        'value': {'key': 'value', 'type': '[Usage]'},
1496        'next_link': {'key': 'nextLink', 'type': 'str'},
1497    }
1498
1499    def __init__(
1500        self,
1501        *,
1502        value: List["Usage"],
1503        next_link: Optional[str] = None,
1504        **kwargs
1505    ):
1506        super(ListUsagesResult, self).__init__(**kwargs)
1507        self.value = value
1508        self.next_link = next_link
1509
1510
1511class LogAnalyticsInputBase(msrest.serialization.Model):
1512    """Api input base class for LogAnalytics Api.
1513
1514    All required parameters must be populated in order to send to Azure.
1515
1516    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
1517     LogAnalytics Api writes output logs to.
1518    :type blob_container_sas_uri: str
1519    :param from_time: Required. From time of the query.
1520    :type from_time: ~datetime.datetime
1521    :param to_time: Required. To time of the query.
1522    :type to_time: ~datetime.datetime
1523    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
1524    :type group_by_throttle_policy: bool
1525    :param group_by_operation_name: Group query result by Operation Name.
1526    :type group_by_operation_name: bool
1527    :param group_by_resource_name: Group query result by Resource Name.
1528    :type group_by_resource_name: bool
1529    """
1530
1531    _validation = {
1532        'blob_container_sas_uri': {'required': True},
1533        'from_time': {'required': True},
1534        'to_time': {'required': True},
1535    }
1536
1537    _attribute_map = {
1538        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
1539        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
1540        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
1541        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
1542        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
1543        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
1544    }
1545
1546    def __init__(
1547        self,
1548        *,
1549        blob_container_sas_uri: str,
1550        from_time: datetime.datetime,
1551        to_time: datetime.datetime,
1552        group_by_throttle_policy: Optional[bool] = None,
1553        group_by_operation_name: Optional[bool] = None,
1554        group_by_resource_name: Optional[bool] = None,
1555        **kwargs
1556    ):
1557        super(LogAnalyticsInputBase, self).__init__(**kwargs)
1558        self.blob_container_sas_uri = blob_container_sas_uri
1559        self.from_time = from_time
1560        self.to_time = to_time
1561        self.group_by_throttle_policy = group_by_throttle_policy
1562        self.group_by_operation_name = group_by_operation_name
1563        self.group_by_resource_name = group_by_resource_name
1564
1565
1566class LogAnalyticsOperationResult(msrest.serialization.Model):
1567    """LogAnalytics operation status response.
1568
1569    Variables are only populated by the server, and will be ignored when sending a request.
1570
1571    :ivar properties: LogAnalyticsOutput.
1572    :vartype properties: ~azure.mgmt.compute.v2018_10_01.models.LogAnalyticsOutput
1573    """
1574
1575    _validation = {
1576        'properties': {'readonly': True},
1577    }
1578
1579    _attribute_map = {
1580        'properties': {'key': 'properties', 'type': 'LogAnalyticsOutput'},
1581    }
1582
1583    def __init__(
1584        self,
1585        **kwargs
1586    ):
1587        super(LogAnalyticsOperationResult, self).__init__(**kwargs)
1588        self.properties = None
1589
1590
1591class LogAnalyticsOutput(msrest.serialization.Model):
1592    """LogAnalytics output properties.
1593
1594    Variables are only populated by the server, and will be ignored when sending a request.
1595
1596    :ivar output: Output file Uri path to blob container.
1597    :vartype output: str
1598    """
1599
1600    _validation = {
1601        'output': {'readonly': True},
1602    }
1603
1604    _attribute_map = {
1605        'output': {'key': 'output', 'type': 'str'},
1606    }
1607
1608    def __init__(
1609        self,
1610        **kwargs
1611    ):
1612        super(LogAnalyticsOutput, self).__init__(**kwargs)
1613        self.output = None
1614
1615
1616class MaintenanceRedeployStatus(msrest.serialization.Model):
1617    """Maintenance Operation Status.
1618
1619    :param is_customer_initiated_maintenance_allowed: True, if customer is allowed to perform
1620     Maintenance.
1621    :type is_customer_initiated_maintenance_allowed: bool
1622    :param pre_maintenance_window_start_time: Start Time for the Pre Maintenance Window.
1623    :type pre_maintenance_window_start_time: ~datetime.datetime
1624    :param pre_maintenance_window_end_time: End Time for the Pre Maintenance Window.
1625    :type pre_maintenance_window_end_time: ~datetime.datetime
1626    :param maintenance_window_start_time: Start Time for the Maintenance Window.
1627    :type maintenance_window_start_time: ~datetime.datetime
1628    :param maintenance_window_end_time: End Time for the Maintenance Window.
1629    :type maintenance_window_end_time: ~datetime.datetime
1630    :param last_operation_result_code: The Last Maintenance Operation Result Code. Possible values
1631     include: "None", "RetryLater", "MaintenanceAborted", "MaintenanceCompleted".
1632    :type last_operation_result_code: str or
1633     ~azure.mgmt.compute.v2018_10_01.models.MaintenanceOperationResultCodeTypes
1634    :param last_operation_message: Message returned for the last Maintenance Operation.
1635    :type last_operation_message: str
1636    """
1637
1638    _attribute_map = {
1639        'is_customer_initiated_maintenance_allowed': {'key': 'isCustomerInitiatedMaintenanceAllowed', 'type': 'bool'},
1640        'pre_maintenance_window_start_time': {'key': 'preMaintenanceWindowStartTime', 'type': 'iso-8601'},
1641        'pre_maintenance_window_end_time': {'key': 'preMaintenanceWindowEndTime', 'type': 'iso-8601'},
1642        'maintenance_window_start_time': {'key': 'maintenanceWindowStartTime', 'type': 'iso-8601'},
1643        'maintenance_window_end_time': {'key': 'maintenanceWindowEndTime', 'type': 'iso-8601'},
1644        'last_operation_result_code': {'key': 'lastOperationResultCode', 'type': 'str'},
1645        'last_operation_message': {'key': 'lastOperationMessage', 'type': 'str'},
1646    }
1647
1648    def __init__(
1649        self,
1650        *,
1651        is_customer_initiated_maintenance_allowed: Optional[bool] = None,
1652        pre_maintenance_window_start_time: Optional[datetime.datetime] = None,
1653        pre_maintenance_window_end_time: Optional[datetime.datetime] = None,
1654        maintenance_window_start_time: Optional[datetime.datetime] = None,
1655        maintenance_window_end_time: Optional[datetime.datetime] = None,
1656        last_operation_result_code: Optional[Union[str, "MaintenanceOperationResultCodeTypes"]] = None,
1657        last_operation_message: Optional[str] = None,
1658        **kwargs
1659    ):
1660        super(MaintenanceRedeployStatus, self).__init__(**kwargs)
1661        self.is_customer_initiated_maintenance_allowed = is_customer_initiated_maintenance_allowed
1662        self.pre_maintenance_window_start_time = pre_maintenance_window_start_time
1663        self.pre_maintenance_window_end_time = pre_maintenance_window_end_time
1664        self.maintenance_window_start_time = maintenance_window_start_time
1665        self.maintenance_window_end_time = maintenance_window_end_time
1666        self.last_operation_result_code = last_operation_result_code
1667        self.last_operation_message = last_operation_message
1668
1669
1670class ManagedDiskParameters(SubResource):
1671    """The parameters of a managed disk.
1672
1673    :param id: Resource Id.
1674    :type id: str
1675    :param storage_account_type: Specifies the storage account type for the managed disk. NOTE:
1676     UltraSSD_LRS can only be used with data disks, it cannot be used with OS Disk. Possible values
1677     include: "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
1678    :type storage_account_type: str or ~azure.mgmt.compute.v2018_10_01.models.StorageAccountTypes
1679    """
1680
1681    _attribute_map = {
1682        'id': {'key': 'id', 'type': 'str'},
1683        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
1684    }
1685
1686    def __init__(
1687        self,
1688        *,
1689        id: Optional[str] = None,
1690        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
1691        **kwargs
1692    ):
1693        super(ManagedDiskParameters, self).__init__(id=id, **kwargs)
1694        self.storage_account_type = storage_account_type
1695
1696
1697class NetworkInterfaceReference(SubResource):
1698    """Describes a network interface reference.
1699
1700    :param id: Resource Id.
1701    :type id: str
1702    :param primary: Specifies the primary network interface in case the virtual machine has more
1703     than 1 network interface.
1704    :type primary: bool
1705    """
1706
1707    _attribute_map = {
1708        'id': {'key': 'id', 'type': 'str'},
1709        'primary': {'key': 'properties.primary', 'type': 'bool'},
1710    }
1711
1712    def __init__(
1713        self,
1714        *,
1715        id: Optional[str] = None,
1716        primary: Optional[bool] = None,
1717        **kwargs
1718    ):
1719        super(NetworkInterfaceReference, self).__init__(id=id, **kwargs)
1720        self.primary = primary
1721
1722
1723class NetworkProfile(msrest.serialization.Model):
1724    """Specifies the network interfaces of the virtual machine.
1725
1726    :param network_interfaces: Specifies the list of resource Ids for the network interfaces
1727     associated with the virtual machine.
1728    :type network_interfaces:
1729     list[~azure.mgmt.compute.v2018_10_01.models.NetworkInterfaceReference]
1730    """
1731
1732    _attribute_map = {
1733        'network_interfaces': {'key': 'networkInterfaces', 'type': '[NetworkInterfaceReference]'},
1734    }
1735
1736    def __init__(
1737        self,
1738        *,
1739        network_interfaces: Optional[List["NetworkInterfaceReference"]] = None,
1740        **kwargs
1741    ):
1742        super(NetworkProfile, self).__init__(**kwargs)
1743        self.network_interfaces = network_interfaces
1744
1745
1746class OSDisk(msrest.serialization.Model):
1747    """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>`_.
1748
1749    All required parameters must be populated in order to send to Azure.
1750
1751    :param os_type: This property allows you to specify the type of the OS that is included in the
1752     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
1753     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
1754     values include: "Windows", "Linux".
1755    :type os_type: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemTypes
1756    :param encryption_settings: Specifies the encryption settings for the OS Disk.
1757     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
1758    :type encryption_settings: ~azure.mgmt.compute.v2018_10_01.models.DiskEncryptionSettings
1759    :param name: The disk name.
1760    :type name: str
1761    :param vhd: The virtual hard disk.
1762    :type vhd: ~azure.mgmt.compute.v2018_10_01.models.VirtualHardDisk
1763    :param image: The source user image virtual hard disk. The virtual hard disk will be copied
1764     before being attached to the virtual machine. If SourceImage is provided, the destination
1765     virtual hard drive must not exist.
1766    :type image: ~azure.mgmt.compute.v2018_10_01.models.VirtualHardDisk
1767    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
1768     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
1769     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
1770     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
1771     "ReadWrite".
1772    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
1773    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
1774     disabled on the disk.
1775    :type write_accelerator_enabled: bool
1776    :param diff_disk_settings: Specifies the ephemeral Disk Settings for the operating system disk
1777     used by the virtual machine.
1778    :type diff_disk_settings: ~azure.mgmt.compute.v2018_10_01.models.DiffDiskSettings
1779    :param create_option: Required. Specifies how the virtual machine should be
1780     created.:code:`<br>`:code:`<br>` Possible values are::code:`<br>`:code:`<br>` **Attach** \u2013
1781     This value is used when you are using a specialized disk to create the virtual
1782     machine.:code:`<br>`:code:`<br>` **FromImage** \u2013 This value is used when you are using an
1783     image to create the virtual machine. If you are using a platform image, you also use the
1784     imageReference element described above. If you are using a marketplace image, you  also use the
1785     plan element previously described. Possible values include: "FromImage", "Empty", "Attach".
1786    :type create_option: str or ~azure.mgmt.compute.v2018_10_01.models.DiskCreateOptionTypes
1787    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
1788     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
1789     This value cannot be larger than 1023 GB.
1790    :type disk_size_gb: int
1791    :param managed_disk: The managed disk parameters.
1792    :type managed_disk: ~azure.mgmt.compute.v2018_10_01.models.ManagedDiskParameters
1793    """
1794
1795    _validation = {
1796        'create_option': {'required': True},
1797    }
1798
1799    _attribute_map = {
1800        'os_type': {'key': 'osType', 'type': 'str'},
1801        'encryption_settings': {'key': 'encryptionSettings', 'type': 'DiskEncryptionSettings'},
1802        'name': {'key': 'name', 'type': 'str'},
1803        'vhd': {'key': 'vhd', 'type': 'VirtualHardDisk'},
1804        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
1805        'caching': {'key': 'caching', 'type': 'str'},
1806        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
1807        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
1808        'create_option': {'key': 'createOption', 'type': 'str'},
1809        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
1810        'managed_disk': {'key': 'managedDisk', 'type': 'ManagedDiskParameters'},
1811    }
1812
1813    def __init__(
1814        self,
1815        *,
1816        create_option: Union[str, "DiskCreateOptionTypes"],
1817        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
1818        encryption_settings: Optional["DiskEncryptionSettings"] = None,
1819        name: Optional[str] = None,
1820        vhd: Optional["VirtualHardDisk"] = None,
1821        image: Optional["VirtualHardDisk"] = None,
1822        caching: Optional[Union[str, "CachingTypes"]] = None,
1823        write_accelerator_enabled: Optional[bool] = None,
1824        diff_disk_settings: Optional["DiffDiskSettings"] = None,
1825        disk_size_gb: Optional[int] = None,
1826        managed_disk: Optional["ManagedDiskParameters"] = None,
1827        **kwargs
1828    ):
1829        super(OSDisk, self).__init__(**kwargs)
1830        self.os_type = os_type
1831        self.encryption_settings = encryption_settings
1832        self.name = name
1833        self.vhd = vhd
1834        self.image = image
1835        self.caching = caching
1836        self.write_accelerator_enabled = write_accelerator_enabled
1837        self.diff_disk_settings = diff_disk_settings
1838        self.create_option = create_option
1839        self.disk_size_gb = disk_size_gb
1840        self.managed_disk = managed_disk
1841
1842
1843class OSDiskImage(msrest.serialization.Model):
1844    """Contains the os disk image information.
1845
1846    All required parameters must be populated in order to send to Azure.
1847
1848    :param operating_system: Required. The operating system of the osDiskImage. Possible values
1849     include: "Windows", "Linux".
1850    :type operating_system: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemTypes
1851    """
1852
1853    _validation = {
1854        'operating_system': {'required': True},
1855    }
1856
1857    _attribute_map = {
1858        'operating_system': {'key': 'operatingSystem', 'type': 'str'},
1859    }
1860
1861    def __init__(
1862        self,
1863        *,
1864        operating_system: Union[str, "OperatingSystemTypes"],
1865        **kwargs
1866    ):
1867        super(OSDiskImage, self).__init__(**kwargs)
1868        self.operating_system = operating_system
1869
1870
1871class OSProfile(msrest.serialization.Model):
1872    """Specifies the operating system settings for the virtual machine.
1873
1874    :param computer_name: Specifies the host OS name of the virtual machine.
1875     :code:`<br>`:code:`<br>` This name cannot be updated after the VM is created.
1876     :code:`<br>`:code:`<br>` **Max-length (Windows):** 15 characters :code:`<br>`:code:`<br>`
1877     **Max-length (Linux):** 64 characters. :code:`<br>`:code:`<br>` For naming conventions and
1878     restrictions see `Azure infrastructure services implementation guidelines
1879     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions>`_.
1880    :type computer_name: str
1881    :param admin_username: Specifies the name of the administrator account.
1882     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
1883     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
1884     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
1885     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
1886     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
1887     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
1888     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
1889     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
1890     root privileges on Linux virtual machines in Azure
1891     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
1892     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
1893     in this field, see `Selecting User Names for Linux on Azure
1894     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
1895    :type admin_username: str
1896    :param admin_password: Specifies the password of the administrator account.
1897     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
1898     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
1899     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
1900     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
1901     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
1902     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
1903     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
1904     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
1905     resetting the password, see `How to reset the Remote Desktop service or its login password in a
1906     Windows VM
1907     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
1908     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
1909     repair disks on Azure Linux VMs using the VMAccess Extension
1910     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
1911    :type admin_password: str
1912    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
1913     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
1914     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` For using cloud-init for
1915     your VM, see `Using cloud-init to customize a Linux VM during creation
1916     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
1917    :type custom_data: str
1918    :param windows_configuration: Specifies Windows operating system settings on the virtual
1919     machine.
1920    :type windows_configuration: ~azure.mgmt.compute.v2018_10_01.models.WindowsConfiguration
1921    :param linux_configuration: Specifies the Linux operating system settings on the virtual
1922     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
1923     Azure-Endorsed Distributions
1924     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
1925     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
1926     Non-Endorsed Distributions
1927     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
1928    :type linux_configuration: ~azure.mgmt.compute.v2018_10_01.models.LinuxConfiguration
1929    :param secrets: Specifies set of certificates that should be installed onto the virtual
1930     machine.
1931    :type secrets: list[~azure.mgmt.compute.v2018_10_01.models.VaultSecretGroup]
1932    :param allow_extension_operations: Specifies whether extension operations should be allowed on
1933     the virtual machine. :code:`<br>`:code:`<br>`This may only be set to False when no extensions
1934     are present on the virtual machine.
1935    :type allow_extension_operations: bool
1936    """
1937
1938    _attribute_map = {
1939        'computer_name': {'key': 'computerName', 'type': 'str'},
1940        'admin_username': {'key': 'adminUsername', 'type': 'str'},
1941        'admin_password': {'key': 'adminPassword', 'type': 'str'},
1942        'custom_data': {'key': 'customData', 'type': 'str'},
1943        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
1944        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
1945        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
1946        'allow_extension_operations': {'key': 'allowExtensionOperations', 'type': 'bool'},
1947    }
1948
1949    def __init__(
1950        self,
1951        *,
1952        computer_name: Optional[str] = None,
1953        admin_username: Optional[str] = None,
1954        admin_password: Optional[str] = None,
1955        custom_data: Optional[str] = None,
1956        windows_configuration: Optional["WindowsConfiguration"] = None,
1957        linux_configuration: Optional["LinuxConfiguration"] = None,
1958        secrets: Optional[List["VaultSecretGroup"]] = None,
1959        allow_extension_operations: Optional[bool] = None,
1960        **kwargs
1961    ):
1962        super(OSProfile, self).__init__(**kwargs)
1963        self.computer_name = computer_name
1964        self.admin_username = admin_username
1965        self.admin_password = admin_password
1966        self.custom_data = custom_data
1967        self.windows_configuration = windows_configuration
1968        self.linux_configuration = linux_configuration
1969        self.secrets = secrets
1970        self.allow_extension_operations = allow_extension_operations
1971
1972
1973class Plan(msrest.serialization.Model):
1974    """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**.
1975
1976    :param name: The plan ID.
1977    :type name: str
1978    :param publisher: The publisher ID.
1979    :type publisher: str
1980    :param product: Specifies the product of the image from the marketplace. This is the same value
1981     as Offer under the imageReference element.
1982    :type product: str
1983    :param promotion_code: The promotion code.
1984    :type promotion_code: str
1985    """
1986
1987    _attribute_map = {
1988        'name': {'key': 'name', 'type': 'str'},
1989        'publisher': {'key': 'publisher', 'type': 'str'},
1990        'product': {'key': 'product', 'type': 'str'},
1991        'promotion_code': {'key': 'promotionCode', 'type': 'str'},
1992    }
1993
1994    def __init__(
1995        self,
1996        *,
1997        name: Optional[str] = None,
1998        publisher: Optional[str] = None,
1999        product: Optional[str] = None,
2000        promotion_code: Optional[str] = None,
2001        **kwargs
2002    ):
2003        super(Plan, self).__init__(**kwargs)
2004        self.name = name
2005        self.publisher = publisher
2006        self.product = product
2007        self.promotion_code = promotion_code
2008
2009
2010class ProximityPlacementGroup(Resource):
2011    """Specifies information about the proximity placement group.
2012
2013    Variables are only populated by the server, and will be ignored when sending a request.
2014
2015    All required parameters must be populated in order to send to Azure.
2016
2017    :ivar id: Resource Id.
2018    :vartype id: str
2019    :ivar name: Resource name.
2020    :vartype name: str
2021    :ivar type: Resource type.
2022    :vartype type: str
2023    :param location: Required. Resource location.
2024    :type location: str
2025    :param tags: A set of tags. Resource tags.
2026    :type tags: dict[str, str]
2027    :param proximity_placement_group_type: Specifies the type of the proximity placement group.
2028     :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` **Standard** : Co-locate
2029     resources within an Azure region or Availability Zone. :code:`<br>`:code:`<br>` **Ultra** : For
2030     future use. Possible values include: "Standard", "Ultra".
2031    :type proximity_placement_group_type: str or
2032     ~azure.mgmt.compute.v2018_10_01.models.ProximityPlacementGroupType
2033    :ivar virtual_machines: A list of references to all virtual machines in the proximity placement
2034     group.
2035    :vartype virtual_machines: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
2036    :ivar virtual_machine_scale_sets: A list of references to all virtual machine scale sets in the
2037     proximity placement group.
2038    :vartype virtual_machine_scale_sets: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
2039    :ivar availability_sets: A list of references to all availability sets in the proximity
2040     placement group.
2041    :vartype availability_sets: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
2042    """
2043
2044    _validation = {
2045        'id': {'readonly': True},
2046        'name': {'readonly': True},
2047        'type': {'readonly': True},
2048        'location': {'required': True},
2049        'virtual_machines': {'readonly': True},
2050        'virtual_machine_scale_sets': {'readonly': True},
2051        'availability_sets': {'readonly': True},
2052    }
2053
2054    _attribute_map = {
2055        'id': {'key': 'id', 'type': 'str'},
2056        'name': {'key': 'name', 'type': 'str'},
2057        'type': {'key': 'type', 'type': 'str'},
2058        'location': {'key': 'location', 'type': 'str'},
2059        'tags': {'key': 'tags', 'type': '{str}'},
2060        'proximity_placement_group_type': {'key': 'properties.proximityPlacementGroupType', 'type': 'str'},
2061        'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[SubResource]'},
2062        'virtual_machine_scale_sets': {'key': 'properties.virtualMachineScaleSets', 'type': '[SubResource]'},
2063        'availability_sets': {'key': 'properties.availabilitySets', 'type': '[SubResource]'},
2064    }
2065
2066    def __init__(
2067        self,
2068        *,
2069        location: str,
2070        tags: Optional[Dict[str, str]] = None,
2071        proximity_placement_group_type: Optional[Union[str, "ProximityPlacementGroupType"]] = None,
2072        **kwargs
2073    ):
2074        super(ProximityPlacementGroup, self).__init__(location=location, tags=tags, **kwargs)
2075        self.proximity_placement_group_type = proximity_placement_group_type
2076        self.virtual_machines = None
2077        self.virtual_machine_scale_sets = None
2078        self.availability_sets = None
2079
2080
2081class ProximityPlacementGroupListResult(msrest.serialization.Model):
2082    """The List Proximity Placement Group operation response.
2083
2084    All required parameters must be populated in order to send to Azure.
2085
2086    :param value: Required. The list of proximity placement groups.
2087    :type value: list[~azure.mgmt.compute.v2018_10_01.models.ProximityPlacementGroup]
2088    :param next_link: The URI to fetch the next page of proximity placement groups.
2089    :type next_link: str
2090    """
2091
2092    _validation = {
2093        'value': {'required': True},
2094    }
2095
2096    _attribute_map = {
2097        'value': {'key': 'value', 'type': '[ProximityPlacementGroup]'},
2098        'next_link': {'key': 'nextLink', 'type': 'str'},
2099    }
2100
2101    def __init__(
2102        self,
2103        *,
2104        value: List["ProximityPlacementGroup"],
2105        next_link: Optional[str] = None,
2106        **kwargs
2107    ):
2108        super(ProximityPlacementGroupListResult, self).__init__(**kwargs)
2109        self.value = value
2110        self.next_link = next_link
2111
2112
2113class ProximityPlacementGroupUpdate(UpdateResource):
2114    """Specifies information about the proximity placement group.
2115
2116    :param tags: A set of tags. Resource tags.
2117    :type tags: dict[str, str]
2118    """
2119
2120    _attribute_map = {
2121        'tags': {'key': 'tags', 'type': '{str}'},
2122    }
2123
2124    def __init__(
2125        self,
2126        *,
2127        tags: Optional[Dict[str, str]] = None,
2128        **kwargs
2129    ):
2130        super(ProximityPlacementGroupUpdate, self).__init__(tags=tags, **kwargs)
2131
2132
2133class PurchasePlan(msrest.serialization.Model):
2134    """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
2135
2136    All required parameters must be populated in order to send to Azure.
2137
2138    :param publisher: Required. The publisher ID.
2139    :type publisher: str
2140    :param name: Required. The plan ID.
2141    :type name: str
2142    :param product: Required. Specifies the product of the image from the marketplace. This is the
2143     same value as Offer under the imageReference element.
2144    :type product: str
2145    """
2146
2147    _validation = {
2148        'publisher': {'required': True},
2149        'name': {'required': True},
2150        'product': {'required': True},
2151    }
2152
2153    _attribute_map = {
2154        'publisher': {'key': 'publisher', 'type': 'str'},
2155        'name': {'key': 'name', 'type': 'str'},
2156        'product': {'key': 'product', 'type': 'str'},
2157    }
2158
2159    def __init__(
2160        self,
2161        *,
2162        publisher: str,
2163        name: str,
2164        product: str,
2165        **kwargs
2166    ):
2167        super(PurchasePlan, self).__init__(**kwargs)
2168        self.publisher = publisher
2169        self.name = name
2170        self.product = product
2171
2172
2173class RecoveryWalkResponse(msrest.serialization.Model):
2174    """Response after calling a manual recovery walk.
2175
2176    Variables are only populated by the server, and will be ignored when sending a request.
2177
2178    :ivar walk_performed: Whether the recovery walk was performed.
2179    :vartype walk_performed: bool
2180    :ivar next_platform_update_domain: The next update domain that needs to be walked. Null means
2181     walk spanning all update domains has been completed.
2182    :vartype next_platform_update_domain: int
2183    """
2184
2185    _validation = {
2186        'walk_performed': {'readonly': True},
2187        'next_platform_update_domain': {'readonly': True},
2188    }
2189
2190    _attribute_map = {
2191        'walk_performed': {'key': 'walkPerformed', 'type': 'bool'},
2192        'next_platform_update_domain': {'key': 'nextPlatformUpdateDomain', 'type': 'int'},
2193    }
2194
2195    def __init__(
2196        self,
2197        **kwargs
2198    ):
2199        super(RecoveryWalkResponse, self).__init__(**kwargs)
2200        self.walk_performed = None
2201        self.next_platform_update_domain = None
2202
2203
2204class RequestRateByIntervalInput(LogAnalyticsInputBase):
2205    """Api request input for LogAnalytics getRequestRateByInterval Api.
2206
2207    All required parameters must be populated in order to send to Azure.
2208
2209    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
2210     LogAnalytics Api writes output logs to.
2211    :type blob_container_sas_uri: str
2212    :param from_time: Required. From time of the query.
2213    :type from_time: ~datetime.datetime
2214    :param to_time: Required. To time of the query.
2215    :type to_time: ~datetime.datetime
2216    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
2217    :type group_by_throttle_policy: bool
2218    :param group_by_operation_name: Group query result by Operation Name.
2219    :type group_by_operation_name: bool
2220    :param group_by_resource_name: Group query result by Resource Name.
2221    :type group_by_resource_name: bool
2222    :param interval_length: Required. Interval value in minutes used to create LogAnalytics call
2223     rate logs. Possible values include: "ThreeMins", "FiveMins", "ThirtyMins", "SixtyMins".
2224    :type interval_length: str or ~azure.mgmt.compute.v2018_10_01.models.IntervalInMins
2225    """
2226
2227    _validation = {
2228        'blob_container_sas_uri': {'required': True},
2229        'from_time': {'required': True},
2230        'to_time': {'required': True},
2231        'interval_length': {'required': True},
2232    }
2233
2234    _attribute_map = {
2235        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
2236        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
2237        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
2238        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
2239        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
2240        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
2241        'interval_length': {'key': 'intervalLength', 'type': 'str'},
2242    }
2243
2244    def __init__(
2245        self,
2246        *,
2247        blob_container_sas_uri: str,
2248        from_time: datetime.datetime,
2249        to_time: datetime.datetime,
2250        interval_length: Union[str, "IntervalInMins"],
2251        group_by_throttle_policy: Optional[bool] = None,
2252        group_by_operation_name: Optional[bool] = None,
2253        group_by_resource_name: Optional[bool] = None,
2254        **kwargs
2255    ):
2256        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)
2257        self.interval_length = interval_length
2258
2259
2260class RollbackStatusInfo(msrest.serialization.Model):
2261    """Information about rollback on failed VM instances after a OS Upgrade operation.
2262
2263    Variables are only populated by the server, and will be ignored when sending a request.
2264
2265    :ivar successfully_rolledback_instance_count: The number of instances which have been
2266     successfully rolled back.
2267    :vartype successfully_rolledback_instance_count: int
2268    :ivar failed_rolledback_instance_count: The number of instances which failed to rollback.
2269    :vartype failed_rolledback_instance_count: int
2270    :ivar rollback_error: Error details if OS rollback failed.
2271    :vartype rollback_error: ~azure.mgmt.compute.v2018_10_01.models.ApiError
2272    """
2273
2274    _validation = {
2275        'successfully_rolledback_instance_count': {'readonly': True},
2276        'failed_rolledback_instance_count': {'readonly': True},
2277        'rollback_error': {'readonly': True},
2278    }
2279
2280    _attribute_map = {
2281        'successfully_rolledback_instance_count': {'key': 'successfullyRolledbackInstanceCount', 'type': 'int'},
2282        'failed_rolledback_instance_count': {'key': 'failedRolledbackInstanceCount', 'type': 'int'},
2283        'rollback_error': {'key': 'rollbackError', 'type': 'ApiError'},
2284    }
2285
2286    def __init__(
2287        self,
2288        **kwargs
2289    ):
2290        super(RollbackStatusInfo, self).__init__(**kwargs)
2291        self.successfully_rolledback_instance_count = None
2292        self.failed_rolledback_instance_count = None
2293        self.rollback_error = None
2294
2295
2296class RollingUpgradePolicy(msrest.serialization.Model):
2297    """The configuration parameters used while performing a rolling upgrade.
2298
2299    :param max_batch_instance_percent: The maximum percent of total virtual machine instances that
2300     will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum,
2301     unhealthy instances in previous or future batches can cause the percentage of instances in a
2302     batch to decrease to ensure higher reliability. The default value for this parameter is 20%.
2303    :type max_batch_instance_percent: int
2304    :param max_unhealthy_instance_percent: The maximum percentage of the total virtual machine
2305     instances in the scale set that can be simultaneously unhealthy, either as a result of being
2306     upgraded, or by being found in an unhealthy state by the virtual machine health checks before
2307     the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The
2308     default value for this parameter is 20%.
2309    :type max_unhealthy_instance_percent: int
2310    :param max_unhealthy_upgraded_instance_percent: The maximum percentage of upgraded virtual
2311     machine instances that can be found to be in an unhealthy state. This check will happen after
2312     each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The
2313     default value for this parameter is 20%.
2314    :type max_unhealthy_upgraded_instance_percent: int
2315    :param pause_time_between_batches: The wait time between completing the update for all virtual
2316     machines in one batch and starting the next batch. The time duration should be specified in ISO
2317     8601 format. The default value is 0 seconds (PT0S).
2318    :type pause_time_between_batches: str
2319    """
2320
2321    _validation = {
2322        'max_batch_instance_percent': {'maximum': 100, 'minimum': 5},
2323        'max_unhealthy_instance_percent': {'maximum': 100, 'minimum': 5},
2324        'max_unhealthy_upgraded_instance_percent': {'maximum': 100, 'minimum': 0},
2325    }
2326
2327    _attribute_map = {
2328        'max_batch_instance_percent': {'key': 'maxBatchInstancePercent', 'type': 'int'},
2329        'max_unhealthy_instance_percent': {'key': 'maxUnhealthyInstancePercent', 'type': 'int'},
2330        'max_unhealthy_upgraded_instance_percent': {'key': 'maxUnhealthyUpgradedInstancePercent', 'type': 'int'},
2331        'pause_time_between_batches': {'key': 'pauseTimeBetweenBatches', 'type': 'str'},
2332    }
2333
2334    def __init__(
2335        self,
2336        *,
2337        max_batch_instance_percent: Optional[int] = None,
2338        max_unhealthy_instance_percent: Optional[int] = None,
2339        max_unhealthy_upgraded_instance_percent: Optional[int] = None,
2340        pause_time_between_batches: Optional[str] = None,
2341        **kwargs
2342    ):
2343        super(RollingUpgradePolicy, self).__init__(**kwargs)
2344        self.max_batch_instance_percent = max_batch_instance_percent
2345        self.max_unhealthy_instance_percent = max_unhealthy_instance_percent
2346        self.max_unhealthy_upgraded_instance_percent = max_unhealthy_upgraded_instance_percent
2347        self.pause_time_between_batches = pause_time_between_batches
2348
2349
2350class RollingUpgradeProgressInfo(msrest.serialization.Model):
2351    """Information about the number of virtual machine instances in each upgrade state.
2352
2353    Variables are only populated by the server, and will be ignored when sending a request.
2354
2355    :ivar successful_instance_count: The number of instances that have been successfully upgraded.
2356    :vartype successful_instance_count: int
2357    :ivar failed_instance_count: The number of instances that have failed to be upgraded
2358     successfully.
2359    :vartype failed_instance_count: int
2360    :ivar in_progress_instance_count: The number of instances that are currently being upgraded.
2361    :vartype in_progress_instance_count: int
2362    :ivar pending_instance_count: The number of instances that have not yet begun to be upgraded.
2363    :vartype pending_instance_count: int
2364    """
2365
2366    _validation = {
2367        'successful_instance_count': {'readonly': True},
2368        'failed_instance_count': {'readonly': True},
2369        'in_progress_instance_count': {'readonly': True},
2370        'pending_instance_count': {'readonly': True},
2371    }
2372
2373    _attribute_map = {
2374        'successful_instance_count': {'key': 'successfulInstanceCount', 'type': 'int'},
2375        'failed_instance_count': {'key': 'failedInstanceCount', 'type': 'int'},
2376        'in_progress_instance_count': {'key': 'inProgressInstanceCount', 'type': 'int'},
2377        'pending_instance_count': {'key': 'pendingInstanceCount', 'type': 'int'},
2378    }
2379
2380    def __init__(
2381        self,
2382        **kwargs
2383    ):
2384        super(RollingUpgradeProgressInfo, self).__init__(**kwargs)
2385        self.successful_instance_count = None
2386        self.failed_instance_count = None
2387        self.in_progress_instance_count = None
2388        self.pending_instance_count = None
2389
2390
2391class RollingUpgradeRunningStatus(msrest.serialization.Model):
2392    """Information about the current running state of the overall upgrade.
2393
2394    Variables are only populated by the server, and will be ignored when sending a request.
2395
2396    :ivar code: Code indicating the current status of the upgrade. Possible values include:
2397     "RollingForward", "Cancelled", "Completed", "Faulted".
2398    :vartype code: str or ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradeStatusCode
2399    :ivar start_time: Start time of the upgrade.
2400    :vartype start_time: ~datetime.datetime
2401    :ivar last_action: The last action performed on the rolling upgrade. Possible values include:
2402     "Start", "Cancel".
2403    :vartype last_action: str or ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradeActionType
2404    :ivar last_action_time: Last action time of the upgrade.
2405    :vartype last_action_time: ~datetime.datetime
2406    """
2407
2408    _validation = {
2409        'code': {'readonly': True},
2410        'start_time': {'readonly': True},
2411        'last_action': {'readonly': True},
2412        'last_action_time': {'readonly': True},
2413    }
2414
2415    _attribute_map = {
2416        'code': {'key': 'code', 'type': 'str'},
2417        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
2418        'last_action': {'key': 'lastAction', 'type': 'str'},
2419        'last_action_time': {'key': 'lastActionTime', 'type': 'iso-8601'},
2420    }
2421
2422    def __init__(
2423        self,
2424        **kwargs
2425    ):
2426        super(RollingUpgradeRunningStatus, self).__init__(**kwargs)
2427        self.code = None
2428        self.start_time = None
2429        self.last_action = None
2430        self.last_action_time = None
2431
2432
2433class RollingUpgradeStatusInfo(Resource):
2434    """The status of the latest virtual machine scale set rolling upgrade.
2435
2436    Variables are only populated by the server, and will be ignored when sending a request.
2437
2438    All required parameters must be populated in order to send to Azure.
2439
2440    :ivar id: Resource Id.
2441    :vartype id: str
2442    :ivar name: Resource name.
2443    :vartype name: str
2444    :ivar type: Resource type.
2445    :vartype type: str
2446    :param location: Required. Resource location.
2447    :type location: str
2448    :param tags: A set of tags. Resource tags.
2449    :type tags: dict[str, str]
2450    :ivar policy: The rolling upgrade policies applied for this upgrade.
2451    :vartype policy: ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradePolicy
2452    :ivar running_status: Information about the current running state of the overall upgrade.
2453    :vartype running_status: ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradeRunningStatus
2454    :ivar progress: Information about the number of virtual machine instances in each upgrade
2455     state.
2456    :vartype progress: ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradeProgressInfo
2457    :ivar error: Error details for this upgrade, if there are any.
2458    :vartype error: ~azure.mgmt.compute.v2018_10_01.models.ApiError
2459    """
2460
2461    _validation = {
2462        'id': {'readonly': True},
2463        'name': {'readonly': True},
2464        'type': {'readonly': True},
2465        'location': {'required': True},
2466        'policy': {'readonly': True},
2467        'running_status': {'readonly': True},
2468        'progress': {'readonly': True},
2469        'error': {'readonly': True},
2470    }
2471
2472    _attribute_map = {
2473        'id': {'key': 'id', 'type': 'str'},
2474        'name': {'key': 'name', 'type': 'str'},
2475        'type': {'key': 'type', 'type': 'str'},
2476        'location': {'key': 'location', 'type': 'str'},
2477        'tags': {'key': 'tags', 'type': '{str}'},
2478        'policy': {'key': 'properties.policy', 'type': 'RollingUpgradePolicy'},
2479        'running_status': {'key': 'properties.runningStatus', 'type': 'RollingUpgradeRunningStatus'},
2480        'progress': {'key': 'properties.progress', 'type': 'RollingUpgradeProgressInfo'},
2481        'error': {'key': 'properties.error', 'type': 'ApiError'},
2482    }
2483
2484    def __init__(
2485        self,
2486        *,
2487        location: str,
2488        tags: Optional[Dict[str, str]] = None,
2489        **kwargs
2490    ):
2491        super(RollingUpgradeStatusInfo, self).__init__(location=location, tags=tags, **kwargs)
2492        self.policy = None
2493        self.running_status = None
2494        self.progress = None
2495        self.error = None
2496
2497
2498class RunCommandDocumentBase(msrest.serialization.Model):
2499    """Describes the properties of a Run Command metadata.
2500
2501    All required parameters must be populated in order to send to Azure.
2502
2503    :param schema: Required. The VM run command schema.
2504    :type schema: str
2505    :param id: Required. The VM run command id.
2506    :type id: str
2507    :param os_type: Required. The Operating System type. Possible values include: "Windows",
2508     "Linux".
2509    :type os_type: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemTypes
2510    :param label: Required. The VM run command label.
2511    :type label: str
2512    :param description: Required. The VM run command description.
2513    :type description: str
2514    """
2515
2516    _validation = {
2517        'schema': {'required': True},
2518        'id': {'required': True},
2519        'os_type': {'required': True},
2520        'label': {'required': True},
2521        'description': {'required': True},
2522    }
2523
2524    _attribute_map = {
2525        'schema': {'key': '$schema', 'type': 'str'},
2526        'id': {'key': 'id', 'type': 'str'},
2527        'os_type': {'key': 'osType', 'type': 'str'},
2528        'label': {'key': 'label', 'type': 'str'},
2529        'description': {'key': 'description', 'type': 'str'},
2530    }
2531
2532    def __init__(
2533        self,
2534        *,
2535        schema: str,
2536        id: str,
2537        os_type: Union[str, "OperatingSystemTypes"],
2538        label: str,
2539        description: str,
2540        **kwargs
2541    ):
2542        super(RunCommandDocumentBase, self).__init__(**kwargs)
2543        self.schema = schema
2544        self.id = id
2545        self.os_type = os_type
2546        self.label = label
2547        self.description = description
2548
2549
2550class RunCommandDocument(RunCommandDocumentBase):
2551    """Describes the properties of a Run Command.
2552
2553    All required parameters must be populated in order to send to Azure.
2554
2555    :param schema: Required. The VM run command schema.
2556    :type schema: str
2557    :param id: Required. The VM run command id.
2558    :type id: str
2559    :param os_type: Required. The Operating System type. Possible values include: "Windows",
2560     "Linux".
2561    :type os_type: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemTypes
2562    :param label: Required. The VM run command label.
2563    :type label: str
2564    :param description: Required. The VM run command description.
2565    :type description: str
2566    :param script: Required. The script to be executed.
2567    :type script: list[str]
2568    :param parameters: The parameters used by the script.
2569    :type parameters: list[~azure.mgmt.compute.v2018_10_01.models.RunCommandParameterDefinition]
2570    """
2571
2572    _validation = {
2573        'schema': {'required': True},
2574        'id': {'required': True},
2575        'os_type': {'required': True},
2576        'label': {'required': True},
2577        'description': {'required': True},
2578        'script': {'required': True},
2579    }
2580
2581    _attribute_map = {
2582        'schema': {'key': '$schema', 'type': 'str'},
2583        'id': {'key': 'id', 'type': 'str'},
2584        'os_type': {'key': 'osType', 'type': 'str'},
2585        'label': {'key': 'label', 'type': 'str'},
2586        'description': {'key': 'description', 'type': 'str'},
2587        'script': {'key': 'script', 'type': '[str]'},
2588        'parameters': {'key': 'parameters', 'type': '[RunCommandParameterDefinition]'},
2589    }
2590
2591    def __init__(
2592        self,
2593        *,
2594        schema: str,
2595        id: str,
2596        os_type: Union[str, "OperatingSystemTypes"],
2597        label: str,
2598        description: str,
2599        script: List[str],
2600        parameters: Optional[List["RunCommandParameterDefinition"]] = None,
2601        **kwargs
2602    ):
2603        super(RunCommandDocument, self).__init__(schema=schema, id=id, os_type=os_type, label=label, description=description, **kwargs)
2604        self.script = script
2605        self.parameters = parameters
2606
2607
2608class RunCommandInput(msrest.serialization.Model):
2609    """Capture Virtual Machine parameters.
2610
2611    All required parameters must be populated in order to send to Azure.
2612
2613    :param command_id: Required. The run command id.
2614    :type command_id: str
2615    :param script: Optional. The script to be executed.  When this value is given, the given script
2616     will override the default script of the command.
2617    :type script: list[str]
2618    :param parameters: The run command parameters.
2619    :type parameters: list[~azure.mgmt.compute.v2018_10_01.models.RunCommandInputParameter]
2620    """
2621
2622    _validation = {
2623        'command_id': {'required': True},
2624    }
2625
2626    _attribute_map = {
2627        'command_id': {'key': 'commandId', 'type': 'str'},
2628        'script': {'key': 'script', 'type': '[str]'},
2629        'parameters': {'key': 'parameters', 'type': '[RunCommandInputParameter]'},
2630    }
2631
2632    def __init__(
2633        self,
2634        *,
2635        command_id: str,
2636        script: Optional[List[str]] = None,
2637        parameters: Optional[List["RunCommandInputParameter"]] = None,
2638        **kwargs
2639    ):
2640        super(RunCommandInput, self).__init__(**kwargs)
2641        self.command_id = command_id
2642        self.script = script
2643        self.parameters = parameters
2644
2645
2646class RunCommandInputParameter(msrest.serialization.Model):
2647    """Describes the properties of a run command parameter.
2648
2649    All required parameters must be populated in order to send to Azure.
2650
2651    :param name: Required. The run command parameter name.
2652    :type name: str
2653    :param value: Required. The run command parameter value.
2654    :type value: str
2655    """
2656
2657    _validation = {
2658        'name': {'required': True},
2659        'value': {'required': True},
2660    }
2661
2662    _attribute_map = {
2663        'name': {'key': 'name', 'type': 'str'},
2664        'value': {'key': 'value', 'type': 'str'},
2665    }
2666
2667    def __init__(
2668        self,
2669        *,
2670        name: str,
2671        value: str,
2672        **kwargs
2673    ):
2674        super(RunCommandInputParameter, self).__init__(**kwargs)
2675        self.name = name
2676        self.value = value
2677
2678
2679class RunCommandListResult(msrest.serialization.Model):
2680    """The List Virtual Machine operation response.
2681
2682    All required parameters must be populated in order to send to Azure.
2683
2684    :param value: Required. The list of virtual machine run commands.
2685    :type value: list[~azure.mgmt.compute.v2018_10_01.models.RunCommandDocumentBase]
2686    :param next_link: The uri to fetch the next page of run commands. Call ListNext() with this to
2687     fetch the next page of run commands.
2688    :type next_link: str
2689    """
2690
2691    _validation = {
2692        'value': {'required': True},
2693    }
2694
2695    _attribute_map = {
2696        'value': {'key': 'value', 'type': '[RunCommandDocumentBase]'},
2697        'next_link': {'key': 'nextLink', 'type': 'str'},
2698    }
2699
2700    def __init__(
2701        self,
2702        *,
2703        value: List["RunCommandDocumentBase"],
2704        next_link: Optional[str] = None,
2705        **kwargs
2706    ):
2707        super(RunCommandListResult, self).__init__(**kwargs)
2708        self.value = value
2709        self.next_link = next_link
2710
2711
2712class RunCommandParameterDefinition(msrest.serialization.Model):
2713    """Describes the properties of a run command parameter.
2714
2715    All required parameters must be populated in order to send to Azure.
2716
2717    :param name: Required. The run command parameter name.
2718    :type name: str
2719    :param type: Required. The run command parameter type.
2720    :type type: str
2721    :param default_value: The run command parameter default value.
2722    :type default_value: str
2723    :param required: The run command parameter required.
2724    :type required: bool
2725    """
2726
2727    _validation = {
2728        'name': {'required': True},
2729        'type': {'required': True},
2730    }
2731
2732    _attribute_map = {
2733        'name': {'key': 'name', 'type': 'str'},
2734        'type': {'key': 'type', 'type': 'str'},
2735        'default_value': {'key': 'defaultValue', 'type': 'str'},
2736        'required': {'key': 'required', 'type': 'bool'},
2737    }
2738
2739    def __init__(
2740        self,
2741        *,
2742        name: str,
2743        type: str,
2744        default_value: Optional[str] = None,
2745        required: Optional[bool] = False,
2746        **kwargs
2747    ):
2748        super(RunCommandParameterDefinition, self).__init__(**kwargs)
2749        self.name = name
2750        self.type = type
2751        self.default_value = default_value
2752        self.required = required
2753
2754
2755class RunCommandResult(msrest.serialization.Model):
2756    """RunCommandResult.
2757
2758    :param value: Run command operation response.
2759    :type value: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
2760    """
2761
2762    _attribute_map = {
2763        'value': {'key': 'value', 'type': '[InstanceViewStatus]'},
2764    }
2765
2766    def __init__(
2767        self,
2768        *,
2769        value: Optional[List["InstanceViewStatus"]] = None,
2770        **kwargs
2771    ):
2772        super(RunCommandResult, self).__init__(**kwargs)
2773        self.value = value
2774
2775
2776class Sku(msrest.serialization.Model):
2777    """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.
2778
2779    :param name: The sku name.
2780    :type name: str
2781    :param tier: Specifies the tier of virtual machines in a scale set.:code:`<br />`:code:`<br />`
2782     Possible Values::code:`<br />`:code:`<br />` **Standard**\ :code:`<br />`:code:`<br />`
2783     **Basic**.
2784    :type tier: str
2785    :param capacity: Specifies the number of virtual machines in the scale set.
2786    :type capacity: long
2787    """
2788
2789    _attribute_map = {
2790        'name': {'key': 'name', 'type': 'str'},
2791        'tier': {'key': 'tier', 'type': 'str'},
2792        'capacity': {'key': 'capacity', 'type': 'long'},
2793    }
2794
2795    def __init__(
2796        self,
2797        *,
2798        name: Optional[str] = None,
2799        tier: Optional[str] = None,
2800        capacity: Optional[int] = None,
2801        **kwargs
2802    ):
2803        super(Sku, self).__init__(**kwargs)
2804        self.name = name
2805        self.tier = tier
2806        self.capacity = capacity
2807
2808
2809class SshConfiguration(msrest.serialization.Model):
2810    """SSH configuration for Linux based VMs running on Azure.
2811
2812    :param public_keys: The list of SSH public keys used to authenticate with linux based VMs.
2813    :type public_keys: list[~azure.mgmt.compute.v2018_10_01.models.SshPublicKey]
2814    """
2815
2816    _attribute_map = {
2817        'public_keys': {'key': 'publicKeys', 'type': '[SshPublicKey]'},
2818    }
2819
2820    def __init__(
2821        self,
2822        *,
2823        public_keys: Optional[List["SshPublicKey"]] = None,
2824        **kwargs
2825    ):
2826        super(SshConfiguration, self).__init__(**kwargs)
2827        self.public_keys = public_keys
2828
2829
2830class SshPublicKey(msrest.serialization.Model):
2831    """Contains information about SSH certificate public key and the path on the Linux VM where the public key is placed.
2832
2833    :param path: Specifies the full path on the created VM where ssh public key is stored. If the
2834     file already exists, the specified key is appended to the file. Example:
2835     /home/user/.ssh/authorized_keys.
2836    :type path: str
2837    :param key_data: SSH public key certificate used to authenticate with the VM through ssh. The
2838     key needs to be at least 2048-bit and in ssh-rsa format. :code:`<br>`:code:`<br>` For creating
2839     ssh keys, see `Create SSH keys on Linux and Mac for Linux VMs in Azure
2840     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
2841    :type key_data: str
2842    """
2843
2844    _attribute_map = {
2845        'path': {'key': 'path', 'type': 'str'},
2846        'key_data': {'key': 'keyData', 'type': 'str'},
2847    }
2848
2849    def __init__(
2850        self,
2851        *,
2852        path: Optional[str] = None,
2853        key_data: Optional[str] = None,
2854        **kwargs
2855    ):
2856        super(SshPublicKey, self).__init__(**kwargs)
2857        self.path = path
2858        self.key_data = key_data
2859
2860
2861class StorageProfile(msrest.serialization.Model):
2862    """Specifies the storage settings for the virtual machine disks.
2863
2864    :param image_reference: Specifies information about the image to use. You can specify
2865     information about platform images, marketplace images, or virtual machine images. This element
2866     is required when you want to use a platform image, marketplace image, or virtual machine image,
2867     but is not used in other creation operations.
2868    :type image_reference: ~azure.mgmt.compute.v2018_10_01.models.ImageReference
2869    :param os_disk: Specifies information about the operating system disk used by the virtual
2870     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
2871     for Azure virtual machines
2872     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
2873    :type os_disk: ~azure.mgmt.compute.v2018_10_01.models.OSDisk
2874    :param data_disks: Specifies the parameters that are used to add a data disk to a virtual
2875     machine. :code:`<br>`:code:`<br>` For more information about disks, see `About disks and VHDs
2876     for Azure virtual machines
2877     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
2878    :type data_disks: list[~azure.mgmt.compute.v2018_10_01.models.DataDisk]
2879    """
2880
2881    _attribute_map = {
2882        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
2883        'os_disk': {'key': 'osDisk', 'type': 'OSDisk'},
2884        'data_disks': {'key': 'dataDisks', 'type': '[DataDisk]'},
2885    }
2886
2887    def __init__(
2888        self,
2889        *,
2890        image_reference: Optional["ImageReference"] = None,
2891        os_disk: Optional["OSDisk"] = None,
2892        data_disks: Optional[List["DataDisk"]] = None,
2893        **kwargs
2894    ):
2895        super(StorageProfile, self).__init__(**kwargs)
2896        self.image_reference = image_reference
2897        self.os_disk = os_disk
2898        self.data_disks = data_disks
2899
2900
2901class SubResourceReadOnly(msrest.serialization.Model):
2902    """SubResourceReadOnly.
2903
2904    Variables are only populated by the server, and will be ignored when sending a request.
2905
2906    :ivar id: Resource Id.
2907    :vartype id: str
2908    """
2909
2910    _validation = {
2911        'id': {'readonly': True},
2912    }
2913
2914    _attribute_map = {
2915        'id': {'key': 'id', 'type': 'str'},
2916    }
2917
2918    def __init__(
2919        self,
2920        **kwargs
2921    ):
2922        super(SubResourceReadOnly, self).__init__(**kwargs)
2923        self.id = None
2924
2925
2926class ThrottledRequestsInput(LogAnalyticsInputBase):
2927    """Api request input for LogAnalytics getThrottledRequests Api.
2928
2929    All required parameters must be populated in order to send to Azure.
2930
2931    :param blob_container_sas_uri: Required. SAS Uri of the logging blob container to which
2932     LogAnalytics Api writes output logs to.
2933    :type blob_container_sas_uri: str
2934    :param from_time: Required. From time of the query.
2935    :type from_time: ~datetime.datetime
2936    :param to_time: Required. To time of the query.
2937    :type to_time: ~datetime.datetime
2938    :param group_by_throttle_policy: Group query result by Throttle Policy applied.
2939    :type group_by_throttle_policy: bool
2940    :param group_by_operation_name: Group query result by Operation Name.
2941    :type group_by_operation_name: bool
2942    :param group_by_resource_name: Group query result by Resource Name.
2943    :type group_by_resource_name: bool
2944    """
2945
2946    _validation = {
2947        'blob_container_sas_uri': {'required': True},
2948        'from_time': {'required': True},
2949        'to_time': {'required': True},
2950    }
2951
2952    _attribute_map = {
2953        'blob_container_sas_uri': {'key': 'blobContainerSasUri', 'type': 'str'},
2954        'from_time': {'key': 'fromTime', 'type': 'iso-8601'},
2955        'to_time': {'key': 'toTime', 'type': 'iso-8601'},
2956        'group_by_throttle_policy': {'key': 'groupByThrottlePolicy', 'type': 'bool'},
2957        'group_by_operation_name': {'key': 'groupByOperationName', 'type': 'bool'},
2958        'group_by_resource_name': {'key': 'groupByResourceName', 'type': 'bool'},
2959    }
2960
2961    def __init__(
2962        self,
2963        *,
2964        blob_container_sas_uri: str,
2965        from_time: datetime.datetime,
2966        to_time: datetime.datetime,
2967        group_by_throttle_policy: Optional[bool] = None,
2968        group_by_operation_name: Optional[bool] = None,
2969        group_by_resource_name: Optional[bool] = None,
2970        **kwargs
2971    ):
2972        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)
2973
2974
2975class UpgradeOperationHistoricalStatusInfo(msrest.serialization.Model):
2976    """Virtual Machine Scale Set OS Upgrade History operation response.
2977
2978    Variables are only populated by the server, and will be ignored when sending a request.
2979
2980    :ivar properties: Information about the properties of the upgrade operation.
2981    :vartype properties:
2982     ~azure.mgmt.compute.v2018_10_01.models.UpgradeOperationHistoricalStatusInfoProperties
2983    :ivar type: Resource type.
2984    :vartype type: str
2985    :ivar location: Resource location.
2986    :vartype location: str
2987    """
2988
2989    _validation = {
2990        'properties': {'readonly': True},
2991        'type': {'readonly': True},
2992        'location': {'readonly': True},
2993    }
2994
2995    _attribute_map = {
2996        'properties': {'key': 'properties', 'type': 'UpgradeOperationHistoricalStatusInfoProperties'},
2997        'type': {'key': 'type', 'type': 'str'},
2998        'location': {'key': 'location', 'type': 'str'},
2999    }
3000
3001    def __init__(
3002        self,
3003        **kwargs
3004    ):
3005        super(UpgradeOperationHistoricalStatusInfo, self).__init__(**kwargs)
3006        self.properties = None
3007        self.type = None
3008        self.location = None
3009
3010
3011class UpgradeOperationHistoricalStatusInfoProperties(msrest.serialization.Model):
3012    """Describes each OS upgrade on the Virtual Machine Scale Set.
3013
3014    Variables are only populated by the server, and will be ignored when sending a request.
3015
3016    :ivar running_status: Information about the overall status of the upgrade operation.
3017    :vartype running_status: ~azure.mgmt.compute.v2018_10_01.models.UpgradeOperationHistoryStatus
3018    :ivar progress: Counts of the VMs in each state.
3019    :vartype progress: ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradeProgressInfo
3020    :ivar error: Error Details for this upgrade if there are any.
3021    :vartype error: ~azure.mgmt.compute.v2018_10_01.models.ApiError
3022    :ivar started_by: Invoker of the Upgrade Operation. Possible values include: "Unknown", "User",
3023     "Platform".
3024    :vartype started_by: str or ~azure.mgmt.compute.v2018_10_01.models.UpgradeOperationInvoker
3025    :ivar target_image_reference: Image Reference details.
3026    :vartype target_image_reference: ~azure.mgmt.compute.v2018_10_01.models.ImageReference
3027    :ivar rollback_info: Information about OS rollback if performed.
3028    :vartype rollback_info: ~azure.mgmt.compute.v2018_10_01.models.RollbackStatusInfo
3029    """
3030
3031    _validation = {
3032        'running_status': {'readonly': True},
3033        'progress': {'readonly': True},
3034        'error': {'readonly': True},
3035        'started_by': {'readonly': True},
3036        'target_image_reference': {'readonly': True},
3037        'rollback_info': {'readonly': True},
3038    }
3039
3040    _attribute_map = {
3041        'running_status': {'key': 'runningStatus', 'type': 'UpgradeOperationHistoryStatus'},
3042        'progress': {'key': 'progress', 'type': 'RollingUpgradeProgressInfo'},
3043        'error': {'key': 'error', 'type': 'ApiError'},
3044        'started_by': {'key': 'startedBy', 'type': 'str'},
3045        'target_image_reference': {'key': 'targetImageReference', 'type': 'ImageReference'},
3046        'rollback_info': {'key': 'rollbackInfo', 'type': 'RollbackStatusInfo'},
3047    }
3048
3049    def __init__(
3050        self,
3051        **kwargs
3052    ):
3053        super(UpgradeOperationHistoricalStatusInfoProperties, self).__init__(**kwargs)
3054        self.running_status = None
3055        self.progress = None
3056        self.error = None
3057        self.started_by = None
3058        self.target_image_reference = None
3059        self.rollback_info = None
3060
3061
3062class UpgradeOperationHistoryStatus(msrest.serialization.Model):
3063    """Information about the current running state of the overall upgrade.
3064
3065    Variables are only populated by the server, and will be ignored when sending a request.
3066
3067    :ivar code: Code indicating the current status of the upgrade. Possible values include:
3068     "RollingForward", "Cancelled", "Completed", "Faulted".
3069    :vartype code: str or ~azure.mgmt.compute.v2018_10_01.models.UpgradeState
3070    :ivar start_time: Start time of the upgrade.
3071    :vartype start_time: ~datetime.datetime
3072    :ivar end_time: End time of the upgrade.
3073    :vartype end_time: ~datetime.datetime
3074    """
3075
3076    _validation = {
3077        'code': {'readonly': True},
3078        'start_time': {'readonly': True},
3079        'end_time': {'readonly': True},
3080    }
3081
3082    _attribute_map = {
3083        'code': {'key': 'code', 'type': 'str'},
3084        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
3085        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
3086    }
3087
3088    def __init__(
3089        self,
3090        **kwargs
3091    ):
3092        super(UpgradeOperationHistoryStatus, self).__init__(**kwargs)
3093        self.code = None
3094        self.start_time = None
3095        self.end_time = None
3096
3097
3098class UpgradePolicy(msrest.serialization.Model):
3099    """Describes an upgrade policy - automatic, manual, or rolling.
3100
3101    :param mode: Specifies the mode of an upgrade to virtual machines in the scale set.:code:`<br
3102     />`:code:`<br />` Possible values are::code:`<br />`:code:`<br />` **Manual** - You  control
3103     the application of updates to virtual machines in the scale set. You do this by using the
3104     manualUpgrade action.:code:`<br />`:code:`<br />` **Automatic** - All virtual machines in the
3105     scale set are  automatically updated at the same time. Possible values include: "Automatic",
3106     "Manual", "Rolling".
3107    :type mode: str or ~azure.mgmt.compute.v2018_10_01.models.UpgradeMode
3108    :param rolling_upgrade_policy: The configuration parameters used while performing a rolling
3109     upgrade.
3110    :type rolling_upgrade_policy: ~azure.mgmt.compute.v2018_10_01.models.RollingUpgradePolicy
3111    :param automatic_os_upgrade_policy: Configuration parameters used for performing automatic OS
3112     Upgrade.
3113    :type automatic_os_upgrade_policy:
3114     ~azure.mgmt.compute.v2018_10_01.models.AutomaticOSUpgradePolicy
3115    """
3116
3117    _attribute_map = {
3118        'mode': {'key': 'mode', 'type': 'str'},
3119        'rolling_upgrade_policy': {'key': 'rollingUpgradePolicy', 'type': 'RollingUpgradePolicy'},
3120        'automatic_os_upgrade_policy': {'key': 'automaticOSUpgradePolicy', 'type': 'AutomaticOSUpgradePolicy'},
3121    }
3122
3123    def __init__(
3124        self,
3125        *,
3126        mode: Optional[Union[str, "UpgradeMode"]] = None,
3127        rolling_upgrade_policy: Optional["RollingUpgradePolicy"] = None,
3128        automatic_os_upgrade_policy: Optional["AutomaticOSUpgradePolicy"] = None,
3129        **kwargs
3130    ):
3131        super(UpgradePolicy, self).__init__(**kwargs)
3132        self.mode = mode
3133        self.rolling_upgrade_policy = rolling_upgrade_policy
3134        self.automatic_os_upgrade_policy = automatic_os_upgrade_policy
3135
3136
3137class Usage(msrest.serialization.Model):
3138    """Describes Compute Resource Usage.
3139
3140    Variables are only populated by the server, and will be ignored when sending a request.
3141
3142    All required parameters must be populated in order to send to Azure.
3143
3144    :ivar unit: An enum describing the unit of usage measurement. Has constant value: "Count".
3145    :vartype unit: str
3146    :param current_value: Required. The current usage of the resource.
3147    :type current_value: int
3148    :param limit: Required. The maximum permitted usage of the resource.
3149    :type limit: long
3150    :param name: Required. The name of the type of usage.
3151    :type name: ~azure.mgmt.compute.v2018_10_01.models.UsageName
3152    """
3153
3154    _validation = {
3155        'unit': {'required': True, 'constant': True},
3156        'current_value': {'required': True},
3157        'limit': {'required': True},
3158        'name': {'required': True},
3159    }
3160
3161    _attribute_map = {
3162        'unit': {'key': 'unit', 'type': 'str'},
3163        'current_value': {'key': 'currentValue', 'type': 'int'},
3164        'limit': {'key': 'limit', 'type': 'long'},
3165        'name': {'key': 'name', 'type': 'UsageName'},
3166    }
3167
3168    unit = "Count"
3169
3170    def __init__(
3171        self,
3172        *,
3173        current_value: int,
3174        limit: int,
3175        name: "UsageName",
3176        **kwargs
3177    ):
3178        super(Usage, self).__init__(**kwargs)
3179        self.current_value = current_value
3180        self.limit = limit
3181        self.name = name
3182
3183
3184class UsageName(msrest.serialization.Model):
3185    """The Usage Names.
3186
3187    :param value: The name of the resource.
3188    :type value: str
3189    :param localized_value: The localized name of the resource.
3190    :type localized_value: str
3191    """
3192
3193    _attribute_map = {
3194        'value': {'key': 'value', 'type': 'str'},
3195        'localized_value': {'key': 'localizedValue', 'type': 'str'},
3196    }
3197
3198    def __init__(
3199        self,
3200        *,
3201        value: Optional[str] = None,
3202        localized_value: Optional[str] = None,
3203        **kwargs
3204    ):
3205        super(UsageName, self).__init__(**kwargs)
3206        self.value = value
3207        self.localized_value = localized_value
3208
3209
3210class UserAssignedIdentitiesValue(msrest.serialization.Model):
3211    """UserAssignedIdentitiesValue.
3212
3213    Variables are only populated by the server, and will be ignored when sending a request.
3214
3215    :ivar principal_id: The principal id of user assigned identity.
3216    :vartype principal_id: str
3217    :ivar client_id: The client id of user assigned identity.
3218    :vartype client_id: str
3219    """
3220
3221    _validation = {
3222        'principal_id': {'readonly': True},
3223        'client_id': {'readonly': True},
3224    }
3225
3226    _attribute_map = {
3227        'principal_id': {'key': 'principalId', 'type': 'str'},
3228        'client_id': {'key': 'clientId', 'type': 'str'},
3229    }
3230
3231    def __init__(
3232        self,
3233        **kwargs
3234    ):
3235        super(UserAssignedIdentitiesValue, self).__init__(**kwargs)
3236        self.principal_id = None
3237        self.client_id = None
3238
3239
3240class VaultCertificate(msrest.serialization.Model):
3241    """Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.
3242
3243    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
3244     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
3245     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
3246     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
3247     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
3248     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
3249     "password":":code:`<pfx-file-password>`":code:`<br>`}.
3250    :type certificate_url: str
3251    :param certificate_store: For Windows VMs, specifies the certificate store on the Virtual
3252     Machine to which the certificate should be added. The specified certificate store is implicitly
3253     in the LocalMachine account. :code:`<br>`:code:`<br>`For Linux VMs, the certificate file is
3254     placed under the /var/lib/waagent directory, with the file name &lt;UppercaseThumbprint&gt;.crt
3255     for the X509 certificate file and &lt;UppercaseThumbprint&gt;.prv for private key. Both of
3256     these files are .pem formatted.
3257    :type certificate_store: str
3258    """
3259
3260    _attribute_map = {
3261        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
3262        'certificate_store': {'key': 'certificateStore', 'type': 'str'},
3263    }
3264
3265    def __init__(
3266        self,
3267        *,
3268        certificate_url: Optional[str] = None,
3269        certificate_store: Optional[str] = None,
3270        **kwargs
3271    ):
3272        super(VaultCertificate, self).__init__(**kwargs)
3273        self.certificate_url = certificate_url
3274        self.certificate_store = certificate_store
3275
3276
3277class VaultSecretGroup(msrest.serialization.Model):
3278    """Describes a set of certificates which are all in the same Key Vault.
3279
3280    :param source_vault: The relative URL of the Key Vault containing all of the certificates in
3281     VaultCertificates.
3282    :type source_vault: ~azure.mgmt.compute.v2018_10_01.models.SubResource
3283    :param vault_certificates: The list of key vault references in SourceVault which contain
3284     certificates.
3285    :type vault_certificates: list[~azure.mgmt.compute.v2018_10_01.models.VaultCertificate]
3286    """
3287
3288    _attribute_map = {
3289        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
3290        'vault_certificates': {'key': 'vaultCertificates', 'type': '[VaultCertificate]'},
3291    }
3292
3293    def __init__(
3294        self,
3295        *,
3296        source_vault: Optional["SubResource"] = None,
3297        vault_certificates: Optional[List["VaultCertificate"]] = None,
3298        **kwargs
3299    ):
3300        super(VaultSecretGroup, self).__init__(**kwargs)
3301        self.source_vault = source_vault
3302        self.vault_certificates = vault_certificates
3303
3304
3305class VirtualHardDisk(msrest.serialization.Model):
3306    """Describes the uri of a disk.
3307
3308    :param uri: Specifies the virtual hard disk's uri.
3309    :type uri: str
3310    """
3311
3312    _attribute_map = {
3313        'uri': {'key': 'uri', 'type': 'str'},
3314    }
3315
3316    def __init__(
3317        self,
3318        *,
3319        uri: Optional[str] = None,
3320        **kwargs
3321    ):
3322        super(VirtualHardDisk, self).__init__(**kwargs)
3323        self.uri = uri
3324
3325
3326class VirtualMachine(Resource):
3327    """Describes a Virtual Machine.
3328
3329    Variables are only populated by the server, and will be ignored when sending a request.
3330
3331    All required parameters must be populated in order to send to Azure.
3332
3333    :ivar id: Resource Id.
3334    :vartype id: str
3335    :ivar name: Resource name.
3336    :vartype name: str
3337    :ivar type: Resource type.
3338    :vartype type: str
3339    :param location: Required. Resource location.
3340    :type location: str
3341    :param tags: A set of tags. Resource tags.
3342    :type tags: dict[str, str]
3343    :param plan: Specifies information about the marketplace image used to create the virtual
3344     machine. This element is only used for marketplace images. Before you can use a marketplace
3345     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
3346     the marketplace image that you want to use and then click **Want to deploy programmatically,
3347     Get Started ->**. Enter any required information and then click **Save**.
3348    :type plan: ~azure.mgmt.compute.v2018_10_01.models.Plan
3349    :ivar resources: The virtual machine child extension resources.
3350    :vartype resources: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtension]
3351    :param identity: The identity of the virtual machine, if configured.
3352    :type identity: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineIdentity
3353    :param zones: The virtual machine zones.
3354    :type zones: list[str]
3355    :param hardware_profile: Specifies the hardware settings for the virtual machine.
3356    :type hardware_profile: ~azure.mgmt.compute.v2018_10_01.models.HardwareProfile
3357    :param storage_profile: Specifies the storage settings for the virtual machine disks.
3358    :type storage_profile: ~azure.mgmt.compute.v2018_10_01.models.StorageProfile
3359    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
3360     virtual machine.
3361    :type additional_capabilities: ~azure.mgmt.compute.v2018_10_01.models.AdditionalCapabilities
3362    :param os_profile: Specifies the operating system settings for the virtual machine.
3363    :type os_profile: ~azure.mgmt.compute.v2018_10_01.models.OSProfile
3364    :param network_profile: Specifies the network interfaces of the virtual machine.
3365    :type network_profile: ~azure.mgmt.compute.v2018_10_01.models.NetworkProfile
3366    :param diagnostics_profile: Specifies the boot diagnostic settings state.
3367     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
3368    :type diagnostics_profile: ~azure.mgmt.compute.v2018_10_01.models.DiagnosticsProfile
3369    :param availability_set: Specifies information about the availability set that the virtual
3370     machine should be assigned to. Virtual machines specified in the same availability set are
3371     allocated to different nodes to maximize availability. For more information about availability
3372     sets, see `Manage the availability of virtual machines
3373     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
3374     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
3375     maintenance for virtual machines in Azure
3376     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
3377     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
3378     time. An existing VM cannot be added to an availability set.
3379    :type availability_set: ~azure.mgmt.compute.v2018_10_01.models.SubResource
3380    :param proximity_placement_group: Specifies information about the proximity placement group
3381     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
3382     2018-04-01.
3383    :type proximity_placement_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
3384    :ivar provisioning_state: The provisioning state, which only appears in the response.
3385    :vartype provisioning_state: str
3386    :ivar instance_view: The virtual machine instance view.
3387    :vartype instance_view: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineInstanceView
3388    :param license_type: Specifies that the image or disk that is being used was licensed
3389     on-premises. This element is only used for images that contain the Windows Server operating
3390     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
3391     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
3392     a request for an update, the value must match the initial value. This value cannot be updated.
3393     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
3394     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
3395     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
3396    :type license_type: str
3397    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
3398     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
3399    :vartype vm_id: str
3400    """
3401
3402    _validation = {
3403        'id': {'readonly': True},
3404        'name': {'readonly': True},
3405        'type': {'readonly': True},
3406        'location': {'required': True},
3407        'resources': {'readonly': True},
3408        'provisioning_state': {'readonly': True},
3409        'instance_view': {'readonly': True},
3410        'vm_id': {'readonly': True},
3411    }
3412
3413    _attribute_map = {
3414        'id': {'key': 'id', 'type': 'str'},
3415        'name': {'key': 'name', 'type': 'str'},
3416        'type': {'key': 'type', 'type': 'str'},
3417        'location': {'key': 'location', 'type': 'str'},
3418        'tags': {'key': 'tags', 'type': '{str}'},
3419        'plan': {'key': 'plan', 'type': 'Plan'},
3420        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
3421        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
3422        'zones': {'key': 'zones', 'type': '[str]'},
3423        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
3424        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
3425        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
3426        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
3427        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
3428        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
3429        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
3430        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
3431        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3432        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
3433        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
3434        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
3435    }
3436
3437    def __init__(
3438        self,
3439        *,
3440        location: str,
3441        tags: Optional[Dict[str, str]] = None,
3442        plan: Optional["Plan"] = None,
3443        identity: Optional["VirtualMachineIdentity"] = None,
3444        zones: Optional[List[str]] = None,
3445        hardware_profile: Optional["HardwareProfile"] = None,
3446        storage_profile: Optional["StorageProfile"] = None,
3447        additional_capabilities: Optional["AdditionalCapabilities"] = None,
3448        os_profile: Optional["OSProfile"] = None,
3449        network_profile: Optional["NetworkProfile"] = None,
3450        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
3451        availability_set: Optional["SubResource"] = None,
3452        proximity_placement_group: Optional["SubResource"] = None,
3453        license_type: Optional[str] = None,
3454        **kwargs
3455    ):
3456        super(VirtualMachine, self).__init__(location=location, tags=tags, **kwargs)
3457        self.plan = plan
3458        self.resources = None
3459        self.identity = identity
3460        self.zones = zones
3461        self.hardware_profile = hardware_profile
3462        self.storage_profile = storage_profile
3463        self.additional_capabilities = additional_capabilities
3464        self.os_profile = os_profile
3465        self.network_profile = network_profile
3466        self.diagnostics_profile = diagnostics_profile
3467        self.availability_set = availability_set
3468        self.proximity_placement_group = proximity_placement_group
3469        self.provisioning_state = None
3470        self.instance_view = None
3471        self.license_type = license_type
3472        self.vm_id = None
3473
3474
3475class VirtualMachineAgentInstanceView(msrest.serialization.Model):
3476    """The instance view of the VM Agent running on the virtual machine.
3477
3478    :param vm_agent_version: The VM Agent full version.
3479    :type vm_agent_version: str
3480    :param extension_handlers: The virtual machine extension handler instance view.
3481    :type extension_handlers:
3482     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtensionHandlerInstanceView]
3483    :param statuses: The resource status information.
3484    :type statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
3485    """
3486
3487    _attribute_map = {
3488        'vm_agent_version': {'key': 'vmAgentVersion', 'type': 'str'},
3489        'extension_handlers': {'key': 'extensionHandlers', 'type': '[VirtualMachineExtensionHandlerInstanceView]'},
3490        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
3491    }
3492
3493    def __init__(
3494        self,
3495        *,
3496        vm_agent_version: Optional[str] = None,
3497        extension_handlers: Optional[List["VirtualMachineExtensionHandlerInstanceView"]] = None,
3498        statuses: Optional[List["InstanceViewStatus"]] = None,
3499        **kwargs
3500    ):
3501        super(VirtualMachineAgentInstanceView, self).__init__(**kwargs)
3502        self.vm_agent_version = vm_agent_version
3503        self.extension_handlers = extension_handlers
3504        self.statuses = statuses
3505
3506
3507class VirtualMachineCaptureParameters(msrest.serialization.Model):
3508    """Capture Virtual Machine parameters.
3509
3510    All required parameters must be populated in order to send to Azure.
3511
3512    :param vhd_prefix: Required. The captured virtual hard disk's name prefix.
3513    :type vhd_prefix: str
3514    :param destination_container_name: Required. The destination container name.
3515    :type destination_container_name: str
3516    :param overwrite_vhds: Required. Specifies whether to overwrite the destination virtual hard
3517     disk, in case of conflict.
3518    :type overwrite_vhds: bool
3519    """
3520
3521    _validation = {
3522        'vhd_prefix': {'required': True},
3523        'destination_container_name': {'required': True},
3524        'overwrite_vhds': {'required': True},
3525    }
3526
3527    _attribute_map = {
3528        'vhd_prefix': {'key': 'vhdPrefix', 'type': 'str'},
3529        'destination_container_name': {'key': 'destinationContainerName', 'type': 'str'},
3530        'overwrite_vhds': {'key': 'overwriteVhds', 'type': 'bool'},
3531    }
3532
3533    def __init__(
3534        self,
3535        *,
3536        vhd_prefix: str,
3537        destination_container_name: str,
3538        overwrite_vhds: bool,
3539        **kwargs
3540    ):
3541        super(VirtualMachineCaptureParameters, self).__init__(**kwargs)
3542        self.vhd_prefix = vhd_prefix
3543        self.destination_container_name = destination_container_name
3544        self.overwrite_vhds = overwrite_vhds
3545
3546
3547class VirtualMachineCaptureResult(SubResource):
3548    """Output of virtual machine capture operation.
3549
3550    Variables are only populated by the server, and will be ignored when sending a request.
3551
3552    :param id: Resource Id.
3553    :type id: str
3554    :ivar schema: the schema of the captured virtual machine.
3555    :vartype schema: str
3556    :ivar content_version: the version of the content.
3557    :vartype content_version: str
3558    :ivar parameters: parameters of the captured virtual machine.
3559    :vartype parameters: any
3560    :ivar resources: a list of resource items of the captured virtual machine.
3561    :vartype resources: list[any]
3562    """
3563
3564    _validation = {
3565        'schema': {'readonly': True},
3566        'content_version': {'readonly': True},
3567        'parameters': {'readonly': True},
3568        'resources': {'readonly': True},
3569    }
3570
3571    _attribute_map = {
3572        'id': {'key': 'id', 'type': 'str'},
3573        'schema': {'key': '$schema', 'type': 'str'},
3574        'content_version': {'key': 'contentVersion', 'type': 'str'},
3575        'parameters': {'key': 'parameters', 'type': 'object'},
3576        'resources': {'key': 'resources', 'type': '[object]'},
3577    }
3578
3579    def __init__(
3580        self,
3581        *,
3582        id: Optional[str] = None,
3583        **kwargs
3584    ):
3585        super(VirtualMachineCaptureResult, self).__init__(id=id, **kwargs)
3586        self.schema = None
3587        self.content_version = None
3588        self.parameters = None
3589        self.resources = None
3590
3591
3592class VirtualMachineExtension(Resource):
3593    """Describes a Virtual Machine Extension.
3594
3595    Variables are only populated by the server, and will be ignored when sending a request.
3596
3597    All required parameters must be populated in order to send to Azure.
3598
3599    :ivar id: Resource Id.
3600    :vartype id: str
3601    :ivar name: Resource name.
3602    :vartype name: str
3603    :ivar type: Resource type.
3604    :vartype type: str
3605    :param location: Required. Resource location.
3606    :type location: str
3607    :param tags: A set of tags. Resource tags.
3608    :type tags: dict[str, str]
3609    :param force_update_tag: How the extension handler should be forced to update even if the
3610     extension configuration has not changed.
3611    :type force_update_tag: str
3612    :param publisher: The name of the extension handler publisher.
3613    :type publisher: str
3614    :param type_properties_type: Specifies the type of the extension; an example is
3615     "CustomScriptExtension".
3616    :type type_properties_type: str
3617    :param type_handler_version: Specifies the version of the script handler.
3618    :type type_handler_version: str
3619    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
3620     version if one is available at deployment time. Once deployed, however, the extension will not
3621     upgrade minor versions unless redeployed, even with this property set to true.
3622    :type auto_upgrade_minor_version: bool
3623    :param settings: Json formatted public settings for the extension.
3624    :type settings: any
3625    :param protected_settings: The extension can contain either protectedSettings or
3626     protectedSettingsFromKeyVault or no protected settings at all.
3627    :type protected_settings: any
3628    :ivar provisioning_state: The provisioning state, which only appears in the response.
3629    :vartype provisioning_state: str
3630    :param instance_view: The virtual machine extension instance view.
3631    :type instance_view: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtensionInstanceView
3632    """
3633
3634    _validation = {
3635        'id': {'readonly': True},
3636        'name': {'readonly': True},
3637        'type': {'readonly': True},
3638        'location': {'required': True},
3639        'provisioning_state': {'readonly': True},
3640    }
3641
3642    _attribute_map = {
3643        'id': {'key': 'id', 'type': 'str'},
3644        'name': {'key': 'name', 'type': 'str'},
3645        'type': {'key': 'type', 'type': 'str'},
3646        'location': {'key': 'location', 'type': 'str'},
3647        'tags': {'key': 'tags', 'type': '{str}'},
3648        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
3649        'publisher': {'key': 'properties.publisher', 'type': 'str'},
3650        'type_properties_type': {'key': 'properties.type', 'type': 'str'},
3651        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
3652        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
3653        'settings': {'key': 'properties.settings', 'type': 'object'},
3654        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
3655        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3656        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineExtensionInstanceView'},
3657    }
3658
3659    def __init__(
3660        self,
3661        *,
3662        location: str,
3663        tags: Optional[Dict[str, str]] = None,
3664        force_update_tag: Optional[str] = None,
3665        publisher: Optional[str] = None,
3666        type_properties_type: Optional[str] = None,
3667        type_handler_version: Optional[str] = None,
3668        auto_upgrade_minor_version: Optional[bool] = None,
3669        settings: Optional[Any] = None,
3670        protected_settings: Optional[Any] = None,
3671        instance_view: Optional["VirtualMachineExtensionInstanceView"] = None,
3672        **kwargs
3673    ):
3674        super(VirtualMachineExtension, self).__init__(location=location, tags=tags, **kwargs)
3675        self.force_update_tag = force_update_tag
3676        self.publisher = publisher
3677        self.type_properties_type = type_properties_type
3678        self.type_handler_version = type_handler_version
3679        self.auto_upgrade_minor_version = auto_upgrade_minor_version
3680        self.settings = settings
3681        self.protected_settings = protected_settings
3682        self.provisioning_state = None
3683        self.instance_view = instance_view
3684
3685
3686class VirtualMachineExtensionHandlerInstanceView(msrest.serialization.Model):
3687    """The instance view of a virtual machine extension handler.
3688
3689    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
3690    :type type: str
3691    :param type_handler_version: Specifies the version of the script handler.
3692    :type type_handler_version: str
3693    :param status: The extension handler status.
3694    :type status: ~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus
3695    """
3696
3697    _attribute_map = {
3698        'type': {'key': 'type', 'type': 'str'},
3699        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
3700        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
3701    }
3702
3703    def __init__(
3704        self,
3705        *,
3706        type: Optional[str] = None,
3707        type_handler_version: Optional[str] = None,
3708        status: Optional["InstanceViewStatus"] = None,
3709        **kwargs
3710    ):
3711        super(VirtualMachineExtensionHandlerInstanceView, self).__init__(**kwargs)
3712        self.type = type
3713        self.type_handler_version = type_handler_version
3714        self.status = status
3715
3716
3717class VirtualMachineExtensionImage(Resource):
3718    """Describes a Virtual Machine Extension Image.
3719
3720    Variables are only populated by the server, and will be ignored when sending a request.
3721
3722    All required parameters must be populated in order to send to Azure.
3723
3724    :ivar id: Resource Id.
3725    :vartype id: str
3726    :ivar name: Resource name.
3727    :vartype name: str
3728    :ivar type: Resource type.
3729    :vartype type: str
3730    :param location: Required. Resource location.
3731    :type location: str
3732    :param tags: A set of tags. Resource tags.
3733    :type tags: dict[str, str]
3734    :param operating_system: The operating system this extension supports.
3735    :type operating_system: str
3736    :param compute_role: The type of role (IaaS or PaaS) this extension supports.
3737    :type compute_role: str
3738    :param handler_schema: The schema defined by publisher, where extension consumers should
3739     provide settings in a matching schema.
3740    :type handler_schema: str
3741    :param vm_scale_set_enabled: Whether the extension can be used on xRP VMScaleSets. By default
3742     existing extensions are usable on scalesets, but there might be cases where a publisher wants
3743     to explicitly indicate the extension is only enabled for CRP VMs but not VMSS.
3744    :type vm_scale_set_enabled: bool
3745    :param supports_multiple_extensions: Whether the handler can support multiple extensions.
3746    :type supports_multiple_extensions: bool
3747    """
3748
3749    _validation = {
3750        'id': {'readonly': True},
3751        'name': {'readonly': True},
3752        'type': {'readonly': True},
3753        'location': {'required': True},
3754    }
3755
3756    _attribute_map = {
3757        'id': {'key': 'id', 'type': 'str'},
3758        'name': {'key': 'name', 'type': 'str'},
3759        'type': {'key': 'type', 'type': 'str'},
3760        'location': {'key': 'location', 'type': 'str'},
3761        'tags': {'key': 'tags', 'type': '{str}'},
3762        'operating_system': {'key': 'properties.operatingSystem', 'type': 'str'},
3763        'compute_role': {'key': 'properties.computeRole', 'type': 'str'},
3764        'handler_schema': {'key': 'properties.handlerSchema', 'type': 'str'},
3765        'vm_scale_set_enabled': {'key': 'properties.vmScaleSetEnabled', 'type': 'bool'},
3766        'supports_multiple_extensions': {'key': 'properties.supportsMultipleExtensions', 'type': 'bool'},
3767    }
3768
3769    def __init__(
3770        self,
3771        *,
3772        location: str,
3773        tags: Optional[Dict[str, str]] = None,
3774        operating_system: Optional[str] = None,
3775        compute_role: Optional[str] = None,
3776        handler_schema: Optional[str] = None,
3777        vm_scale_set_enabled: Optional[bool] = None,
3778        supports_multiple_extensions: Optional[bool] = None,
3779        **kwargs
3780    ):
3781        super(VirtualMachineExtensionImage, self).__init__(location=location, tags=tags, **kwargs)
3782        self.operating_system = operating_system
3783        self.compute_role = compute_role
3784        self.handler_schema = handler_schema
3785        self.vm_scale_set_enabled = vm_scale_set_enabled
3786        self.supports_multiple_extensions = supports_multiple_extensions
3787
3788
3789class VirtualMachineExtensionInstanceView(msrest.serialization.Model):
3790    """The instance view of a virtual machine extension.
3791
3792    :param name: The virtual machine extension name.
3793    :type name: str
3794    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
3795    :type type: str
3796    :param type_handler_version: Specifies the version of the script handler.
3797    :type type_handler_version: str
3798    :param substatuses: The resource status information.
3799    :type substatuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
3800    :param statuses: The resource status information.
3801    :type statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
3802    """
3803
3804    _attribute_map = {
3805        'name': {'key': 'name', 'type': 'str'},
3806        'type': {'key': 'type', 'type': 'str'},
3807        'type_handler_version': {'key': 'typeHandlerVersion', 'type': 'str'},
3808        'substatuses': {'key': 'substatuses', 'type': '[InstanceViewStatus]'},
3809        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
3810    }
3811
3812    def __init__(
3813        self,
3814        *,
3815        name: Optional[str] = None,
3816        type: Optional[str] = None,
3817        type_handler_version: Optional[str] = None,
3818        substatuses: Optional[List["InstanceViewStatus"]] = None,
3819        statuses: Optional[List["InstanceViewStatus"]] = None,
3820        **kwargs
3821    ):
3822        super(VirtualMachineExtensionInstanceView, self).__init__(**kwargs)
3823        self.name = name
3824        self.type = type
3825        self.type_handler_version = type_handler_version
3826        self.substatuses = substatuses
3827        self.statuses = statuses
3828
3829
3830class VirtualMachineExtensionsListResult(msrest.serialization.Model):
3831    """The List Extension operation response.
3832
3833    :param value: The list of extensions.
3834    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtension]
3835    """
3836
3837    _attribute_map = {
3838        'value': {'key': 'value', 'type': '[VirtualMachineExtension]'},
3839    }
3840
3841    def __init__(
3842        self,
3843        *,
3844        value: Optional[List["VirtualMachineExtension"]] = None,
3845        **kwargs
3846    ):
3847        super(VirtualMachineExtensionsListResult, self).__init__(**kwargs)
3848        self.value = value
3849
3850
3851class VirtualMachineExtensionUpdate(UpdateResource):
3852    """Describes a Virtual Machine Extension.
3853
3854    :param tags: A set of tags. Resource tags.
3855    :type tags: dict[str, str]
3856    :param force_update_tag: How the extension handler should be forced to update even if the
3857     extension configuration has not changed.
3858    :type force_update_tag: str
3859    :param publisher: The name of the extension handler publisher.
3860    :type publisher: str
3861    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
3862    :type type: str
3863    :param type_handler_version: Specifies the version of the script handler.
3864    :type type_handler_version: str
3865    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
3866     version if one is available at deployment time. Once deployed, however, the extension will not
3867     upgrade minor versions unless redeployed, even with this property set to true.
3868    :type auto_upgrade_minor_version: bool
3869    :param settings: Json formatted public settings for the extension.
3870    :type settings: any
3871    :param protected_settings: The extension can contain either protectedSettings or
3872     protectedSettingsFromKeyVault or no protected settings at all.
3873    :type protected_settings: any
3874    """
3875
3876    _attribute_map = {
3877        'tags': {'key': 'tags', 'type': '{str}'},
3878        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
3879        'publisher': {'key': 'properties.publisher', 'type': 'str'},
3880        'type': {'key': 'properties.type', 'type': 'str'},
3881        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
3882        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
3883        'settings': {'key': 'properties.settings', 'type': 'object'},
3884        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
3885    }
3886
3887    def __init__(
3888        self,
3889        *,
3890        tags: Optional[Dict[str, str]] = None,
3891        force_update_tag: Optional[str] = None,
3892        publisher: Optional[str] = None,
3893        type: Optional[str] = None,
3894        type_handler_version: Optional[str] = None,
3895        auto_upgrade_minor_version: Optional[bool] = None,
3896        settings: Optional[Any] = None,
3897        protected_settings: Optional[Any] = None,
3898        **kwargs
3899    ):
3900        super(VirtualMachineExtensionUpdate, self).__init__(tags=tags, **kwargs)
3901        self.force_update_tag = force_update_tag
3902        self.publisher = publisher
3903        self.type = type
3904        self.type_handler_version = type_handler_version
3905        self.auto_upgrade_minor_version = auto_upgrade_minor_version
3906        self.settings = settings
3907        self.protected_settings = protected_settings
3908
3909
3910class VirtualMachineHealthStatus(msrest.serialization.Model):
3911    """The health status of the VM.
3912
3913    Variables are only populated by the server, and will be ignored when sending a request.
3914
3915    :ivar status: The health status information for the VM.
3916    :vartype status: ~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus
3917    """
3918
3919    _validation = {
3920        'status': {'readonly': True},
3921    }
3922
3923    _attribute_map = {
3924        'status': {'key': 'status', 'type': 'InstanceViewStatus'},
3925    }
3926
3927    def __init__(
3928        self,
3929        **kwargs
3930    ):
3931        super(VirtualMachineHealthStatus, self).__init__(**kwargs)
3932        self.status = None
3933
3934
3935class VirtualMachineIdentity(msrest.serialization.Model):
3936    """Identity for the virtual machine.
3937
3938    Variables are only populated by the server, and will be ignored when sending a request.
3939
3940    :ivar principal_id: The principal id of virtual machine identity. This property will only be
3941     provided for a system assigned identity.
3942    :vartype principal_id: str
3943    :ivar tenant_id: The tenant id associated with the virtual machine. This property will only be
3944     provided for a system assigned identity.
3945    :vartype tenant_id: str
3946    :param type: The type of identity used for the virtual machine. The type 'SystemAssigned,
3947     UserAssigned' includes both an implicitly created identity and a set of user assigned
3948     identities. The type 'None' will remove any identities from the virtual machine. Possible
3949     values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", "None".
3950    :type type: str or ~azure.mgmt.compute.v2018_10_01.models.ResourceIdentityType
3951    :param user_assigned_identities: The list of user identities associated with the Virtual
3952     Machine. The user identity dictionary key references will be ARM resource ids in the form:
3953     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
3954    :type user_assigned_identities: dict[str,
3955     ~azure.mgmt.compute.v2018_10_01.models.UserAssignedIdentitiesValue]
3956    """
3957
3958    _validation = {
3959        'principal_id': {'readonly': True},
3960        'tenant_id': {'readonly': True},
3961    }
3962
3963    _attribute_map = {
3964        'principal_id': {'key': 'principalId', 'type': 'str'},
3965        'tenant_id': {'key': 'tenantId', 'type': 'str'},
3966        'type': {'key': 'type', 'type': 'str'},
3967        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserAssignedIdentitiesValue}'},
3968    }
3969
3970    def __init__(
3971        self,
3972        *,
3973        type: Optional[Union[str, "ResourceIdentityType"]] = None,
3974        user_assigned_identities: Optional[Dict[str, "UserAssignedIdentitiesValue"]] = None,
3975        **kwargs
3976    ):
3977        super(VirtualMachineIdentity, self).__init__(**kwargs)
3978        self.principal_id = None
3979        self.tenant_id = None
3980        self.type = type
3981        self.user_assigned_identities = user_assigned_identities
3982
3983
3984class VirtualMachineImageResource(SubResource):
3985    """Virtual machine image resource information.
3986
3987    All required parameters must be populated in order to send to Azure.
3988
3989    :param id: Resource Id.
3990    :type id: str
3991    :param name: Required. The name of the resource.
3992    :type name: str
3993    :param location: Required. The supported Azure location of the resource.
3994    :type location: str
3995    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
3996     more information about using tags, see `Using tags to organize your Azure resources
3997     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
3998    :type tags: dict[str, str]
3999    """
4000
4001    _validation = {
4002        'name': {'required': True},
4003        'location': {'required': True},
4004    }
4005
4006    _attribute_map = {
4007        'id': {'key': 'id', 'type': 'str'},
4008        'name': {'key': 'name', 'type': 'str'},
4009        'location': {'key': 'location', 'type': 'str'},
4010        'tags': {'key': 'tags', 'type': '{str}'},
4011    }
4012
4013    def __init__(
4014        self,
4015        *,
4016        name: str,
4017        location: str,
4018        id: Optional[str] = None,
4019        tags: Optional[Dict[str, str]] = None,
4020        **kwargs
4021    ):
4022        super(VirtualMachineImageResource, self).__init__(id=id, **kwargs)
4023        self.name = name
4024        self.location = location
4025        self.tags = tags
4026
4027
4028class VirtualMachineImage(VirtualMachineImageResource):
4029    """Describes a Virtual Machine Image.
4030
4031    All required parameters must be populated in order to send to Azure.
4032
4033    :param id: Resource Id.
4034    :type id: str
4035    :param name: Required. The name of the resource.
4036    :type name: str
4037    :param location: Required. The supported Azure location of the resource.
4038    :type location: str
4039    :param tags: A set of tags. Specifies the tags that are assigned to the virtual machine. For
4040     more information about using tags, see `Using tags to organize your Azure resources
4041     <https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md>`_.
4042    :type tags: dict[str, str]
4043    :param plan: Used for establishing the purchase context of any 3rd Party artifact through
4044     MarketPlace.
4045    :type plan: ~azure.mgmt.compute.v2018_10_01.models.PurchasePlan
4046    :param os_disk_image: Contains the os disk image information.
4047    :type os_disk_image: ~azure.mgmt.compute.v2018_10_01.models.OSDiskImage
4048    :param data_disk_images:
4049    :type data_disk_images: list[~azure.mgmt.compute.v2018_10_01.models.DataDiskImage]
4050    :param automatic_os_upgrade_properties: Describes automatic OS upgrade properties on the image.
4051    :type automatic_os_upgrade_properties:
4052     ~azure.mgmt.compute.v2018_10_01.models.AutomaticOSUpgradeProperties
4053    """
4054
4055    _validation = {
4056        'name': {'required': True},
4057        'location': {'required': True},
4058    }
4059
4060    _attribute_map = {
4061        'id': {'key': 'id', 'type': 'str'},
4062        'name': {'key': 'name', 'type': 'str'},
4063        'location': {'key': 'location', 'type': 'str'},
4064        'tags': {'key': 'tags', 'type': '{str}'},
4065        'plan': {'key': 'properties.plan', 'type': 'PurchasePlan'},
4066        'os_disk_image': {'key': 'properties.osDiskImage', 'type': 'OSDiskImage'},
4067        'data_disk_images': {'key': 'properties.dataDiskImages', 'type': '[DataDiskImage]'},
4068        'automatic_os_upgrade_properties': {'key': 'properties.automaticOSUpgradeProperties', 'type': 'AutomaticOSUpgradeProperties'},
4069    }
4070
4071    def __init__(
4072        self,
4073        *,
4074        name: str,
4075        location: str,
4076        id: Optional[str] = None,
4077        tags: Optional[Dict[str, str]] = None,
4078        plan: Optional["PurchasePlan"] = None,
4079        os_disk_image: Optional["OSDiskImage"] = None,
4080        data_disk_images: Optional[List["DataDiskImage"]] = None,
4081        automatic_os_upgrade_properties: Optional["AutomaticOSUpgradeProperties"] = None,
4082        **kwargs
4083    ):
4084        super(VirtualMachineImage, self).__init__(id=id, name=name, location=location, tags=tags, **kwargs)
4085        self.plan = plan
4086        self.os_disk_image = os_disk_image
4087        self.data_disk_images = data_disk_images
4088        self.automatic_os_upgrade_properties = automatic_os_upgrade_properties
4089
4090
4091class VirtualMachineInstanceView(msrest.serialization.Model):
4092    """The instance view of a virtual machine.
4093
4094    :param platform_update_domain: Specifies the update domain of the virtual machine.
4095    :type platform_update_domain: int
4096    :param platform_fault_domain: Specifies the fault domain of the virtual machine.
4097    :type platform_fault_domain: int
4098    :param computer_name: The computer name assigned to the virtual machine.
4099    :type computer_name: str
4100    :param os_name: The Operating System running on the virtual machine.
4101    :type os_name: str
4102    :param os_version: The version of Operating System running on the virtual machine.
4103    :type os_version: str
4104    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
4105    :type rdp_thumb_print: str
4106    :param vm_agent: The VM Agent running on the virtual machine.
4107    :type vm_agent: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineAgentInstanceView
4108    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
4109    :type maintenance_redeploy_status:
4110     ~azure.mgmt.compute.v2018_10_01.models.MaintenanceRedeployStatus
4111    :param disks: The virtual machine disk information.
4112    :type disks: list[~azure.mgmt.compute.v2018_10_01.models.DiskInstanceView]
4113    :param extensions: The extensions information.
4114    :type extensions:
4115     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtensionInstanceView]
4116    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
4117     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
4118     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
4119     screenshot of the VM from the hypervisor.
4120    :type boot_diagnostics: ~azure.mgmt.compute.v2018_10_01.models.BootDiagnosticsInstanceView
4121    :param statuses: The resource status information.
4122    :type statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
4123    """
4124
4125    _attribute_map = {
4126        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
4127        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
4128        'computer_name': {'key': 'computerName', 'type': 'str'},
4129        'os_name': {'key': 'osName', 'type': 'str'},
4130        'os_version': {'key': 'osVersion', 'type': 'str'},
4131        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
4132        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
4133        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
4134        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
4135        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
4136        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
4137        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
4138    }
4139
4140    def __init__(
4141        self,
4142        *,
4143        platform_update_domain: Optional[int] = None,
4144        platform_fault_domain: Optional[int] = None,
4145        computer_name: Optional[str] = None,
4146        os_name: Optional[str] = None,
4147        os_version: Optional[str] = None,
4148        rdp_thumb_print: Optional[str] = None,
4149        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
4150        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
4151        disks: Optional[List["DiskInstanceView"]] = None,
4152        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
4153        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
4154        statuses: Optional[List["InstanceViewStatus"]] = None,
4155        **kwargs
4156    ):
4157        super(VirtualMachineInstanceView, self).__init__(**kwargs)
4158        self.platform_update_domain = platform_update_domain
4159        self.platform_fault_domain = platform_fault_domain
4160        self.computer_name = computer_name
4161        self.os_name = os_name
4162        self.os_version = os_version
4163        self.rdp_thumb_print = rdp_thumb_print
4164        self.vm_agent = vm_agent
4165        self.maintenance_redeploy_status = maintenance_redeploy_status
4166        self.disks = disks
4167        self.extensions = extensions
4168        self.boot_diagnostics = boot_diagnostics
4169        self.statuses = statuses
4170
4171
4172class VirtualMachineListResult(msrest.serialization.Model):
4173    """The List Virtual Machine operation response.
4174
4175    All required parameters must be populated in order to send to Azure.
4176
4177    :param value: Required. The list of virtual machines.
4178    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachine]
4179    :param next_link: The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch
4180     the next page of Virtual Machines.
4181    :type next_link: str
4182    """
4183
4184    _validation = {
4185        'value': {'required': True},
4186    }
4187
4188    _attribute_map = {
4189        'value': {'key': 'value', 'type': '[VirtualMachine]'},
4190        'next_link': {'key': 'nextLink', 'type': 'str'},
4191    }
4192
4193    def __init__(
4194        self,
4195        *,
4196        value: List["VirtualMachine"],
4197        next_link: Optional[str] = None,
4198        **kwargs
4199    ):
4200        super(VirtualMachineListResult, self).__init__(**kwargs)
4201        self.value = value
4202        self.next_link = next_link
4203
4204
4205class VirtualMachineReimageParameters(msrest.serialization.Model):
4206    """Parameters for Reimaging Virtual Machine. NOTE: Virtual Machine OS disk will always be reimaged.
4207
4208    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
4209     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
4210    :type temp_disk: bool
4211    """
4212
4213    _attribute_map = {
4214        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
4215    }
4216
4217    def __init__(
4218        self,
4219        *,
4220        temp_disk: Optional[bool] = None,
4221        **kwargs
4222    ):
4223        super(VirtualMachineReimageParameters, self).__init__(**kwargs)
4224        self.temp_disk = temp_disk
4225
4226
4227class VirtualMachineScaleSet(Resource):
4228    """Describes a Virtual Machine Scale Set.
4229
4230    Variables are only populated by the server, and will be ignored when sending a request.
4231
4232    All required parameters must be populated in order to send to Azure.
4233
4234    :ivar id: Resource Id.
4235    :vartype id: str
4236    :ivar name: Resource name.
4237    :vartype name: str
4238    :ivar type: Resource type.
4239    :vartype type: str
4240    :param location: Required. Resource location.
4241    :type location: str
4242    :param tags: A set of tags. Resource tags.
4243    :type tags: dict[str, str]
4244    :param sku: The virtual machine scale set sku.
4245    :type sku: ~azure.mgmt.compute.v2018_10_01.models.Sku
4246    :param plan: Specifies information about the marketplace image used to create the virtual
4247     machine. This element is only used for marketplace images. Before you can use a marketplace
4248     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
4249     the marketplace image that you want to use and then click **Want to deploy programmatically,
4250     Get Started ->**. Enter any required information and then click **Save**.
4251    :type plan: ~azure.mgmt.compute.v2018_10_01.models.Plan
4252    :param identity: The identity of the virtual machine scale set, if configured.
4253    :type identity: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetIdentity
4254    :param zones: The virtual machine scale set zones. NOTE: Availability zones can only be set
4255     when you create the scale set.
4256    :type zones: list[str]
4257    :param upgrade_policy: The upgrade policy.
4258    :type upgrade_policy: ~azure.mgmt.compute.v2018_10_01.models.UpgradePolicy
4259    :param automatic_repairs_policy: Policy for automatic repairs.
4260    :type automatic_repairs_policy: ~azure.mgmt.compute.v2018_10_01.models.AutomaticRepairsPolicy
4261    :param virtual_machine_profile: The virtual machine profile.
4262    :type virtual_machine_profile:
4263     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetVMProfile
4264    :ivar provisioning_state: The provisioning state, which only appears in the response.
4265    :vartype provisioning_state: str
4266    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
4267     overprovisioned.
4268    :type overprovision: bool
4269    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
4270     are launched only on the requested number of VMs which are finally kept. This property will
4271     hence ensure that the extensions do not run on the extra overprovisioned VMs.
4272    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
4273    :ivar unique_id: Specifies the ID which uniquely identifies a Virtual Machine Scale Set.
4274    :vartype unique_id: str
4275    :param single_placement_group: When true this limits the scale set to a single placement group,
4276     of max size 100 virtual machines.
4277    :type single_placement_group: bool
4278    :param zone_balance: Whether to force strictly even Virtual Machine distribution cross x-zones
4279     in case there is zone outage.
4280    :type zone_balance: bool
4281    :param platform_fault_domain_count: Fault Domain count for each placement group.
4282    :type platform_fault_domain_count: int
4283    :param proximity_placement_group: Specifies information about the proximity placement group
4284     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
4285     api-version: 2018-04-01.
4286    :type proximity_placement_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
4287    """
4288
4289    _validation = {
4290        'id': {'readonly': True},
4291        'name': {'readonly': True},
4292        'type': {'readonly': True},
4293        'location': {'required': True},
4294        'provisioning_state': {'readonly': True},
4295        'unique_id': {'readonly': True},
4296    }
4297
4298    _attribute_map = {
4299        'id': {'key': 'id', 'type': 'str'},
4300        'name': {'key': 'name', 'type': 'str'},
4301        'type': {'key': 'type', 'type': 'str'},
4302        'location': {'key': 'location', 'type': 'str'},
4303        'tags': {'key': 'tags', 'type': '{str}'},
4304        'sku': {'key': 'sku', 'type': 'Sku'},
4305        'plan': {'key': 'plan', 'type': 'Plan'},
4306        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
4307        'zones': {'key': 'zones', 'type': '[str]'},
4308        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
4309        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
4310        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetVMProfile'},
4311        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4312        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
4313        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
4314        'unique_id': {'key': 'properties.uniqueId', 'type': 'str'},
4315        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
4316        'zone_balance': {'key': 'properties.zoneBalance', 'type': 'bool'},
4317        'platform_fault_domain_count': {'key': 'properties.platformFaultDomainCount', 'type': 'int'},
4318        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
4319    }
4320
4321    def __init__(
4322        self,
4323        *,
4324        location: str,
4325        tags: Optional[Dict[str, str]] = None,
4326        sku: Optional["Sku"] = None,
4327        plan: Optional["Plan"] = None,
4328        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
4329        zones: Optional[List[str]] = None,
4330        upgrade_policy: Optional["UpgradePolicy"] = None,
4331        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
4332        virtual_machine_profile: Optional["VirtualMachineScaleSetVMProfile"] = None,
4333        overprovision: Optional[bool] = None,
4334        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
4335        single_placement_group: Optional[bool] = None,
4336        zone_balance: Optional[bool] = None,
4337        platform_fault_domain_count: Optional[int] = None,
4338        proximity_placement_group: Optional["SubResource"] = None,
4339        **kwargs
4340    ):
4341        super(VirtualMachineScaleSet, self).__init__(location=location, tags=tags, **kwargs)
4342        self.sku = sku
4343        self.plan = plan
4344        self.identity = identity
4345        self.zones = zones
4346        self.upgrade_policy = upgrade_policy
4347        self.automatic_repairs_policy = automatic_repairs_policy
4348        self.virtual_machine_profile = virtual_machine_profile
4349        self.provisioning_state = None
4350        self.overprovision = overprovision
4351        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
4352        self.unique_id = None
4353        self.single_placement_group = single_placement_group
4354        self.zone_balance = zone_balance
4355        self.platform_fault_domain_count = platform_fault_domain_count
4356        self.proximity_placement_group = proximity_placement_group
4357
4358
4359class VirtualMachineScaleSetDataDisk(msrest.serialization.Model):
4360    """Describes a virtual machine scale set data disk.
4361
4362    All required parameters must be populated in order to send to Azure.
4363
4364    :param name: The disk name.
4365    :type name: str
4366    :param lun: Required. Specifies the logical unit number of the data disk. This value is used to
4367     identify data disks within the VM and therefore must be unique for each data disk attached to a
4368     VM.
4369    :type lun: int
4370    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
4371     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
4372     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
4373     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
4374     "ReadWrite".
4375    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
4376    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
4377     disabled on the disk.
4378    :type write_accelerator_enabled: bool
4379    :param create_option: Required. The create option. Possible values include: "FromImage",
4380     "Empty", "Attach".
4381    :type create_option: str or ~azure.mgmt.compute.v2018_10_01.models.DiskCreateOptionTypes
4382    :param disk_size_gb: Specifies the size of an empty data disk in gigabytes. This element can be
4383     used to overwrite the size of the disk in a virtual machine image. :code:`<br>`:code:`<br>`
4384     This value cannot be larger than 1023 GB.
4385    :type disk_size_gb: int
4386    :param managed_disk: The managed disk parameters.
4387    :type managed_disk:
4388     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetManagedDiskParameters
4389    """
4390
4391    _validation = {
4392        'lun': {'required': True},
4393        'create_option': {'required': True},
4394    }
4395
4396    _attribute_map = {
4397        'name': {'key': 'name', 'type': 'str'},
4398        'lun': {'key': 'lun', 'type': 'int'},
4399        'caching': {'key': 'caching', 'type': 'str'},
4400        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
4401        'create_option': {'key': 'createOption', 'type': 'str'},
4402        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
4403        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
4404    }
4405
4406    def __init__(
4407        self,
4408        *,
4409        lun: int,
4410        create_option: Union[str, "DiskCreateOptionTypes"],
4411        name: Optional[str] = None,
4412        caching: Optional[Union[str, "CachingTypes"]] = None,
4413        write_accelerator_enabled: Optional[bool] = None,
4414        disk_size_gb: Optional[int] = None,
4415        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
4416        **kwargs
4417    ):
4418        super(VirtualMachineScaleSetDataDisk, self).__init__(**kwargs)
4419        self.name = name
4420        self.lun = lun
4421        self.caching = caching
4422        self.write_accelerator_enabled = write_accelerator_enabled
4423        self.create_option = create_option
4424        self.disk_size_gb = disk_size_gb
4425        self.managed_disk = managed_disk
4426
4427
4428class VirtualMachineScaleSetExtension(SubResourceReadOnly):
4429    """Describes a Virtual Machine Scale Set Extension.
4430
4431    Variables are only populated by the server, and will be ignored when sending a request.
4432
4433    :ivar id: Resource Id.
4434    :vartype id: str
4435    :param name: The name of the extension.
4436    :type name: str
4437    :param force_update_tag: If a value is provided and is different from the previous value, the
4438     extension handler will be forced to update even if the extension configuration has not changed.
4439    :type force_update_tag: str
4440    :param publisher: The name of the extension handler publisher.
4441    :type publisher: str
4442    :param type: Specifies the type of the extension; an example is "CustomScriptExtension".
4443    :type type: str
4444    :param type_handler_version: Specifies the version of the script handler.
4445    :type type_handler_version: str
4446    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
4447     version if one is available at deployment time. Once deployed, however, the extension will not
4448     upgrade minor versions unless redeployed, even with this property set to true.
4449    :type auto_upgrade_minor_version: bool
4450    :param settings: Json formatted public settings for the extension.
4451    :type settings: any
4452    :param protected_settings: The extension can contain either protectedSettings or
4453     protectedSettingsFromKeyVault or no protected settings at all.
4454    :type protected_settings: any
4455    :ivar provisioning_state: The provisioning state, which only appears in the response.
4456    :vartype provisioning_state: str
4457    :param provision_after_extensions: Collection of extension names after which this extension
4458     needs to be provisioned.
4459    :type provision_after_extensions: list[str]
4460    """
4461
4462    _validation = {
4463        'id': {'readonly': True},
4464        'provisioning_state': {'readonly': True},
4465    }
4466
4467    _attribute_map = {
4468        'id': {'key': 'id', 'type': 'str'},
4469        'name': {'key': 'name', 'type': 'str'},
4470        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
4471        'publisher': {'key': 'properties.publisher', 'type': 'str'},
4472        'type': {'key': 'properties.type', 'type': 'str'},
4473        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
4474        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
4475        'settings': {'key': 'properties.settings', 'type': 'object'},
4476        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
4477        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4478        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
4479    }
4480
4481    def __init__(
4482        self,
4483        *,
4484        name: Optional[str] = None,
4485        force_update_tag: Optional[str] = None,
4486        publisher: Optional[str] = None,
4487        type: Optional[str] = None,
4488        type_handler_version: Optional[str] = None,
4489        auto_upgrade_minor_version: Optional[bool] = None,
4490        settings: Optional[Any] = None,
4491        protected_settings: Optional[Any] = None,
4492        provision_after_extensions: Optional[List[str]] = None,
4493        **kwargs
4494    ):
4495        super(VirtualMachineScaleSetExtension, self).__init__(**kwargs)
4496        self.name = name
4497        self.force_update_tag = force_update_tag
4498        self.publisher = publisher
4499        self.type = type
4500        self.type_handler_version = type_handler_version
4501        self.auto_upgrade_minor_version = auto_upgrade_minor_version
4502        self.settings = settings
4503        self.protected_settings = protected_settings
4504        self.provisioning_state = None
4505        self.provision_after_extensions = provision_after_extensions
4506
4507
4508class VirtualMachineScaleSetExtensionListResult(msrest.serialization.Model):
4509    """The List VM scale set extension operation response.
4510
4511    All required parameters must be populated in order to send to Azure.
4512
4513    :param value: Required. The list of VM scale set extensions.
4514    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetExtension]
4515    :param next_link: The uri to fetch the next page of VM scale set extensions. Call ListNext()
4516     with this to fetch the next page of VM scale set extensions.
4517    :type next_link: str
4518    """
4519
4520    _validation = {
4521        'value': {'required': True},
4522    }
4523
4524    _attribute_map = {
4525        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetExtension]'},
4526        'next_link': {'key': 'nextLink', 'type': 'str'},
4527    }
4528
4529    def __init__(
4530        self,
4531        *,
4532        value: List["VirtualMachineScaleSetExtension"],
4533        next_link: Optional[str] = None,
4534        **kwargs
4535    ):
4536        super(VirtualMachineScaleSetExtensionListResult, self).__init__(**kwargs)
4537        self.value = value
4538        self.next_link = next_link
4539
4540
4541class VirtualMachineScaleSetExtensionProfile(msrest.serialization.Model):
4542    """Describes a virtual machine scale set extension profile.
4543
4544    :param extensions: The virtual machine scale set child extension resources.
4545    :type extensions: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetExtension]
4546    """
4547
4548    _attribute_map = {
4549        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetExtension]'},
4550    }
4551
4552    def __init__(
4553        self,
4554        *,
4555        extensions: Optional[List["VirtualMachineScaleSetExtension"]] = None,
4556        **kwargs
4557    ):
4558        super(VirtualMachineScaleSetExtensionProfile, self).__init__(**kwargs)
4559        self.extensions = extensions
4560
4561
4562class VirtualMachineScaleSetIdentity(msrest.serialization.Model):
4563    """Identity for the virtual machine scale set.
4564
4565    Variables are only populated by the server, and will be ignored when sending a request.
4566
4567    :ivar principal_id: The principal id of virtual machine scale set identity. This property will
4568     only be provided for a system assigned identity.
4569    :vartype principal_id: str
4570    :ivar tenant_id: The tenant id associated with the virtual machine scale set. This property
4571     will only be provided for a system assigned identity.
4572    :vartype tenant_id: str
4573    :param type: The type of identity used for the virtual machine scale set. The type
4574     'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user
4575     assigned identities. The type 'None' will remove any identities from the virtual machine scale
4576     set. Possible values include: "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned",
4577     "None".
4578    :type type: str or ~azure.mgmt.compute.v2018_10_01.models.ResourceIdentityType
4579    :param user_assigned_identities: The list of user identities associated with the virtual
4580     machine scale set. The user identity dictionary key references will be ARM resource ids in the
4581     form:
4582     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
4583    :type user_assigned_identities: dict[str,
4584     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue]
4585    """
4586
4587    _validation = {
4588        'principal_id': {'readonly': True},
4589        'tenant_id': {'readonly': True},
4590    }
4591
4592    _attribute_map = {
4593        'principal_id': {'key': 'principalId', 'type': 'str'},
4594        'tenant_id': {'key': 'tenantId', 'type': 'str'},
4595        'type': {'key': 'type', 'type': 'str'},
4596        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue}'},
4597    }
4598
4599    def __init__(
4600        self,
4601        *,
4602        type: Optional[Union[str, "ResourceIdentityType"]] = None,
4603        user_assigned_identities: Optional[Dict[str, "VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue"]] = None,
4604        **kwargs
4605    ):
4606        super(VirtualMachineScaleSetIdentity, self).__init__(**kwargs)
4607        self.principal_id = None
4608        self.tenant_id = None
4609        self.type = type
4610        self.user_assigned_identities = user_assigned_identities
4611
4612
4613class VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue(msrest.serialization.Model):
4614    """VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue.
4615
4616    Variables are only populated by the server, and will be ignored when sending a request.
4617
4618    :ivar principal_id: The principal id of user assigned identity.
4619    :vartype principal_id: str
4620    :ivar client_id: The client id of user assigned identity.
4621    :vartype client_id: str
4622    """
4623
4624    _validation = {
4625        'principal_id': {'readonly': True},
4626        'client_id': {'readonly': True},
4627    }
4628
4629    _attribute_map = {
4630        'principal_id': {'key': 'principalId', 'type': 'str'},
4631        'client_id': {'key': 'clientId', 'type': 'str'},
4632    }
4633
4634    def __init__(
4635        self,
4636        **kwargs
4637    ):
4638        super(VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue, self).__init__(**kwargs)
4639        self.principal_id = None
4640        self.client_id = None
4641
4642
4643class VirtualMachineScaleSetInstanceView(msrest.serialization.Model):
4644    """The instance view of a virtual machine scale set.
4645
4646    Variables are only populated by the server, and will be ignored when sending a request.
4647
4648    :ivar virtual_machine: The instance view status summary for the virtual machine scale set.
4649    :vartype virtual_machine:
4650     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetInstanceViewStatusesSummary
4651    :ivar extensions: The extensions information.
4652    :vartype extensions:
4653     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetVMExtensionsSummary]
4654    :param statuses: The resource status information.
4655    :type statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
4656    """
4657
4658    _validation = {
4659        'virtual_machine': {'readonly': True},
4660        'extensions': {'readonly': True},
4661    }
4662
4663    _attribute_map = {
4664        'virtual_machine': {'key': 'virtualMachine', 'type': 'VirtualMachineScaleSetInstanceViewStatusesSummary'},
4665        'extensions': {'key': 'extensions', 'type': '[VirtualMachineScaleSetVMExtensionsSummary]'},
4666        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
4667    }
4668
4669    def __init__(
4670        self,
4671        *,
4672        statuses: Optional[List["InstanceViewStatus"]] = None,
4673        **kwargs
4674    ):
4675        super(VirtualMachineScaleSetInstanceView, self).__init__(**kwargs)
4676        self.virtual_machine = None
4677        self.extensions = None
4678        self.statuses = statuses
4679
4680
4681class VirtualMachineScaleSetInstanceViewStatusesSummary(msrest.serialization.Model):
4682    """Instance view statuses summary for virtual machines of a virtual machine scale set.
4683
4684    Variables are only populated by the server, and will be ignored when sending a request.
4685
4686    :ivar statuses_summary: The extensions information.
4687    :vartype statuses_summary:
4688     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineStatusCodeCount]
4689    """
4690
4691    _validation = {
4692        'statuses_summary': {'readonly': True},
4693    }
4694
4695    _attribute_map = {
4696        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
4697    }
4698
4699    def __init__(
4700        self,
4701        **kwargs
4702    ):
4703        super(VirtualMachineScaleSetInstanceViewStatusesSummary, self).__init__(**kwargs)
4704        self.statuses_summary = None
4705
4706
4707class VirtualMachineScaleSetIPConfiguration(SubResource):
4708    """Describes a virtual machine scale set network profile's IP configuration.
4709
4710    All required parameters must be populated in order to send to Azure.
4711
4712    :param id: Resource Id.
4713    :type id: str
4714    :param name: Required. The IP configuration name.
4715    :type name: str
4716    :param subnet: Specifies the identifier of the subnet.
4717    :type subnet: ~azure.mgmt.compute.v2018_10_01.models.ApiEntityReference
4718    :param primary: Specifies the primary network interface in case the virtual machine has more
4719     than 1 network interface.
4720    :type primary: bool
4721    :param public_ip_address_configuration: The publicIPAddressConfiguration.
4722    :type public_ip_address_configuration:
4723     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetPublicIPAddressConfiguration
4724    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
4725     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
4726     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
4727    :type private_ip_address_version: str or ~azure.mgmt.compute.v2018_10_01.models.IPVersion
4728    :param application_gateway_backend_address_pools: Specifies an array of references to backend
4729     address pools of application gateways. A scale set can reference backend address pools of
4730     multiple application gateways. Multiple scale sets cannot use the same application gateway.
4731    :type application_gateway_backend_address_pools:
4732     list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
4733    :param application_security_groups: Specifies an array of references to application security
4734     group.
4735    :type application_security_groups: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
4736    :param load_balancer_backend_address_pools: Specifies an array of references to backend address
4737     pools of load balancers. A scale set can reference backend address pools of one public and one
4738     internal load balancer. Multiple scale sets cannot use the same load balancer.
4739    :type load_balancer_backend_address_pools:
4740     list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
4741    :param load_balancer_inbound_nat_pools: Specifies an array of references to inbound Nat pools
4742     of the load balancers. A scale set can reference inbound nat pools of one public and one
4743     internal load balancer. Multiple scale sets cannot use the same load balancer.
4744    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
4745    """
4746
4747    _validation = {
4748        'name': {'required': True},
4749    }
4750
4751    _attribute_map = {
4752        'id': {'key': 'id', 'type': 'str'},
4753        'name': {'key': 'name', 'type': 'str'},
4754        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
4755        'primary': {'key': 'properties.primary', 'type': 'bool'},
4756        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetPublicIPAddressConfiguration'},
4757        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
4758        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
4759        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
4760        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
4761        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
4762    }
4763
4764    def __init__(
4765        self,
4766        *,
4767        name: str,
4768        id: Optional[str] = None,
4769        subnet: Optional["ApiEntityReference"] = None,
4770        primary: Optional[bool] = None,
4771        public_ip_address_configuration: Optional["VirtualMachineScaleSetPublicIPAddressConfiguration"] = None,
4772        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
4773        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
4774        application_security_groups: Optional[List["SubResource"]] = None,
4775        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
4776        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
4777        **kwargs
4778    ):
4779        super(VirtualMachineScaleSetIPConfiguration, self).__init__(id=id, **kwargs)
4780        self.name = name
4781        self.subnet = subnet
4782        self.primary = primary
4783        self.public_ip_address_configuration = public_ip_address_configuration
4784        self.private_ip_address_version = private_ip_address_version
4785        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
4786        self.application_security_groups = application_security_groups
4787        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
4788        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
4789
4790
4791class VirtualMachineScaleSetIpTag(msrest.serialization.Model):
4792    """Contains the IP tag associated with the public IP address.
4793
4794    :param ip_tag_type: IP tag type. Example: FirstPartyUsage.
4795    :type ip_tag_type: str
4796    :param tag: IP tag associated with the public IP. Example: SQL, Storage etc.
4797    :type tag: str
4798    """
4799
4800    _attribute_map = {
4801        'ip_tag_type': {'key': 'ipTagType', 'type': 'str'},
4802        'tag': {'key': 'tag', 'type': 'str'},
4803    }
4804
4805    def __init__(
4806        self,
4807        *,
4808        ip_tag_type: Optional[str] = None,
4809        tag: Optional[str] = None,
4810        **kwargs
4811    ):
4812        super(VirtualMachineScaleSetIpTag, self).__init__(**kwargs)
4813        self.ip_tag_type = ip_tag_type
4814        self.tag = tag
4815
4816
4817class VirtualMachineScaleSetListOSUpgradeHistory(msrest.serialization.Model):
4818    """List of Virtual Machine Scale Set OS Upgrade History operation response.
4819
4820    All required parameters must be populated in order to send to Azure.
4821
4822    :param value: Required. The list of OS upgrades performed on the virtual machine scale set.
4823    :type value: list[~azure.mgmt.compute.v2018_10_01.models.UpgradeOperationHistoricalStatusInfo]
4824    :param next_link: The uri to fetch the next page of OS Upgrade History. Call ListNext() with
4825     this to fetch the next page of history of upgrades.
4826    :type next_link: str
4827    """
4828
4829    _validation = {
4830        'value': {'required': True},
4831    }
4832
4833    _attribute_map = {
4834        'value': {'key': 'value', 'type': '[UpgradeOperationHistoricalStatusInfo]'},
4835        'next_link': {'key': 'nextLink', 'type': 'str'},
4836    }
4837
4838    def __init__(
4839        self,
4840        *,
4841        value: List["UpgradeOperationHistoricalStatusInfo"],
4842        next_link: Optional[str] = None,
4843        **kwargs
4844    ):
4845        super(VirtualMachineScaleSetListOSUpgradeHistory, self).__init__(**kwargs)
4846        self.value = value
4847        self.next_link = next_link
4848
4849
4850class VirtualMachineScaleSetListResult(msrest.serialization.Model):
4851    """The List Virtual Machine operation response.
4852
4853    All required parameters must be populated in order to send to Azure.
4854
4855    :param value: Required. The list of virtual machine scale sets.
4856    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSet]
4857    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
4858     with this to fetch the next page of VMSS.
4859    :type next_link: str
4860    """
4861
4862    _validation = {
4863        'value': {'required': True},
4864    }
4865
4866    _attribute_map = {
4867        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
4868        'next_link': {'key': 'nextLink', 'type': 'str'},
4869    }
4870
4871    def __init__(
4872        self,
4873        *,
4874        value: List["VirtualMachineScaleSet"],
4875        next_link: Optional[str] = None,
4876        **kwargs
4877    ):
4878        super(VirtualMachineScaleSetListResult, self).__init__(**kwargs)
4879        self.value = value
4880        self.next_link = next_link
4881
4882
4883class VirtualMachineScaleSetListSkusResult(msrest.serialization.Model):
4884    """The Virtual Machine Scale Set List Skus operation response.
4885
4886    All required parameters must be populated in order to send to Azure.
4887
4888    :param value: Required. The list of skus available for the virtual machine scale set.
4889    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetSku]
4890    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set Skus. Call
4891     ListNext() with this to fetch the next page of VMSS Skus.
4892    :type next_link: str
4893    """
4894
4895    _validation = {
4896        'value': {'required': True},
4897    }
4898
4899    _attribute_map = {
4900        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetSku]'},
4901        'next_link': {'key': 'nextLink', 'type': 'str'},
4902    }
4903
4904    def __init__(
4905        self,
4906        *,
4907        value: List["VirtualMachineScaleSetSku"],
4908        next_link: Optional[str] = None,
4909        **kwargs
4910    ):
4911        super(VirtualMachineScaleSetListSkusResult, self).__init__(**kwargs)
4912        self.value = value
4913        self.next_link = next_link
4914
4915
4916class VirtualMachineScaleSetListWithLinkResult(msrest.serialization.Model):
4917    """The List Virtual Machine operation response.
4918
4919    All required parameters must be populated in order to send to Azure.
4920
4921    :param value: Required. The list of virtual machine scale sets.
4922    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSet]
4923    :param next_link: The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext()
4924     with this to fetch the next page of Virtual Machine Scale Sets.
4925    :type next_link: str
4926    """
4927
4928    _validation = {
4929        'value': {'required': True},
4930    }
4931
4932    _attribute_map = {
4933        'value': {'key': 'value', 'type': '[VirtualMachineScaleSet]'},
4934        'next_link': {'key': 'nextLink', 'type': 'str'},
4935    }
4936
4937    def __init__(
4938        self,
4939        *,
4940        value: List["VirtualMachineScaleSet"],
4941        next_link: Optional[str] = None,
4942        **kwargs
4943    ):
4944        super(VirtualMachineScaleSetListWithLinkResult, self).__init__(**kwargs)
4945        self.value = value
4946        self.next_link = next_link
4947
4948
4949class VirtualMachineScaleSetManagedDiskParameters(msrest.serialization.Model):
4950    """Describes the parameters of a ScaleSet managed disk.
4951
4952    :param storage_account_type: Specifies the storage account type for the managed disk. Managed
4953     OS disk storage account type can only be set when you create the scale set. NOTE: UltraSSD_LRS
4954     can only be used with data disks, it cannot be used with OS Disk. Possible values include:
4955     "Standard_LRS", "Premium_LRS", "StandardSSD_LRS", "UltraSSD_LRS".
4956    :type storage_account_type: str or ~azure.mgmt.compute.v2018_10_01.models.StorageAccountTypes
4957    """
4958
4959    _attribute_map = {
4960        'storage_account_type': {'key': 'storageAccountType', 'type': 'str'},
4961    }
4962
4963    def __init__(
4964        self,
4965        *,
4966        storage_account_type: Optional[Union[str, "StorageAccountTypes"]] = None,
4967        **kwargs
4968    ):
4969        super(VirtualMachineScaleSetManagedDiskParameters, self).__init__(**kwargs)
4970        self.storage_account_type = storage_account_type
4971
4972
4973class VirtualMachineScaleSetNetworkConfiguration(SubResource):
4974    """Describes a virtual machine scale set network profile's network configurations.
4975
4976    All required parameters must be populated in order to send to Azure.
4977
4978    :param id: Resource Id.
4979    :type id: str
4980    :param name: Required. The network configuration name.
4981    :type name: str
4982    :param primary: Specifies the primary network interface in case the virtual machine has more
4983     than 1 network interface.
4984    :type primary: bool
4985    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
4986     networking-enabled.
4987    :type enable_accelerated_networking: bool
4988    :param network_security_group: The network security group.
4989    :type network_security_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
4990    :param dns_settings: The dns settings to be applied on the network interfaces.
4991    :type dns_settings:
4992     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
4993    :param ip_configurations: Specifies the IP configurations of the network interface.
4994    :type ip_configurations:
4995     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetIPConfiguration]
4996    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
4997    :type enable_ip_forwarding: bool
4998    """
4999
5000    _validation = {
5001        'name': {'required': True},
5002    }
5003
5004    _attribute_map = {
5005        'id': {'key': 'id', 'type': 'str'},
5006        'name': {'key': 'name', 'type': 'str'},
5007        'primary': {'key': 'properties.primary', 'type': 'bool'},
5008        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
5009        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
5010        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
5011        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetIPConfiguration]'},
5012        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
5013    }
5014
5015    def __init__(
5016        self,
5017        *,
5018        name: str,
5019        id: Optional[str] = None,
5020        primary: Optional[bool] = None,
5021        enable_accelerated_networking: Optional[bool] = None,
5022        network_security_group: Optional["SubResource"] = None,
5023        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
5024        ip_configurations: Optional[List["VirtualMachineScaleSetIPConfiguration"]] = None,
5025        enable_ip_forwarding: Optional[bool] = None,
5026        **kwargs
5027    ):
5028        super(VirtualMachineScaleSetNetworkConfiguration, self).__init__(id=id, **kwargs)
5029        self.name = name
5030        self.primary = primary
5031        self.enable_accelerated_networking = enable_accelerated_networking
5032        self.network_security_group = network_security_group
5033        self.dns_settings = dns_settings
5034        self.ip_configurations = ip_configurations
5035        self.enable_ip_forwarding = enable_ip_forwarding
5036
5037
5038class VirtualMachineScaleSetNetworkConfigurationDnsSettings(msrest.serialization.Model):
5039    """Describes a virtual machines scale sets network configuration's DNS settings.
5040
5041    :param dns_servers: List of DNS servers IP addresses.
5042    :type dns_servers: list[str]
5043    """
5044
5045    _attribute_map = {
5046        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
5047    }
5048
5049    def __init__(
5050        self,
5051        *,
5052        dns_servers: Optional[List[str]] = None,
5053        **kwargs
5054    ):
5055        super(VirtualMachineScaleSetNetworkConfigurationDnsSettings, self).__init__(**kwargs)
5056        self.dns_servers = dns_servers
5057
5058
5059class VirtualMachineScaleSetNetworkProfile(msrest.serialization.Model):
5060    """Describes a virtual machine scale set network profile.
5061
5062    :param health_probe: A reference to a load balancer probe used to determine the health of an
5063     instance in the virtual machine scale set. The reference will be in the form:
5064     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
5065    :type health_probe: ~azure.mgmt.compute.v2018_10_01.models.ApiEntityReference
5066    :param network_interface_configurations: The list of network configurations.
5067    :type network_interface_configurations:
5068     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetNetworkConfiguration]
5069    """
5070
5071    _attribute_map = {
5072        'health_probe': {'key': 'healthProbe', 'type': 'ApiEntityReference'},
5073        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetNetworkConfiguration]'},
5074    }
5075
5076    def __init__(
5077        self,
5078        *,
5079        health_probe: Optional["ApiEntityReference"] = None,
5080        network_interface_configurations: Optional[List["VirtualMachineScaleSetNetworkConfiguration"]] = None,
5081        **kwargs
5082    ):
5083        super(VirtualMachineScaleSetNetworkProfile, self).__init__(**kwargs)
5084        self.health_probe = health_probe
5085        self.network_interface_configurations = network_interface_configurations
5086
5087
5088class VirtualMachineScaleSetOSDisk(msrest.serialization.Model):
5089    """Describes a virtual machine scale set operating system disk.
5090
5091    All required parameters must be populated in order to send to Azure.
5092
5093    :param name: The disk name.
5094    :type name: str
5095    :param caching: Specifies the caching requirements. :code:`<br>`:code:`<br>` Possible values
5096     are: :code:`<br>`:code:`<br>` **None** :code:`<br>`:code:`<br>` **ReadOnly**
5097     :code:`<br>`:code:`<br>` **ReadWrite** :code:`<br>`:code:`<br>` Default: **None for Standard
5098     storage. ReadOnly for Premium storage**. Possible values include: "None", "ReadOnly",
5099     "ReadWrite".
5100    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
5101    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
5102     disabled on the disk.
5103    :type write_accelerator_enabled: bool
5104    :param create_option: Required. Specifies how the virtual machines in the scale set should be
5105     created.:code:`<br>`:code:`<br>` The only allowed value is: **FromImage** \u2013 This value is
5106     used when you are using an image to create the virtual machine. If you are using a platform
5107     image, you also use the imageReference element described above. If you are using a marketplace
5108     image, you  also use the plan element previously described. Possible values include:
5109     "FromImage", "Empty", "Attach".
5110    :type create_option: str or ~azure.mgmt.compute.v2018_10_01.models.DiskCreateOptionTypes
5111    :param diff_disk_settings: Specifies the ephemeral disk Settings for the operating system disk
5112     used by the virtual machine scale set.
5113    :type diff_disk_settings: ~azure.mgmt.compute.v2018_10_01.models.DiffDiskSettings
5114    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
5115     can be used to overwrite the size of the disk in a virtual machine image.
5116     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
5117    :type disk_size_gb: int
5118    :param os_type: This property allows you to specify the type of the OS that is included in the
5119     disk if creating a VM from user-image or a specialized VHD. :code:`<br>`:code:`<br>` Possible
5120     values are: :code:`<br>`:code:`<br>` **Windows** :code:`<br>`:code:`<br>` **Linux**. Possible
5121     values include: "Windows", "Linux".
5122    :type os_type: str or ~azure.mgmt.compute.v2018_10_01.models.OperatingSystemTypes
5123    :param image: Specifies information about the unmanaged user image to base the scale set on.
5124    :type image: ~azure.mgmt.compute.v2018_10_01.models.VirtualHardDisk
5125    :param vhd_containers: Specifies the container urls that are used to store operating system
5126     disks for the scale set.
5127    :type vhd_containers: list[str]
5128    :param managed_disk: The managed disk parameters.
5129    :type managed_disk:
5130     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetManagedDiskParameters
5131    """
5132
5133    _validation = {
5134        'create_option': {'required': True},
5135    }
5136
5137    _attribute_map = {
5138        'name': {'key': 'name', 'type': 'str'},
5139        'caching': {'key': 'caching', 'type': 'str'},
5140        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
5141        'create_option': {'key': 'createOption', 'type': 'str'},
5142        'diff_disk_settings': {'key': 'diffDiskSettings', 'type': 'DiffDiskSettings'},
5143        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
5144        'os_type': {'key': 'osType', 'type': 'str'},
5145        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
5146        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
5147        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
5148    }
5149
5150    def __init__(
5151        self,
5152        *,
5153        create_option: Union[str, "DiskCreateOptionTypes"],
5154        name: Optional[str] = None,
5155        caching: Optional[Union[str, "CachingTypes"]] = None,
5156        write_accelerator_enabled: Optional[bool] = None,
5157        diff_disk_settings: Optional["DiffDiskSettings"] = None,
5158        disk_size_gb: Optional[int] = None,
5159        os_type: Optional[Union[str, "OperatingSystemTypes"]] = None,
5160        image: Optional["VirtualHardDisk"] = None,
5161        vhd_containers: Optional[List[str]] = None,
5162        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
5163        **kwargs
5164    ):
5165        super(VirtualMachineScaleSetOSDisk, self).__init__(**kwargs)
5166        self.name = name
5167        self.caching = caching
5168        self.write_accelerator_enabled = write_accelerator_enabled
5169        self.create_option = create_option
5170        self.diff_disk_settings = diff_disk_settings
5171        self.disk_size_gb = disk_size_gb
5172        self.os_type = os_type
5173        self.image = image
5174        self.vhd_containers = vhd_containers
5175        self.managed_disk = managed_disk
5176
5177
5178class VirtualMachineScaleSetOSProfile(msrest.serialization.Model):
5179    """Describes a virtual machine scale set OS profile.
5180
5181    :param computer_name_prefix: Specifies the computer name prefix for all of the virtual machines
5182     in the scale set. Computer name prefixes must be 1 to 15 characters long.
5183    :type computer_name_prefix: str
5184    :param admin_username: Specifies the name of the administrator account.
5185     :code:`<br>`:code:`<br>` **Windows-only restriction:** Cannot end in "."
5186     :code:`<br>`:code:`<br>` **Disallowed values:** "administrator", "admin", "user", "user1",
5187     "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2",
5188     "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql",
5189     "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
5190     :code:`<br>`:code:`<br>` **Minimum-length (Linux):** 1  character :code:`<br>`:code:`<br>`
5191     **Max-length (Linux):** 64 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 20
5192     characters  :code:`<br>`:code:`<br>`:code:`<li>` For root access to the Linux VM, see `Using
5193     root privileges on Linux virtual machines in Azure
5194     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_\
5195     :code:`<br>`:code:`<li>` For a list of built-in system users on Linux that should not be used
5196     in this field, see `Selecting User Names for Linux on Azure
5197     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
5198    :type admin_username: str
5199    :param admin_password: Specifies the password of the administrator account.
5200     :code:`<br>`:code:`<br>` **Minimum-length (Windows):** 8 characters :code:`<br>`:code:`<br>`
5201     **Minimum-length (Linux):** 6 characters :code:`<br>`:code:`<br>` **Max-length (Windows):** 123
5202     characters :code:`<br>`:code:`<br>` **Max-length (Linux):** 72 characters
5203     :code:`<br>`:code:`<br>` **Complexity requirements:** 3 out of 4 conditions below need to be
5204     fulfilled :code:`<br>` Has lower characters :code:`<br>`Has upper characters :code:`<br>` Has a
5205     digit :code:`<br>` Has a special character (Regex match [\W_]) :code:`<br>`:code:`<br>`
5206     **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word",
5207     "pass@word1", "Password!", "Password1", "Password22", "iloveyou!" :code:`<br>`:code:`<br>` For
5208     resetting the password, see `How to reset the Remote Desktop service or its login password in a
5209     Windows VM
5210     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
5211     :code:`<br>`:code:`<br>` For resetting root password, see `Manage users, SSH, and check or
5212     repair disks on Azure Linux VMs using the VMAccess Extension
5213     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password>`_.
5214    :type admin_password: str
5215    :param custom_data: Specifies a base-64 encoded string of custom data. The base-64 encoded
5216     string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum
5217     length of the binary array is 65535 bytes. :code:`<br>`:code:`<br>` For using cloud-init for
5218     your VM, see `Using cloud-init to customize a Linux VM during creation
5219     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
5220    :type custom_data: str
5221    :param windows_configuration: Specifies Windows operating system settings on the virtual
5222     machine.
5223    :type windows_configuration: ~azure.mgmt.compute.v2018_10_01.models.WindowsConfiguration
5224    :param linux_configuration: Specifies the Linux operating system settings on the virtual
5225     machine. :code:`<br>`:code:`<br>`For a list of supported Linux distributions, see `Linux on
5226     Azure-Endorsed Distributions
5227     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_
5228     :code:`<br>`:code:`<br>` For running non-endorsed distributions, see `Information for
5229     Non-Endorsed Distributions
5230     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json>`_.
5231    :type linux_configuration: ~azure.mgmt.compute.v2018_10_01.models.LinuxConfiguration
5232    :param secrets: Specifies set of certificates that should be installed onto the virtual
5233     machines in the scale set.
5234    :type secrets: list[~azure.mgmt.compute.v2018_10_01.models.VaultSecretGroup]
5235    """
5236
5237    _attribute_map = {
5238        'computer_name_prefix': {'key': 'computerNamePrefix', 'type': 'str'},
5239        'admin_username': {'key': 'adminUsername', 'type': 'str'},
5240        'admin_password': {'key': 'adminPassword', 'type': 'str'},
5241        'custom_data': {'key': 'customData', 'type': 'str'},
5242        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
5243        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
5244        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
5245    }
5246
5247    def __init__(
5248        self,
5249        *,
5250        computer_name_prefix: Optional[str] = None,
5251        admin_username: Optional[str] = None,
5252        admin_password: Optional[str] = None,
5253        custom_data: Optional[str] = None,
5254        windows_configuration: Optional["WindowsConfiguration"] = None,
5255        linux_configuration: Optional["LinuxConfiguration"] = None,
5256        secrets: Optional[List["VaultSecretGroup"]] = None,
5257        **kwargs
5258    ):
5259        super(VirtualMachineScaleSetOSProfile, self).__init__(**kwargs)
5260        self.computer_name_prefix = computer_name_prefix
5261        self.admin_username = admin_username
5262        self.admin_password = admin_password
5263        self.custom_data = custom_data
5264        self.windows_configuration = windows_configuration
5265        self.linux_configuration = linux_configuration
5266        self.secrets = secrets
5267
5268
5269class VirtualMachineScaleSetPublicIPAddressConfiguration(msrest.serialization.Model):
5270    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
5271
5272    All required parameters must be populated in order to send to Azure.
5273
5274    :param name: Required. The publicIP address configuration name.
5275    :type name: str
5276    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
5277    :type idle_timeout_in_minutes: int
5278    :param dns_settings: The dns settings to be applied on the publicIP addresses .
5279    :type dns_settings:
5280     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
5281    :param ip_tags: The list of IP tags associated with the public IP address.
5282    :type ip_tags: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetIpTag]
5283    :param public_ip_prefix: The PublicIPPrefix from which to allocate publicIP addresses.
5284    :type public_ip_prefix: ~azure.mgmt.compute.v2018_10_01.models.SubResource
5285    """
5286
5287    _validation = {
5288        'name': {'required': True},
5289    }
5290
5291    _attribute_map = {
5292        'name': {'key': 'name', 'type': 'str'},
5293        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
5294        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
5295        'ip_tags': {'key': 'properties.ipTags', 'type': '[VirtualMachineScaleSetIpTag]'},
5296        'public_ip_prefix': {'key': 'properties.publicIPPrefix', 'type': 'SubResource'},
5297    }
5298
5299    def __init__(
5300        self,
5301        *,
5302        name: str,
5303        idle_timeout_in_minutes: Optional[int] = None,
5304        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
5305        ip_tags: Optional[List["VirtualMachineScaleSetIpTag"]] = None,
5306        public_ip_prefix: Optional["SubResource"] = None,
5307        **kwargs
5308    ):
5309        super(VirtualMachineScaleSetPublicIPAddressConfiguration, self).__init__(**kwargs)
5310        self.name = name
5311        self.idle_timeout_in_minutes = idle_timeout_in_minutes
5312        self.dns_settings = dns_settings
5313        self.ip_tags = ip_tags
5314        self.public_ip_prefix = public_ip_prefix
5315
5316
5317class VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings(msrest.serialization.Model):
5318    """Describes a virtual machines scale sets network configuration's DNS settings.
5319
5320    All required parameters must be populated in order to send to Azure.
5321
5322    :param domain_name_label: Required. The Domain name label.The concatenation of the domain name
5323     label and vm index will be the domain name labels of the PublicIPAddress resources that will be
5324     created.
5325    :type domain_name_label: str
5326    """
5327
5328    _validation = {
5329        'domain_name_label': {'required': True},
5330    }
5331
5332    _attribute_map = {
5333        'domain_name_label': {'key': 'domainNameLabel', 'type': 'str'},
5334    }
5335
5336    def __init__(
5337        self,
5338        *,
5339        domain_name_label: str,
5340        **kwargs
5341    ):
5342        super(VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings, self).__init__(**kwargs)
5343        self.domain_name_label = domain_name_label
5344
5345
5346class VirtualMachineScaleSetVMReimageParameters(VirtualMachineReimageParameters):
5347    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
5348
5349    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
5350     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
5351    :type temp_disk: bool
5352    """
5353
5354    _attribute_map = {
5355        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
5356    }
5357
5358    def __init__(
5359        self,
5360        *,
5361        temp_disk: Optional[bool] = None,
5362        **kwargs
5363    ):
5364        super(VirtualMachineScaleSetVMReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
5365
5366
5367class VirtualMachineScaleSetReimageParameters(VirtualMachineScaleSetVMReimageParameters):
5368    """Describes a Virtual Machine Scale Set VM Reimage Parameters.
5369
5370    :param temp_disk: Specifies whether to reimage temp disk. Default value: false. Note: This temp
5371     disk reimage parameter is only supported for VM/VMSS with Ephemeral OS disk.
5372    :type temp_disk: bool
5373    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
5374     scale set instance ids will result in the operation being performed on all virtual machines in
5375     the virtual machine scale set.
5376    :type instance_ids: list[str]
5377    """
5378
5379    _attribute_map = {
5380        'temp_disk': {'key': 'tempDisk', 'type': 'bool'},
5381        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
5382    }
5383
5384    def __init__(
5385        self,
5386        *,
5387        temp_disk: Optional[bool] = None,
5388        instance_ids: Optional[List[str]] = None,
5389        **kwargs
5390    ):
5391        super(VirtualMachineScaleSetReimageParameters, self).__init__(temp_disk=temp_disk, **kwargs)
5392        self.instance_ids = instance_ids
5393
5394
5395class VirtualMachineScaleSetSku(msrest.serialization.Model):
5396    """Describes an available virtual machine scale set sku.
5397
5398    Variables are only populated by the server, and will be ignored when sending a request.
5399
5400    :ivar resource_type: The type of resource the sku applies to.
5401    :vartype resource_type: str
5402    :ivar sku: The Sku.
5403    :vartype sku: ~azure.mgmt.compute.v2018_10_01.models.Sku
5404    :ivar capacity: Specifies the number of virtual machines in the scale set.
5405    :vartype capacity: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetSkuCapacity
5406    """
5407
5408    _validation = {
5409        'resource_type': {'readonly': True},
5410        'sku': {'readonly': True},
5411        'capacity': {'readonly': True},
5412    }
5413
5414    _attribute_map = {
5415        'resource_type': {'key': 'resourceType', 'type': 'str'},
5416        'sku': {'key': 'sku', 'type': 'Sku'},
5417        'capacity': {'key': 'capacity', 'type': 'VirtualMachineScaleSetSkuCapacity'},
5418    }
5419
5420    def __init__(
5421        self,
5422        **kwargs
5423    ):
5424        super(VirtualMachineScaleSetSku, self).__init__(**kwargs)
5425        self.resource_type = None
5426        self.sku = None
5427        self.capacity = None
5428
5429
5430class VirtualMachineScaleSetSkuCapacity(msrest.serialization.Model):
5431    """Describes scaling information of a sku.
5432
5433    Variables are only populated by the server, and will be ignored when sending a request.
5434
5435    :ivar minimum: The minimum capacity.
5436    :vartype minimum: long
5437    :ivar maximum: The maximum capacity that can be set.
5438    :vartype maximum: long
5439    :ivar default_capacity: The default capacity.
5440    :vartype default_capacity: long
5441    :ivar scale_type: The scale type applicable to the sku. Possible values include: "Automatic",
5442     "None".
5443    :vartype scale_type: str or
5444     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetSkuScaleType
5445    """
5446
5447    _validation = {
5448        'minimum': {'readonly': True},
5449        'maximum': {'readonly': True},
5450        'default_capacity': {'readonly': True},
5451        'scale_type': {'readonly': True},
5452    }
5453
5454    _attribute_map = {
5455        'minimum': {'key': 'minimum', 'type': 'long'},
5456        'maximum': {'key': 'maximum', 'type': 'long'},
5457        'default_capacity': {'key': 'defaultCapacity', 'type': 'long'},
5458        'scale_type': {'key': 'scaleType', 'type': 'str'},
5459    }
5460
5461    def __init__(
5462        self,
5463        **kwargs
5464    ):
5465        super(VirtualMachineScaleSetSkuCapacity, self).__init__(**kwargs)
5466        self.minimum = None
5467        self.maximum = None
5468        self.default_capacity = None
5469        self.scale_type = None
5470
5471
5472class VirtualMachineScaleSetStorageProfile(msrest.serialization.Model):
5473    """Describes a virtual machine scale set storage profile.
5474
5475    :param image_reference: Specifies information about the image to use. You can specify
5476     information about platform images, marketplace images, or virtual machine images. This element
5477     is required when you want to use a platform image, marketplace image, or virtual machine image,
5478     but is not used in other creation operations.
5479    :type image_reference: ~azure.mgmt.compute.v2018_10_01.models.ImageReference
5480    :param os_disk: Specifies information about the operating system disk used by the virtual
5481     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
5482     `About disks and VHDs for Azure virtual machines
5483     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
5484    :type os_disk: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetOSDisk
5485    :param data_disks: Specifies the parameters that are used to add data disks to the virtual
5486     machines in the scale set. :code:`<br>`:code:`<br>` For more information about disks, see
5487     `About disks and VHDs for Azure virtual machines
5488     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
5489    :type data_disks: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetDataDisk]
5490    """
5491
5492    _attribute_map = {
5493        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
5494        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetOSDisk'},
5495        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
5496    }
5497
5498    def __init__(
5499        self,
5500        *,
5501        image_reference: Optional["ImageReference"] = None,
5502        os_disk: Optional["VirtualMachineScaleSetOSDisk"] = None,
5503        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
5504        **kwargs
5505    ):
5506        super(VirtualMachineScaleSetStorageProfile, self).__init__(**kwargs)
5507        self.image_reference = image_reference
5508        self.os_disk = os_disk
5509        self.data_disks = data_disks
5510
5511
5512class VirtualMachineScaleSetUpdate(UpdateResource):
5513    """Describes a Virtual Machine Scale Set.
5514
5515    :param tags: A set of tags. Resource tags.
5516    :type tags: dict[str, str]
5517    :param sku: The virtual machine scale set sku.
5518    :type sku: ~azure.mgmt.compute.v2018_10_01.models.Sku
5519    :param plan: The purchase plan when deploying a virtual machine scale set from VM Marketplace
5520     images.
5521    :type plan: ~azure.mgmt.compute.v2018_10_01.models.Plan
5522    :param identity: The identity of the virtual machine scale set, if configured.
5523    :type identity: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetIdentity
5524    :param upgrade_policy: The upgrade policy.
5525    :type upgrade_policy: ~azure.mgmt.compute.v2018_10_01.models.UpgradePolicy
5526    :param automatic_repairs_policy: Policy for automatic repairs.
5527    :type automatic_repairs_policy: ~azure.mgmt.compute.v2018_10_01.models.AutomaticRepairsPolicy
5528    :param virtual_machine_profile: The virtual machine profile.
5529    :type virtual_machine_profile:
5530     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateVMProfile
5531    :param overprovision: Specifies whether the Virtual Machine Scale Set should be
5532     overprovisioned.
5533    :type overprovision: bool
5534    :param do_not_run_extensions_on_overprovisioned_v_ms: When Overprovision is enabled, extensions
5535     are launched only on the requested number of VMs which are finally kept. This property will
5536     hence ensure that the extensions do not run on the extra overprovisioned VMs.
5537    :type do_not_run_extensions_on_overprovisioned_v_ms: bool
5538    :param single_placement_group: When true this limits the scale set to a single placement group,
5539     of max size 100 virtual machines. NOTE: If singlePlacementGroup is true, it may be modified to
5540     false. However, if singlePlacementGroup is false, it may not be modified to true.
5541    :type single_placement_group: bool
5542    :param proximity_placement_group: Specifies information about the proximity placement group
5543     that the virtual machine scale set should be assigned to. :code:`<br>`:code:`<br>`Minimum
5544     api-version: 2018-04-01.
5545    :type proximity_placement_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
5546    """
5547
5548    _attribute_map = {
5549        'tags': {'key': 'tags', 'type': '{str}'},
5550        'sku': {'key': 'sku', 'type': 'Sku'},
5551        'plan': {'key': 'plan', 'type': 'Plan'},
5552        'identity': {'key': 'identity', 'type': 'VirtualMachineScaleSetIdentity'},
5553        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'UpgradePolicy'},
5554        'automatic_repairs_policy': {'key': 'properties.automaticRepairsPolicy', 'type': 'AutomaticRepairsPolicy'},
5555        'virtual_machine_profile': {'key': 'properties.virtualMachineProfile', 'type': 'VirtualMachineScaleSetUpdateVMProfile'},
5556        'overprovision': {'key': 'properties.overprovision', 'type': 'bool'},
5557        'do_not_run_extensions_on_overprovisioned_v_ms': {'key': 'properties.doNotRunExtensionsOnOverprovisionedVMs', 'type': 'bool'},
5558        'single_placement_group': {'key': 'properties.singlePlacementGroup', 'type': 'bool'},
5559        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
5560    }
5561
5562    def __init__(
5563        self,
5564        *,
5565        tags: Optional[Dict[str, str]] = None,
5566        sku: Optional["Sku"] = None,
5567        plan: Optional["Plan"] = None,
5568        identity: Optional["VirtualMachineScaleSetIdentity"] = None,
5569        upgrade_policy: Optional["UpgradePolicy"] = None,
5570        automatic_repairs_policy: Optional["AutomaticRepairsPolicy"] = None,
5571        virtual_machine_profile: Optional["VirtualMachineScaleSetUpdateVMProfile"] = None,
5572        overprovision: Optional[bool] = None,
5573        do_not_run_extensions_on_overprovisioned_v_ms: Optional[bool] = None,
5574        single_placement_group: Optional[bool] = None,
5575        proximity_placement_group: Optional["SubResource"] = None,
5576        **kwargs
5577    ):
5578        super(VirtualMachineScaleSetUpdate, self).__init__(tags=tags, **kwargs)
5579        self.sku = sku
5580        self.plan = plan
5581        self.identity = identity
5582        self.upgrade_policy = upgrade_policy
5583        self.automatic_repairs_policy = automatic_repairs_policy
5584        self.virtual_machine_profile = virtual_machine_profile
5585        self.overprovision = overprovision
5586        self.do_not_run_extensions_on_overprovisioned_v_ms = do_not_run_extensions_on_overprovisioned_v_ms
5587        self.single_placement_group = single_placement_group
5588        self.proximity_placement_group = proximity_placement_group
5589
5590
5591class VirtualMachineScaleSetUpdateIPConfiguration(SubResource):
5592    """Describes a virtual machine scale set network profile's IP configuration.
5593
5594    :param id: Resource Id.
5595    :type id: str
5596    :param name: The IP configuration name.
5597    :type name: str
5598    :param subnet: The subnet.
5599    :type subnet: ~azure.mgmt.compute.v2018_10_01.models.ApiEntityReference
5600    :param primary: Specifies the primary IP Configuration in case the network interface has more
5601     than one IP Configuration.
5602    :type primary: bool
5603    :param public_ip_address_configuration: The publicIPAddressConfiguration.
5604    :type public_ip_address_configuration:
5605     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdatePublicIPAddressConfiguration
5606    :param private_ip_address_version: Available from Api-Version 2017-03-30 onwards, it represents
5607     whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible
5608     values are: 'IPv4' and 'IPv6'. Possible values include: "IPv4", "IPv6".
5609    :type private_ip_address_version: str or ~azure.mgmt.compute.v2018_10_01.models.IPVersion
5610    :param application_gateway_backend_address_pools: The application gateway backend address
5611     pools.
5612    :type application_gateway_backend_address_pools:
5613     list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
5614    :param application_security_groups: Specifies an array of references to application security
5615     group.
5616    :type application_security_groups: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
5617    :param load_balancer_backend_address_pools: The load balancer backend address pools.
5618    :type load_balancer_backend_address_pools:
5619     list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
5620    :param load_balancer_inbound_nat_pools: The load balancer inbound nat pools.
5621    :type load_balancer_inbound_nat_pools: list[~azure.mgmt.compute.v2018_10_01.models.SubResource]
5622    """
5623
5624    _attribute_map = {
5625        'id': {'key': 'id', 'type': 'str'},
5626        'name': {'key': 'name', 'type': 'str'},
5627        'subnet': {'key': 'properties.subnet', 'type': 'ApiEntityReference'},
5628        'primary': {'key': 'properties.primary', 'type': 'bool'},
5629        'public_ip_address_configuration': {'key': 'properties.publicIPAddressConfiguration', 'type': 'VirtualMachineScaleSetUpdatePublicIPAddressConfiguration'},
5630        'private_ip_address_version': {'key': 'properties.privateIPAddressVersion', 'type': 'str'},
5631        'application_gateway_backend_address_pools': {'key': 'properties.applicationGatewayBackendAddressPools', 'type': '[SubResource]'},
5632        'application_security_groups': {'key': 'properties.applicationSecurityGroups', 'type': '[SubResource]'},
5633        'load_balancer_backend_address_pools': {'key': 'properties.loadBalancerBackendAddressPools', 'type': '[SubResource]'},
5634        'load_balancer_inbound_nat_pools': {'key': 'properties.loadBalancerInboundNatPools', 'type': '[SubResource]'},
5635    }
5636
5637    def __init__(
5638        self,
5639        *,
5640        id: Optional[str] = None,
5641        name: Optional[str] = None,
5642        subnet: Optional["ApiEntityReference"] = None,
5643        primary: Optional[bool] = None,
5644        public_ip_address_configuration: Optional["VirtualMachineScaleSetUpdatePublicIPAddressConfiguration"] = None,
5645        private_ip_address_version: Optional[Union[str, "IPVersion"]] = None,
5646        application_gateway_backend_address_pools: Optional[List["SubResource"]] = None,
5647        application_security_groups: Optional[List["SubResource"]] = None,
5648        load_balancer_backend_address_pools: Optional[List["SubResource"]] = None,
5649        load_balancer_inbound_nat_pools: Optional[List["SubResource"]] = None,
5650        **kwargs
5651    ):
5652        super(VirtualMachineScaleSetUpdateIPConfiguration, self).__init__(id=id, **kwargs)
5653        self.name = name
5654        self.subnet = subnet
5655        self.primary = primary
5656        self.public_ip_address_configuration = public_ip_address_configuration
5657        self.private_ip_address_version = private_ip_address_version
5658        self.application_gateway_backend_address_pools = application_gateway_backend_address_pools
5659        self.application_security_groups = application_security_groups
5660        self.load_balancer_backend_address_pools = load_balancer_backend_address_pools
5661        self.load_balancer_inbound_nat_pools = load_balancer_inbound_nat_pools
5662
5663
5664class VirtualMachineScaleSetUpdateNetworkConfiguration(SubResource):
5665    """Describes a virtual machine scale set network profile's network configurations.
5666
5667    :param id: Resource Id.
5668    :type id: str
5669    :param name: The network configuration name.
5670    :type name: str
5671    :param primary: Whether this is a primary NIC on a virtual machine.
5672    :type primary: bool
5673    :param enable_accelerated_networking: Specifies whether the network interface is accelerated
5674     networking-enabled.
5675    :type enable_accelerated_networking: bool
5676    :param network_security_group: The network security group.
5677    :type network_security_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
5678    :param dns_settings: The dns settings to be applied on the network interfaces.
5679    :type dns_settings:
5680     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetNetworkConfigurationDnsSettings
5681    :param ip_configurations: The virtual machine scale set IP Configuration.
5682    :type ip_configurations:
5683     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateIPConfiguration]
5684    :param enable_ip_forwarding: Whether IP forwarding enabled on this NIC.
5685    :type enable_ip_forwarding: bool
5686    """
5687
5688    _attribute_map = {
5689        'id': {'key': 'id', 'type': 'str'},
5690        'name': {'key': 'name', 'type': 'str'},
5691        'primary': {'key': 'properties.primary', 'type': 'bool'},
5692        'enable_accelerated_networking': {'key': 'properties.enableAcceleratedNetworking', 'type': 'bool'},
5693        'network_security_group': {'key': 'properties.networkSecurityGroup', 'type': 'SubResource'},
5694        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetNetworkConfigurationDnsSettings'},
5695        'ip_configurations': {'key': 'properties.ipConfigurations', 'type': '[VirtualMachineScaleSetUpdateIPConfiguration]'},
5696        'enable_ip_forwarding': {'key': 'properties.enableIPForwarding', 'type': 'bool'},
5697    }
5698
5699    def __init__(
5700        self,
5701        *,
5702        id: Optional[str] = None,
5703        name: Optional[str] = None,
5704        primary: Optional[bool] = None,
5705        enable_accelerated_networking: Optional[bool] = None,
5706        network_security_group: Optional["SubResource"] = None,
5707        dns_settings: Optional["VirtualMachineScaleSetNetworkConfigurationDnsSettings"] = None,
5708        ip_configurations: Optional[List["VirtualMachineScaleSetUpdateIPConfiguration"]] = None,
5709        enable_ip_forwarding: Optional[bool] = None,
5710        **kwargs
5711    ):
5712        super(VirtualMachineScaleSetUpdateNetworkConfiguration, self).__init__(id=id, **kwargs)
5713        self.name = name
5714        self.primary = primary
5715        self.enable_accelerated_networking = enable_accelerated_networking
5716        self.network_security_group = network_security_group
5717        self.dns_settings = dns_settings
5718        self.ip_configurations = ip_configurations
5719        self.enable_ip_forwarding = enable_ip_forwarding
5720
5721
5722class VirtualMachineScaleSetUpdateNetworkProfile(msrest.serialization.Model):
5723    """Describes a virtual machine scale set network profile.
5724
5725    :param network_interface_configurations: The list of network configurations.
5726    :type network_interface_configurations:
5727     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateNetworkConfiguration]
5728    """
5729
5730    _attribute_map = {
5731        'network_interface_configurations': {'key': 'networkInterfaceConfigurations', 'type': '[VirtualMachineScaleSetUpdateNetworkConfiguration]'},
5732    }
5733
5734    def __init__(
5735        self,
5736        *,
5737        network_interface_configurations: Optional[List["VirtualMachineScaleSetUpdateNetworkConfiguration"]] = None,
5738        **kwargs
5739    ):
5740        super(VirtualMachineScaleSetUpdateNetworkProfile, self).__init__(**kwargs)
5741        self.network_interface_configurations = network_interface_configurations
5742
5743
5744class VirtualMachineScaleSetUpdateOSDisk(msrest.serialization.Model):
5745    """Describes virtual machine scale set operating system disk Update Object. This should be used for Updating VMSS OS Disk.
5746
5747    :param caching: The caching type. Possible values include: "None", "ReadOnly", "ReadWrite".
5748    :type caching: str or ~azure.mgmt.compute.v2018_10_01.models.CachingTypes
5749    :param write_accelerator_enabled: Specifies whether writeAccelerator should be enabled or
5750     disabled on the disk.
5751    :type write_accelerator_enabled: bool
5752    :param disk_size_gb: Specifies the size of the operating system disk in gigabytes. This element
5753     can be used to overwrite the size of the disk in a virtual machine image.
5754     :code:`<br>`:code:`<br>` This value cannot be larger than 1023 GB.
5755    :type disk_size_gb: int
5756    :param image: The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before
5757     using it to attach to the Virtual Machine. If SourceImage is provided, the destination
5758     VirtualHardDisk should not exist.
5759    :type image: ~azure.mgmt.compute.v2018_10_01.models.VirtualHardDisk
5760    :param vhd_containers: The list of virtual hard disk container uris.
5761    :type vhd_containers: list[str]
5762    :param managed_disk: The managed disk parameters.
5763    :type managed_disk:
5764     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetManagedDiskParameters
5765    """
5766
5767    _attribute_map = {
5768        'caching': {'key': 'caching', 'type': 'str'},
5769        'write_accelerator_enabled': {'key': 'writeAcceleratorEnabled', 'type': 'bool'},
5770        'disk_size_gb': {'key': 'diskSizeGB', 'type': 'int'},
5771        'image': {'key': 'image', 'type': 'VirtualHardDisk'},
5772        'vhd_containers': {'key': 'vhdContainers', 'type': '[str]'},
5773        'managed_disk': {'key': 'managedDisk', 'type': 'VirtualMachineScaleSetManagedDiskParameters'},
5774    }
5775
5776    def __init__(
5777        self,
5778        *,
5779        caching: Optional[Union[str, "CachingTypes"]] = None,
5780        write_accelerator_enabled: Optional[bool] = None,
5781        disk_size_gb: Optional[int] = None,
5782        image: Optional["VirtualHardDisk"] = None,
5783        vhd_containers: Optional[List[str]] = None,
5784        managed_disk: Optional["VirtualMachineScaleSetManagedDiskParameters"] = None,
5785        **kwargs
5786    ):
5787        super(VirtualMachineScaleSetUpdateOSDisk, self).__init__(**kwargs)
5788        self.caching = caching
5789        self.write_accelerator_enabled = write_accelerator_enabled
5790        self.disk_size_gb = disk_size_gb
5791        self.image = image
5792        self.vhd_containers = vhd_containers
5793        self.managed_disk = managed_disk
5794
5795
5796class VirtualMachineScaleSetUpdateOSProfile(msrest.serialization.Model):
5797    """Describes a virtual machine scale set OS profile.
5798
5799    :param custom_data: A base-64 encoded string of custom data.
5800    :type custom_data: str
5801    :param windows_configuration: The Windows Configuration of the OS profile.
5802    :type windows_configuration: ~azure.mgmt.compute.v2018_10_01.models.WindowsConfiguration
5803    :param linux_configuration: The Linux Configuration of the OS profile.
5804    :type linux_configuration: ~azure.mgmt.compute.v2018_10_01.models.LinuxConfiguration
5805    :param secrets: The List of certificates for addition to the VM.
5806    :type secrets: list[~azure.mgmt.compute.v2018_10_01.models.VaultSecretGroup]
5807    """
5808
5809    _attribute_map = {
5810        'custom_data': {'key': 'customData', 'type': 'str'},
5811        'windows_configuration': {'key': 'windowsConfiguration', 'type': 'WindowsConfiguration'},
5812        'linux_configuration': {'key': 'linuxConfiguration', 'type': 'LinuxConfiguration'},
5813        'secrets': {'key': 'secrets', 'type': '[VaultSecretGroup]'},
5814    }
5815
5816    def __init__(
5817        self,
5818        *,
5819        custom_data: Optional[str] = None,
5820        windows_configuration: Optional["WindowsConfiguration"] = None,
5821        linux_configuration: Optional["LinuxConfiguration"] = None,
5822        secrets: Optional[List["VaultSecretGroup"]] = None,
5823        **kwargs
5824    ):
5825        super(VirtualMachineScaleSetUpdateOSProfile, self).__init__(**kwargs)
5826        self.custom_data = custom_data
5827        self.windows_configuration = windows_configuration
5828        self.linux_configuration = linux_configuration
5829        self.secrets = secrets
5830
5831
5832class VirtualMachineScaleSetUpdatePublicIPAddressConfiguration(msrest.serialization.Model):
5833    """Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration.
5834
5835    :param name: The publicIP address configuration name.
5836    :type name: str
5837    :param idle_timeout_in_minutes: The idle timeout of the public IP address.
5838    :type idle_timeout_in_minutes: int
5839    :param dns_settings: The dns settings to be applied on the publicIP addresses .
5840    :type dns_settings:
5841     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
5842    """
5843
5844    _attribute_map = {
5845        'name': {'key': 'name', 'type': 'str'},
5846        'idle_timeout_in_minutes': {'key': 'properties.idleTimeoutInMinutes', 'type': 'int'},
5847        'dns_settings': {'key': 'properties.dnsSettings', 'type': 'VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings'},
5848    }
5849
5850    def __init__(
5851        self,
5852        *,
5853        name: Optional[str] = None,
5854        idle_timeout_in_minutes: Optional[int] = None,
5855        dns_settings: Optional["VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings"] = None,
5856        **kwargs
5857    ):
5858        super(VirtualMachineScaleSetUpdatePublicIPAddressConfiguration, self).__init__(**kwargs)
5859        self.name = name
5860        self.idle_timeout_in_minutes = idle_timeout_in_minutes
5861        self.dns_settings = dns_settings
5862
5863
5864class VirtualMachineScaleSetUpdateStorageProfile(msrest.serialization.Model):
5865    """Describes a virtual machine scale set storage profile.
5866
5867    :param image_reference: The image reference.
5868    :type image_reference: ~azure.mgmt.compute.v2018_10_01.models.ImageReference
5869    :param os_disk: The OS disk.
5870    :type os_disk: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateOSDisk
5871    :param data_disks: The data disks.
5872    :type data_disks: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetDataDisk]
5873    """
5874
5875    _attribute_map = {
5876        'image_reference': {'key': 'imageReference', 'type': 'ImageReference'},
5877        'os_disk': {'key': 'osDisk', 'type': 'VirtualMachineScaleSetUpdateOSDisk'},
5878        'data_disks': {'key': 'dataDisks', 'type': '[VirtualMachineScaleSetDataDisk]'},
5879    }
5880
5881    def __init__(
5882        self,
5883        *,
5884        image_reference: Optional["ImageReference"] = None,
5885        os_disk: Optional["VirtualMachineScaleSetUpdateOSDisk"] = None,
5886        data_disks: Optional[List["VirtualMachineScaleSetDataDisk"]] = None,
5887        **kwargs
5888    ):
5889        super(VirtualMachineScaleSetUpdateStorageProfile, self).__init__(**kwargs)
5890        self.image_reference = image_reference
5891        self.os_disk = os_disk
5892        self.data_disks = data_disks
5893
5894
5895class VirtualMachineScaleSetUpdateVMProfile(msrest.serialization.Model):
5896    """Describes a virtual machine scale set virtual machine profile.
5897
5898    :param os_profile: The virtual machine scale set OS profile.
5899    :type os_profile: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateOSProfile
5900    :param storage_profile: The virtual machine scale set storage profile.
5901    :type storage_profile:
5902     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateStorageProfile
5903    :param network_profile: The virtual machine scale set network profile.
5904    :type network_profile:
5905     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetUpdateNetworkProfile
5906    :param diagnostics_profile: The virtual machine scale set diagnostics profile.
5907    :type diagnostics_profile: ~azure.mgmt.compute.v2018_10_01.models.DiagnosticsProfile
5908    :param extension_profile: The virtual machine scale set extension profile.
5909    :type extension_profile:
5910     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetExtensionProfile
5911    :param license_type: The license type, which is for bring your own license scenario.
5912    :type license_type: str
5913    """
5914
5915    _attribute_map = {
5916        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetUpdateOSProfile'},
5917        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetUpdateStorageProfile'},
5918        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetUpdateNetworkProfile'},
5919        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
5920        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
5921        'license_type': {'key': 'licenseType', 'type': 'str'},
5922    }
5923
5924    def __init__(
5925        self,
5926        *,
5927        os_profile: Optional["VirtualMachineScaleSetUpdateOSProfile"] = None,
5928        storage_profile: Optional["VirtualMachineScaleSetUpdateStorageProfile"] = None,
5929        network_profile: Optional["VirtualMachineScaleSetUpdateNetworkProfile"] = None,
5930        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
5931        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
5932        license_type: Optional[str] = None,
5933        **kwargs
5934    ):
5935        super(VirtualMachineScaleSetUpdateVMProfile, self).__init__(**kwargs)
5936        self.os_profile = os_profile
5937        self.storage_profile = storage_profile
5938        self.network_profile = network_profile
5939        self.diagnostics_profile = diagnostics_profile
5940        self.extension_profile = extension_profile
5941        self.license_type = license_type
5942
5943
5944class VirtualMachineScaleSetVM(Resource):
5945    """Describes a virtual machine scale set virtual machine.
5946
5947    Variables are only populated by the server, and will be ignored when sending a request.
5948
5949    All required parameters must be populated in order to send to Azure.
5950
5951    :ivar id: Resource Id.
5952    :vartype id: str
5953    :ivar name: Resource name.
5954    :vartype name: str
5955    :ivar type: Resource type.
5956    :vartype type: str
5957    :param location: Required. Resource location.
5958    :type location: str
5959    :param tags: A set of tags. Resource tags.
5960    :type tags: dict[str, str]
5961    :ivar instance_id: The virtual machine instance ID.
5962    :vartype instance_id: str
5963    :ivar sku: The virtual machine SKU.
5964    :vartype sku: ~azure.mgmt.compute.v2018_10_01.models.Sku
5965    :param plan: Specifies information about the marketplace image used to create the virtual
5966     machine. This element is only used for marketplace images. Before you can use a marketplace
5967     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
5968     the marketplace image that you want to use and then click **Want to deploy programmatically,
5969     Get Started ->**. Enter any required information and then click **Save**.
5970    :type plan: ~azure.mgmt.compute.v2018_10_01.models.Plan
5971    :ivar resources: The virtual machine child extension resources.
5972    :vartype resources: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtension]
5973    :ivar zones: The virtual machine zones.
5974    :vartype zones: list[str]
5975    :ivar latest_model_applied: Specifies whether the latest model has been applied to the virtual
5976     machine.
5977    :vartype latest_model_applied: bool
5978    :ivar vm_id: Azure VM unique ID.
5979    :vartype vm_id: str
5980    :ivar instance_view: The virtual machine instance view.
5981    :vartype instance_view:
5982     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetVMInstanceView
5983    :param hardware_profile: Specifies the hardware settings for the virtual machine.
5984    :type hardware_profile: ~azure.mgmt.compute.v2018_10_01.models.HardwareProfile
5985    :param storage_profile: Specifies the storage settings for the virtual machine disks.
5986    :type storage_profile: ~azure.mgmt.compute.v2018_10_01.models.StorageProfile
5987    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
5988     virtual machine in the scale set. For instance: whether the virtual machine has the capability
5989     to support attaching managed data disks with UltraSSD_LRS storage account type.
5990    :type additional_capabilities: ~azure.mgmt.compute.v2018_10_01.models.AdditionalCapabilities
5991    :param os_profile: Specifies the operating system settings for the virtual machine.
5992    :type os_profile: ~azure.mgmt.compute.v2018_10_01.models.OSProfile
5993    :param network_profile: Specifies the network interfaces of the virtual machine.
5994    :type network_profile: ~azure.mgmt.compute.v2018_10_01.models.NetworkProfile
5995    :param diagnostics_profile: Specifies the boot diagnostic settings state.
5996     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
5997    :type diagnostics_profile: ~azure.mgmt.compute.v2018_10_01.models.DiagnosticsProfile
5998    :param availability_set: Specifies information about the availability set that the virtual
5999     machine should be assigned to. Virtual machines specified in the same availability set are
6000     allocated to different nodes to maximize availability. For more information about availability
6001     sets, see `Manage the availability of virtual machines
6002     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6003     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
6004     maintenance for virtual machines in Azure
6005     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6006     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
6007     time. An existing VM cannot be added to an availability set.
6008    :type availability_set: ~azure.mgmt.compute.v2018_10_01.models.SubResource
6009    :ivar provisioning_state: The provisioning state, which only appears in the response.
6010    :vartype provisioning_state: str
6011    :param license_type: Specifies that the image or disk that is being used was licensed
6012     on-premises. This element is only used for images that contain the Windows Server operating
6013     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
6014     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
6015     a request for an update, the value must match the initial value. This value cannot be updated.
6016     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
6017     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6018     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
6019    :type license_type: str
6020    """
6021
6022    _validation = {
6023        'id': {'readonly': True},
6024        'name': {'readonly': True},
6025        'type': {'readonly': True},
6026        'location': {'required': True},
6027        'instance_id': {'readonly': True},
6028        'sku': {'readonly': True},
6029        'resources': {'readonly': True},
6030        'zones': {'readonly': True},
6031        'latest_model_applied': {'readonly': True},
6032        'vm_id': {'readonly': True},
6033        'instance_view': {'readonly': True},
6034        'provisioning_state': {'readonly': True},
6035    }
6036
6037    _attribute_map = {
6038        'id': {'key': 'id', 'type': 'str'},
6039        'name': {'key': 'name', 'type': 'str'},
6040        'type': {'key': 'type', 'type': 'str'},
6041        'location': {'key': 'location', 'type': 'str'},
6042        'tags': {'key': 'tags', 'type': '{str}'},
6043        'instance_id': {'key': 'instanceId', 'type': 'str'},
6044        'sku': {'key': 'sku', 'type': 'Sku'},
6045        'plan': {'key': 'plan', 'type': 'Plan'},
6046        'resources': {'key': 'resources', 'type': '[VirtualMachineExtension]'},
6047        'zones': {'key': 'zones', 'type': '[str]'},
6048        'latest_model_applied': {'key': 'properties.latestModelApplied', 'type': 'bool'},
6049        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
6050        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineScaleSetVMInstanceView'},
6051        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
6052        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
6053        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
6054        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
6055        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
6056        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
6057        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
6058        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6059        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
6060    }
6061
6062    def __init__(
6063        self,
6064        *,
6065        location: str,
6066        tags: Optional[Dict[str, str]] = None,
6067        plan: Optional["Plan"] = None,
6068        hardware_profile: Optional["HardwareProfile"] = None,
6069        storage_profile: Optional["StorageProfile"] = None,
6070        additional_capabilities: Optional["AdditionalCapabilities"] = None,
6071        os_profile: Optional["OSProfile"] = None,
6072        network_profile: Optional["NetworkProfile"] = None,
6073        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
6074        availability_set: Optional["SubResource"] = None,
6075        license_type: Optional[str] = None,
6076        **kwargs
6077    ):
6078        super(VirtualMachineScaleSetVM, self).__init__(location=location, tags=tags, **kwargs)
6079        self.instance_id = None
6080        self.sku = None
6081        self.plan = plan
6082        self.resources = None
6083        self.zones = None
6084        self.latest_model_applied = None
6085        self.vm_id = None
6086        self.instance_view = None
6087        self.hardware_profile = hardware_profile
6088        self.storage_profile = storage_profile
6089        self.additional_capabilities = additional_capabilities
6090        self.os_profile = os_profile
6091        self.network_profile = network_profile
6092        self.diagnostics_profile = diagnostics_profile
6093        self.availability_set = availability_set
6094        self.provisioning_state = None
6095        self.license_type = license_type
6096
6097
6098class VirtualMachineScaleSetVMExtensionsSummary(msrest.serialization.Model):
6099    """Extensions summary for virtual machines of a virtual machine scale set.
6100
6101    Variables are only populated by the server, and will be ignored when sending a request.
6102
6103    :ivar name: The extension name.
6104    :vartype name: str
6105    :ivar statuses_summary: The extensions information.
6106    :vartype statuses_summary:
6107     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineStatusCodeCount]
6108    """
6109
6110    _validation = {
6111        'name': {'readonly': True},
6112        'statuses_summary': {'readonly': True},
6113    }
6114
6115    _attribute_map = {
6116        'name': {'key': 'name', 'type': 'str'},
6117        'statuses_summary': {'key': 'statusesSummary', 'type': '[VirtualMachineStatusCodeCount]'},
6118    }
6119
6120    def __init__(
6121        self,
6122        **kwargs
6123    ):
6124        super(VirtualMachineScaleSetVMExtensionsSummary, self).__init__(**kwargs)
6125        self.name = None
6126        self.statuses_summary = None
6127
6128
6129class VirtualMachineScaleSetVMInstanceIDs(msrest.serialization.Model):
6130    """Specifies a list of virtual machine instance IDs from the VM scale set.
6131
6132    :param instance_ids: The virtual machine scale set instance ids. Omitting the virtual machine
6133     scale set instance ids will result in the operation being performed on all virtual machines in
6134     the virtual machine scale set.
6135    :type instance_ids: list[str]
6136    """
6137
6138    _attribute_map = {
6139        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
6140    }
6141
6142    def __init__(
6143        self,
6144        *,
6145        instance_ids: Optional[List[str]] = None,
6146        **kwargs
6147    ):
6148        super(VirtualMachineScaleSetVMInstanceIDs, self).__init__(**kwargs)
6149        self.instance_ids = instance_ids
6150
6151
6152class VirtualMachineScaleSetVMInstanceRequiredIDs(msrest.serialization.Model):
6153    """Specifies a list of virtual machine instance IDs from the VM scale set.
6154
6155    All required parameters must be populated in order to send to Azure.
6156
6157    :param instance_ids: Required. The virtual machine scale set instance ids.
6158    :type instance_ids: list[str]
6159    """
6160
6161    _validation = {
6162        'instance_ids': {'required': True},
6163    }
6164
6165    _attribute_map = {
6166        'instance_ids': {'key': 'instanceIds', 'type': '[str]'},
6167    }
6168
6169    def __init__(
6170        self,
6171        *,
6172        instance_ids: List[str],
6173        **kwargs
6174    ):
6175        super(VirtualMachineScaleSetVMInstanceRequiredIDs, self).__init__(**kwargs)
6176        self.instance_ids = instance_ids
6177
6178
6179class VirtualMachineScaleSetVMInstanceView(msrest.serialization.Model):
6180    """The instance view of a virtual machine scale set VM.
6181
6182    Variables are only populated by the server, and will be ignored when sending a request.
6183
6184    :param platform_update_domain: The Update Domain count.
6185    :type platform_update_domain: int
6186    :param platform_fault_domain: The Fault Domain count.
6187    :type platform_fault_domain: int
6188    :param rdp_thumb_print: The Remote desktop certificate thumbprint.
6189    :type rdp_thumb_print: str
6190    :param vm_agent: The VM Agent running on the virtual machine.
6191    :type vm_agent: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineAgentInstanceView
6192    :param maintenance_redeploy_status: The Maintenance Operation status on the virtual machine.
6193    :type maintenance_redeploy_status:
6194     ~azure.mgmt.compute.v2018_10_01.models.MaintenanceRedeployStatus
6195    :param disks: The disks information.
6196    :type disks: list[~azure.mgmt.compute.v2018_10_01.models.DiskInstanceView]
6197    :param extensions: The extensions information.
6198    :type extensions:
6199     list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineExtensionInstanceView]
6200    :ivar vm_health: The health status for the VM.
6201    :vartype vm_health: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineHealthStatus
6202    :param boot_diagnostics: Boot Diagnostics is a debugging feature which allows you to view
6203     Console Output and Screenshot to diagnose VM status. :code:`<br>`:code:`<br>` You can easily
6204     view the output of your console log. :code:`<br>`:code:`<br>` Azure also enables you to see a
6205     screenshot of the VM from the hypervisor.
6206    :type boot_diagnostics: ~azure.mgmt.compute.v2018_10_01.models.BootDiagnosticsInstanceView
6207    :param statuses: The resource status information.
6208    :type statuses: list[~azure.mgmt.compute.v2018_10_01.models.InstanceViewStatus]
6209    :param placement_group_id: The placement group in which the VM is running. If the VM is
6210     deallocated it will not have a placementGroupId.
6211    :type placement_group_id: str
6212    """
6213
6214    _validation = {
6215        'vm_health': {'readonly': True},
6216    }
6217
6218    _attribute_map = {
6219        'platform_update_domain': {'key': 'platformUpdateDomain', 'type': 'int'},
6220        'platform_fault_domain': {'key': 'platformFaultDomain', 'type': 'int'},
6221        'rdp_thumb_print': {'key': 'rdpThumbPrint', 'type': 'str'},
6222        'vm_agent': {'key': 'vmAgent', 'type': 'VirtualMachineAgentInstanceView'},
6223        'maintenance_redeploy_status': {'key': 'maintenanceRedeployStatus', 'type': 'MaintenanceRedeployStatus'},
6224        'disks': {'key': 'disks', 'type': '[DiskInstanceView]'},
6225        'extensions': {'key': 'extensions', 'type': '[VirtualMachineExtensionInstanceView]'},
6226        'vm_health': {'key': 'vmHealth', 'type': 'VirtualMachineHealthStatus'},
6227        'boot_diagnostics': {'key': 'bootDiagnostics', 'type': 'BootDiagnosticsInstanceView'},
6228        'statuses': {'key': 'statuses', 'type': '[InstanceViewStatus]'},
6229        'placement_group_id': {'key': 'placementGroupId', 'type': 'str'},
6230    }
6231
6232    def __init__(
6233        self,
6234        *,
6235        platform_update_domain: Optional[int] = None,
6236        platform_fault_domain: Optional[int] = None,
6237        rdp_thumb_print: Optional[str] = None,
6238        vm_agent: Optional["VirtualMachineAgentInstanceView"] = None,
6239        maintenance_redeploy_status: Optional["MaintenanceRedeployStatus"] = None,
6240        disks: Optional[List["DiskInstanceView"]] = None,
6241        extensions: Optional[List["VirtualMachineExtensionInstanceView"]] = None,
6242        boot_diagnostics: Optional["BootDiagnosticsInstanceView"] = None,
6243        statuses: Optional[List["InstanceViewStatus"]] = None,
6244        placement_group_id: Optional[str] = None,
6245        **kwargs
6246    ):
6247        super(VirtualMachineScaleSetVMInstanceView, self).__init__(**kwargs)
6248        self.platform_update_domain = platform_update_domain
6249        self.platform_fault_domain = platform_fault_domain
6250        self.rdp_thumb_print = rdp_thumb_print
6251        self.vm_agent = vm_agent
6252        self.maintenance_redeploy_status = maintenance_redeploy_status
6253        self.disks = disks
6254        self.extensions = extensions
6255        self.vm_health = None
6256        self.boot_diagnostics = boot_diagnostics
6257        self.statuses = statuses
6258        self.placement_group_id = placement_group_id
6259
6260
6261class VirtualMachineScaleSetVMListResult(msrest.serialization.Model):
6262    """The List Virtual Machine Scale Set VMs operation response.
6263
6264    All required parameters must be populated in order to send to Azure.
6265
6266    :param value: Required. The list of virtual machine scale sets VMs.
6267    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetVM]
6268    :param next_link: The uri to fetch the next page of Virtual Machine Scale Set VMs. Call
6269     ListNext() with this to fetch the next page of VMSS VMs.
6270    :type next_link: str
6271    """
6272
6273    _validation = {
6274        'value': {'required': True},
6275    }
6276
6277    _attribute_map = {
6278        'value': {'key': 'value', 'type': '[VirtualMachineScaleSetVM]'},
6279        'next_link': {'key': 'nextLink', 'type': 'str'},
6280    }
6281
6282    def __init__(
6283        self,
6284        *,
6285        value: List["VirtualMachineScaleSetVM"],
6286        next_link: Optional[str] = None,
6287        **kwargs
6288    ):
6289        super(VirtualMachineScaleSetVMListResult, self).__init__(**kwargs)
6290        self.value = value
6291        self.next_link = next_link
6292
6293
6294class VirtualMachineScaleSetVMProfile(msrest.serialization.Model):
6295    """Describes a virtual machine scale set virtual machine profile.
6296
6297    :param os_profile: Specifies the operating system settings for the virtual machines in the
6298     scale set.
6299    :type os_profile: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetOSProfile
6300    :param storage_profile: Specifies the storage settings for the virtual machine disks.
6301    :type storage_profile:
6302     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetStorageProfile
6303    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
6304     virtual machine in the scale set. For instance: whether the virtual machine has the capability
6305     to support attaching managed data disks with UltraSSD_LRS storage account type.
6306    :type additional_capabilities: ~azure.mgmt.compute.v2018_10_01.models.AdditionalCapabilities
6307    :param network_profile: Specifies properties of the network interfaces of the virtual machines
6308     in the scale set.
6309    :type network_profile:
6310     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetNetworkProfile
6311    :param diagnostics_profile: Specifies the boot diagnostic settings state.
6312     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
6313    :type diagnostics_profile: ~azure.mgmt.compute.v2018_10_01.models.DiagnosticsProfile
6314    :param extension_profile: Specifies a collection of settings for extensions installed on
6315     virtual machines in the scale set.
6316    :type extension_profile:
6317     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineScaleSetExtensionProfile
6318    :param license_type: Specifies that the image or disk that is being used was licensed
6319     on-premises. This element is only used for images that contain the Windows Server operating
6320     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
6321     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
6322     a request for an update, the value must match the initial value. This value cannot be updated.
6323     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
6324     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6325     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
6326    :type license_type: str
6327    :param priority: Specifies the priority for the virtual machines in the scale set.
6328     :code:`<br>`:code:`<br>`Minimum api-version: 2017-10-30-preview. Possible values include:
6329     "Regular", "Low".
6330    :type priority: str or ~azure.mgmt.compute.v2018_10_01.models.VirtualMachinePriorityTypes
6331    :param eviction_policy: Specifies the eviction policy for virtual machines in a low priority
6332     scale set. :code:`<br>`:code:`<br>`Minimum api-version: 2017-10-30-preview. Possible values
6333     include: "Deallocate", "Delete".
6334    :type eviction_policy: str or
6335     ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineEvictionPolicyTypes
6336    """
6337
6338    _attribute_map = {
6339        'os_profile': {'key': 'osProfile', 'type': 'VirtualMachineScaleSetOSProfile'},
6340        'storage_profile': {'key': 'storageProfile', 'type': 'VirtualMachineScaleSetStorageProfile'},
6341        'additional_capabilities': {'key': 'additionalCapabilities', 'type': 'AdditionalCapabilities'},
6342        'network_profile': {'key': 'networkProfile', 'type': 'VirtualMachineScaleSetNetworkProfile'},
6343        'diagnostics_profile': {'key': 'diagnosticsProfile', 'type': 'DiagnosticsProfile'},
6344        'extension_profile': {'key': 'extensionProfile', 'type': 'VirtualMachineScaleSetExtensionProfile'},
6345        'license_type': {'key': 'licenseType', 'type': 'str'},
6346        'priority': {'key': 'priority', 'type': 'str'},
6347        'eviction_policy': {'key': 'evictionPolicy', 'type': 'str'},
6348    }
6349
6350    def __init__(
6351        self,
6352        *,
6353        os_profile: Optional["VirtualMachineScaleSetOSProfile"] = None,
6354        storage_profile: Optional["VirtualMachineScaleSetStorageProfile"] = None,
6355        additional_capabilities: Optional["AdditionalCapabilities"] = None,
6356        network_profile: Optional["VirtualMachineScaleSetNetworkProfile"] = None,
6357        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
6358        extension_profile: Optional["VirtualMachineScaleSetExtensionProfile"] = None,
6359        license_type: Optional[str] = None,
6360        priority: Optional[Union[str, "VirtualMachinePriorityTypes"]] = None,
6361        eviction_policy: Optional[Union[str, "VirtualMachineEvictionPolicyTypes"]] = None,
6362        **kwargs
6363    ):
6364        super(VirtualMachineScaleSetVMProfile, self).__init__(**kwargs)
6365        self.os_profile = os_profile
6366        self.storage_profile = storage_profile
6367        self.additional_capabilities = additional_capabilities
6368        self.network_profile = network_profile
6369        self.diagnostics_profile = diagnostics_profile
6370        self.extension_profile = extension_profile
6371        self.license_type = license_type
6372        self.priority = priority
6373        self.eviction_policy = eviction_policy
6374
6375
6376class VirtualMachineSize(msrest.serialization.Model):
6377    """Describes the properties of a VM size.
6378
6379    :param name: The name of the virtual machine size.
6380    :type name: str
6381    :param number_of_cores: The number of cores supported by the virtual machine size.
6382    :type number_of_cores: int
6383    :param os_disk_size_in_mb: The OS disk size, in MB, allowed by the virtual machine size.
6384    :type os_disk_size_in_mb: int
6385    :param resource_disk_size_in_mb: The resource disk size, in MB, allowed by the virtual machine
6386     size.
6387    :type resource_disk_size_in_mb: int
6388    :param memory_in_mb: The amount of memory, in MB, supported by the virtual machine size.
6389    :type memory_in_mb: int
6390    :param max_data_disk_count: The maximum number of data disks that can be attached to the
6391     virtual machine size.
6392    :type max_data_disk_count: int
6393    """
6394
6395    _attribute_map = {
6396        'name': {'key': 'name', 'type': 'str'},
6397        'number_of_cores': {'key': 'numberOfCores', 'type': 'int'},
6398        'os_disk_size_in_mb': {'key': 'osDiskSizeInMB', 'type': 'int'},
6399        'resource_disk_size_in_mb': {'key': 'resourceDiskSizeInMB', 'type': 'int'},
6400        'memory_in_mb': {'key': 'memoryInMB', 'type': 'int'},
6401        'max_data_disk_count': {'key': 'maxDataDiskCount', 'type': 'int'},
6402    }
6403
6404    def __init__(
6405        self,
6406        *,
6407        name: Optional[str] = None,
6408        number_of_cores: Optional[int] = None,
6409        os_disk_size_in_mb: Optional[int] = None,
6410        resource_disk_size_in_mb: Optional[int] = None,
6411        memory_in_mb: Optional[int] = None,
6412        max_data_disk_count: Optional[int] = None,
6413        **kwargs
6414    ):
6415        super(VirtualMachineSize, self).__init__(**kwargs)
6416        self.name = name
6417        self.number_of_cores = number_of_cores
6418        self.os_disk_size_in_mb = os_disk_size_in_mb
6419        self.resource_disk_size_in_mb = resource_disk_size_in_mb
6420        self.memory_in_mb = memory_in_mb
6421        self.max_data_disk_count = max_data_disk_count
6422
6423
6424class VirtualMachineSizeListResult(msrest.serialization.Model):
6425    """The List Virtual Machine operation response.
6426
6427    :param value: The list of virtual machine sizes.
6428    :type value: list[~azure.mgmt.compute.v2018_10_01.models.VirtualMachineSize]
6429    """
6430
6431    _attribute_map = {
6432        'value': {'key': 'value', 'type': '[VirtualMachineSize]'},
6433    }
6434
6435    def __init__(
6436        self,
6437        *,
6438        value: Optional[List["VirtualMachineSize"]] = None,
6439        **kwargs
6440    ):
6441        super(VirtualMachineSizeListResult, self).__init__(**kwargs)
6442        self.value = value
6443
6444
6445class VirtualMachineStatusCodeCount(msrest.serialization.Model):
6446    """The status code and count of the virtual machine scale set instance view status summary.
6447
6448    Variables are only populated by the server, and will be ignored when sending a request.
6449
6450    :ivar code: The instance view status code.
6451    :vartype code: str
6452    :ivar count: The number of instances having a particular status code.
6453    :vartype count: int
6454    """
6455
6456    _validation = {
6457        'code': {'readonly': True},
6458        'count': {'readonly': True},
6459    }
6460
6461    _attribute_map = {
6462        'code': {'key': 'code', 'type': 'str'},
6463        'count': {'key': 'count', 'type': 'int'},
6464    }
6465
6466    def __init__(
6467        self,
6468        **kwargs
6469    ):
6470        super(VirtualMachineStatusCodeCount, self).__init__(**kwargs)
6471        self.code = None
6472        self.count = None
6473
6474
6475class VirtualMachineUpdate(UpdateResource):
6476    """Describes a Virtual Machine Update.
6477
6478    Variables are only populated by the server, and will be ignored when sending a request.
6479
6480    :param tags: A set of tags. Resource tags.
6481    :type tags: dict[str, str]
6482    :param plan: Specifies information about the marketplace image used to create the virtual
6483     machine. This element is only used for marketplace images. Before you can use a marketplace
6484     image from an API, you must enable the image for programmatic use.  In the Azure portal, find
6485     the marketplace image that you want to use and then click **Want to deploy programmatically,
6486     Get Started ->**. Enter any required information and then click **Save**.
6487    :type plan: ~azure.mgmt.compute.v2018_10_01.models.Plan
6488    :param identity: The identity of the virtual machine, if configured.
6489    :type identity: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineIdentity
6490    :param zones: The virtual machine zones.
6491    :type zones: list[str]
6492    :param hardware_profile: Specifies the hardware settings for the virtual machine.
6493    :type hardware_profile: ~azure.mgmt.compute.v2018_10_01.models.HardwareProfile
6494    :param storage_profile: Specifies the storage settings for the virtual machine disks.
6495    :type storage_profile: ~azure.mgmt.compute.v2018_10_01.models.StorageProfile
6496    :param additional_capabilities: Specifies additional capabilities enabled or disabled on the
6497     virtual machine.
6498    :type additional_capabilities: ~azure.mgmt.compute.v2018_10_01.models.AdditionalCapabilities
6499    :param os_profile: Specifies the operating system settings for the virtual machine.
6500    :type os_profile: ~azure.mgmt.compute.v2018_10_01.models.OSProfile
6501    :param network_profile: Specifies the network interfaces of the virtual machine.
6502    :type network_profile: ~azure.mgmt.compute.v2018_10_01.models.NetworkProfile
6503    :param diagnostics_profile: Specifies the boot diagnostic settings state.
6504     :code:`<br>`:code:`<br>`Minimum api-version: 2015-06-15.
6505    :type diagnostics_profile: ~azure.mgmt.compute.v2018_10_01.models.DiagnosticsProfile
6506    :param availability_set: Specifies information about the availability set that the virtual
6507     machine should be assigned to. Virtual machines specified in the same availability set are
6508     allocated to different nodes to maximize availability. For more information about availability
6509     sets, see `Manage the availability of virtual machines
6510     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_.
6511     :code:`<br>`:code:`<br>` For more information on Azure planned maintenance, see `Planned
6512     maintenance for virtual machines in Azure
6513     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6514     :code:`<br>`:code:`<br>` Currently, a VM can only be added to availability set at creation
6515     time. An existing VM cannot be added to an availability set.
6516    :type availability_set: ~azure.mgmt.compute.v2018_10_01.models.SubResource
6517    :param proximity_placement_group: Specifies information about the proximity placement group
6518     that the virtual machine should be assigned to. :code:`<br>`:code:`<br>`Minimum api-version:
6519     2018-04-01.
6520    :type proximity_placement_group: ~azure.mgmt.compute.v2018_10_01.models.SubResource
6521    :ivar provisioning_state: The provisioning state, which only appears in the response.
6522    :vartype provisioning_state: str
6523    :ivar instance_view: The virtual machine instance view.
6524    :vartype instance_view: ~azure.mgmt.compute.v2018_10_01.models.VirtualMachineInstanceView
6525    :param license_type: Specifies that the image or disk that is being used was licensed
6526     on-premises. This element is only used for images that contain the Windows Server operating
6527     system. :code:`<br>`:code:`<br>` Possible values are: :code:`<br>`:code:`<br>` Windows_Client
6528     :code:`<br>`:code:`<br>` Windows_Server :code:`<br>`:code:`<br>` If this element is included in
6529     a request for an update, the value must match the initial value. This value cannot be updated.
6530     :code:`<br>`:code:`<br>` For more information, see `Azure Hybrid Use Benefit for Windows Server
6531     <https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json>`_
6532     :code:`<br>`:code:`<br>` Minimum api-version: 2015-06-15.
6533    :type license_type: str
6534    :ivar vm_id: Specifies the VM unique ID which is a 128-bits identifier that is encoded and
6535     stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.
6536    :vartype vm_id: str
6537    """
6538
6539    _validation = {
6540        'provisioning_state': {'readonly': True},
6541        'instance_view': {'readonly': True},
6542        'vm_id': {'readonly': True},
6543    }
6544
6545    _attribute_map = {
6546        'tags': {'key': 'tags', 'type': '{str}'},
6547        'plan': {'key': 'plan', 'type': 'Plan'},
6548        'identity': {'key': 'identity', 'type': 'VirtualMachineIdentity'},
6549        'zones': {'key': 'zones', 'type': '[str]'},
6550        'hardware_profile': {'key': 'properties.hardwareProfile', 'type': 'HardwareProfile'},
6551        'storage_profile': {'key': 'properties.storageProfile', 'type': 'StorageProfile'},
6552        'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': 'AdditionalCapabilities'},
6553        'os_profile': {'key': 'properties.osProfile', 'type': 'OSProfile'},
6554        'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'},
6555        'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'DiagnosticsProfile'},
6556        'availability_set': {'key': 'properties.availabilitySet', 'type': 'SubResource'},
6557        'proximity_placement_group': {'key': 'properties.proximityPlacementGroup', 'type': 'SubResource'},
6558        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
6559        'instance_view': {'key': 'properties.instanceView', 'type': 'VirtualMachineInstanceView'},
6560        'license_type': {'key': 'properties.licenseType', 'type': 'str'},
6561        'vm_id': {'key': 'properties.vmId', 'type': 'str'},
6562    }
6563
6564    def __init__(
6565        self,
6566        *,
6567        tags: Optional[Dict[str, str]] = None,
6568        plan: Optional["Plan"] = None,
6569        identity: Optional["VirtualMachineIdentity"] = None,
6570        zones: Optional[List[str]] = None,
6571        hardware_profile: Optional["HardwareProfile"] = None,
6572        storage_profile: Optional["StorageProfile"] = None,
6573        additional_capabilities: Optional["AdditionalCapabilities"] = None,
6574        os_profile: Optional["OSProfile"] = None,
6575        network_profile: Optional["NetworkProfile"] = None,
6576        diagnostics_profile: Optional["DiagnosticsProfile"] = None,
6577        availability_set: Optional["SubResource"] = None,
6578        proximity_placement_group: Optional["SubResource"] = None,
6579        license_type: Optional[str] = None,
6580        **kwargs
6581    ):
6582        super(VirtualMachineUpdate, self).__init__(tags=tags, **kwargs)
6583        self.plan = plan
6584        self.identity = identity
6585        self.zones = zones
6586        self.hardware_profile = hardware_profile
6587        self.storage_profile = storage_profile
6588        self.additional_capabilities = additional_capabilities
6589        self.os_profile = os_profile
6590        self.network_profile = network_profile
6591        self.diagnostics_profile = diagnostics_profile
6592        self.availability_set = availability_set
6593        self.proximity_placement_group = proximity_placement_group
6594        self.provisioning_state = None
6595        self.instance_view = None
6596        self.license_type = license_type
6597        self.vm_id = None
6598
6599
6600class WindowsConfiguration(msrest.serialization.Model):
6601    """Specifies Windows operating system settings on the virtual machine.
6602
6603    :param provision_vm_agent: Indicates whether virtual machine agent should be provisioned on the
6604     virtual machine. :code:`<br>`:code:`<br>` When this property is not specified in the request
6605     body, default behavior is to set it to true.  This will ensure that VM Agent is installed on
6606     the VM so that extensions can be added to the VM later.
6607    :type provision_vm_agent: bool
6608    :param enable_automatic_updates: Indicates whether virtual machine is enabled for automatic
6609     Windows updates. Default value is true. :code:`<br>`:code:`<br>` For virtual machine scale
6610     sets, this property can be updated and updates will take effect on OS reprovisioning.
6611    :type enable_automatic_updates: bool
6612    :param time_zone: Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".
6613    :type time_zone: str
6614    :param additional_unattend_content: Specifies additional base-64 encoded XML formatted
6615     information that can be included in the Unattend.xml file, which is used by Windows Setup.
6616    :type additional_unattend_content:
6617     list[~azure.mgmt.compute.v2018_10_01.models.AdditionalUnattendContent]
6618    :param win_rm: Specifies the Windows Remote Management listeners. This enables remote Windows
6619     PowerShell.
6620    :type win_rm: ~azure.mgmt.compute.v2018_10_01.models.WinRMConfiguration
6621    """
6622
6623    _attribute_map = {
6624        'provision_vm_agent': {'key': 'provisionVMAgent', 'type': 'bool'},
6625        'enable_automatic_updates': {'key': 'enableAutomaticUpdates', 'type': 'bool'},
6626        'time_zone': {'key': 'timeZone', 'type': 'str'},
6627        'additional_unattend_content': {'key': 'additionalUnattendContent', 'type': '[AdditionalUnattendContent]'},
6628        'win_rm': {'key': 'winRM', 'type': 'WinRMConfiguration'},
6629    }
6630
6631    def __init__(
6632        self,
6633        *,
6634        provision_vm_agent: Optional[bool] = None,
6635        enable_automatic_updates: Optional[bool] = None,
6636        time_zone: Optional[str] = None,
6637        additional_unattend_content: Optional[List["AdditionalUnattendContent"]] = None,
6638        win_rm: Optional["WinRMConfiguration"] = None,
6639        **kwargs
6640    ):
6641        super(WindowsConfiguration, self).__init__(**kwargs)
6642        self.provision_vm_agent = provision_vm_agent
6643        self.enable_automatic_updates = enable_automatic_updates
6644        self.time_zone = time_zone
6645        self.additional_unattend_content = additional_unattend_content
6646        self.win_rm = win_rm
6647
6648
6649class WinRMConfiguration(msrest.serialization.Model):
6650    """Describes Windows Remote Management configuration of the VM.
6651
6652    :param listeners: The list of Windows Remote Management listeners.
6653    :type listeners: list[~azure.mgmt.compute.v2018_10_01.models.WinRMListener]
6654    """
6655
6656    _attribute_map = {
6657        'listeners': {'key': 'listeners', 'type': '[WinRMListener]'},
6658    }
6659
6660    def __init__(
6661        self,
6662        *,
6663        listeners: Optional[List["WinRMListener"]] = None,
6664        **kwargs
6665    ):
6666        super(WinRMConfiguration, self).__init__(**kwargs)
6667        self.listeners = listeners
6668
6669
6670class WinRMListener(msrest.serialization.Model):
6671    """Describes Protocol and thumbprint of Windows Remote Management listener.
6672
6673    :param protocol: Specifies the protocol of listener. :code:`<br>`:code:`<br>` Possible values
6674     are: :code:`<br>`\ **http** :code:`<br>`:code:`<br>` **https**. Possible values include:
6675     "Http", "Https".
6676    :type protocol: str or ~azure.mgmt.compute.v2018_10_01.models.ProtocolTypes
6677    :param certificate_url: This is the URL of a certificate that has been uploaded to Key Vault as
6678     a secret. For adding a secret to the Key Vault, see `Add a key or secret to the key vault
6679     <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this case, your
6680     certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded
6681     in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
6682     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
6683     "password":":code:`<pfx-file-password>`":code:`<br>`}.
6684    :type certificate_url: str
6685    """
6686
6687    _attribute_map = {
6688        'protocol': {'key': 'protocol', 'type': 'str'},
6689        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
6690    }
6691
6692    def __init__(
6693        self,
6694        *,
6695        protocol: Optional[Union[str, "ProtocolTypes"]] = None,
6696        certificate_url: Optional[str] = None,
6697        **kwargs
6698    ):
6699        super(WinRMListener, self).__init__(**kwargs)
6700        self.protocol = protocol
6701        self.certificate_url = certificate_url
6702