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