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