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