1package containerservice
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	"context"
22	"encoding/json"
23	"github.com/Azure/go-autorest/autorest"
24	"github.com/Azure/go-autorest/autorest/azure"
25	"github.com/Azure/go-autorest/autorest/to"
26	"github.com/Azure/go-autorest/tracing"
27	"net/http"
28)
29
30// The package's fully qualified name.
31const fqdn = "github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2019-02-01/containerservice"
32
33// AgentPoolType enumerates the values for agent pool type.
34type AgentPoolType string
35
36const (
37	// AvailabilitySet ...
38	AvailabilitySet AgentPoolType = "AvailabilitySet"
39	// VirtualMachineScaleSets ...
40	VirtualMachineScaleSets AgentPoolType = "VirtualMachineScaleSets"
41)
42
43// PossibleAgentPoolTypeValues returns an array of possible values for the AgentPoolType const type.
44func PossibleAgentPoolTypeValues() []AgentPoolType {
45	return []AgentPoolType{AvailabilitySet, VirtualMachineScaleSets}
46}
47
48// Kind enumerates the values for kind.
49type Kind string
50
51const (
52	// KindAADIdentityProvider ...
53	KindAADIdentityProvider Kind = "AADIdentityProvider"
54	// KindOpenShiftManagedClusterBaseIdentityProvider ...
55	KindOpenShiftManagedClusterBaseIdentityProvider Kind = "OpenShiftManagedClusterBaseIdentityProvider"
56)
57
58// PossibleKindValues returns an array of possible values for the Kind const type.
59func PossibleKindValues() []Kind {
60	return []Kind{KindAADIdentityProvider, KindOpenShiftManagedClusterBaseIdentityProvider}
61}
62
63// NetworkPlugin enumerates the values for network plugin.
64type NetworkPlugin string
65
66const (
67	// Azure ...
68	Azure NetworkPlugin = "azure"
69	// Kubenet ...
70	Kubenet NetworkPlugin = "kubenet"
71)
72
73// PossibleNetworkPluginValues returns an array of possible values for the NetworkPlugin const type.
74func PossibleNetworkPluginValues() []NetworkPlugin {
75	return []NetworkPlugin{Azure, Kubenet}
76}
77
78// NetworkPolicy enumerates the values for network policy.
79type NetworkPolicy string
80
81const (
82	// NetworkPolicyAzure ...
83	NetworkPolicyAzure NetworkPolicy = "azure"
84	// NetworkPolicyCalico ...
85	NetworkPolicyCalico NetworkPolicy = "calico"
86)
87
88// PossibleNetworkPolicyValues returns an array of possible values for the NetworkPolicy const type.
89func PossibleNetworkPolicyValues() []NetworkPolicy {
90	return []NetworkPolicy{NetworkPolicyAzure, NetworkPolicyCalico}
91}
92
93// OpenShiftAgentPoolProfileRole enumerates the values for open shift agent pool profile role.
94type OpenShiftAgentPoolProfileRole string
95
96const (
97	// Compute ...
98	Compute OpenShiftAgentPoolProfileRole = "compute"
99	// Infra ...
100	Infra OpenShiftAgentPoolProfileRole = "infra"
101)
102
103// PossibleOpenShiftAgentPoolProfileRoleValues returns an array of possible values for the OpenShiftAgentPoolProfileRole const type.
104func PossibleOpenShiftAgentPoolProfileRoleValues() []OpenShiftAgentPoolProfileRole {
105	return []OpenShiftAgentPoolProfileRole{Compute, Infra}
106}
107
108// OpenShiftContainerServiceVMSize enumerates the values for open shift container service vm size.
109type OpenShiftContainerServiceVMSize string
110
111const (
112	// StandardD16sV3 ...
113	StandardD16sV3 OpenShiftContainerServiceVMSize = "Standard_D16s_v3"
114	// StandardD2sV3 ...
115	StandardD2sV3 OpenShiftContainerServiceVMSize = "Standard_D2s_v3"
116	// StandardD32sV3 ...
117	StandardD32sV3 OpenShiftContainerServiceVMSize = "Standard_D32s_v3"
118	// StandardD4sV3 ...
119	StandardD4sV3 OpenShiftContainerServiceVMSize = "Standard_D4s_v3"
120	// StandardD64sV3 ...
121	StandardD64sV3 OpenShiftContainerServiceVMSize = "Standard_D64s_v3"
122	// StandardD8sV3 ...
123	StandardD8sV3 OpenShiftContainerServiceVMSize = "Standard_D8s_v3"
124	// StandardDS12V2 ...
125	StandardDS12V2 OpenShiftContainerServiceVMSize = "Standard_DS12_v2"
126	// StandardDS13V2 ...
127	StandardDS13V2 OpenShiftContainerServiceVMSize = "Standard_DS13_v2"
128	// StandardDS14V2 ...
129	StandardDS14V2 OpenShiftContainerServiceVMSize = "Standard_DS14_v2"
130	// StandardDS15V2 ...
131	StandardDS15V2 OpenShiftContainerServiceVMSize = "Standard_DS15_v2"
132	// StandardDS4V2 ...
133	StandardDS4V2 OpenShiftContainerServiceVMSize = "Standard_DS4_v2"
134	// StandardDS5V2 ...
135	StandardDS5V2 OpenShiftContainerServiceVMSize = "Standard_DS5_v2"
136	// StandardE16sV3 ...
137	StandardE16sV3 OpenShiftContainerServiceVMSize = "Standard_E16s_v3"
138	// StandardE20sV3 ...
139	StandardE20sV3 OpenShiftContainerServiceVMSize = "Standard_E20s_v3"
140	// StandardE32sV3 ...
141	StandardE32sV3 OpenShiftContainerServiceVMSize = "Standard_E32s_v3"
142	// StandardE4sV3 ...
143	StandardE4sV3 OpenShiftContainerServiceVMSize = "Standard_E4s_v3"
144	// StandardE64sV3 ...
145	StandardE64sV3 OpenShiftContainerServiceVMSize = "Standard_E64s_v3"
146	// StandardE8sV3 ...
147	StandardE8sV3 OpenShiftContainerServiceVMSize = "Standard_E8s_v3"
148	// StandardF16s ...
149	StandardF16s OpenShiftContainerServiceVMSize = "Standard_F16s"
150	// StandardF16sV2 ...
151	StandardF16sV2 OpenShiftContainerServiceVMSize = "Standard_F16s_v2"
152	// StandardF32sV2 ...
153	StandardF32sV2 OpenShiftContainerServiceVMSize = "Standard_F32s_v2"
154	// StandardF64sV2 ...
155	StandardF64sV2 OpenShiftContainerServiceVMSize = "Standard_F64s_v2"
156	// StandardF72sV2 ...
157	StandardF72sV2 OpenShiftContainerServiceVMSize = "Standard_F72s_v2"
158	// StandardF8s ...
159	StandardF8s OpenShiftContainerServiceVMSize = "Standard_F8s"
160	// StandardF8sV2 ...
161	StandardF8sV2 OpenShiftContainerServiceVMSize = "Standard_F8s_v2"
162	// StandardGS2 ...
163	StandardGS2 OpenShiftContainerServiceVMSize = "Standard_GS2"
164	// StandardGS3 ...
165	StandardGS3 OpenShiftContainerServiceVMSize = "Standard_GS3"
166	// StandardGS4 ...
167	StandardGS4 OpenShiftContainerServiceVMSize = "Standard_GS4"
168	// StandardGS5 ...
169	StandardGS5 OpenShiftContainerServiceVMSize = "Standard_GS5"
170	// StandardL16s ...
171	StandardL16s OpenShiftContainerServiceVMSize = "Standard_L16s"
172	// StandardL32s ...
173	StandardL32s OpenShiftContainerServiceVMSize = "Standard_L32s"
174	// StandardL4s ...
175	StandardL4s OpenShiftContainerServiceVMSize = "Standard_L4s"
176	// StandardL8s ...
177	StandardL8s OpenShiftContainerServiceVMSize = "Standard_L8s"
178)
179
180// PossibleOpenShiftContainerServiceVMSizeValues returns an array of possible values for the OpenShiftContainerServiceVMSize const type.
181func PossibleOpenShiftContainerServiceVMSizeValues() []OpenShiftContainerServiceVMSize {
182	return []OpenShiftContainerServiceVMSize{StandardD16sV3, StandardD2sV3, StandardD32sV3, StandardD4sV3, StandardD64sV3, StandardD8sV3, StandardDS12V2, StandardDS13V2, StandardDS14V2, StandardDS15V2, StandardDS4V2, StandardDS5V2, StandardE16sV3, StandardE20sV3, StandardE32sV3, StandardE4sV3, StandardE64sV3, StandardE8sV3, StandardF16s, StandardF16sV2, StandardF32sV2, StandardF64sV2, StandardF72sV2, StandardF8s, StandardF8sV2, StandardGS2, StandardGS3, StandardGS4, StandardGS5, StandardL16s, StandardL32s, StandardL4s, StandardL8s}
183}
184
185// OrchestratorTypes enumerates the values for orchestrator types.
186type OrchestratorTypes string
187
188const (
189	// Custom ...
190	Custom OrchestratorTypes = "Custom"
191	// DCOS ...
192	DCOS OrchestratorTypes = "DCOS"
193	// DockerCE ...
194	DockerCE OrchestratorTypes = "DockerCE"
195	// Kubernetes ...
196	Kubernetes OrchestratorTypes = "Kubernetes"
197	// Swarm ...
198	Swarm OrchestratorTypes = "Swarm"
199)
200
201// PossibleOrchestratorTypesValues returns an array of possible values for the OrchestratorTypes const type.
202func PossibleOrchestratorTypesValues() []OrchestratorTypes {
203	return []OrchestratorTypes{Custom, DCOS, DockerCE, Kubernetes, Swarm}
204}
205
206// OSType enumerates the values for os type.
207type OSType string
208
209const (
210	// Linux ...
211	Linux OSType = "Linux"
212	// Windows ...
213	Windows OSType = "Windows"
214)
215
216// PossibleOSTypeValues returns an array of possible values for the OSType const type.
217func PossibleOSTypeValues() []OSType {
218	return []OSType{Linux, Windows}
219}
220
221// StorageProfileTypes enumerates the values for storage profile types.
222type StorageProfileTypes string
223
224const (
225	// ManagedDisks ...
226	ManagedDisks StorageProfileTypes = "ManagedDisks"
227	// StorageAccount ...
228	StorageAccount StorageProfileTypes = "StorageAccount"
229)
230
231// PossibleStorageProfileTypesValues returns an array of possible values for the StorageProfileTypes const type.
232func PossibleStorageProfileTypesValues() []StorageProfileTypes {
233	return []StorageProfileTypes{ManagedDisks, StorageAccount}
234}
235
236// VMSizeTypes enumerates the values for vm size types.
237type VMSizeTypes string
238
239const (
240	// VMSizeTypesStandardA1 ...
241	VMSizeTypesStandardA1 VMSizeTypes = "Standard_A1"
242	// VMSizeTypesStandardA10 ...
243	VMSizeTypesStandardA10 VMSizeTypes = "Standard_A10"
244	// VMSizeTypesStandardA11 ...
245	VMSizeTypesStandardA11 VMSizeTypes = "Standard_A11"
246	// VMSizeTypesStandardA1V2 ...
247	VMSizeTypesStandardA1V2 VMSizeTypes = "Standard_A1_v2"
248	// VMSizeTypesStandardA2 ...
249	VMSizeTypesStandardA2 VMSizeTypes = "Standard_A2"
250	// VMSizeTypesStandardA2mV2 ...
251	VMSizeTypesStandardA2mV2 VMSizeTypes = "Standard_A2m_v2"
252	// VMSizeTypesStandardA2V2 ...
253	VMSizeTypesStandardA2V2 VMSizeTypes = "Standard_A2_v2"
254	// VMSizeTypesStandardA3 ...
255	VMSizeTypesStandardA3 VMSizeTypes = "Standard_A3"
256	// VMSizeTypesStandardA4 ...
257	VMSizeTypesStandardA4 VMSizeTypes = "Standard_A4"
258	// VMSizeTypesStandardA4mV2 ...
259	VMSizeTypesStandardA4mV2 VMSizeTypes = "Standard_A4m_v2"
260	// VMSizeTypesStandardA4V2 ...
261	VMSizeTypesStandardA4V2 VMSizeTypes = "Standard_A4_v2"
262	// VMSizeTypesStandardA5 ...
263	VMSizeTypesStandardA5 VMSizeTypes = "Standard_A5"
264	// VMSizeTypesStandardA6 ...
265	VMSizeTypesStandardA6 VMSizeTypes = "Standard_A6"
266	// VMSizeTypesStandardA7 ...
267	VMSizeTypesStandardA7 VMSizeTypes = "Standard_A7"
268	// VMSizeTypesStandardA8 ...
269	VMSizeTypesStandardA8 VMSizeTypes = "Standard_A8"
270	// VMSizeTypesStandardA8mV2 ...
271	VMSizeTypesStandardA8mV2 VMSizeTypes = "Standard_A8m_v2"
272	// VMSizeTypesStandardA8V2 ...
273	VMSizeTypesStandardA8V2 VMSizeTypes = "Standard_A8_v2"
274	// VMSizeTypesStandardA9 ...
275	VMSizeTypesStandardA9 VMSizeTypes = "Standard_A9"
276	// VMSizeTypesStandardB2ms ...
277	VMSizeTypesStandardB2ms VMSizeTypes = "Standard_B2ms"
278	// VMSizeTypesStandardB2s ...
279	VMSizeTypesStandardB2s VMSizeTypes = "Standard_B2s"
280	// VMSizeTypesStandardB4ms ...
281	VMSizeTypesStandardB4ms VMSizeTypes = "Standard_B4ms"
282	// VMSizeTypesStandardB8ms ...
283	VMSizeTypesStandardB8ms VMSizeTypes = "Standard_B8ms"
284	// VMSizeTypesStandardD1 ...
285	VMSizeTypesStandardD1 VMSizeTypes = "Standard_D1"
286	// VMSizeTypesStandardD11 ...
287	VMSizeTypesStandardD11 VMSizeTypes = "Standard_D11"
288	// VMSizeTypesStandardD11V2 ...
289	VMSizeTypesStandardD11V2 VMSizeTypes = "Standard_D11_v2"
290	// VMSizeTypesStandardD11V2Promo ...
291	VMSizeTypesStandardD11V2Promo VMSizeTypes = "Standard_D11_v2_Promo"
292	// VMSizeTypesStandardD12 ...
293	VMSizeTypesStandardD12 VMSizeTypes = "Standard_D12"
294	// VMSizeTypesStandardD12V2 ...
295	VMSizeTypesStandardD12V2 VMSizeTypes = "Standard_D12_v2"
296	// VMSizeTypesStandardD12V2Promo ...
297	VMSizeTypesStandardD12V2Promo VMSizeTypes = "Standard_D12_v2_Promo"
298	// VMSizeTypesStandardD13 ...
299	VMSizeTypesStandardD13 VMSizeTypes = "Standard_D13"
300	// VMSizeTypesStandardD13V2 ...
301	VMSizeTypesStandardD13V2 VMSizeTypes = "Standard_D13_v2"
302	// VMSizeTypesStandardD13V2Promo ...
303	VMSizeTypesStandardD13V2Promo VMSizeTypes = "Standard_D13_v2_Promo"
304	// VMSizeTypesStandardD14 ...
305	VMSizeTypesStandardD14 VMSizeTypes = "Standard_D14"
306	// VMSizeTypesStandardD14V2 ...
307	VMSizeTypesStandardD14V2 VMSizeTypes = "Standard_D14_v2"
308	// VMSizeTypesStandardD14V2Promo ...
309	VMSizeTypesStandardD14V2Promo VMSizeTypes = "Standard_D14_v2_Promo"
310	// VMSizeTypesStandardD15V2 ...
311	VMSizeTypesStandardD15V2 VMSizeTypes = "Standard_D15_v2"
312	// VMSizeTypesStandardD16sV3 ...
313	VMSizeTypesStandardD16sV3 VMSizeTypes = "Standard_D16s_v3"
314	// VMSizeTypesStandardD16V3 ...
315	VMSizeTypesStandardD16V3 VMSizeTypes = "Standard_D16_v3"
316	// VMSizeTypesStandardD1V2 ...
317	VMSizeTypesStandardD1V2 VMSizeTypes = "Standard_D1_v2"
318	// VMSizeTypesStandardD2 ...
319	VMSizeTypesStandardD2 VMSizeTypes = "Standard_D2"
320	// VMSizeTypesStandardD2sV3 ...
321	VMSizeTypesStandardD2sV3 VMSizeTypes = "Standard_D2s_v3"
322	// VMSizeTypesStandardD2V2 ...
323	VMSizeTypesStandardD2V2 VMSizeTypes = "Standard_D2_v2"
324	// VMSizeTypesStandardD2V2Promo ...
325	VMSizeTypesStandardD2V2Promo VMSizeTypes = "Standard_D2_v2_Promo"
326	// VMSizeTypesStandardD2V3 ...
327	VMSizeTypesStandardD2V3 VMSizeTypes = "Standard_D2_v3"
328	// VMSizeTypesStandardD3 ...
329	VMSizeTypesStandardD3 VMSizeTypes = "Standard_D3"
330	// VMSizeTypesStandardD32sV3 ...
331	VMSizeTypesStandardD32sV3 VMSizeTypes = "Standard_D32s_v3"
332	// VMSizeTypesStandardD32V3 ...
333	VMSizeTypesStandardD32V3 VMSizeTypes = "Standard_D32_v3"
334	// VMSizeTypesStandardD3V2 ...
335	VMSizeTypesStandardD3V2 VMSizeTypes = "Standard_D3_v2"
336	// VMSizeTypesStandardD3V2Promo ...
337	VMSizeTypesStandardD3V2Promo VMSizeTypes = "Standard_D3_v2_Promo"
338	// VMSizeTypesStandardD4 ...
339	VMSizeTypesStandardD4 VMSizeTypes = "Standard_D4"
340	// VMSizeTypesStandardD4sV3 ...
341	VMSizeTypesStandardD4sV3 VMSizeTypes = "Standard_D4s_v3"
342	// VMSizeTypesStandardD4V2 ...
343	VMSizeTypesStandardD4V2 VMSizeTypes = "Standard_D4_v2"
344	// VMSizeTypesStandardD4V2Promo ...
345	VMSizeTypesStandardD4V2Promo VMSizeTypes = "Standard_D4_v2_Promo"
346	// VMSizeTypesStandardD4V3 ...
347	VMSizeTypesStandardD4V3 VMSizeTypes = "Standard_D4_v3"
348	// VMSizeTypesStandardD5V2 ...
349	VMSizeTypesStandardD5V2 VMSizeTypes = "Standard_D5_v2"
350	// VMSizeTypesStandardD5V2Promo ...
351	VMSizeTypesStandardD5V2Promo VMSizeTypes = "Standard_D5_v2_Promo"
352	// VMSizeTypesStandardD64sV3 ...
353	VMSizeTypesStandardD64sV3 VMSizeTypes = "Standard_D64s_v3"
354	// VMSizeTypesStandardD64V3 ...
355	VMSizeTypesStandardD64V3 VMSizeTypes = "Standard_D64_v3"
356	// VMSizeTypesStandardD8sV3 ...
357	VMSizeTypesStandardD8sV3 VMSizeTypes = "Standard_D8s_v3"
358	// VMSizeTypesStandardD8V3 ...
359	VMSizeTypesStandardD8V3 VMSizeTypes = "Standard_D8_v3"
360	// VMSizeTypesStandardDS1 ...
361	VMSizeTypesStandardDS1 VMSizeTypes = "Standard_DS1"
362	// VMSizeTypesStandardDS11 ...
363	VMSizeTypesStandardDS11 VMSizeTypes = "Standard_DS11"
364	// VMSizeTypesStandardDS11V2 ...
365	VMSizeTypesStandardDS11V2 VMSizeTypes = "Standard_DS11_v2"
366	// VMSizeTypesStandardDS11V2Promo ...
367	VMSizeTypesStandardDS11V2Promo VMSizeTypes = "Standard_DS11_v2_Promo"
368	// VMSizeTypesStandardDS12 ...
369	VMSizeTypesStandardDS12 VMSizeTypes = "Standard_DS12"
370	// VMSizeTypesStandardDS12V2 ...
371	VMSizeTypesStandardDS12V2 VMSizeTypes = "Standard_DS12_v2"
372	// VMSizeTypesStandardDS12V2Promo ...
373	VMSizeTypesStandardDS12V2Promo VMSizeTypes = "Standard_DS12_v2_Promo"
374	// VMSizeTypesStandardDS13 ...
375	VMSizeTypesStandardDS13 VMSizeTypes = "Standard_DS13"
376	// VMSizeTypesStandardDS132V2 ...
377	VMSizeTypesStandardDS132V2 VMSizeTypes = "Standard_DS13-2_v2"
378	// VMSizeTypesStandardDS134V2 ...
379	VMSizeTypesStandardDS134V2 VMSizeTypes = "Standard_DS13-4_v2"
380	// VMSizeTypesStandardDS13V2 ...
381	VMSizeTypesStandardDS13V2 VMSizeTypes = "Standard_DS13_v2"
382	// VMSizeTypesStandardDS13V2Promo ...
383	VMSizeTypesStandardDS13V2Promo VMSizeTypes = "Standard_DS13_v2_Promo"
384	// VMSizeTypesStandardDS14 ...
385	VMSizeTypesStandardDS14 VMSizeTypes = "Standard_DS14"
386	// VMSizeTypesStandardDS144V2 ...
387	VMSizeTypesStandardDS144V2 VMSizeTypes = "Standard_DS14-4_v2"
388	// VMSizeTypesStandardDS148V2 ...
389	VMSizeTypesStandardDS148V2 VMSizeTypes = "Standard_DS14-8_v2"
390	// VMSizeTypesStandardDS14V2 ...
391	VMSizeTypesStandardDS14V2 VMSizeTypes = "Standard_DS14_v2"
392	// VMSizeTypesStandardDS14V2Promo ...
393	VMSizeTypesStandardDS14V2Promo VMSizeTypes = "Standard_DS14_v2_Promo"
394	// VMSizeTypesStandardDS15V2 ...
395	VMSizeTypesStandardDS15V2 VMSizeTypes = "Standard_DS15_v2"
396	// VMSizeTypesStandardDS1V2 ...
397	VMSizeTypesStandardDS1V2 VMSizeTypes = "Standard_DS1_v2"
398	// VMSizeTypesStandardDS2 ...
399	VMSizeTypesStandardDS2 VMSizeTypes = "Standard_DS2"
400	// VMSizeTypesStandardDS2V2 ...
401	VMSizeTypesStandardDS2V2 VMSizeTypes = "Standard_DS2_v2"
402	// VMSizeTypesStandardDS2V2Promo ...
403	VMSizeTypesStandardDS2V2Promo VMSizeTypes = "Standard_DS2_v2_Promo"
404	// VMSizeTypesStandardDS3 ...
405	VMSizeTypesStandardDS3 VMSizeTypes = "Standard_DS3"
406	// VMSizeTypesStandardDS3V2 ...
407	VMSizeTypesStandardDS3V2 VMSizeTypes = "Standard_DS3_v2"
408	// VMSizeTypesStandardDS3V2Promo ...
409	VMSizeTypesStandardDS3V2Promo VMSizeTypes = "Standard_DS3_v2_Promo"
410	// VMSizeTypesStandardDS4 ...
411	VMSizeTypesStandardDS4 VMSizeTypes = "Standard_DS4"
412	// VMSizeTypesStandardDS4V2 ...
413	VMSizeTypesStandardDS4V2 VMSizeTypes = "Standard_DS4_v2"
414	// VMSizeTypesStandardDS4V2Promo ...
415	VMSizeTypesStandardDS4V2Promo VMSizeTypes = "Standard_DS4_v2_Promo"
416	// VMSizeTypesStandardDS5V2 ...
417	VMSizeTypesStandardDS5V2 VMSizeTypes = "Standard_DS5_v2"
418	// VMSizeTypesStandardDS5V2Promo ...
419	VMSizeTypesStandardDS5V2Promo VMSizeTypes = "Standard_DS5_v2_Promo"
420	// VMSizeTypesStandardE16sV3 ...
421	VMSizeTypesStandardE16sV3 VMSizeTypes = "Standard_E16s_v3"
422	// VMSizeTypesStandardE16V3 ...
423	VMSizeTypesStandardE16V3 VMSizeTypes = "Standard_E16_v3"
424	// VMSizeTypesStandardE2sV3 ...
425	VMSizeTypesStandardE2sV3 VMSizeTypes = "Standard_E2s_v3"
426	// VMSizeTypesStandardE2V3 ...
427	VMSizeTypesStandardE2V3 VMSizeTypes = "Standard_E2_v3"
428	// VMSizeTypesStandardE3216sV3 ...
429	VMSizeTypesStandardE3216sV3 VMSizeTypes = "Standard_E32-16s_v3"
430	// VMSizeTypesStandardE328sV3 ...
431	VMSizeTypesStandardE328sV3 VMSizeTypes = "Standard_E32-8s_v3"
432	// VMSizeTypesStandardE32sV3 ...
433	VMSizeTypesStandardE32sV3 VMSizeTypes = "Standard_E32s_v3"
434	// VMSizeTypesStandardE32V3 ...
435	VMSizeTypesStandardE32V3 VMSizeTypes = "Standard_E32_v3"
436	// VMSizeTypesStandardE4sV3 ...
437	VMSizeTypesStandardE4sV3 VMSizeTypes = "Standard_E4s_v3"
438	// VMSizeTypesStandardE4V3 ...
439	VMSizeTypesStandardE4V3 VMSizeTypes = "Standard_E4_v3"
440	// VMSizeTypesStandardE6416sV3 ...
441	VMSizeTypesStandardE6416sV3 VMSizeTypes = "Standard_E64-16s_v3"
442	// VMSizeTypesStandardE6432sV3 ...
443	VMSizeTypesStandardE6432sV3 VMSizeTypes = "Standard_E64-32s_v3"
444	// VMSizeTypesStandardE64sV3 ...
445	VMSizeTypesStandardE64sV3 VMSizeTypes = "Standard_E64s_v3"
446	// VMSizeTypesStandardE64V3 ...
447	VMSizeTypesStandardE64V3 VMSizeTypes = "Standard_E64_v3"
448	// VMSizeTypesStandardE8sV3 ...
449	VMSizeTypesStandardE8sV3 VMSizeTypes = "Standard_E8s_v3"
450	// VMSizeTypesStandardE8V3 ...
451	VMSizeTypesStandardE8V3 VMSizeTypes = "Standard_E8_v3"
452	// VMSizeTypesStandardF1 ...
453	VMSizeTypesStandardF1 VMSizeTypes = "Standard_F1"
454	// VMSizeTypesStandardF16 ...
455	VMSizeTypesStandardF16 VMSizeTypes = "Standard_F16"
456	// VMSizeTypesStandardF16s ...
457	VMSizeTypesStandardF16s VMSizeTypes = "Standard_F16s"
458	// VMSizeTypesStandardF16sV2 ...
459	VMSizeTypesStandardF16sV2 VMSizeTypes = "Standard_F16s_v2"
460	// VMSizeTypesStandardF1s ...
461	VMSizeTypesStandardF1s VMSizeTypes = "Standard_F1s"
462	// VMSizeTypesStandardF2 ...
463	VMSizeTypesStandardF2 VMSizeTypes = "Standard_F2"
464	// VMSizeTypesStandardF2s ...
465	VMSizeTypesStandardF2s VMSizeTypes = "Standard_F2s"
466	// VMSizeTypesStandardF2sV2 ...
467	VMSizeTypesStandardF2sV2 VMSizeTypes = "Standard_F2s_v2"
468	// VMSizeTypesStandardF32sV2 ...
469	VMSizeTypesStandardF32sV2 VMSizeTypes = "Standard_F32s_v2"
470	// VMSizeTypesStandardF4 ...
471	VMSizeTypesStandardF4 VMSizeTypes = "Standard_F4"
472	// VMSizeTypesStandardF4s ...
473	VMSizeTypesStandardF4s VMSizeTypes = "Standard_F4s"
474	// VMSizeTypesStandardF4sV2 ...
475	VMSizeTypesStandardF4sV2 VMSizeTypes = "Standard_F4s_v2"
476	// VMSizeTypesStandardF64sV2 ...
477	VMSizeTypesStandardF64sV2 VMSizeTypes = "Standard_F64s_v2"
478	// VMSizeTypesStandardF72sV2 ...
479	VMSizeTypesStandardF72sV2 VMSizeTypes = "Standard_F72s_v2"
480	// VMSizeTypesStandardF8 ...
481	VMSizeTypesStandardF8 VMSizeTypes = "Standard_F8"
482	// VMSizeTypesStandardF8s ...
483	VMSizeTypesStandardF8s VMSizeTypes = "Standard_F8s"
484	// VMSizeTypesStandardF8sV2 ...
485	VMSizeTypesStandardF8sV2 VMSizeTypes = "Standard_F8s_v2"
486	// VMSizeTypesStandardG1 ...
487	VMSizeTypesStandardG1 VMSizeTypes = "Standard_G1"
488	// VMSizeTypesStandardG2 ...
489	VMSizeTypesStandardG2 VMSizeTypes = "Standard_G2"
490	// VMSizeTypesStandardG3 ...
491	VMSizeTypesStandardG3 VMSizeTypes = "Standard_G3"
492	// VMSizeTypesStandardG4 ...
493	VMSizeTypesStandardG4 VMSizeTypes = "Standard_G4"
494	// VMSizeTypesStandardG5 ...
495	VMSizeTypesStandardG5 VMSizeTypes = "Standard_G5"
496	// VMSizeTypesStandardGS1 ...
497	VMSizeTypesStandardGS1 VMSizeTypes = "Standard_GS1"
498	// VMSizeTypesStandardGS2 ...
499	VMSizeTypesStandardGS2 VMSizeTypes = "Standard_GS2"
500	// VMSizeTypesStandardGS3 ...
501	VMSizeTypesStandardGS3 VMSizeTypes = "Standard_GS3"
502	// VMSizeTypesStandardGS4 ...
503	VMSizeTypesStandardGS4 VMSizeTypes = "Standard_GS4"
504	// VMSizeTypesStandardGS44 ...
505	VMSizeTypesStandardGS44 VMSizeTypes = "Standard_GS4-4"
506	// VMSizeTypesStandardGS48 ...
507	VMSizeTypesStandardGS48 VMSizeTypes = "Standard_GS4-8"
508	// VMSizeTypesStandardGS5 ...
509	VMSizeTypesStandardGS5 VMSizeTypes = "Standard_GS5"
510	// VMSizeTypesStandardGS516 ...
511	VMSizeTypesStandardGS516 VMSizeTypes = "Standard_GS5-16"
512	// VMSizeTypesStandardGS58 ...
513	VMSizeTypesStandardGS58 VMSizeTypes = "Standard_GS5-8"
514	// VMSizeTypesStandardH16 ...
515	VMSizeTypesStandardH16 VMSizeTypes = "Standard_H16"
516	// VMSizeTypesStandardH16m ...
517	VMSizeTypesStandardH16m VMSizeTypes = "Standard_H16m"
518	// VMSizeTypesStandardH16mr ...
519	VMSizeTypesStandardH16mr VMSizeTypes = "Standard_H16mr"
520	// VMSizeTypesStandardH16r ...
521	VMSizeTypesStandardH16r VMSizeTypes = "Standard_H16r"
522	// VMSizeTypesStandardH8 ...
523	VMSizeTypesStandardH8 VMSizeTypes = "Standard_H8"
524	// VMSizeTypesStandardH8m ...
525	VMSizeTypesStandardH8m VMSizeTypes = "Standard_H8m"
526	// VMSizeTypesStandardL16s ...
527	VMSizeTypesStandardL16s VMSizeTypes = "Standard_L16s"
528	// VMSizeTypesStandardL32s ...
529	VMSizeTypesStandardL32s VMSizeTypes = "Standard_L32s"
530	// VMSizeTypesStandardL4s ...
531	VMSizeTypesStandardL4s VMSizeTypes = "Standard_L4s"
532	// VMSizeTypesStandardL8s ...
533	VMSizeTypesStandardL8s VMSizeTypes = "Standard_L8s"
534	// VMSizeTypesStandardM12832ms ...
535	VMSizeTypesStandardM12832ms VMSizeTypes = "Standard_M128-32ms"
536	// VMSizeTypesStandardM12864ms ...
537	VMSizeTypesStandardM12864ms VMSizeTypes = "Standard_M128-64ms"
538	// VMSizeTypesStandardM128ms ...
539	VMSizeTypesStandardM128ms VMSizeTypes = "Standard_M128ms"
540	// VMSizeTypesStandardM128s ...
541	VMSizeTypesStandardM128s VMSizeTypes = "Standard_M128s"
542	// VMSizeTypesStandardM6416ms ...
543	VMSizeTypesStandardM6416ms VMSizeTypes = "Standard_M64-16ms"
544	// VMSizeTypesStandardM6432ms ...
545	VMSizeTypesStandardM6432ms VMSizeTypes = "Standard_M64-32ms"
546	// VMSizeTypesStandardM64ms ...
547	VMSizeTypesStandardM64ms VMSizeTypes = "Standard_M64ms"
548	// VMSizeTypesStandardM64s ...
549	VMSizeTypesStandardM64s VMSizeTypes = "Standard_M64s"
550	// VMSizeTypesStandardNC12 ...
551	VMSizeTypesStandardNC12 VMSizeTypes = "Standard_NC12"
552	// VMSizeTypesStandardNC12sV2 ...
553	VMSizeTypesStandardNC12sV2 VMSizeTypes = "Standard_NC12s_v2"
554	// VMSizeTypesStandardNC12sV3 ...
555	VMSizeTypesStandardNC12sV3 VMSizeTypes = "Standard_NC12s_v3"
556	// VMSizeTypesStandardNC24 ...
557	VMSizeTypesStandardNC24 VMSizeTypes = "Standard_NC24"
558	// VMSizeTypesStandardNC24r ...
559	VMSizeTypesStandardNC24r VMSizeTypes = "Standard_NC24r"
560	// VMSizeTypesStandardNC24rsV2 ...
561	VMSizeTypesStandardNC24rsV2 VMSizeTypes = "Standard_NC24rs_v2"
562	// VMSizeTypesStandardNC24rsV3 ...
563	VMSizeTypesStandardNC24rsV3 VMSizeTypes = "Standard_NC24rs_v3"
564	// VMSizeTypesStandardNC24sV2 ...
565	VMSizeTypesStandardNC24sV2 VMSizeTypes = "Standard_NC24s_v2"
566	// VMSizeTypesStandardNC24sV3 ...
567	VMSizeTypesStandardNC24sV3 VMSizeTypes = "Standard_NC24s_v3"
568	// VMSizeTypesStandardNC6 ...
569	VMSizeTypesStandardNC6 VMSizeTypes = "Standard_NC6"
570	// VMSizeTypesStandardNC6sV2 ...
571	VMSizeTypesStandardNC6sV2 VMSizeTypes = "Standard_NC6s_v2"
572	// VMSizeTypesStandardNC6sV3 ...
573	VMSizeTypesStandardNC6sV3 VMSizeTypes = "Standard_NC6s_v3"
574	// VMSizeTypesStandardND12s ...
575	VMSizeTypesStandardND12s VMSizeTypes = "Standard_ND12s"
576	// VMSizeTypesStandardND24rs ...
577	VMSizeTypesStandardND24rs VMSizeTypes = "Standard_ND24rs"
578	// VMSizeTypesStandardND24s ...
579	VMSizeTypesStandardND24s VMSizeTypes = "Standard_ND24s"
580	// VMSizeTypesStandardND6s ...
581	VMSizeTypesStandardND6s VMSizeTypes = "Standard_ND6s"
582	// VMSizeTypesStandardNV12 ...
583	VMSizeTypesStandardNV12 VMSizeTypes = "Standard_NV12"
584	// VMSizeTypesStandardNV24 ...
585	VMSizeTypesStandardNV24 VMSizeTypes = "Standard_NV24"
586	// VMSizeTypesStandardNV6 ...
587	VMSizeTypesStandardNV6 VMSizeTypes = "Standard_NV6"
588)
589
590// PossibleVMSizeTypesValues returns an array of possible values for the VMSizeTypes const type.
591func PossibleVMSizeTypesValues() []VMSizeTypes {
592	return []VMSizeTypes{VMSizeTypesStandardA1, VMSizeTypesStandardA10, VMSizeTypesStandardA11, VMSizeTypesStandardA1V2, VMSizeTypesStandardA2, VMSizeTypesStandardA2mV2, VMSizeTypesStandardA2V2, VMSizeTypesStandardA3, VMSizeTypesStandardA4, VMSizeTypesStandardA4mV2, VMSizeTypesStandardA4V2, VMSizeTypesStandardA5, VMSizeTypesStandardA6, VMSizeTypesStandardA7, VMSizeTypesStandardA8, VMSizeTypesStandardA8mV2, VMSizeTypesStandardA8V2, VMSizeTypesStandardA9, VMSizeTypesStandardB2ms, VMSizeTypesStandardB2s, VMSizeTypesStandardB4ms, VMSizeTypesStandardB8ms, VMSizeTypesStandardD1, VMSizeTypesStandardD11, VMSizeTypesStandardD11V2, VMSizeTypesStandardD11V2Promo, VMSizeTypesStandardD12, VMSizeTypesStandardD12V2, VMSizeTypesStandardD12V2Promo, VMSizeTypesStandardD13, VMSizeTypesStandardD13V2, VMSizeTypesStandardD13V2Promo, VMSizeTypesStandardD14, VMSizeTypesStandardD14V2, VMSizeTypesStandardD14V2Promo, VMSizeTypesStandardD15V2, VMSizeTypesStandardD16sV3, VMSizeTypesStandardD16V3, VMSizeTypesStandardD1V2, VMSizeTypesStandardD2, VMSizeTypesStandardD2sV3, VMSizeTypesStandardD2V2, VMSizeTypesStandardD2V2Promo, VMSizeTypesStandardD2V3, VMSizeTypesStandardD3, VMSizeTypesStandardD32sV3, VMSizeTypesStandardD32V3, VMSizeTypesStandardD3V2, VMSizeTypesStandardD3V2Promo, VMSizeTypesStandardD4, VMSizeTypesStandardD4sV3, VMSizeTypesStandardD4V2, VMSizeTypesStandardD4V2Promo, VMSizeTypesStandardD4V3, VMSizeTypesStandardD5V2, VMSizeTypesStandardD5V2Promo, VMSizeTypesStandardD64sV3, VMSizeTypesStandardD64V3, VMSizeTypesStandardD8sV3, VMSizeTypesStandardD8V3, VMSizeTypesStandardDS1, VMSizeTypesStandardDS11, VMSizeTypesStandardDS11V2, VMSizeTypesStandardDS11V2Promo, VMSizeTypesStandardDS12, VMSizeTypesStandardDS12V2, VMSizeTypesStandardDS12V2Promo, VMSizeTypesStandardDS13, VMSizeTypesStandardDS132V2, VMSizeTypesStandardDS134V2, VMSizeTypesStandardDS13V2, VMSizeTypesStandardDS13V2Promo, VMSizeTypesStandardDS14, VMSizeTypesStandardDS144V2, VMSizeTypesStandardDS148V2, VMSizeTypesStandardDS14V2, VMSizeTypesStandardDS14V2Promo, VMSizeTypesStandardDS15V2, VMSizeTypesStandardDS1V2, VMSizeTypesStandardDS2, VMSizeTypesStandardDS2V2, VMSizeTypesStandardDS2V2Promo, VMSizeTypesStandardDS3, VMSizeTypesStandardDS3V2, VMSizeTypesStandardDS3V2Promo, VMSizeTypesStandardDS4, VMSizeTypesStandardDS4V2, VMSizeTypesStandardDS4V2Promo, VMSizeTypesStandardDS5V2, VMSizeTypesStandardDS5V2Promo, VMSizeTypesStandardE16sV3, VMSizeTypesStandardE16V3, VMSizeTypesStandardE2sV3, VMSizeTypesStandardE2V3, VMSizeTypesStandardE3216sV3, VMSizeTypesStandardE328sV3, VMSizeTypesStandardE32sV3, VMSizeTypesStandardE32V3, VMSizeTypesStandardE4sV3, VMSizeTypesStandardE4V3, VMSizeTypesStandardE6416sV3, VMSizeTypesStandardE6432sV3, VMSizeTypesStandardE64sV3, VMSizeTypesStandardE64V3, VMSizeTypesStandardE8sV3, VMSizeTypesStandardE8V3, VMSizeTypesStandardF1, VMSizeTypesStandardF16, VMSizeTypesStandardF16s, VMSizeTypesStandardF16sV2, VMSizeTypesStandardF1s, VMSizeTypesStandardF2, VMSizeTypesStandardF2s, VMSizeTypesStandardF2sV2, VMSizeTypesStandardF32sV2, VMSizeTypesStandardF4, VMSizeTypesStandardF4s, VMSizeTypesStandardF4sV2, VMSizeTypesStandardF64sV2, VMSizeTypesStandardF72sV2, VMSizeTypesStandardF8, VMSizeTypesStandardF8s, VMSizeTypesStandardF8sV2, VMSizeTypesStandardG1, VMSizeTypesStandardG2, VMSizeTypesStandardG3, VMSizeTypesStandardG4, VMSizeTypesStandardG5, VMSizeTypesStandardGS1, VMSizeTypesStandardGS2, VMSizeTypesStandardGS3, VMSizeTypesStandardGS4, VMSizeTypesStandardGS44, VMSizeTypesStandardGS48, VMSizeTypesStandardGS5, VMSizeTypesStandardGS516, VMSizeTypesStandardGS58, VMSizeTypesStandardH16, VMSizeTypesStandardH16m, VMSizeTypesStandardH16mr, VMSizeTypesStandardH16r, VMSizeTypesStandardH8, VMSizeTypesStandardH8m, VMSizeTypesStandardL16s, VMSizeTypesStandardL32s, VMSizeTypesStandardL4s, VMSizeTypesStandardL8s, VMSizeTypesStandardM12832ms, VMSizeTypesStandardM12864ms, VMSizeTypesStandardM128ms, VMSizeTypesStandardM128s, VMSizeTypesStandardM6416ms, VMSizeTypesStandardM6432ms, VMSizeTypesStandardM64ms, VMSizeTypesStandardM64s, VMSizeTypesStandardNC12, VMSizeTypesStandardNC12sV2, VMSizeTypesStandardNC12sV3, VMSizeTypesStandardNC24, VMSizeTypesStandardNC24r, VMSizeTypesStandardNC24rsV2, VMSizeTypesStandardNC24rsV3, VMSizeTypesStandardNC24sV2, VMSizeTypesStandardNC24sV3, VMSizeTypesStandardNC6, VMSizeTypesStandardNC6sV2, VMSizeTypesStandardNC6sV3, VMSizeTypesStandardND12s, VMSizeTypesStandardND24rs, VMSizeTypesStandardND24s, VMSizeTypesStandardND6s, VMSizeTypesStandardNV12, VMSizeTypesStandardNV24, VMSizeTypesStandardNV6}
593}
594
595// AccessProfile profile for enabling a user to access a managed cluster.
596type AccessProfile struct {
597	// KubeConfig - Base64-encoded Kubernetes configuration file.
598	KubeConfig *[]byte `json:"kubeConfig,omitempty"`
599}
600
601// AgentPool agent Pool.
602type AgentPool struct {
603	autorest.Response `json:"-"`
604	// ManagedClusterAgentPoolProfileProperties - Properties of an agent pool.
605	*ManagedClusterAgentPoolProfileProperties `json:"properties,omitempty"`
606	// ID - READ-ONLY; Resource ID.
607	ID *string `json:"id,omitempty"`
608	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
609	Name *string `json:"name,omitempty"`
610	// Type - READ-ONLY; Resource type
611	Type *string `json:"type,omitempty"`
612}
613
614// MarshalJSON is the custom marshaler for AgentPool.
615func (ap AgentPool) MarshalJSON() ([]byte, error) {
616	objectMap := make(map[string]interface{})
617	if ap.ManagedClusterAgentPoolProfileProperties != nil {
618		objectMap["properties"] = ap.ManagedClusterAgentPoolProfileProperties
619	}
620	return json.Marshal(objectMap)
621}
622
623// UnmarshalJSON is the custom unmarshaler for AgentPool struct.
624func (ap *AgentPool) UnmarshalJSON(body []byte) error {
625	var m map[string]*json.RawMessage
626	err := json.Unmarshal(body, &m)
627	if err != nil {
628		return err
629	}
630	for k, v := range m {
631		switch k {
632		case "properties":
633			if v != nil {
634				var managedClusterAgentPoolProfileProperties ManagedClusterAgentPoolProfileProperties
635				err = json.Unmarshal(*v, &managedClusterAgentPoolProfileProperties)
636				if err != nil {
637					return err
638				}
639				ap.ManagedClusterAgentPoolProfileProperties = &managedClusterAgentPoolProfileProperties
640			}
641		case "id":
642			if v != nil {
643				var ID string
644				err = json.Unmarshal(*v, &ID)
645				if err != nil {
646					return err
647				}
648				ap.ID = &ID
649			}
650		case "name":
651			if v != nil {
652				var name string
653				err = json.Unmarshal(*v, &name)
654				if err != nil {
655					return err
656				}
657				ap.Name = &name
658			}
659		case "type":
660			if v != nil {
661				var typeVar string
662				err = json.Unmarshal(*v, &typeVar)
663				if err != nil {
664					return err
665				}
666				ap.Type = &typeVar
667			}
668		}
669	}
670
671	return nil
672}
673
674// AgentPoolListResult the response from the List Agent Pools operation.
675type AgentPoolListResult struct {
676	autorest.Response `json:"-"`
677	// Value - The list of agent pools.
678	Value *[]AgentPool `json:"value,omitempty"`
679	// NextLink - READ-ONLY; The URL to get the next set of agent pool results.
680	NextLink *string `json:"nextLink,omitempty"`
681}
682
683// AgentPoolListResultIterator provides access to a complete listing of AgentPool values.
684type AgentPoolListResultIterator struct {
685	i    int
686	page AgentPoolListResultPage
687}
688
689// NextWithContext advances to the next value.  If there was an error making
690// the request the iterator does not advance and the error is returned.
691func (iter *AgentPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
692	if tracing.IsEnabled() {
693		ctx = tracing.StartSpan(ctx, fqdn+"/AgentPoolListResultIterator.NextWithContext")
694		defer func() {
695			sc := -1
696			if iter.Response().Response.Response != nil {
697				sc = iter.Response().Response.Response.StatusCode
698			}
699			tracing.EndSpan(ctx, sc, err)
700		}()
701	}
702	iter.i++
703	if iter.i < len(iter.page.Values()) {
704		return nil
705	}
706	err = iter.page.NextWithContext(ctx)
707	if err != nil {
708		iter.i--
709		return err
710	}
711	iter.i = 0
712	return nil
713}
714
715// Next advances to the next value.  If there was an error making
716// the request the iterator does not advance and the error is returned.
717// Deprecated: Use NextWithContext() instead.
718func (iter *AgentPoolListResultIterator) Next() error {
719	return iter.NextWithContext(context.Background())
720}
721
722// NotDone returns true if the enumeration should be started or is not yet complete.
723func (iter AgentPoolListResultIterator) NotDone() bool {
724	return iter.page.NotDone() && iter.i < len(iter.page.Values())
725}
726
727// Response returns the raw server response from the last page request.
728func (iter AgentPoolListResultIterator) Response() AgentPoolListResult {
729	return iter.page.Response()
730}
731
732// Value returns the current value or a zero-initialized value if the
733// iterator has advanced beyond the end of the collection.
734func (iter AgentPoolListResultIterator) Value() AgentPool {
735	if !iter.page.NotDone() {
736		return AgentPool{}
737	}
738	return iter.page.Values()[iter.i]
739}
740
741// Creates a new instance of the AgentPoolListResultIterator type.
742func NewAgentPoolListResultIterator(page AgentPoolListResultPage) AgentPoolListResultIterator {
743	return AgentPoolListResultIterator{page: page}
744}
745
746// IsEmpty returns true if the ListResult contains no values.
747func (aplr AgentPoolListResult) IsEmpty() bool {
748	return aplr.Value == nil || len(*aplr.Value) == 0
749}
750
751// agentPoolListResultPreparer prepares a request to retrieve the next set of results.
752// It returns nil if no more results exist.
753func (aplr AgentPoolListResult) agentPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
754	if aplr.NextLink == nil || len(to.String(aplr.NextLink)) < 1 {
755		return nil, nil
756	}
757	return autorest.Prepare((&http.Request{}).WithContext(ctx),
758		autorest.AsJSON(),
759		autorest.AsGet(),
760		autorest.WithBaseURL(to.String(aplr.NextLink)))
761}
762
763// AgentPoolListResultPage contains a page of AgentPool values.
764type AgentPoolListResultPage struct {
765	fn   func(context.Context, AgentPoolListResult) (AgentPoolListResult, error)
766	aplr AgentPoolListResult
767}
768
769// NextWithContext advances to the next page of values.  If there was an error making
770// the request the page does not advance and the error is returned.
771func (page *AgentPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
772	if tracing.IsEnabled() {
773		ctx = tracing.StartSpan(ctx, fqdn+"/AgentPoolListResultPage.NextWithContext")
774		defer func() {
775			sc := -1
776			if page.Response().Response.Response != nil {
777				sc = page.Response().Response.Response.StatusCode
778			}
779			tracing.EndSpan(ctx, sc, err)
780		}()
781	}
782	next, err := page.fn(ctx, page.aplr)
783	if err != nil {
784		return err
785	}
786	page.aplr = next
787	return nil
788}
789
790// Next advances to the next page of values.  If there was an error making
791// the request the page does not advance and the error is returned.
792// Deprecated: Use NextWithContext() instead.
793func (page *AgentPoolListResultPage) Next() error {
794	return page.NextWithContext(context.Background())
795}
796
797// NotDone returns true if the page enumeration should be started or is not yet complete.
798func (page AgentPoolListResultPage) NotDone() bool {
799	return !page.aplr.IsEmpty()
800}
801
802// Response returns the raw server response from the last page request.
803func (page AgentPoolListResultPage) Response() AgentPoolListResult {
804	return page.aplr
805}
806
807// Values returns the slice of values for the current page or nil if there are no values.
808func (page AgentPoolListResultPage) Values() []AgentPool {
809	if page.aplr.IsEmpty() {
810		return nil
811	}
812	return *page.aplr.Value
813}
814
815// Creates a new instance of the AgentPoolListResultPage type.
816func NewAgentPoolListResultPage(getNextPage func(context.Context, AgentPoolListResult) (AgentPoolListResult, error)) AgentPoolListResultPage {
817	return AgentPoolListResultPage{fn: getNextPage}
818}
819
820// AgentPoolProfile profile for the container service agent pool.
821type AgentPoolProfile struct {
822	// Name - Unique name of the agent pool profile in the context of the subscription and resource group.
823	Name *string `json:"name,omitempty"`
824	// 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.
825	Count *int32 `json:"count,omitempty"`
826	// VMSize - Size of agent VMs. Possible values include: 'VMSizeTypesStandardA1', 'VMSizeTypesStandardA10', 'VMSizeTypesStandardA11', 'VMSizeTypesStandardA1V2', 'VMSizeTypesStandardA2', 'VMSizeTypesStandardA2V2', 'VMSizeTypesStandardA2mV2', 'VMSizeTypesStandardA3', 'VMSizeTypesStandardA4', 'VMSizeTypesStandardA4V2', 'VMSizeTypesStandardA4mV2', 'VMSizeTypesStandardA5', 'VMSizeTypesStandardA6', 'VMSizeTypesStandardA7', 'VMSizeTypesStandardA8', 'VMSizeTypesStandardA8V2', 'VMSizeTypesStandardA8mV2', 'VMSizeTypesStandardA9', 'VMSizeTypesStandardB2ms', 'VMSizeTypesStandardB2s', 'VMSizeTypesStandardB4ms', 'VMSizeTypesStandardB8ms', 'VMSizeTypesStandardD1', 'VMSizeTypesStandardD11', 'VMSizeTypesStandardD11V2', 'VMSizeTypesStandardD11V2Promo', 'VMSizeTypesStandardD12', 'VMSizeTypesStandardD12V2', 'VMSizeTypesStandardD12V2Promo', 'VMSizeTypesStandardD13', 'VMSizeTypesStandardD13V2', 'VMSizeTypesStandardD13V2Promo', 'VMSizeTypesStandardD14', 'VMSizeTypesStandardD14V2', 'VMSizeTypesStandardD14V2Promo', 'VMSizeTypesStandardD15V2', 'VMSizeTypesStandardD16V3', 'VMSizeTypesStandardD16sV3', 'VMSizeTypesStandardD1V2', 'VMSizeTypesStandardD2', 'VMSizeTypesStandardD2V2', 'VMSizeTypesStandardD2V2Promo', 'VMSizeTypesStandardD2V3', 'VMSizeTypesStandardD2sV3', 'VMSizeTypesStandardD3', 'VMSizeTypesStandardD32V3', 'VMSizeTypesStandardD32sV3', 'VMSizeTypesStandardD3V2', 'VMSizeTypesStandardD3V2Promo', 'VMSizeTypesStandardD4', 'VMSizeTypesStandardD4V2', 'VMSizeTypesStandardD4V2Promo', 'VMSizeTypesStandardD4V3', 'VMSizeTypesStandardD4sV3', 'VMSizeTypesStandardD5V2', 'VMSizeTypesStandardD5V2Promo', 'VMSizeTypesStandardD64V3', 'VMSizeTypesStandardD64sV3', 'VMSizeTypesStandardD8V3', 'VMSizeTypesStandardD8sV3', 'VMSizeTypesStandardDS1', 'VMSizeTypesStandardDS11', 'VMSizeTypesStandardDS11V2', 'VMSizeTypesStandardDS11V2Promo', 'VMSizeTypesStandardDS12', 'VMSizeTypesStandardDS12V2', 'VMSizeTypesStandardDS12V2Promo', 'VMSizeTypesStandardDS13', 'VMSizeTypesStandardDS132V2', 'VMSizeTypesStandardDS134V2', 'VMSizeTypesStandardDS13V2', 'VMSizeTypesStandardDS13V2Promo', 'VMSizeTypesStandardDS14', 'VMSizeTypesStandardDS144V2', 'VMSizeTypesStandardDS148V2', 'VMSizeTypesStandardDS14V2', 'VMSizeTypesStandardDS14V2Promo', 'VMSizeTypesStandardDS15V2', 'VMSizeTypesStandardDS1V2', 'VMSizeTypesStandardDS2', 'VMSizeTypesStandardDS2V2', 'VMSizeTypesStandardDS2V2Promo', 'VMSizeTypesStandardDS3', 'VMSizeTypesStandardDS3V2', 'VMSizeTypesStandardDS3V2Promo', 'VMSizeTypesStandardDS4', 'VMSizeTypesStandardDS4V2', 'VMSizeTypesStandardDS4V2Promo', 'VMSizeTypesStandardDS5V2', 'VMSizeTypesStandardDS5V2Promo', 'VMSizeTypesStandardE16V3', 'VMSizeTypesStandardE16sV3', 'VMSizeTypesStandardE2V3', 'VMSizeTypesStandardE2sV3', 'VMSizeTypesStandardE3216sV3', 'VMSizeTypesStandardE328sV3', 'VMSizeTypesStandardE32V3', 'VMSizeTypesStandardE32sV3', 'VMSizeTypesStandardE4V3', 'VMSizeTypesStandardE4sV3', 'VMSizeTypesStandardE6416sV3', 'VMSizeTypesStandardE6432sV3', 'VMSizeTypesStandardE64V3', 'VMSizeTypesStandardE64sV3', 'VMSizeTypesStandardE8V3', 'VMSizeTypesStandardE8sV3', 'VMSizeTypesStandardF1', 'VMSizeTypesStandardF16', 'VMSizeTypesStandardF16s', 'VMSizeTypesStandardF16sV2', 'VMSizeTypesStandardF1s', 'VMSizeTypesStandardF2', 'VMSizeTypesStandardF2s', 'VMSizeTypesStandardF2sV2', 'VMSizeTypesStandardF32sV2', 'VMSizeTypesStandardF4', 'VMSizeTypesStandardF4s', 'VMSizeTypesStandardF4sV2', 'VMSizeTypesStandardF64sV2', 'VMSizeTypesStandardF72sV2', 'VMSizeTypesStandardF8', 'VMSizeTypesStandardF8s', 'VMSizeTypesStandardF8sV2', 'VMSizeTypesStandardG1', 'VMSizeTypesStandardG2', 'VMSizeTypesStandardG3', 'VMSizeTypesStandardG4', 'VMSizeTypesStandardG5', 'VMSizeTypesStandardGS1', 'VMSizeTypesStandardGS2', 'VMSizeTypesStandardGS3', 'VMSizeTypesStandardGS4', 'VMSizeTypesStandardGS44', 'VMSizeTypesStandardGS48', 'VMSizeTypesStandardGS5', 'VMSizeTypesStandardGS516', 'VMSizeTypesStandardGS58', 'VMSizeTypesStandardH16', 'VMSizeTypesStandardH16m', 'VMSizeTypesStandardH16mr', 'VMSizeTypesStandardH16r', 'VMSizeTypesStandardH8', 'VMSizeTypesStandardH8m', 'VMSizeTypesStandardL16s', 'VMSizeTypesStandardL32s', 'VMSizeTypesStandardL4s', 'VMSizeTypesStandardL8s', 'VMSizeTypesStandardM12832ms', 'VMSizeTypesStandardM12864ms', 'VMSizeTypesStandardM128ms', 'VMSizeTypesStandardM128s', 'VMSizeTypesStandardM6416ms', 'VMSizeTypesStandardM6432ms', 'VMSizeTypesStandardM64ms', 'VMSizeTypesStandardM64s', 'VMSizeTypesStandardNC12', 'VMSizeTypesStandardNC12sV2', 'VMSizeTypesStandardNC12sV3', 'VMSizeTypesStandardNC24', 'VMSizeTypesStandardNC24r', 'VMSizeTypesStandardNC24rsV2', 'VMSizeTypesStandardNC24rsV3', 'VMSizeTypesStandardNC24sV2', 'VMSizeTypesStandardNC24sV3', 'VMSizeTypesStandardNC6', 'VMSizeTypesStandardNC6sV2', 'VMSizeTypesStandardNC6sV3', 'VMSizeTypesStandardND12s', 'VMSizeTypesStandardND24rs', 'VMSizeTypesStandardND24s', 'VMSizeTypesStandardND6s', 'VMSizeTypesStandardNV12', 'VMSizeTypesStandardNV24', 'VMSizeTypesStandardNV6'
827	VMSize VMSizeTypes `json:"vmSize,omitempty"`
828	// OsDiskSizeGB - OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
829	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
830	// DNSPrefix - DNS prefix to be used to create the FQDN for the agent pool.
831	DNSPrefix *string `json:"dnsPrefix,omitempty"`
832	// Fqdn - READ-ONLY; FQDN for the agent pool.
833	Fqdn *string `json:"fqdn,omitempty"`
834	// Ports - Ports number array used to expose on this agent pool. The default opened ports are different based on your choice of orchestrator.
835	Ports *[]int32 `json:"ports,omitempty"`
836	// StorageProfile - Storage profile specifies what kind of storage used. Choose from StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the orchestrator choice. Possible values include: 'StorageAccount', 'ManagedDisks'
837	StorageProfile StorageProfileTypes `json:"storageProfile,omitempty"`
838	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier.
839	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
840	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
841	OsType OSType `json:"osType,omitempty"`
842}
843
844// AgentPoolsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
845// long-running operation.
846type AgentPoolsCreateOrUpdateFuture struct {
847	azure.Future
848}
849
850// Result returns the result of the asynchronous operation.
851// If the operation has not completed it will return an error.
852func (future *AgentPoolsCreateOrUpdateFuture) Result(client AgentPoolsClient) (ap AgentPool, err error) {
853	var done bool
854	done, err = future.DoneWithContext(context.Background(), client)
855	if err != nil {
856		err = autorest.NewErrorWithError(err, "containerservice.AgentPoolsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
857		return
858	}
859	if !done {
860		err = azure.NewAsyncOpIncompleteError("containerservice.AgentPoolsCreateOrUpdateFuture")
861		return
862	}
863	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
864	if ap.Response.Response, err = future.GetResult(sender); err == nil && ap.Response.Response.StatusCode != http.StatusNoContent {
865		ap, err = client.CreateOrUpdateResponder(ap.Response.Response)
866		if err != nil {
867			err = autorest.NewErrorWithError(err, "containerservice.AgentPoolsCreateOrUpdateFuture", "Result", ap.Response.Response, "Failure responding to request")
868		}
869	}
870	return
871}
872
873// AgentPoolsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
874// operation.
875type AgentPoolsDeleteFuture struct {
876	azure.Future
877}
878
879// Result returns the result of the asynchronous operation.
880// If the operation has not completed it will return an error.
881func (future *AgentPoolsDeleteFuture) Result(client AgentPoolsClient) (ar autorest.Response, err error) {
882	var done bool
883	done, err = future.DoneWithContext(context.Background(), client)
884	if err != nil {
885		err = autorest.NewErrorWithError(err, "containerservice.AgentPoolsDeleteFuture", "Result", future.Response(), "Polling failure")
886		return
887	}
888	if !done {
889		err = azure.NewAsyncOpIncompleteError("containerservice.AgentPoolsDeleteFuture")
890		return
891	}
892	ar.Response = future.Response()
893	return
894}
895
896// CloudError an error response from the Container service.
897type CloudError struct {
898	// Error - Details about the error.
899	Error *CloudErrorBody `json:"error,omitempty"`
900}
901
902// CloudErrorBody an error response from the Container service.
903type CloudErrorBody struct {
904	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
905	Code *string `json:"code,omitempty"`
906	// Message - A message describing the error, intended to be suitable for display in a user interface.
907	Message *string `json:"message,omitempty"`
908	// Target - The target of the particular error. For example, the name of the property in error.
909	Target *string `json:"target,omitempty"`
910	// Details - A list of additional details about the error.
911	Details *[]CloudErrorBody `json:"details,omitempty"`
912}
913
914// ContainerService container service.
915type ContainerService struct {
916	autorest.Response `json:"-"`
917	// Properties - Properties of the container service.
918	*Properties `json:"properties,omitempty"`
919	// ID - READ-ONLY; Resource Id
920	ID *string `json:"id,omitempty"`
921	// Name - READ-ONLY; Resource name
922	Name *string `json:"name,omitempty"`
923	// Type - READ-ONLY; Resource type
924	Type *string `json:"type,omitempty"`
925	// Location - Resource location
926	Location *string `json:"location,omitempty"`
927	// Tags - Resource tags
928	Tags map[string]*string `json:"tags"`
929}
930
931// MarshalJSON is the custom marshaler for ContainerService.
932func (cs ContainerService) MarshalJSON() ([]byte, error) {
933	objectMap := make(map[string]interface{})
934	if cs.Properties != nil {
935		objectMap["properties"] = cs.Properties
936	}
937	if cs.Location != nil {
938		objectMap["location"] = cs.Location
939	}
940	if cs.Tags != nil {
941		objectMap["tags"] = cs.Tags
942	}
943	return json.Marshal(objectMap)
944}
945
946// UnmarshalJSON is the custom unmarshaler for ContainerService struct.
947func (cs *ContainerService) UnmarshalJSON(body []byte) error {
948	var m map[string]*json.RawMessage
949	err := json.Unmarshal(body, &m)
950	if err != nil {
951		return err
952	}
953	for k, v := range m {
954		switch k {
955		case "properties":
956			if v != nil {
957				var properties Properties
958				err = json.Unmarshal(*v, &properties)
959				if err != nil {
960					return err
961				}
962				cs.Properties = &properties
963			}
964		case "id":
965			if v != nil {
966				var ID string
967				err = json.Unmarshal(*v, &ID)
968				if err != nil {
969					return err
970				}
971				cs.ID = &ID
972			}
973		case "name":
974			if v != nil {
975				var name string
976				err = json.Unmarshal(*v, &name)
977				if err != nil {
978					return err
979				}
980				cs.Name = &name
981			}
982		case "type":
983			if v != nil {
984				var typeVar string
985				err = json.Unmarshal(*v, &typeVar)
986				if err != nil {
987					return err
988				}
989				cs.Type = &typeVar
990			}
991		case "location":
992			if v != nil {
993				var location string
994				err = json.Unmarshal(*v, &location)
995				if err != nil {
996					return err
997				}
998				cs.Location = &location
999			}
1000		case "tags":
1001			if v != nil {
1002				var tags map[string]*string
1003				err = json.Unmarshal(*v, &tags)
1004				if err != nil {
1005					return err
1006				}
1007				cs.Tags = tags
1008			}
1009		}
1010	}
1011
1012	return nil
1013}
1014
1015// ContainerServicesCreateOrUpdateFutureType an abstraction for monitoring and retrieving the results of a
1016// long-running operation.
1017type ContainerServicesCreateOrUpdateFutureType struct {
1018	azure.Future
1019}
1020
1021// Result returns the result of the asynchronous operation.
1022// If the operation has not completed it will return an error.
1023func (future *ContainerServicesCreateOrUpdateFutureType) Result(client ContainerServicesClient) (cs ContainerService, err error) {
1024	var done bool
1025	done, err = future.DoneWithContext(context.Background(), client)
1026	if err != nil {
1027		err = autorest.NewErrorWithError(err, "containerservice.ContainerServicesCreateOrUpdateFutureType", "Result", future.Response(), "Polling failure")
1028		return
1029	}
1030	if !done {
1031		err = azure.NewAsyncOpIncompleteError("containerservice.ContainerServicesCreateOrUpdateFutureType")
1032		return
1033	}
1034	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1035	if cs.Response.Response, err = future.GetResult(sender); err == nil && cs.Response.Response.StatusCode != http.StatusNoContent {
1036		cs, err = client.CreateOrUpdateResponder(cs.Response.Response)
1037		if err != nil {
1038			err = autorest.NewErrorWithError(err, "containerservice.ContainerServicesCreateOrUpdateFutureType", "Result", cs.Response.Response, "Failure responding to request")
1039		}
1040	}
1041	return
1042}
1043
1044// ContainerServicesDeleteFutureType an abstraction for monitoring and retrieving the results of a
1045// long-running operation.
1046type ContainerServicesDeleteFutureType struct {
1047	azure.Future
1048}
1049
1050// Result returns the result of the asynchronous operation.
1051// If the operation has not completed it will return an error.
1052func (future *ContainerServicesDeleteFutureType) Result(client ContainerServicesClient) (ar autorest.Response, err error) {
1053	var done bool
1054	done, err = future.DoneWithContext(context.Background(), client)
1055	if err != nil {
1056		err = autorest.NewErrorWithError(err, "containerservice.ContainerServicesDeleteFutureType", "Result", future.Response(), "Polling failure")
1057		return
1058	}
1059	if !done {
1060		err = azure.NewAsyncOpIncompleteError("containerservice.ContainerServicesDeleteFutureType")
1061		return
1062	}
1063	ar.Response = future.Response()
1064	return
1065}
1066
1067// CredentialResult the credential result response.
1068type CredentialResult struct {
1069	// Name - READ-ONLY; The name of the credential.
1070	Name *string `json:"name,omitempty"`
1071	// Value - READ-ONLY; Base64-encoded Kubernetes configuration file.
1072	Value *[]byte `json:"value,omitempty"`
1073}
1074
1075// CredentialResults the list of credential result response.
1076type CredentialResults struct {
1077	autorest.Response `json:"-"`
1078	// Kubeconfigs - READ-ONLY; Base64-encoded Kubernetes configuration file.
1079	Kubeconfigs *[]CredentialResult `json:"kubeconfigs,omitempty"`
1080}
1081
1082// CustomProfile properties to configure a custom container service cluster.
1083type CustomProfile struct {
1084	// Orchestrator - The name of the custom orchestrator to use.
1085	Orchestrator *string `json:"orchestrator,omitempty"`
1086}
1087
1088// DiagnosticsProfile profile for diagnostics on the container service cluster.
1089type DiagnosticsProfile struct {
1090	// VMDiagnostics - Profile for diagnostics on the container service VMs.
1091	VMDiagnostics *VMDiagnostics `json:"vmDiagnostics,omitempty"`
1092}
1093
1094// KeyVaultSecretRef reference to a secret stored in Azure Key Vault.
1095type KeyVaultSecretRef struct {
1096	// VaultID - Key vault identifier.
1097	VaultID *string `json:"vaultID,omitempty"`
1098	// SecretName - The secret name.
1099	SecretName *string `json:"secretName,omitempty"`
1100	// Version - The secret version.
1101	Version *string `json:"version,omitempty"`
1102}
1103
1104// LinuxProfile profile for Linux VMs in the container service cluster.
1105type LinuxProfile struct {
1106	// AdminUsername - The administrator username to use for Linux VMs.
1107	AdminUsername *string `json:"adminUsername,omitempty"`
1108	// SSH - SSH configuration for Linux-based VMs running on Azure.
1109	SSH *SSHConfiguration `json:"ssh,omitempty"`
1110}
1111
1112// ListResult the response from the List Container Services operation.
1113type ListResult struct {
1114	autorest.Response `json:"-"`
1115	// Value - The list of container services.
1116	Value *[]ContainerService `json:"value,omitempty"`
1117	// NextLink - READ-ONLY; The URL to get the next set of container service results.
1118	NextLink *string `json:"nextLink,omitempty"`
1119}
1120
1121// ListResultIterator provides access to a complete listing of ContainerService values.
1122type ListResultIterator struct {
1123	i    int
1124	page ListResultPage
1125}
1126
1127// NextWithContext advances to the next value.  If there was an error making
1128// the request the iterator does not advance and the error is returned.
1129func (iter *ListResultIterator) NextWithContext(ctx context.Context) (err error) {
1130	if tracing.IsEnabled() {
1131		ctx = tracing.StartSpan(ctx, fqdn+"/ListResultIterator.NextWithContext")
1132		defer func() {
1133			sc := -1
1134			if iter.Response().Response.Response != nil {
1135				sc = iter.Response().Response.Response.StatusCode
1136			}
1137			tracing.EndSpan(ctx, sc, err)
1138		}()
1139	}
1140	iter.i++
1141	if iter.i < len(iter.page.Values()) {
1142		return nil
1143	}
1144	err = iter.page.NextWithContext(ctx)
1145	if err != nil {
1146		iter.i--
1147		return err
1148	}
1149	iter.i = 0
1150	return nil
1151}
1152
1153// Next advances to the next value.  If there was an error making
1154// the request the iterator does not advance and the error is returned.
1155// Deprecated: Use NextWithContext() instead.
1156func (iter *ListResultIterator) Next() error {
1157	return iter.NextWithContext(context.Background())
1158}
1159
1160// NotDone returns true if the enumeration should be started or is not yet complete.
1161func (iter ListResultIterator) NotDone() bool {
1162	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1163}
1164
1165// Response returns the raw server response from the last page request.
1166func (iter ListResultIterator) Response() ListResult {
1167	return iter.page.Response()
1168}
1169
1170// Value returns the current value or a zero-initialized value if the
1171// iterator has advanced beyond the end of the collection.
1172func (iter ListResultIterator) Value() ContainerService {
1173	if !iter.page.NotDone() {
1174		return ContainerService{}
1175	}
1176	return iter.page.Values()[iter.i]
1177}
1178
1179// Creates a new instance of the ListResultIterator type.
1180func NewListResultIterator(page ListResultPage) ListResultIterator {
1181	return ListResultIterator{page: page}
1182}
1183
1184// IsEmpty returns true if the ListResult contains no values.
1185func (lr ListResult) IsEmpty() bool {
1186	return lr.Value == nil || len(*lr.Value) == 0
1187}
1188
1189// listResultPreparer prepares a request to retrieve the next set of results.
1190// It returns nil if no more results exist.
1191func (lr ListResult) listResultPreparer(ctx context.Context) (*http.Request, error) {
1192	if lr.NextLink == nil || len(to.String(lr.NextLink)) < 1 {
1193		return nil, nil
1194	}
1195	return autorest.Prepare((&http.Request{}).WithContext(ctx),
1196		autorest.AsJSON(),
1197		autorest.AsGet(),
1198		autorest.WithBaseURL(to.String(lr.NextLink)))
1199}
1200
1201// ListResultPage contains a page of ContainerService values.
1202type ListResultPage struct {
1203	fn func(context.Context, ListResult) (ListResult, error)
1204	lr ListResult
1205}
1206
1207// NextWithContext advances to the next page of values.  If there was an error making
1208// the request the page does not advance and the error is returned.
1209func (page *ListResultPage) NextWithContext(ctx context.Context) (err error) {
1210	if tracing.IsEnabled() {
1211		ctx = tracing.StartSpan(ctx, fqdn+"/ListResultPage.NextWithContext")
1212		defer func() {
1213			sc := -1
1214			if page.Response().Response.Response != nil {
1215				sc = page.Response().Response.Response.StatusCode
1216			}
1217			tracing.EndSpan(ctx, sc, err)
1218		}()
1219	}
1220	next, err := page.fn(ctx, page.lr)
1221	if err != nil {
1222		return err
1223	}
1224	page.lr = next
1225	return nil
1226}
1227
1228// Next advances to the next page of values.  If there was an error making
1229// the request the page does not advance and the error is returned.
1230// Deprecated: Use NextWithContext() instead.
1231func (page *ListResultPage) Next() error {
1232	return page.NextWithContext(context.Background())
1233}
1234
1235// NotDone returns true if the page enumeration should be started or is not yet complete.
1236func (page ListResultPage) NotDone() bool {
1237	return !page.lr.IsEmpty()
1238}
1239
1240// Response returns the raw server response from the last page request.
1241func (page ListResultPage) Response() ListResult {
1242	return page.lr
1243}
1244
1245// Values returns the slice of values for the current page or nil if there are no values.
1246func (page ListResultPage) Values() []ContainerService {
1247	if page.lr.IsEmpty() {
1248		return nil
1249	}
1250	return *page.lr.Value
1251}
1252
1253// Creates a new instance of the ListResultPage type.
1254func NewListResultPage(getNextPage func(context.Context, ListResult) (ListResult, error)) ListResultPage {
1255	return ListResultPage{fn: getNextPage}
1256}
1257
1258// ManagedCluster managed cluster.
1259type ManagedCluster struct {
1260	autorest.Response `json:"-"`
1261	// ManagedClusterProperties - Properties of a managed cluster.
1262	*ManagedClusterProperties `json:"properties,omitempty"`
1263	// ID - READ-ONLY; Resource Id
1264	ID *string `json:"id,omitempty"`
1265	// Name - READ-ONLY; Resource name
1266	Name *string `json:"name,omitempty"`
1267	// Type - READ-ONLY; Resource type
1268	Type *string `json:"type,omitempty"`
1269	// Location - Resource location
1270	Location *string `json:"location,omitempty"`
1271	// Tags - Resource tags
1272	Tags map[string]*string `json:"tags"`
1273}
1274
1275// MarshalJSON is the custom marshaler for ManagedCluster.
1276func (mc ManagedCluster) MarshalJSON() ([]byte, error) {
1277	objectMap := make(map[string]interface{})
1278	if mc.ManagedClusterProperties != nil {
1279		objectMap["properties"] = mc.ManagedClusterProperties
1280	}
1281	if mc.Location != nil {
1282		objectMap["location"] = mc.Location
1283	}
1284	if mc.Tags != nil {
1285		objectMap["tags"] = mc.Tags
1286	}
1287	return json.Marshal(objectMap)
1288}
1289
1290// UnmarshalJSON is the custom unmarshaler for ManagedCluster struct.
1291func (mc *ManagedCluster) UnmarshalJSON(body []byte) error {
1292	var m map[string]*json.RawMessage
1293	err := json.Unmarshal(body, &m)
1294	if err != nil {
1295		return err
1296	}
1297	for k, v := range m {
1298		switch k {
1299		case "properties":
1300			if v != nil {
1301				var managedClusterProperties ManagedClusterProperties
1302				err = json.Unmarshal(*v, &managedClusterProperties)
1303				if err != nil {
1304					return err
1305				}
1306				mc.ManagedClusterProperties = &managedClusterProperties
1307			}
1308		case "id":
1309			if v != nil {
1310				var ID string
1311				err = json.Unmarshal(*v, &ID)
1312				if err != nil {
1313					return err
1314				}
1315				mc.ID = &ID
1316			}
1317		case "name":
1318			if v != nil {
1319				var name string
1320				err = json.Unmarshal(*v, &name)
1321				if err != nil {
1322					return err
1323				}
1324				mc.Name = &name
1325			}
1326		case "type":
1327			if v != nil {
1328				var typeVar string
1329				err = json.Unmarshal(*v, &typeVar)
1330				if err != nil {
1331					return err
1332				}
1333				mc.Type = &typeVar
1334			}
1335		case "location":
1336			if v != nil {
1337				var location string
1338				err = json.Unmarshal(*v, &location)
1339				if err != nil {
1340					return err
1341				}
1342				mc.Location = &location
1343			}
1344		case "tags":
1345			if v != nil {
1346				var tags map[string]*string
1347				err = json.Unmarshal(*v, &tags)
1348				if err != nil {
1349					return err
1350				}
1351				mc.Tags = tags
1352			}
1353		}
1354	}
1355
1356	return nil
1357}
1358
1359// ManagedClusterAADProfile aADProfile specifies attributes for Azure Active Directory integration.
1360type ManagedClusterAADProfile struct {
1361	// ClientAppID - The client AAD application ID.
1362	ClientAppID *string `json:"clientAppID,omitempty"`
1363	// ServerAppID - The server AAD application ID.
1364	ServerAppID *string `json:"serverAppID,omitempty"`
1365	// ServerAppSecret - The server AAD application secret.
1366	ServerAppSecret *string `json:"serverAppSecret,omitempty"`
1367	// TenantID - The AAD tenant ID to use for authentication. If not specified, will use the tenant of the deployment subscription.
1368	TenantID *string `json:"tenantID,omitempty"`
1369}
1370
1371// ManagedClusterAccessProfile managed cluster Access Profile.
1372type ManagedClusterAccessProfile struct {
1373	autorest.Response `json:"-"`
1374	// AccessProfile - AccessProfile of a managed cluster.
1375	*AccessProfile `json:"properties,omitempty"`
1376	// ID - READ-ONLY; Resource Id
1377	ID *string `json:"id,omitempty"`
1378	// Name - READ-ONLY; Resource name
1379	Name *string `json:"name,omitempty"`
1380	// Type - READ-ONLY; Resource type
1381	Type *string `json:"type,omitempty"`
1382	// Location - Resource location
1383	Location *string `json:"location,omitempty"`
1384	// Tags - Resource tags
1385	Tags map[string]*string `json:"tags"`
1386}
1387
1388// MarshalJSON is the custom marshaler for ManagedClusterAccessProfile.
1389func (mcap ManagedClusterAccessProfile) MarshalJSON() ([]byte, error) {
1390	objectMap := make(map[string]interface{})
1391	if mcap.AccessProfile != nil {
1392		objectMap["properties"] = mcap.AccessProfile
1393	}
1394	if mcap.Location != nil {
1395		objectMap["location"] = mcap.Location
1396	}
1397	if mcap.Tags != nil {
1398		objectMap["tags"] = mcap.Tags
1399	}
1400	return json.Marshal(objectMap)
1401}
1402
1403// UnmarshalJSON is the custom unmarshaler for ManagedClusterAccessProfile struct.
1404func (mcap *ManagedClusterAccessProfile) UnmarshalJSON(body []byte) error {
1405	var m map[string]*json.RawMessage
1406	err := json.Unmarshal(body, &m)
1407	if err != nil {
1408		return err
1409	}
1410	for k, v := range m {
1411		switch k {
1412		case "properties":
1413			if v != nil {
1414				var accessProfile AccessProfile
1415				err = json.Unmarshal(*v, &accessProfile)
1416				if err != nil {
1417					return err
1418				}
1419				mcap.AccessProfile = &accessProfile
1420			}
1421		case "id":
1422			if v != nil {
1423				var ID string
1424				err = json.Unmarshal(*v, &ID)
1425				if err != nil {
1426					return err
1427				}
1428				mcap.ID = &ID
1429			}
1430		case "name":
1431			if v != nil {
1432				var name string
1433				err = json.Unmarshal(*v, &name)
1434				if err != nil {
1435					return err
1436				}
1437				mcap.Name = &name
1438			}
1439		case "type":
1440			if v != nil {
1441				var typeVar string
1442				err = json.Unmarshal(*v, &typeVar)
1443				if err != nil {
1444					return err
1445				}
1446				mcap.Type = &typeVar
1447			}
1448		case "location":
1449			if v != nil {
1450				var location string
1451				err = json.Unmarshal(*v, &location)
1452				if err != nil {
1453					return err
1454				}
1455				mcap.Location = &location
1456			}
1457		case "tags":
1458			if v != nil {
1459				var tags map[string]*string
1460				err = json.Unmarshal(*v, &tags)
1461				if err != nil {
1462					return err
1463				}
1464				mcap.Tags = tags
1465			}
1466		}
1467	}
1468
1469	return nil
1470}
1471
1472// ManagedClusterAddonProfile a Kubernetes add-on profile for a managed cluster.
1473type ManagedClusterAddonProfile struct {
1474	// Enabled - Whether the add-on is enabled or not.
1475	Enabled *bool `json:"enabled,omitempty"`
1476	// Config - Key-value pairs for configuring an add-on.
1477	Config map[string]*string `json:"config"`
1478}
1479
1480// MarshalJSON is the custom marshaler for ManagedClusterAddonProfile.
1481func (mcap ManagedClusterAddonProfile) MarshalJSON() ([]byte, error) {
1482	objectMap := make(map[string]interface{})
1483	if mcap.Enabled != nil {
1484		objectMap["enabled"] = mcap.Enabled
1485	}
1486	if mcap.Config != nil {
1487		objectMap["config"] = mcap.Config
1488	}
1489	return json.Marshal(objectMap)
1490}
1491
1492// ManagedClusterAgentPoolProfile profile for the container service agent pool.
1493type ManagedClusterAgentPoolProfile struct {
1494	// Name - Unique name of the agent pool profile in the context of the subscription and resource group.
1495	Name *string `json:"name,omitempty"`
1496	// 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.
1497	Count *int32 `json:"count,omitempty"`
1498	// VMSize - Size of agent VMs. Possible values include: 'VMSizeTypesStandardA1', 'VMSizeTypesStandardA10', 'VMSizeTypesStandardA11', 'VMSizeTypesStandardA1V2', 'VMSizeTypesStandardA2', 'VMSizeTypesStandardA2V2', 'VMSizeTypesStandardA2mV2', 'VMSizeTypesStandardA3', 'VMSizeTypesStandardA4', 'VMSizeTypesStandardA4V2', 'VMSizeTypesStandardA4mV2', 'VMSizeTypesStandardA5', 'VMSizeTypesStandardA6', 'VMSizeTypesStandardA7', 'VMSizeTypesStandardA8', 'VMSizeTypesStandardA8V2', 'VMSizeTypesStandardA8mV2', 'VMSizeTypesStandardA9', 'VMSizeTypesStandardB2ms', 'VMSizeTypesStandardB2s', 'VMSizeTypesStandardB4ms', 'VMSizeTypesStandardB8ms', 'VMSizeTypesStandardD1', 'VMSizeTypesStandardD11', 'VMSizeTypesStandardD11V2', 'VMSizeTypesStandardD11V2Promo', 'VMSizeTypesStandardD12', 'VMSizeTypesStandardD12V2', 'VMSizeTypesStandardD12V2Promo', 'VMSizeTypesStandardD13', 'VMSizeTypesStandardD13V2', 'VMSizeTypesStandardD13V2Promo', 'VMSizeTypesStandardD14', 'VMSizeTypesStandardD14V2', 'VMSizeTypesStandardD14V2Promo', 'VMSizeTypesStandardD15V2', 'VMSizeTypesStandardD16V3', 'VMSizeTypesStandardD16sV3', 'VMSizeTypesStandardD1V2', 'VMSizeTypesStandardD2', 'VMSizeTypesStandardD2V2', 'VMSizeTypesStandardD2V2Promo', 'VMSizeTypesStandardD2V3', 'VMSizeTypesStandardD2sV3', 'VMSizeTypesStandardD3', 'VMSizeTypesStandardD32V3', 'VMSizeTypesStandardD32sV3', 'VMSizeTypesStandardD3V2', 'VMSizeTypesStandardD3V2Promo', 'VMSizeTypesStandardD4', 'VMSizeTypesStandardD4V2', 'VMSizeTypesStandardD4V2Promo', 'VMSizeTypesStandardD4V3', 'VMSizeTypesStandardD4sV3', 'VMSizeTypesStandardD5V2', 'VMSizeTypesStandardD5V2Promo', 'VMSizeTypesStandardD64V3', 'VMSizeTypesStandardD64sV3', 'VMSizeTypesStandardD8V3', 'VMSizeTypesStandardD8sV3', 'VMSizeTypesStandardDS1', 'VMSizeTypesStandardDS11', 'VMSizeTypesStandardDS11V2', 'VMSizeTypesStandardDS11V2Promo', 'VMSizeTypesStandardDS12', 'VMSizeTypesStandardDS12V2', 'VMSizeTypesStandardDS12V2Promo', 'VMSizeTypesStandardDS13', 'VMSizeTypesStandardDS132V2', 'VMSizeTypesStandardDS134V2', 'VMSizeTypesStandardDS13V2', 'VMSizeTypesStandardDS13V2Promo', 'VMSizeTypesStandardDS14', 'VMSizeTypesStandardDS144V2', 'VMSizeTypesStandardDS148V2', 'VMSizeTypesStandardDS14V2', 'VMSizeTypesStandardDS14V2Promo', 'VMSizeTypesStandardDS15V2', 'VMSizeTypesStandardDS1V2', 'VMSizeTypesStandardDS2', 'VMSizeTypesStandardDS2V2', 'VMSizeTypesStandardDS2V2Promo', 'VMSizeTypesStandardDS3', 'VMSizeTypesStandardDS3V2', 'VMSizeTypesStandardDS3V2Promo', 'VMSizeTypesStandardDS4', 'VMSizeTypesStandardDS4V2', 'VMSizeTypesStandardDS4V2Promo', 'VMSizeTypesStandardDS5V2', 'VMSizeTypesStandardDS5V2Promo', 'VMSizeTypesStandardE16V3', 'VMSizeTypesStandardE16sV3', 'VMSizeTypesStandardE2V3', 'VMSizeTypesStandardE2sV3', 'VMSizeTypesStandardE3216sV3', 'VMSizeTypesStandardE328sV3', 'VMSizeTypesStandardE32V3', 'VMSizeTypesStandardE32sV3', 'VMSizeTypesStandardE4V3', 'VMSizeTypesStandardE4sV3', 'VMSizeTypesStandardE6416sV3', 'VMSizeTypesStandardE6432sV3', 'VMSizeTypesStandardE64V3', 'VMSizeTypesStandardE64sV3', 'VMSizeTypesStandardE8V3', 'VMSizeTypesStandardE8sV3', 'VMSizeTypesStandardF1', 'VMSizeTypesStandardF16', 'VMSizeTypesStandardF16s', 'VMSizeTypesStandardF16sV2', 'VMSizeTypesStandardF1s', 'VMSizeTypesStandardF2', 'VMSizeTypesStandardF2s', 'VMSizeTypesStandardF2sV2', 'VMSizeTypesStandardF32sV2', 'VMSizeTypesStandardF4', 'VMSizeTypesStandardF4s', 'VMSizeTypesStandardF4sV2', 'VMSizeTypesStandardF64sV2', 'VMSizeTypesStandardF72sV2', 'VMSizeTypesStandardF8', 'VMSizeTypesStandardF8s', 'VMSizeTypesStandardF8sV2', 'VMSizeTypesStandardG1', 'VMSizeTypesStandardG2', 'VMSizeTypesStandardG3', 'VMSizeTypesStandardG4', 'VMSizeTypesStandardG5', 'VMSizeTypesStandardGS1', 'VMSizeTypesStandardGS2', 'VMSizeTypesStandardGS3', 'VMSizeTypesStandardGS4', 'VMSizeTypesStandardGS44', 'VMSizeTypesStandardGS48', 'VMSizeTypesStandardGS5', 'VMSizeTypesStandardGS516', 'VMSizeTypesStandardGS58', 'VMSizeTypesStandardH16', 'VMSizeTypesStandardH16m', 'VMSizeTypesStandardH16mr', 'VMSizeTypesStandardH16r', 'VMSizeTypesStandardH8', 'VMSizeTypesStandardH8m', 'VMSizeTypesStandardL16s', 'VMSizeTypesStandardL32s', 'VMSizeTypesStandardL4s', 'VMSizeTypesStandardL8s', 'VMSizeTypesStandardM12832ms', 'VMSizeTypesStandardM12864ms', 'VMSizeTypesStandardM128ms', 'VMSizeTypesStandardM128s', 'VMSizeTypesStandardM6416ms', 'VMSizeTypesStandardM6432ms', 'VMSizeTypesStandardM64ms', 'VMSizeTypesStandardM64s', 'VMSizeTypesStandardNC12', 'VMSizeTypesStandardNC12sV2', 'VMSizeTypesStandardNC12sV3', 'VMSizeTypesStandardNC24', 'VMSizeTypesStandardNC24r', 'VMSizeTypesStandardNC24rsV2', 'VMSizeTypesStandardNC24rsV3', 'VMSizeTypesStandardNC24sV2', 'VMSizeTypesStandardNC24sV3', 'VMSizeTypesStandardNC6', 'VMSizeTypesStandardNC6sV2', 'VMSizeTypesStandardNC6sV3', 'VMSizeTypesStandardND12s', 'VMSizeTypesStandardND24rs', 'VMSizeTypesStandardND24s', 'VMSizeTypesStandardND6s', 'VMSizeTypesStandardNV12', 'VMSizeTypesStandardNV24', 'VMSizeTypesStandardNV6'
1499	VMSize VMSizeTypes `json:"vmSize,omitempty"`
1500	// OsDiskSizeGB - OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
1501	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
1502	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier.
1503	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
1504	// MaxPods - Maximum number of pods that can run on a node.
1505	MaxPods *int32 `json:"maxPods,omitempty"`
1506	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
1507	OsType OSType `json:"osType,omitempty"`
1508	// MaxCount - Maximum number of nodes for auto-scaling
1509	MaxCount *int32 `json:"maxCount,omitempty"`
1510	// MinCount - Minimum number of nodes for auto-scaling
1511	MinCount *int32 `json:"minCount,omitempty"`
1512	// EnableAutoScaling - Whether to enable auto-scaler
1513	EnableAutoScaling *bool `json:"enableAutoScaling,omitempty"`
1514	// Type - AgentPoolType represents types of an agent pool. Possible values include: 'VirtualMachineScaleSets', 'AvailabilitySet'
1515	Type AgentPoolType `json:"type,omitempty"`
1516	// OrchestratorVersion - Version of orchestrator specified when creating the managed cluster.
1517	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
1518	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
1519	ProvisioningState *string `json:"provisioningState,omitempty"`
1520	// AvailabilityZones - (PREVIEW) Availability zones for nodes. Must use VirtualMachineScaleSets AgentPoolType.
1521	AvailabilityZones *[]string `json:"availabilityZones,omitempty"`
1522}
1523
1524// ManagedClusterAgentPoolProfileProperties properties for the container service agent pool profile.
1525type ManagedClusterAgentPoolProfileProperties struct {
1526	// 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.
1527	Count *int32 `json:"count,omitempty"`
1528	// VMSize - Size of agent VMs. Possible values include: 'VMSizeTypesStandardA1', 'VMSizeTypesStandardA10', 'VMSizeTypesStandardA11', 'VMSizeTypesStandardA1V2', 'VMSizeTypesStandardA2', 'VMSizeTypesStandardA2V2', 'VMSizeTypesStandardA2mV2', 'VMSizeTypesStandardA3', 'VMSizeTypesStandardA4', 'VMSizeTypesStandardA4V2', 'VMSizeTypesStandardA4mV2', 'VMSizeTypesStandardA5', 'VMSizeTypesStandardA6', 'VMSizeTypesStandardA7', 'VMSizeTypesStandardA8', 'VMSizeTypesStandardA8V2', 'VMSizeTypesStandardA8mV2', 'VMSizeTypesStandardA9', 'VMSizeTypesStandardB2ms', 'VMSizeTypesStandardB2s', 'VMSizeTypesStandardB4ms', 'VMSizeTypesStandardB8ms', 'VMSizeTypesStandardD1', 'VMSizeTypesStandardD11', 'VMSizeTypesStandardD11V2', 'VMSizeTypesStandardD11V2Promo', 'VMSizeTypesStandardD12', 'VMSizeTypesStandardD12V2', 'VMSizeTypesStandardD12V2Promo', 'VMSizeTypesStandardD13', 'VMSizeTypesStandardD13V2', 'VMSizeTypesStandardD13V2Promo', 'VMSizeTypesStandardD14', 'VMSizeTypesStandardD14V2', 'VMSizeTypesStandardD14V2Promo', 'VMSizeTypesStandardD15V2', 'VMSizeTypesStandardD16V3', 'VMSizeTypesStandardD16sV3', 'VMSizeTypesStandardD1V2', 'VMSizeTypesStandardD2', 'VMSizeTypesStandardD2V2', 'VMSizeTypesStandardD2V2Promo', 'VMSizeTypesStandardD2V3', 'VMSizeTypesStandardD2sV3', 'VMSizeTypesStandardD3', 'VMSizeTypesStandardD32V3', 'VMSizeTypesStandardD32sV3', 'VMSizeTypesStandardD3V2', 'VMSizeTypesStandardD3V2Promo', 'VMSizeTypesStandardD4', 'VMSizeTypesStandardD4V2', 'VMSizeTypesStandardD4V2Promo', 'VMSizeTypesStandardD4V3', 'VMSizeTypesStandardD4sV3', 'VMSizeTypesStandardD5V2', 'VMSizeTypesStandardD5V2Promo', 'VMSizeTypesStandardD64V3', 'VMSizeTypesStandardD64sV3', 'VMSizeTypesStandardD8V3', 'VMSizeTypesStandardD8sV3', 'VMSizeTypesStandardDS1', 'VMSizeTypesStandardDS11', 'VMSizeTypesStandardDS11V2', 'VMSizeTypesStandardDS11V2Promo', 'VMSizeTypesStandardDS12', 'VMSizeTypesStandardDS12V2', 'VMSizeTypesStandardDS12V2Promo', 'VMSizeTypesStandardDS13', 'VMSizeTypesStandardDS132V2', 'VMSizeTypesStandardDS134V2', 'VMSizeTypesStandardDS13V2', 'VMSizeTypesStandardDS13V2Promo', 'VMSizeTypesStandardDS14', 'VMSizeTypesStandardDS144V2', 'VMSizeTypesStandardDS148V2', 'VMSizeTypesStandardDS14V2', 'VMSizeTypesStandardDS14V2Promo', 'VMSizeTypesStandardDS15V2', 'VMSizeTypesStandardDS1V2', 'VMSizeTypesStandardDS2', 'VMSizeTypesStandardDS2V2', 'VMSizeTypesStandardDS2V2Promo', 'VMSizeTypesStandardDS3', 'VMSizeTypesStandardDS3V2', 'VMSizeTypesStandardDS3V2Promo', 'VMSizeTypesStandardDS4', 'VMSizeTypesStandardDS4V2', 'VMSizeTypesStandardDS4V2Promo', 'VMSizeTypesStandardDS5V2', 'VMSizeTypesStandardDS5V2Promo', 'VMSizeTypesStandardE16V3', 'VMSizeTypesStandardE16sV3', 'VMSizeTypesStandardE2V3', 'VMSizeTypesStandardE2sV3', 'VMSizeTypesStandardE3216sV3', 'VMSizeTypesStandardE328sV3', 'VMSizeTypesStandardE32V3', 'VMSizeTypesStandardE32sV3', 'VMSizeTypesStandardE4V3', 'VMSizeTypesStandardE4sV3', 'VMSizeTypesStandardE6416sV3', 'VMSizeTypesStandardE6432sV3', 'VMSizeTypesStandardE64V3', 'VMSizeTypesStandardE64sV3', 'VMSizeTypesStandardE8V3', 'VMSizeTypesStandardE8sV3', 'VMSizeTypesStandardF1', 'VMSizeTypesStandardF16', 'VMSizeTypesStandardF16s', 'VMSizeTypesStandardF16sV2', 'VMSizeTypesStandardF1s', 'VMSizeTypesStandardF2', 'VMSizeTypesStandardF2s', 'VMSizeTypesStandardF2sV2', 'VMSizeTypesStandardF32sV2', 'VMSizeTypesStandardF4', 'VMSizeTypesStandardF4s', 'VMSizeTypesStandardF4sV2', 'VMSizeTypesStandardF64sV2', 'VMSizeTypesStandardF72sV2', 'VMSizeTypesStandardF8', 'VMSizeTypesStandardF8s', 'VMSizeTypesStandardF8sV2', 'VMSizeTypesStandardG1', 'VMSizeTypesStandardG2', 'VMSizeTypesStandardG3', 'VMSizeTypesStandardG4', 'VMSizeTypesStandardG5', 'VMSizeTypesStandardGS1', 'VMSizeTypesStandardGS2', 'VMSizeTypesStandardGS3', 'VMSizeTypesStandardGS4', 'VMSizeTypesStandardGS44', 'VMSizeTypesStandardGS48', 'VMSizeTypesStandardGS5', 'VMSizeTypesStandardGS516', 'VMSizeTypesStandardGS58', 'VMSizeTypesStandardH16', 'VMSizeTypesStandardH16m', 'VMSizeTypesStandardH16mr', 'VMSizeTypesStandardH16r', 'VMSizeTypesStandardH8', 'VMSizeTypesStandardH8m', 'VMSizeTypesStandardL16s', 'VMSizeTypesStandardL32s', 'VMSizeTypesStandardL4s', 'VMSizeTypesStandardL8s', 'VMSizeTypesStandardM12832ms', 'VMSizeTypesStandardM12864ms', 'VMSizeTypesStandardM128ms', 'VMSizeTypesStandardM128s', 'VMSizeTypesStandardM6416ms', 'VMSizeTypesStandardM6432ms', 'VMSizeTypesStandardM64ms', 'VMSizeTypesStandardM64s', 'VMSizeTypesStandardNC12', 'VMSizeTypesStandardNC12sV2', 'VMSizeTypesStandardNC12sV3', 'VMSizeTypesStandardNC24', 'VMSizeTypesStandardNC24r', 'VMSizeTypesStandardNC24rsV2', 'VMSizeTypesStandardNC24rsV3', 'VMSizeTypesStandardNC24sV2', 'VMSizeTypesStandardNC24sV3', 'VMSizeTypesStandardNC6', 'VMSizeTypesStandardNC6sV2', 'VMSizeTypesStandardNC6sV3', 'VMSizeTypesStandardND12s', 'VMSizeTypesStandardND24rs', 'VMSizeTypesStandardND24s', 'VMSizeTypesStandardND6s', 'VMSizeTypesStandardNV12', 'VMSizeTypesStandardNV24', 'VMSizeTypesStandardNV6'
1529	VMSize VMSizeTypes `json:"vmSize,omitempty"`
1530	// OsDiskSizeGB - OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
1531	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
1532	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier.
1533	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
1534	// MaxPods - Maximum number of pods that can run on a node.
1535	MaxPods *int32 `json:"maxPods,omitempty"`
1536	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
1537	OsType OSType `json:"osType,omitempty"`
1538	// MaxCount - Maximum number of nodes for auto-scaling
1539	MaxCount *int32 `json:"maxCount,omitempty"`
1540	// MinCount - Minimum number of nodes for auto-scaling
1541	MinCount *int32 `json:"minCount,omitempty"`
1542	// EnableAutoScaling - Whether to enable auto-scaler
1543	EnableAutoScaling *bool `json:"enableAutoScaling,omitempty"`
1544	// Type - AgentPoolType represents types of an agent pool. Possible values include: 'VirtualMachineScaleSets', 'AvailabilitySet'
1545	Type AgentPoolType `json:"type,omitempty"`
1546	// OrchestratorVersion - Version of orchestrator specified when creating the managed cluster.
1547	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
1548	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
1549	ProvisioningState *string `json:"provisioningState,omitempty"`
1550	// AvailabilityZones - (PREVIEW) Availability zones for nodes. Must use VirtualMachineScaleSets AgentPoolType.
1551	AvailabilityZones *[]string `json:"availabilityZones,omitempty"`
1552}
1553
1554// ManagedClusterListResult the response from the List Managed Clusters operation.
1555type ManagedClusterListResult struct {
1556	autorest.Response `json:"-"`
1557	// Value - The list of managed clusters.
1558	Value *[]ManagedCluster `json:"value,omitempty"`
1559	// NextLink - READ-ONLY; The URL to get the next set of managed cluster results.
1560	NextLink *string `json:"nextLink,omitempty"`
1561}
1562
1563// ManagedClusterListResultIterator provides access to a complete listing of ManagedCluster values.
1564type ManagedClusterListResultIterator struct {
1565	i    int
1566	page ManagedClusterListResultPage
1567}
1568
1569// NextWithContext advances to the next value.  If there was an error making
1570// the request the iterator does not advance and the error is returned.
1571func (iter *ManagedClusterListResultIterator) NextWithContext(ctx context.Context) (err error) {
1572	if tracing.IsEnabled() {
1573		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedClusterListResultIterator.NextWithContext")
1574		defer func() {
1575			sc := -1
1576			if iter.Response().Response.Response != nil {
1577				sc = iter.Response().Response.Response.StatusCode
1578			}
1579			tracing.EndSpan(ctx, sc, err)
1580		}()
1581	}
1582	iter.i++
1583	if iter.i < len(iter.page.Values()) {
1584		return nil
1585	}
1586	err = iter.page.NextWithContext(ctx)
1587	if err != nil {
1588		iter.i--
1589		return err
1590	}
1591	iter.i = 0
1592	return nil
1593}
1594
1595// Next advances to the next value.  If there was an error making
1596// the request the iterator does not advance and the error is returned.
1597// Deprecated: Use NextWithContext() instead.
1598func (iter *ManagedClusterListResultIterator) Next() error {
1599	return iter.NextWithContext(context.Background())
1600}
1601
1602// NotDone returns true if the enumeration should be started or is not yet complete.
1603func (iter ManagedClusterListResultIterator) NotDone() bool {
1604	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1605}
1606
1607// Response returns the raw server response from the last page request.
1608func (iter ManagedClusterListResultIterator) Response() ManagedClusterListResult {
1609	return iter.page.Response()
1610}
1611
1612// Value returns the current value or a zero-initialized value if the
1613// iterator has advanced beyond the end of the collection.
1614func (iter ManagedClusterListResultIterator) Value() ManagedCluster {
1615	if !iter.page.NotDone() {
1616		return ManagedCluster{}
1617	}
1618	return iter.page.Values()[iter.i]
1619}
1620
1621// Creates a new instance of the ManagedClusterListResultIterator type.
1622func NewManagedClusterListResultIterator(page ManagedClusterListResultPage) ManagedClusterListResultIterator {
1623	return ManagedClusterListResultIterator{page: page}
1624}
1625
1626// IsEmpty returns true if the ListResult contains no values.
1627func (mclr ManagedClusterListResult) IsEmpty() bool {
1628	return mclr.Value == nil || len(*mclr.Value) == 0
1629}
1630
1631// managedClusterListResultPreparer prepares a request to retrieve the next set of results.
1632// It returns nil if no more results exist.
1633func (mclr ManagedClusterListResult) managedClusterListResultPreparer(ctx context.Context) (*http.Request, error) {
1634	if mclr.NextLink == nil || len(to.String(mclr.NextLink)) < 1 {
1635		return nil, nil
1636	}
1637	return autorest.Prepare((&http.Request{}).WithContext(ctx),
1638		autorest.AsJSON(),
1639		autorest.AsGet(),
1640		autorest.WithBaseURL(to.String(mclr.NextLink)))
1641}
1642
1643// ManagedClusterListResultPage contains a page of ManagedCluster values.
1644type ManagedClusterListResultPage struct {
1645	fn   func(context.Context, ManagedClusterListResult) (ManagedClusterListResult, error)
1646	mclr ManagedClusterListResult
1647}
1648
1649// NextWithContext advances to the next page of values.  If there was an error making
1650// the request the page does not advance and the error is returned.
1651func (page *ManagedClusterListResultPage) NextWithContext(ctx context.Context) (err error) {
1652	if tracing.IsEnabled() {
1653		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedClusterListResultPage.NextWithContext")
1654		defer func() {
1655			sc := -1
1656			if page.Response().Response.Response != nil {
1657				sc = page.Response().Response.Response.StatusCode
1658			}
1659			tracing.EndSpan(ctx, sc, err)
1660		}()
1661	}
1662	next, err := page.fn(ctx, page.mclr)
1663	if err != nil {
1664		return err
1665	}
1666	page.mclr = next
1667	return nil
1668}
1669
1670// Next advances to the next page of values.  If there was an error making
1671// the request the page does not advance and the error is returned.
1672// Deprecated: Use NextWithContext() instead.
1673func (page *ManagedClusterListResultPage) Next() error {
1674	return page.NextWithContext(context.Background())
1675}
1676
1677// NotDone returns true if the page enumeration should be started or is not yet complete.
1678func (page ManagedClusterListResultPage) NotDone() bool {
1679	return !page.mclr.IsEmpty()
1680}
1681
1682// Response returns the raw server response from the last page request.
1683func (page ManagedClusterListResultPage) Response() ManagedClusterListResult {
1684	return page.mclr
1685}
1686
1687// Values returns the slice of values for the current page or nil if there are no values.
1688func (page ManagedClusterListResultPage) Values() []ManagedCluster {
1689	if page.mclr.IsEmpty() {
1690		return nil
1691	}
1692	return *page.mclr.Value
1693}
1694
1695// Creates a new instance of the ManagedClusterListResultPage type.
1696func NewManagedClusterListResultPage(getNextPage func(context.Context, ManagedClusterListResult) (ManagedClusterListResult, error)) ManagedClusterListResultPage {
1697	return ManagedClusterListResultPage{fn: getNextPage}
1698}
1699
1700// ManagedClusterPoolUpgradeProfile the list of available upgrade versions.
1701type ManagedClusterPoolUpgradeProfile struct {
1702	// KubernetesVersion - Kubernetes version (major, minor, patch).
1703	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
1704	// Name - Pool name.
1705	Name *string `json:"name,omitempty"`
1706	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
1707	OsType OSType `json:"osType,omitempty"`
1708	// Upgrades - List of orchestrator types and versions available for upgrade.
1709	Upgrades *[]string `json:"upgrades,omitempty"`
1710}
1711
1712// ManagedClusterProperties properties of the managed cluster.
1713type ManagedClusterProperties struct {
1714	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
1715	ProvisioningState *string `json:"provisioningState,omitempty"`
1716	// KubernetesVersion - Version of Kubernetes specified when creating the managed cluster.
1717	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
1718	// DNSPrefix - DNS prefix specified when creating the managed cluster.
1719	DNSPrefix *string `json:"dnsPrefix,omitempty"`
1720	// Fqdn - READ-ONLY; FQDN for the master pool.
1721	Fqdn *string `json:"fqdn,omitempty"`
1722	// AgentPoolProfiles - Properties of the agent pool.
1723	AgentPoolProfiles *[]ManagedClusterAgentPoolProfile `json:"agentPoolProfiles,omitempty"`
1724	// LinuxProfile - Profile for Linux VMs in the container service cluster.
1725	LinuxProfile *LinuxProfile `json:"linuxProfile,omitempty"`
1726	// ServicePrincipalProfile - Information about a service principal identity for the cluster to use for manipulating Azure APIs.
1727	ServicePrincipalProfile *ManagedClusterServicePrincipalProfile `json:"servicePrincipalProfile,omitempty"`
1728	// AddonProfiles - Profile of managed cluster add-on.
1729	AddonProfiles map[string]*ManagedClusterAddonProfile `json:"addonProfiles"`
1730	// NodeResourceGroup - READ-ONLY; Name of the resource group containing agent pool nodes.
1731	NodeResourceGroup *string `json:"nodeResourceGroup,omitempty"`
1732	// EnableRBAC - Whether to enable Kubernetes Role-Based Access Control.
1733	EnableRBAC *bool `json:"enableRBAC,omitempty"`
1734	// EnablePodSecurityPolicy - (PREVIEW) Whether to enable Kubernetes Pod security policy.
1735	EnablePodSecurityPolicy *bool `json:"enablePodSecurityPolicy,omitempty"`
1736	// NetworkProfile - Profile of network configuration.
1737	NetworkProfile *NetworkProfileType `json:"networkProfile,omitempty"`
1738	// AadProfile - Profile of Azure Active Directory configuration.
1739	AadProfile *ManagedClusterAADProfile `json:"aadProfile,omitempty"`
1740	// APIServerAuthorizedIPRanges - (PREVIEW) Authorized IP Ranges to kubernetes API server.
1741	APIServerAuthorizedIPRanges *[]string `json:"apiServerAuthorizedIPRanges,omitempty"`
1742}
1743
1744// MarshalJSON is the custom marshaler for ManagedClusterProperties.
1745func (mcp ManagedClusterProperties) MarshalJSON() ([]byte, error) {
1746	objectMap := make(map[string]interface{})
1747	if mcp.KubernetesVersion != nil {
1748		objectMap["kubernetesVersion"] = mcp.KubernetesVersion
1749	}
1750	if mcp.DNSPrefix != nil {
1751		objectMap["dnsPrefix"] = mcp.DNSPrefix
1752	}
1753	if mcp.AgentPoolProfiles != nil {
1754		objectMap["agentPoolProfiles"] = mcp.AgentPoolProfiles
1755	}
1756	if mcp.LinuxProfile != nil {
1757		objectMap["linuxProfile"] = mcp.LinuxProfile
1758	}
1759	if mcp.ServicePrincipalProfile != nil {
1760		objectMap["servicePrincipalProfile"] = mcp.ServicePrincipalProfile
1761	}
1762	if mcp.AddonProfiles != nil {
1763		objectMap["addonProfiles"] = mcp.AddonProfiles
1764	}
1765	if mcp.EnableRBAC != nil {
1766		objectMap["enableRBAC"] = mcp.EnableRBAC
1767	}
1768	if mcp.EnablePodSecurityPolicy != nil {
1769		objectMap["enablePodSecurityPolicy"] = mcp.EnablePodSecurityPolicy
1770	}
1771	if mcp.NetworkProfile != nil {
1772		objectMap["networkProfile"] = mcp.NetworkProfile
1773	}
1774	if mcp.AadProfile != nil {
1775		objectMap["aadProfile"] = mcp.AadProfile
1776	}
1777	if mcp.APIServerAuthorizedIPRanges != nil {
1778		objectMap["apiServerAuthorizedIPRanges"] = mcp.APIServerAuthorizedIPRanges
1779	}
1780	return json.Marshal(objectMap)
1781}
1782
1783// ManagedClustersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
1784// long-running operation.
1785type ManagedClustersCreateOrUpdateFuture struct {
1786	azure.Future
1787}
1788
1789// Result returns the result of the asynchronous operation.
1790// If the operation has not completed it will return an error.
1791func (future *ManagedClustersCreateOrUpdateFuture) Result(client ManagedClustersClient) (mc ManagedCluster, err error) {
1792	var done bool
1793	done, err = future.DoneWithContext(context.Background(), client)
1794	if err != nil {
1795		err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
1796		return
1797	}
1798	if !done {
1799		err = azure.NewAsyncOpIncompleteError("containerservice.ManagedClustersCreateOrUpdateFuture")
1800		return
1801	}
1802	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1803	if mc.Response.Response, err = future.GetResult(sender); err == nil && mc.Response.Response.StatusCode != http.StatusNoContent {
1804		mc, err = client.CreateOrUpdateResponder(mc.Response.Response)
1805		if err != nil {
1806			err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersCreateOrUpdateFuture", "Result", mc.Response.Response, "Failure responding to request")
1807		}
1808	}
1809	return
1810}
1811
1812// ManagedClustersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
1813// operation.
1814type ManagedClustersDeleteFuture struct {
1815	azure.Future
1816}
1817
1818// Result returns the result of the asynchronous operation.
1819// If the operation has not completed it will return an error.
1820func (future *ManagedClustersDeleteFuture) Result(client ManagedClustersClient) (ar autorest.Response, err error) {
1821	var done bool
1822	done, err = future.DoneWithContext(context.Background(), client)
1823	if err != nil {
1824		err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersDeleteFuture", "Result", future.Response(), "Polling failure")
1825		return
1826	}
1827	if !done {
1828		err = azure.NewAsyncOpIncompleteError("containerservice.ManagedClustersDeleteFuture")
1829		return
1830	}
1831	ar.Response = future.Response()
1832	return
1833}
1834
1835// ManagedClusterServicePrincipalProfile information about a service principal identity for the cluster to
1836// use for manipulating Azure APIs.
1837type ManagedClusterServicePrincipalProfile struct {
1838	// ClientID - The ID for the service principal.
1839	ClientID *string `json:"clientId,omitempty"`
1840	// Secret - The secret password associated with the service principal in plain text.
1841	Secret *string `json:"secret,omitempty"`
1842}
1843
1844// ManagedClustersResetAADProfileFuture an abstraction for monitoring and retrieving the results of a
1845// long-running operation.
1846type ManagedClustersResetAADProfileFuture struct {
1847	azure.Future
1848}
1849
1850// Result returns the result of the asynchronous operation.
1851// If the operation has not completed it will return an error.
1852func (future *ManagedClustersResetAADProfileFuture) Result(client ManagedClustersClient) (ar autorest.Response, err error) {
1853	var done bool
1854	done, err = future.DoneWithContext(context.Background(), client)
1855	if err != nil {
1856		err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersResetAADProfileFuture", "Result", future.Response(), "Polling failure")
1857		return
1858	}
1859	if !done {
1860		err = azure.NewAsyncOpIncompleteError("containerservice.ManagedClustersResetAADProfileFuture")
1861		return
1862	}
1863	ar.Response = future.Response()
1864	return
1865}
1866
1867// ManagedClustersResetServicePrincipalProfileFuture an abstraction for monitoring and retrieving the
1868// results of a long-running operation.
1869type ManagedClustersResetServicePrincipalProfileFuture 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 *ManagedClustersResetServicePrincipalProfileFuture) Result(client ManagedClustersClient) (ar autorest.Response, err error) {
1876	var done bool
1877	done, err = future.DoneWithContext(context.Background(), client)
1878	if err != nil {
1879		err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersResetServicePrincipalProfileFuture", "Result", future.Response(), "Polling failure")
1880		return
1881	}
1882	if !done {
1883		err = azure.NewAsyncOpIncompleteError("containerservice.ManagedClustersResetServicePrincipalProfileFuture")
1884		return
1885	}
1886	ar.Response = future.Response()
1887	return
1888}
1889
1890// ManagedClustersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
1891// long-running operation.
1892type ManagedClustersUpdateTagsFuture struct {
1893	azure.Future
1894}
1895
1896// Result returns the result of the asynchronous operation.
1897// If the operation has not completed it will return an error.
1898func (future *ManagedClustersUpdateTagsFuture) Result(client ManagedClustersClient) (mc ManagedCluster, err error) {
1899	var done bool
1900	done, err = future.DoneWithContext(context.Background(), client)
1901	if err != nil {
1902		err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
1903		return
1904	}
1905	if !done {
1906		err = azure.NewAsyncOpIncompleteError("containerservice.ManagedClustersUpdateTagsFuture")
1907		return
1908	}
1909	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
1910	if mc.Response.Response, err = future.GetResult(sender); err == nil && mc.Response.Response.StatusCode != http.StatusNoContent {
1911		mc, err = client.UpdateTagsResponder(mc.Response.Response)
1912		if err != nil {
1913			err = autorest.NewErrorWithError(err, "containerservice.ManagedClustersUpdateTagsFuture", "Result", mc.Response.Response, "Failure responding to request")
1914		}
1915	}
1916	return
1917}
1918
1919// ManagedClusterUpgradeProfile the list of available upgrades for compute pools.
1920type ManagedClusterUpgradeProfile struct {
1921	autorest.Response `json:"-"`
1922	// ID - READ-ONLY; Id of upgrade profile.
1923	ID *string `json:"id,omitempty"`
1924	// Name - READ-ONLY; Name of upgrade profile.
1925	Name *string `json:"name,omitempty"`
1926	// Type - READ-ONLY; Type of upgrade profile.
1927	Type *string `json:"type,omitempty"`
1928	// ManagedClusterUpgradeProfileProperties - Properties of upgrade profile.
1929	*ManagedClusterUpgradeProfileProperties `json:"properties,omitempty"`
1930}
1931
1932// MarshalJSON is the custom marshaler for ManagedClusterUpgradeProfile.
1933func (mcup ManagedClusterUpgradeProfile) MarshalJSON() ([]byte, error) {
1934	objectMap := make(map[string]interface{})
1935	if mcup.ManagedClusterUpgradeProfileProperties != nil {
1936		objectMap["properties"] = mcup.ManagedClusterUpgradeProfileProperties
1937	}
1938	return json.Marshal(objectMap)
1939}
1940
1941// UnmarshalJSON is the custom unmarshaler for ManagedClusterUpgradeProfile struct.
1942func (mcup *ManagedClusterUpgradeProfile) UnmarshalJSON(body []byte) error {
1943	var m map[string]*json.RawMessage
1944	err := json.Unmarshal(body, &m)
1945	if err != nil {
1946		return err
1947	}
1948	for k, v := range m {
1949		switch k {
1950		case "id":
1951			if v != nil {
1952				var ID string
1953				err = json.Unmarshal(*v, &ID)
1954				if err != nil {
1955					return err
1956				}
1957				mcup.ID = &ID
1958			}
1959		case "name":
1960			if v != nil {
1961				var name string
1962				err = json.Unmarshal(*v, &name)
1963				if err != nil {
1964					return err
1965				}
1966				mcup.Name = &name
1967			}
1968		case "type":
1969			if v != nil {
1970				var typeVar string
1971				err = json.Unmarshal(*v, &typeVar)
1972				if err != nil {
1973					return err
1974				}
1975				mcup.Type = &typeVar
1976			}
1977		case "properties":
1978			if v != nil {
1979				var managedClusterUpgradeProfileProperties ManagedClusterUpgradeProfileProperties
1980				err = json.Unmarshal(*v, &managedClusterUpgradeProfileProperties)
1981				if err != nil {
1982					return err
1983				}
1984				mcup.ManagedClusterUpgradeProfileProperties = &managedClusterUpgradeProfileProperties
1985			}
1986		}
1987	}
1988
1989	return nil
1990}
1991
1992// ManagedClusterUpgradeProfileProperties control plane and agent pool upgrade profiles.
1993type ManagedClusterUpgradeProfileProperties struct {
1994	// ControlPlaneProfile - The list of available upgrade versions for the control plane.
1995	ControlPlaneProfile *ManagedClusterPoolUpgradeProfile `json:"controlPlaneProfile,omitempty"`
1996	// AgentPoolProfiles - The list of available upgrade versions for agent pools.
1997	AgentPoolProfiles *[]ManagedClusterPoolUpgradeProfile `json:"agentPoolProfiles,omitempty"`
1998}
1999
2000// MasterProfile profile for the container service master.
2001type MasterProfile struct {
2002	// Count - Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The default value is 1.
2003	Count *int32 `json:"count,omitempty"`
2004	// DNSPrefix - DNS prefix to be used to create the FQDN for the master pool.
2005	DNSPrefix *string `json:"dnsPrefix,omitempty"`
2006	// VMSize - Size of agent VMs. Possible values include: 'VMSizeTypesStandardA1', 'VMSizeTypesStandardA10', 'VMSizeTypesStandardA11', 'VMSizeTypesStandardA1V2', 'VMSizeTypesStandardA2', 'VMSizeTypesStandardA2V2', 'VMSizeTypesStandardA2mV2', 'VMSizeTypesStandardA3', 'VMSizeTypesStandardA4', 'VMSizeTypesStandardA4V2', 'VMSizeTypesStandardA4mV2', 'VMSizeTypesStandardA5', 'VMSizeTypesStandardA6', 'VMSizeTypesStandardA7', 'VMSizeTypesStandardA8', 'VMSizeTypesStandardA8V2', 'VMSizeTypesStandardA8mV2', 'VMSizeTypesStandardA9', 'VMSizeTypesStandardB2ms', 'VMSizeTypesStandardB2s', 'VMSizeTypesStandardB4ms', 'VMSizeTypesStandardB8ms', 'VMSizeTypesStandardD1', 'VMSizeTypesStandardD11', 'VMSizeTypesStandardD11V2', 'VMSizeTypesStandardD11V2Promo', 'VMSizeTypesStandardD12', 'VMSizeTypesStandardD12V2', 'VMSizeTypesStandardD12V2Promo', 'VMSizeTypesStandardD13', 'VMSizeTypesStandardD13V2', 'VMSizeTypesStandardD13V2Promo', 'VMSizeTypesStandardD14', 'VMSizeTypesStandardD14V2', 'VMSizeTypesStandardD14V2Promo', 'VMSizeTypesStandardD15V2', 'VMSizeTypesStandardD16V3', 'VMSizeTypesStandardD16sV3', 'VMSizeTypesStandardD1V2', 'VMSizeTypesStandardD2', 'VMSizeTypesStandardD2V2', 'VMSizeTypesStandardD2V2Promo', 'VMSizeTypesStandardD2V3', 'VMSizeTypesStandardD2sV3', 'VMSizeTypesStandardD3', 'VMSizeTypesStandardD32V3', 'VMSizeTypesStandardD32sV3', 'VMSizeTypesStandardD3V2', 'VMSizeTypesStandardD3V2Promo', 'VMSizeTypesStandardD4', 'VMSizeTypesStandardD4V2', 'VMSizeTypesStandardD4V2Promo', 'VMSizeTypesStandardD4V3', 'VMSizeTypesStandardD4sV3', 'VMSizeTypesStandardD5V2', 'VMSizeTypesStandardD5V2Promo', 'VMSizeTypesStandardD64V3', 'VMSizeTypesStandardD64sV3', 'VMSizeTypesStandardD8V3', 'VMSizeTypesStandardD8sV3', 'VMSizeTypesStandardDS1', 'VMSizeTypesStandardDS11', 'VMSizeTypesStandardDS11V2', 'VMSizeTypesStandardDS11V2Promo', 'VMSizeTypesStandardDS12', 'VMSizeTypesStandardDS12V2', 'VMSizeTypesStandardDS12V2Promo', 'VMSizeTypesStandardDS13', 'VMSizeTypesStandardDS132V2', 'VMSizeTypesStandardDS134V2', 'VMSizeTypesStandardDS13V2', 'VMSizeTypesStandardDS13V2Promo', 'VMSizeTypesStandardDS14', 'VMSizeTypesStandardDS144V2', 'VMSizeTypesStandardDS148V2', 'VMSizeTypesStandardDS14V2', 'VMSizeTypesStandardDS14V2Promo', 'VMSizeTypesStandardDS15V2', 'VMSizeTypesStandardDS1V2', 'VMSizeTypesStandardDS2', 'VMSizeTypesStandardDS2V2', 'VMSizeTypesStandardDS2V2Promo', 'VMSizeTypesStandardDS3', 'VMSizeTypesStandardDS3V2', 'VMSizeTypesStandardDS3V2Promo', 'VMSizeTypesStandardDS4', 'VMSizeTypesStandardDS4V2', 'VMSizeTypesStandardDS4V2Promo', 'VMSizeTypesStandardDS5V2', 'VMSizeTypesStandardDS5V2Promo', 'VMSizeTypesStandardE16V3', 'VMSizeTypesStandardE16sV3', 'VMSizeTypesStandardE2V3', 'VMSizeTypesStandardE2sV3', 'VMSizeTypesStandardE3216sV3', 'VMSizeTypesStandardE328sV3', 'VMSizeTypesStandardE32V3', 'VMSizeTypesStandardE32sV3', 'VMSizeTypesStandardE4V3', 'VMSizeTypesStandardE4sV3', 'VMSizeTypesStandardE6416sV3', 'VMSizeTypesStandardE6432sV3', 'VMSizeTypesStandardE64V3', 'VMSizeTypesStandardE64sV3', 'VMSizeTypesStandardE8V3', 'VMSizeTypesStandardE8sV3', 'VMSizeTypesStandardF1', 'VMSizeTypesStandardF16', 'VMSizeTypesStandardF16s', 'VMSizeTypesStandardF16sV2', 'VMSizeTypesStandardF1s', 'VMSizeTypesStandardF2', 'VMSizeTypesStandardF2s', 'VMSizeTypesStandardF2sV2', 'VMSizeTypesStandardF32sV2', 'VMSizeTypesStandardF4', 'VMSizeTypesStandardF4s', 'VMSizeTypesStandardF4sV2', 'VMSizeTypesStandardF64sV2', 'VMSizeTypesStandardF72sV2', 'VMSizeTypesStandardF8', 'VMSizeTypesStandardF8s', 'VMSizeTypesStandardF8sV2', 'VMSizeTypesStandardG1', 'VMSizeTypesStandardG2', 'VMSizeTypesStandardG3', 'VMSizeTypesStandardG4', 'VMSizeTypesStandardG5', 'VMSizeTypesStandardGS1', 'VMSizeTypesStandardGS2', 'VMSizeTypesStandardGS3', 'VMSizeTypesStandardGS4', 'VMSizeTypesStandardGS44', 'VMSizeTypesStandardGS48', 'VMSizeTypesStandardGS5', 'VMSizeTypesStandardGS516', 'VMSizeTypesStandardGS58', 'VMSizeTypesStandardH16', 'VMSizeTypesStandardH16m', 'VMSizeTypesStandardH16mr', 'VMSizeTypesStandardH16r', 'VMSizeTypesStandardH8', 'VMSizeTypesStandardH8m', 'VMSizeTypesStandardL16s', 'VMSizeTypesStandardL32s', 'VMSizeTypesStandardL4s', 'VMSizeTypesStandardL8s', 'VMSizeTypesStandardM12832ms', 'VMSizeTypesStandardM12864ms', 'VMSizeTypesStandardM128ms', 'VMSizeTypesStandardM128s', 'VMSizeTypesStandardM6416ms', 'VMSizeTypesStandardM6432ms', 'VMSizeTypesStandardM64ms', 'VMSizeTypesStandardM64s', 'VMSizeTypesStandardNC12', 'VMSizeTypesStandardNC12sV2', 'VMSizeTypesStandardNC12sV3', 'VMSizeTypesStandardNC24', 'VMSizeTypesStandardNC24r', 'VMSizeTypesStandardNC24rsV2', 'VMSizeTypesStandardNC24rsV3', 'VMSizeTypesStandardNC24sV2', 'VMSizeTypesStandardNC24sV3', 'VMSizeTypesStandardNC6', 'VMSizeTypesStandardNC6sV2', 'VMSizeTypesStandardNC6sV3', 'VMSizeTypesStandardND12s', 'VMSizeTypesStandardND24rs', 'VMSizeTypesStandardND24s', 'VMSizeTypesStandardND6s', 'VMSizeTypesStandardNV12', 'VMSizeTypesStandardNV24', 'VMSizeTypesStandardNV6'
2007	VMSize VMSizeTypes `json:"vmSize,omitempty"`
2008	// OsDiskSizeGB - OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
2009	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
2010	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier.
2011	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
2012	// FirstConsecutiveStaticIP - FirstConsecutiveStaticIP used to specify the first static ip of masters.
2013	FirstConsecutiveStaticIP *string `json:"firstConsecutiveStaticIP,omitempty"`
2014	// StorageProfile - Storage profile specifies what kind of storage used. Choose from StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the orchestrator choice. Possible values include: 'StorageAccount', 'ManagedDisks'
2015	StorageProfile StorageProfileTypes `json:"storageProfile,omitempty"`
2016	// Fqdn - READ-ONLY; FQDN for the master pool.
2017	Fqdn *string `json:"fqdn,omitempty"`
2018}
2019
2020// NetworkProfile represents the OpenShift networking configuration
2021type NetworkProfile struct {
2022	// VnetCidr - CIDR for the OpenShift Vnet.
2023	VnetCidr *string `json:"vnetCidr,omitempty"`
2024	// PeerVnetID - CIDR of the Vnet to peer.
2025	PeerVnetID *string `json:"peerVnetId,omitempty"`
2026}
2027
2028// NetworkProfileType profile of network configuration.
2029type NetworkProfileType struct {
2030	// NetworkPlugin - Network plugin used for building Kubernetes network. Possible values include: 'Azure', 'Kubenet'
2031	NetworkPlugin NetworkPlugin `json:"networkPlugin,omitempty"`
2032	// NetworkPolicy - Network policy used for building Kubernetes network. Possible values include: 'NetworkPolicyCalico', 'NetworkPolicyAzure'
2033	NetworkPolicy NetworkPolicy `json:"networkPolicy,omitempty"`
2034	// PodCidr - A CIDR notation IP range from which to assign pod IPs when kubenet is used.
2035	PodCidr *string `json:"podCidr,omitempty"`
2036	// ServiceCidr - A CIDR notation IP range from which to assign service cluster IPs. It must not overlap with any Subnet IP ranges.
2037	ServiceCidr *string `json:"serviceCidr,omitempty"`
2038	// DNSServiceIP - An IP address assigned to the Kubernetes DNS service. It must be within the Kubernetes service address range specified in serviceCidr.
2039	DNSServiceIP *string `json:"dnsServiceIP,omitempty"`
2040	// DockerBridgeCidr - A CIDR notation IP range assigned to the Docker bridge network. It must not overlap with any Subnet IP ranges or the Kubernetes service address range.
2041	DockerBridgeCidr *string `json:"dockerBridgeCidr,omitempty"`
2042}
2043
2044// OpenShiftManagedCluster openShift Managed cluster.
2045type OpenShiftManagedCluster struct {
2046	autorest.Response `json:"-"`
2047	// Plan - Define the resource plan as required by ARM for billing purposes
2048	Plan *PurchasePlan `json:"plan,omitempty"`
2049	// OpenShiftManagedClusterProperties - Properties of a OpenShift managed cluster.
2050	*OpenShiftManagedClusterProperties `json:"properties,omitempty"`
2051	// ID - READ-ONLY; Resource Id
2052	ID *string `json:"id,omitempty"`
2053	// Name - READ-ONLY; Resource name
2054	Name *string `json:"name,omitempty"`
2055	// Type - READ-ONLY; Resource type
2056	Type *string `json:"type,omitempty"`
2057	// Location - Resource location
2058	Location *string `json:"location,omitempty"`
2059	// Tags - Resource tags
2060	Tags map[string]*string `json:"tags"`
2061}
2062
2063// MarshalJSON is the custom marshaler for OpenShiftManagedCluster.
2064func (osmc OpenShiftManagedCluster) MarshalJSON() ([]byte, error) {
2065	objectMap := make(map[string]interface{})
2066	if osmc.Plan != nil {
2067		objectMap["plan"] = osmc.Plan
2068	}
2069	if osmc.OpenShiftManagedClusterProperties != nil {
2070		objectMap["properties"] = osmc.OpenShiftManagedClusterProperties
2071	}
2072	if osmc.Location != nil {
2073		objectMap["location"] = osmc.Location
2074	}
2075	if osmc.Tags != nil {
2076		objectMap["tags"] = osmc.Tags
2077	}
2078	return json.Marshal(objectMap)
2079}
2080
2081// UnmarshalJSON is the custom unmarshaler for OpenShiftManagedCluster struct.
2082func (osmc *OpenShiftManagedCluster) UnmarshalJSON(body []byte) error {
2083	var m map[string]*json.RawMessage
2084	err := json.Unmarshal(body, &m)
2085	if err != nil {
2086		return err
2087	}
2088	for k, v := range m {
2089		switch k {
2090		case "plan":
2091			if v != nil {
2092				var plan PurchasePlan
2093				err = json.Unmarshal(*v, &plan)
2094				if err != nil {
2095					return err
2096				}
2097				osmc.Plan = &plan
2098			}
2099		case "properties":
2100			if v != nil {
2101				var openShiftManagedClusterProperties OpenShiftManagedClusterProperties
2102				err = json.Unmarshal(*v, &openShiftManagedClusterProperties)
2103				if err != nil {
2104					return err
2105				}
2106				osmc.OpenShiftManagedClusterProperties = &openShiftManagedClusterProperties
2107			}
2108		case "id":
2109			if v != nil {
2110				var ID string
2111				err = json.Unmarshal(*v, &ID)
2112				if err != nil {
2113					return err
2114				}
2115				osmc.ID = &ID
2116			}
2117		case "name":
2118			if v != nil {
2119				var name string
2120				err = json.Unmarshal(*v, &name)
2121				if err != nil {
2122					return err
2123				}
2124				osmc.Name = &name
2125			}
2126		case "type":
2127			if v != nil {
2128				var typeVar string
2129				err = json.Unmarshal(*v, &typeVar)
2130				if err != nil {
2131					return err
2132				}
2133				osmc.Type = &typeVar
2134			}
2135		case "location":
2136			if v != nil {
2137				var location string
2138				err = json.Unmarshal(*v, &location)
2139				if err != nil {
2140					return err
2141				}
2142				osmc.Location = &location
2143			}
2144		case "tags":
2145			if v != nil {
2146				var tags map[string]*string
2147				err = json.Unmarshal(*v, &tags)
2148				if err != nil {
2149					return err
2150				}
2151				osmc.Tags = tags
2152			}
2153		}
2154	}
2155
2156	return nil
2157}
2158
2159// OpenShiftManagedClusterAADIdentityProvider defines the Identity provider for MS AAD.
2160type OpenShiftManagedClusterAADIdentityProvider struct {
2161	// ClientID - The clientId password associated with the provider.
2162	ClientID *string `json:"clientId,omitempty"`
2163	// Secret - The secret password associated with the provider.
2164	Secret *string `json:"secret,omitempty"`
2165	// TenantID - The tenantId associated with the provider.
2166	TenantID *string `json:"tenantId,omitempty"`
2167	// CustomerAdminGroupID - The groupId to be granted cluster admin role.
2168	CustomerAdminGroupID *string `json:"customerAdminGroupId,omitempty"`
2169	// Kind - Possible values include: 'KindOpenShiftManagedClusterBaseIdentityProvider', 'KindAADIdentityProvider'
2170	Kind Kind `json:"kind,omitempty"`
2171}
2172
2173// MarshalJSON is the custom marshaler for OpenShiftManagedClusterAADIdentityProvider.
2174func (osmcaip OpenShiftManagedClusterAADIdentityProvider) MarshalJSON() ([]byte, error) {
2175	osmcaip.Kind = KindAADIdentityProvider
2176	objectMap := make(map[string]interface{})
2177	if osmcaip.ClientID != nil {
2178		objectMap["clientId"] = osmcaip.ClientID
2179	}
2180	if osmcaip.Secret != nil {
2181		objectMap["secret"] = osmcaip.Secret
2182	}
2183	if osmcaip.TenantID != nil {
2184		objectMap["tenantId"] = osmcaip.TenantID
2185	}
2186	if osmcaip.CustomerAdminGroupID != nil {
2187		objectMap["customerAdminGroupId"] = osmcaip.CustomerAdminGroupID
2188	}
2189	if osmcaip.Kind != "" {
2190		objectMap["kind"] = osmcaip.Kind
2191	}
2192	return json.Marshal(objectMap)
2193}
2194
2195// AsOpenShiftManagedClusterAADIdentityProvider is the BasicOpenShiftManagedClusterBaseIdentityProvider implementation for OpenShiftManagedClusterAADIdentityProvider.
2196func (osmcaip OpenShiftManagedClusterAADIdentityProvider) AsOpenShiftManagedClusterAADIdentityProvider() (*OpenShiftManagedClusterAADIdentityProvider, bool) {
2197	return &osmcaip, true
2198}
2199
2200// AsOpenShiftManagedClusterBaseIdentityProvider is the BasicOpenShiftManagedClusterBaseIdentityProvider implementation for OpenShiftManagedClusterAADIdentityProvider.
2201func (osmcaip OpenShiftManagedClusterAADIdentityProvider) AsOpenShiftManagedClusterBaseIdentityProvider() (*OpenShiftManagedClusterBaseIdentityProvider, bool) {
2202	return nil, false
2203}
2204
2205// AsBasicOpenShiftManagedClusterBaseIdentityProvider is the BasicOpenShiftManagedClusterBaseIdentityProvider implementation for OpenShiftManagedClusterAADIdentityProvider.
2206func (osmcaip OpenShiftManagedClusterAADIdentityProvider) AsBasicOpenShiftManagedClusterBaseIdentityProvider() (BasicOpenShiftManagedClusterBaseIdentityProvider, bool) {
2207	return &osmcaip, true
2208}
2209
2210// OpenShiftManagedClusterAgentPoolProfile defines the configuration of the OpenShift cluster VMs.
2211type OpenShiftManagedClusterAgentPoolProfile struct {
2212	// Name - Unique name of the pool profile in the context of the subscription and resource group.
2213	Name *string `json:"name,omitempty"`
2214	// Count - Number of agents (VMs) to host docker containers.
2215	Count *int32 `json:"count,omitempty"`
2216	// VMSize - Size of agent VMs. Possible values include: 'StandardD2sV3', 'StandardD4sV3', 'StandardD8sV3', 'StandardD16sV3', 'StandardD32sV3', 'StandardD64sV3', 'StandardDS4V2', 'StandardDS5V2', 'StandardF8sV2', 'StandardF16sV2', 'StandardF32sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardF8s', 'StandardF16s', 'StandardE4sV3', 'StandardE8sV3', 'StandardE16sV3', 'StandardE20sV3', 'StandardE32sV3', 'StandardE64sV3', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS5', 'StandardDS12V2', 'StandardDS13V2', 'StandardDS14V2', 'StandardDS15V2', 'StandardL4s', 'StandardL8s', 'StandardL16s', 'StandardL32s'
2217	VMSize OpenShiftContainerServiceVMSize `json:"vmSize,omitempty"`
2218	// SubnetCidr - Subnet CIDR for the peering.
2219	SubnetCidr *string `json:"subnetCidr,omitempty"`
2220	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
2221	OsType OSType `json:"osType,omitempty"`
2222	// Role - Define the role of the AgentPoolProfile. Possible values include: 'Compute', 'Infra'
2223	Role OpenShiftAgentPoolProfileRole `json:"role,omitempty"`
2224}
2225
2226// OpenShiftManagedClusterAuthProfile defines all possible authentication profiles for the OpenShift
2227// cluster.
2228type OpenShiftManagedClusterAuthProfile struct {
2229	// IdentityProviders - Type of authentication profile to use.
2230	IdentityProviders *[]OpenShiftManagedClusterIdentityProvider `json:"identityProviders,omitempty"`
2231}
2232
2233// BasicOpenShiftManagedClusterBaseIdentityProvider structure for any Identity provider.
2234type BasicOpenShiftManagedClusterBaseIdentityProvider interface {
2235	AsOpenShiftManagedClusterAADIdentityProvider() (*OpenShiftManagedClusterAADIdentityProvider, bool)
2236	AsOpenShiftManagedClusterBaseIdentityProvider() (*OpenShiftManagedClusterBaseIdentityProvider, bool)
2237}
2238
2239// OpenShiftManagedClusterBaseIdentityProvider structure for any Identity provider.
2240type OpenShiftManagedClusterBaseIdentityProvider struct {
2241	// Kind - Possible values include: 'KindOpenShiftManagedClusterBaseIdentityProvider', 'KindAADIdentityProvider'
2242	Kind Kind `json:"kind,omitempty"`
2243}
2244
2245func unmarshalBasicOpenShiftManagedClusterBaseIdentityProvider(body []byte) (BasicOpenShiftManagedClusterBaseIdentityProvider, error) {
2246	var m map[string]interface{}
2247	err := json.Unmarshal(body, &m)
2248	if err != nil {
2249		return nil, err
2250	}
2251
2252	switch m["kind"] {
2253	case string(KindAADIdentityProvider):
2254		var osmcaip OpenShiftManagedClusterAADIdentityProvider
2255		err := json.Unmarshal(body, &osmcaip)
2256		return osmcaip, err
2257	default:
2258		var osmcbip OpenShiftManagedClusterBaseIdentityProvider
2259		err := json.Unmarshal(body, &osmcbip)
2260		return osmcbip, err
2261	}
2262}
2263func unmarshalBasicOpenShiftManagedClusterBaseIdentityProviderArray(body []byte) ([]BasicOpenShiftManagedClusterBaseIdentityProvider, error) {
2264	var rawMessages []*json.RawMessage
2265	err := json.Unmarshal(body, &rawMessages)
2266	if err != nil {
2267		return nil, err
2268	}
2269
2270	osmcbipArray := make([]BasicOpenShiftManagedClusterBaseIdentityProvider, len(rawMessages))
2271
2272	for index, rawMessage := range rawMessages {
2273		osmcbip, err := unmarshalBasicOpenShiftManagedClusterBaseIdentityProvider(*rawMessage)
2274		if err != nil {
2275			return nil, err
2276		}
2277		osmcbipArray[index] = osmcbip
2278	}
2279	return osmcbipArray, nil
2280}
2281
2282// MarshalJSON is the custom marshaler for OpenShiftManagedClusterBaseIdentityProvider.
2283func (osmcbip OpenShiftManagedClusterBaseIdentityProvider) MarshalJSON() ([]byte, error) {
2284	osmcbip.Kind = KindOpenShiftManagedClusterBaseIdentityProvider
2285	objectMap := make(map[string]interface{})
2286	if osmcbip.Kind != "" {
2287		objectMap["kind"] = osmcbip.Kind
2288	}
2289	return json.Marshal(objectMap)
2290}
2291
2292// AsOpenShiftManagedClusterAADIdentityProvider is the BasicOpenShiftManagedClusterBaseIdentityProvider implementation for OpenShiftManagedClusterBaseIdentityProvider.
2293func (osmcbip OpenShiftManagedClusterBaseIdentityProvider) AsOpenShiftManagedClusterAADIdentityProvider() (*OpenShiftManagedClusterAADIdentityProvider, bool) {
2294	return nil, false
2295}
2296
2297// AsOpenShiftManagedClusterBaseIdentityProvider is the BasicOpenShiftManagedClusterBaseIdentityProvider implementation for OpenShiftManagedClusterBaseIdentityProvider.
2298func (osmcbip OpenShiftManagedClusterBaseIdentityProvider) AsOpenShiftManagedClusterBaseIdentityProvider() (*OpenShiftManagedClusterBaseIdentityProvider, bool) {
2299	return &osmcbip, true
2300}
2301
2302// AsBasicOpenShiftManagedClusterBaseIdentityProvider is the BasicOpenShiftManagedClusterBaseIdentityProvider implementation for OpenShiftManagedClusterBaseIdentityProvider.
2303func (osmcbip OpenShiftManagedClusterBaseIdentityProvider) AsBasicOpenShiftManagedClusterBaseIdentityProvider() (BasicOpenShiftManagedClusterBaseIdentityProvider, bool) {
2304	return &osmcbip, true
2305}
2306
2307// OpenShiftManagedClusterIdentityProvider defines the configuration of the identity providers to be used
2308// in the OpenShift cluster.
2309type OpenShiftManagedClusterIdentityProvider struct {
2310	// Name - Name of the provider.
2311	Name *string `json:"name,omitempty"`
2312	// Provider - Configuration of the provider.
2313	Provider BasicOpenShiftManagedClusterBaseIdentityProvider `json:"provider,omitempty"`
2314}
2315
2316// UnmarshalJSON is the custom unmarshaler for OpenShiftManagedClusterIdentityProvider struct.
2317func (osmcip *OpenShiftManagedClusterIdentityProvider) UnmarshalJSON(body []byte) error {
2318	var m map[string]*json.RawMessage
2319	err := json.Unmarshal(body, &m)
2320	if err != nil {
2321		return err
2322	}
2323	for k, v := range m {
2324		switch k {
2325		case "name":
2326			if v != nil {
2327				var name string
2328				err = json.Unmarshal(*v, &name)
2329				if err != nil {
2330					return err
2331				}
2332				osmcip.Name = &name
2333			}
2334		case "provider":
2335			if v != nil {
2336				provider, err := unmarshalBasicOpenShiftManagedClusterBaseIdentityProvider(*v)
2337				if err != nil {
2338					return err
2339				}
2340				osmcip.Provider = provider
2341			}
2342		}
2343	}
2344
2345	return nil
2346}
2347
2348// OpenShiftManagedClusterListResult the response from the List OpenShift Managed Clusters operation.
2349type OpenShiftManagedClusterListResult struct {
2350	autorest.Response `json:"-"`
2351	// Value - The list of OpenShift managed clusters.
2352	Value *[]OpenShiftManagedCluster `json:"value,omitempty"`
2353	// NextLink - READ-ONLY; The URL to get the next set of OpenShift managed cluster results.
2354	NextLink *string `json:"nextLink,omitempty"`
2355}
2356
2357// OpenShiftManagedClusterListResultIterator provides access to a complete listing of
2358// OpenShiftManagedCluster values.
2359type OpenShiftManagedClusterListResultIterator struct {
2360	i    int
2361	page OpenShiftManagedClusterListResultPage
2362}
2363
2364// NextWithContext advances to the next value.  If there was an error making
2365// the request the iterator does not advance and the error is returned.
2366func (iter *OpenShiftManagedClusterListResultIterator) NextWithContext(ctx context.Context) (err error) {
2367	if tracing.IsEnabled() {
2368		ctx = tracing.StartSpan(ctx, fqdn+"/OpenShiftManagedClusterListResultIterator.NextWithContext")
2369		defer func() {
2370			sc := -1
2371			if iter.Response().Response.Response != nil {
2372				sc = iter.Response().Response.Response.StatusCode
2373			}
2374			tracing.EndSpan(ctx, sc, err)
2375		}()
2376	}
2377	iter.i++
2378	if iter.i < len(iter.page.Values()) {
2379		return nil
2380	}
2381	err = iter.page.NextWithContext(ctx)
2382	if err != nil {
2383		iter.i--
2384		return err
2385	}
2386	iter.i = 0
2387	return nil
2388}
2389
2390// Next advances to the next value.  If there was an error making
2391// the request the iterator does not advance and the error is returned.
2392// Deprecated: Use NextWithContext() instead.
2393func (iter *OpenShiftManagedClusterListResultIterator) Next() error {
2394	return iter.NextWithContext(context.Background())
2395}
2396
2397// NotDone returns true if the enumeration should be started or is not yet complete.
2398func (iter OpenShiftManagedClusterListResultIterator) NotDone() bool {
2399	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2400}
2401
2402// Response returns the raw server response from the last page request.
2403func (iter OpenShiftManagedClusterListResultIterator) Response() OpenShiftManagedClusterListResult {
2404	return iter.page.Response()
2405}
2406
2407// Value returns the current value or a zero-initialized value if the
2408// iterator has advanced beyond the end of the collection.
2409func (iter OpenShiftManagedClusterListResultIterator) Value() OpenShiftManagedCluster {
2410	if !iter.page.NotDone() {
2411		return OpenShiftManagedCluster{}
2412	}
2413	return iter.page.Values()[iter.i]
2414}
2415
2416// Creates a new instance of the OpenShiftManagedClusterListResultIterator type.
2417func NewOpenShiftManagedClusterListResultIterator(page OpenShiftManagedClusterListResultPage) OpenShiftManagedClusterListResultIterator {
2418	return OpenShiftManagedClusterListResultIterator{page: page}
2419}
2420
2421// IsEmpty returns true if the ListResult contains no values.
2422func (osmclr OpenShiftManagedClusterListResult) IsEmpty() bool {
2423	return osmclr.Value == nil || len(*osmclr.Value) == 0
2424}
2425
2426// openShiftManagedClusterListResultPreparer prepares a request to retrieve the next set of results.
2427// It returns nil if no more results exist.
2428func (osmclr OpenShiftManagedClusterListResult) openShiftManagedClusterListResultPreparer(ctx context.Context) (*http.Request, error) {
2429	if osmclr.NextLink == nil || len(to.String(osmclr.NextLink)) < 1 {
2430		return nil, nil
2431	}
2432	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2433		autorest.AsJSON(),
2434		autorest.AsGet(),
2435		autorest.WithBaseURL(to.String(osmclr.NextLink)))
2436}
2437
2438// OpenShiftManagedClusterListResultPage contains a page of OpenShiftManagedCluster values.
2439type OpenShiftManagedClusterListResultPage struct {
2440	fn     func(context.Context, OpenShiftManagedClusterListResult) (OpenShiftManagedClusterListResult, error)
2441	osmclr OpenShiftManagedClusterListResult
2442}
2443
2444// NextWithContext advances to the next page of values.  If there was an error making
2445// the request the page does not advance and the error is returned.
2446func (page *OpenShiftManagedClusterListResultPage) NextWithContext(ctx context.Context) (err error) {
2447	if tracing.IsEnabled() {
2448		ctx = tracing.StartSpan(ctx, fqdn+"/OpenShiftManagedClusterListResultPage.NextWithContext")
2449		defer func() {
2450			sc := -1
2451			if page.Response().Response.Response != nil {
2452				sc = page.Response().Response.Response.StatusCode
2453			}
2454			tracing.EndSpan(ctx, sc, err)
2455		}()
2456	}
2457	next, err := page.fn(ctx, page.osmclr)
2458	if err != nil {
2459		return err
2460	}
2461	page.osmclr = next
2462	return nil
2463}
2464
2465// Next advances to the next page of values.  If there was an error making
2466// the request the page does not advance and the error is returned.
2467// Deprecated: Use NextWithContext() instead.
2468func (page *OpenShiftManagedClusterListResultPage) Next() error {
2469	return page.NextWithContext(context.Background())
2470}
2471
2472// NotDone returns true if the page enumeration should be started or is not yet complete.
2473func (page OpenShiftManagedClusterListResultPage) NotDone() bool {
2474	return !page.osmclr.IsEmpty()
2475}
2476
2477// Response returns the raw server response from the last page request.
2478func (page OpenShiftManagedClusterListResultPage) Response() OpenShiftManagedClusterListResult {
2479	return page.osmclr
2480}
2481
2482// Values returns the slice of values for the current page or nil if there are no values.
2483func (page OpenShiftManagedClusterListResultPage) Values() []OpenShiftManagedCluster {
2484	if page.osmclr.IsEmpty() {
2485		return nil
2486	}
2487	return *page.osmclr.Value
2488}
2489
2490// Creates a new instance of the OpenShiftManagedClusterListResultPage type.
2491func NewOpenShiftManagedClusterListResultPage(getNextPage func(context.Context, OpenShiftManagedClusterListResult) (OpenShiftManagedClusterListResult, error)) OpenShiftManagedClusterListResultPage {
2492	return OpenShiftManagedClusterListResultPage{fn: getNextPage}
2493}
2494
2495// OpenShiftManagedClusterMasterPoolProfile openShiftManagedClusterMaterPoolProfile contains configuration
2496// for OpenShift master VMs.
2497type OpenShiftManagedClusterMasterPoolProfile struct {
2498	// Name - Unique name of the master pool profile in the context of the subscription and resource group.
2499	Name *string `json:"name,omitempty"`
2500	// Count - Number of masters (VMs) to host docker containers. The default value is 3.
2501	Count *int32 `json:"count,omitempty"`
2502	// VMSize - Size of agent VMs. Possible values include: 'StandardD2sV3', 'StandardD4sV3', 'StandardD8sV3', 'StandardD16sV3', 'StandardD32sV3', 'StandardD64sV3', 'StandardDS4V2', 'StandardDS5V2', 'StandardF8sV2', 'StandardF16sV2', 'StandardF32sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardF8s', 'StandardF16s', 'StandardE4sV3', 'StandardE8sV3', 'StandardE16sV3', 'StandardE20sV3', 'StandardE32sV3', 'StandardE64sV3', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS5', 'StandardDS12V2', 'StandardDS13V2', 'StandardDS14V2', 'StandardDS15V2', 'StandardL4s', 'StandardL8s', 'StandardL16s', 'StandardL32s'
2503	VMSize OpenShiftContainerServiceVMSize `json:"vmSize,omitempty"`
2504	// SubnetCidr - Subnet CIDR for the peering.
2505	SubnetCidr *string `json:"subnetCidr,omitempty"`
2506	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
2507	OsType OSType `json:"osType,omitempty"`
2508}
2509
2510// OpenShiftManagedClusterProperties properties of the OpenShift managed cluster.
2511type OpenShiftManagedClusterProperties struct {
2512	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
2513	ProvisioningState *string `json:"provisioningState,omitempty"`
2514	// OpenShiftVersion - Version of OpenShift specified when creating the cluster.
2515	OpenShiftVersion *string `json:"openShiftVersion,omitempty"`
2516	// PublicHostname - Optional user-specified FQDN for OpenShift API server.
2517	PublicHostname *string `json:"publicHostname,omitempty"`
2518	// Fqdn - User-specified FQDN for OpenShift API server loadbalancer internal hostname.
2519	Fqdn *string `json:"fqdn,omitempty"`
2520	// NetworkProfile - Configuration for OpenShift networking.
2521	NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"`
2522	// RouterProfiles - Configuration for OpenShift router(s).
2523	RouterProfiles *[]OpenShiftRouterProfile `json:"routerProfiles,omitempty"`
2524	// MasterPoolProfile - Configuration for OpenShift master VMs.
2525	MasterPoolProfile *OpenShiftManagedClusterMasterPoolProfile `json:"masterPoolProfile,omitempty"`
2526	// AgentPoolProfiles - Configuration of OpenShift cluster VMs.
2527	AgentPoolProfiles *[]OpenShiftManagedClusterAgentPoolProfile `json:"agentPoolProfiles,omitempty"`
2528	// AuthProfile - Configures OpenShift authentication.
2529	AuthProfile *OpenShiftManagedClusterAuthProfile `json:"authProfile,omitempty"`
2530}
2531
2532// OpenShiftManagedClustersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
2533// a long-running operation.
2534type OpenShiftManagedClustersCreateOrUpdateFuture struct {
2535	azure.Future
2536}
2537
2538// Result returns the result of the asynchronous operation.
2539// If the operation has not completed it will return an error.
2540func (future *OpenShiftManagedClustersCreateOrUpdateFuture) Result(client OpenShiftManagedClustersClient) (osmc OpenShiftManagedCluster, err error) {
2541	var done bool
2542	done, err = future.DoneWithContext(context.Background(), client)
2543	if err != nil {
2544		err = autorest.NewErrorWithError(err, "containerservice.OpenShiftManagedClustersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
2545		return
2546	}
2547	if !done {
2548		err = azure.NewAsyncOpIncompleteError("containerservice.OpenShiftManagedClustersCreateOrUpdateFuture")
2549		return
2550	}
2551	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
2552	if osmc.Response.Response, err = future.GetResult(sender); err == nil && osmc.Response.Response.StatusCode != http.StatusNoContent {
2553		osmc, err = client.CreateOrUpdateResponder(osmc.Response.Response)
2554		if err != nil {
2555			err = autorest.NewErrorWithError(err, "containerservice.OpenShiftManagedClustersCreateOrUpdateFuture", "Result", osmc.Response.Response, "Failure responding to request")
2556		}
2557	}
2558	return
2559}
2560
2561// OpenShiftManagedClustersDeleteFuture an abstraction for monitoring and retrieving the results of a
2562// long-running operation.
2563type OpenShiftManagedClustersDeleteFuture struct {
2564	azure.Future
2565}
2566
2567// Result returns the result of the asynchronous operation.
2568// If the operation has not completed it will return an error.
2569func (future *OpenShiftManagedClustersDeleteFuture) Result(client OpenShiftManagedClustersClient) (ar autorest.Response, err error) {
2570	var done bool
2571	done, err = future.DoneWithContext(context.Background(), client)
2572	if err != nil {
2573		err = autorest.NewErrorWithError(err, "containerservice.OpenShiftManagedClustersDeleteFuture", "Result", future.Response(), "Polling failure")
2574		return
2575	}
2576	if !done {
2577		err = azure.NewAsyncOpIncompleteError("containerservice.OpenShiftManagedClustersDeleteFuture")
2578		return
2579	}
2580	ar.Response = future.Response()
2581	return
2582}
2583
2584// OpenShiftManagedClustersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
2585// long-running operation.
2586type OpenShiftManagedClustersUpdateTagsFuture struct {
2587	azure.Future
2588}
2589
2590// Result returns the result of the asynchronous operation.
2591// If the operation has not completed it will return an error.
2592func (future *OpenShiftManagedClustersUpdateTagsFuture) Result(client OpenShiftManagedClustersClient) (osmc OpenShiftManagedCluster, err error) {
2593	var done bool
2594	done, err = future.DoneWithContext(context.Background(), client)
2595	if err != nil {
2596		err = autorest.NewErrorWithError(err, "containerservice.OpenShiftManagedClustersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
2597		return
2598	}
2599	if !done {
2600		err = azure.NewAsyncOpIncompleteError("containerservice.OpenShiftManagedClustersUpdateTagsFuture")
2601		return
2602	}
2603	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
2604	if osmc.Response.Response, err = future.GetResult(sender); err == nil && osmc.Response.Response.StatusCode != http.StatusNoContent {
2605		osmc, err = client.UpdateTagsResponder(osmc.Response.Response)
2606		if err != nil {
2607			err = autorest.NewErrorWithError(err, "containerservice.OpenShiftManagedClustersUpdateTagsFuture", "Result", osmc.Response.Response, "Failure responding to request")
2608		}
2609	}
2610	return
2611}
2612
2613// OpenShiftRouterProfile represents an OpenShift router
2614type OpenShiftRouterProfile struct {
2615	// Name - Name of the router profile.
2616	Name *string `json:"name,omitempty"`
2617	// PublicSubdomain - DNS subdomain for OpenShift router.
2618	PublicSubdomain *string `json:"publicSubdomain,omitempty"`
2619	// Fqdn - READ-ONLY; Auto-allocated FQDN for the OpenShift router.
2620	Fqdn *string `json:"fqdn,omitempty"`
2621}
2622
2623// OperationListResult the List Compute Operation operation response.
2624type OperationListResult struct {
2625	autorest.Response `json:"-"`
2626	// Value - READ-ONLY; The list of compute operations
2627	Value *[]OperationValue `json:"value,omitempty"`
2628}
2629
2630// OperationValue describes the properties of a Compute Operation value.
2631type OperationValue struct {
2632	// Origin - READ-ONLY; The origin of the compute operation.
2633	Origin *string `json:"origin,omitempty"`
2634	// Name - READ-ONLY; The name of the compute operation.
2635	Name *string `json:"name,omitempty"`
2636	// OperationValueDisplay - Describes the properties of a Compute Operation Value Display.
2637	*OperationValueDisplay `json:"display,omitempty"`
2638}
2639
2640// MarshalJSON is the custom marshaler for OperationValue.
2641func (ov OperationValue) MarshalJSON() ([]byte, error) {
2642	objectMap := make(map[string]interface{})
2643	if ov.OperationValueDisplay != nil {
2644		objectMap["display"] = ov.OperationValueDisplay
2645	}
2646	return json.Marshal(objectMap)
2647}
2648
2649// UnmarshalJSON is the custom unmarshaler for OperationValue struct.
2650func (ov *OperationValue) UnmarshalJSON(body []byte) error {
2651	var m map[string]*json.RawMessage
2652	err := json.Unmarshal(body, &m)
2653	if err != nil {
2654		return err
2655	}
2656	for k, v := range m {
2657		switch k {
2658		case "origin":
2659			if v != nil {
2660				var origin string
2661				err = json.Unmarshal(*v, &origin)
2662				if err != nil {
2663					return err
2664				}
2665				ov.Origin = &origin
2666			}
2667		case "name":
2668			if v != nil {
2669				var name string
2670				err = json.Unmarshal(*v, &name)
2671				if err != nil {
2672					return err
2673				}
2674				ov.Name = &name
2675			}
2676		case "display":
2677			if v != nil {
2678				var operationValueDisplay OperationValueDisplay
2679				err = json.Unmarshal(*v, &operationValueDisplay)
2680				if err != nil {
2681					return err
2682				}
2683				ov.OperationValueDisplay = &operationValueDisplay
2684			}
2685		}
2686	}
2687
2688	return nil
2689}
2690
2691// OperationValueDisplay describes the properties of a Compute Operation Value Display.
2692type OperationValueDisplay struct {
2693	// Operation - READ-ONLY; The display name of the compute operation.
2694	Operation *string `json:"operation,omitempty"`
2695	// Resource - READ-ONLY; The display name of the resource the operation applies to.
2696	Resource *string `json:"resource,omitempty"`
2697	// Description - READ-ONLY; The description of the operation.
2698	Description *string `json:"description,omitempty"`
2699	// Provider - READ-ONLY; The resource provider for the operation.
2700	Provider *string `json:"provider,omitempty"`
2701}
2702
2703// OrchestratorProfile contains information about orchestrator.
2704type OrchestratorProfile struct {
2705	// OrchestratorType - Orchestrator type.
2706	OrchestratorType *string `json:"orchestratorType,omitempty"`
2707	// OrchestratorVersion - Orchestrator version (major, minor, patch).
2708	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
2709}
2710
2711// OrchestratorProfileType profile for the container service orchestrator.
2712type OrchestratorProfileType struct {
2713	// OrchestratorType - The orchestrator to use to manage container service cluster resources. Valid values are Kubernetes, Swarm, DCOS, DockerCE and Custom. Possible values include: 'Kubernetes', 'Swarm', 'DCOS', 'DockerCE', 'Custom'
2714	OrchestratorType OrchestratorTypes `json:"orchestratorType,omitempty"`
2715	// OrchestratorVersion - The version of the orchestrator to use. You can specify the major.minor.patch part of the actual version.For example, you can specify version as "1.6.11".
2716	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
2717}
2718
2719// OrchestratorVersionProfile the profile of an orchestrator and its available versions.
2720type OrchestratorVersionProfile struct {
2721	// OrchestratorType - Orchestrator type.
2722	OrchestratorType *string `json:"orchestratorType,omitempty"`
2723	// OrchestratorVersion - Orchestrator version (major, minor, patch).
2724	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
2725	// Default - Installed by default if version is not specified.
2726	Default *bool `json:"default,omitempty"`
2727	// Upgrades - The list of available upgrade versions.
2728	Upgrades *[]OrchestratorProfile `json:"upgrades,omitempty"`
2729}
2730
2731// OrchestratorVersionProfileListResult the list of versions for supported orchestrators.
2732type OrchestratorVersionProfileListResult struct {
2733	autorest.Response `json:"-"`
2734	// ID - READ-ONLY; Id of the orchestrator version profile list result.
2735	ID *string `json:"id,omitempty"`
2736	// Name - READ-ONLY; Name of the orchestrator version profile list result.
2737	Name *string `json:"name,omitempty"`
2738	// Type - READ-ONLY; Type of the orchestrator version profile list result.
2739	Type *string `json:"type,omitempty"`
2740	// OrchestratorVersionProfileProperties - The properties of an orchestrator version profile.
2741	*OrchestratorVersionProfileProperties `json:"properties,omitempty"`
2742}
2743
2744// MarshalJSON is the custom marshaler for OrchestratorVersionProfileListResult.
2745func (ovplr OrchestratorVersionProfileListResult) MarshalJSON() ([]byte, error) {
2746	objectMap := make(map[string]interface{})
2747	if ovplr.OrchestratorVersionProfileProperties != nil {
2748		objectMap["properties"] = ovplr.OrchestratorVersionProfileProperties
2749	}
2750	return json.Marshal(objectMap)
2751}
2752
2753// UnmarshalJSON is the custom unmarshaler for OrchestratorVersionProfileListResult struct.
2754func (ovplr *OrchestratorVersionProfileListResult) UnmarshalJSON(body []byte) error {
2755	var m map[string]*json.RawMessage
2756	err := json.Unmarshal(body, &m)
2757	if err != nil {
2758		return err
2759	}
2760	for k, v := range m {
2761		switch k {
2762		case "id":
2763			if v != nil {
2764				var ID string
2765				err = json.Unmarshal(*v, &ID)
2766				if err != nil {
2767					return err
2768				}
2769				ovplr.ID = &ID
2770			}
2771		case "name":
2772			if v != nil {
2773				var name string
2774				err = json.Unmarshal(*v, &name)
2775				if err != nil {
2776					return err
2777				}
2778				ovplr.Name = &name
2779			}
2780		case "type":
2781			if v != nil {
2782				var typeVar string
2783				err = json.Unmarshal(*v, &typeVar)
2784				if err != nil {
2785					return err
2786				}
2787				ovplr.Type = &typeVar
2788			}
2789		case "properties":
2790			if v != nil {
2791				var orchestratorVersionProfileProperties OrchestratorVersionProfileProperties
2792				err = json.Unmarshal(*v, &orchestratorVersionProfileProperties)
2793				if err != nil {
2794					return err
2795				}
2796				ovplr.OrchestratorVersionProfileProperties = &orchestratorVersionProfileProperties
2797			}
2798		}
2799	}
2800
2801	return nil
2802}
2803
2804// OrchestratorVersionProfileProperties the properties of an orchestrator version profile.
2805type OrchestratorVersionProfileProperties struct {
2806	// Orchestrators - List of orchestrator version profiles.
2807	Orchestrators *[]OrchestratorVersionProfile `json:"orchestrators,omitempty"`
2808}
2809
2810// Properties properties of the container service.
2811type Properties struct {
2812	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
2813	ProvisioningState *string `json:"provisioningState,omitempty"`
2814	// OrchestratorProfile - Profile for the container service orchestrator.
2815	OrchestratorProfile *OrchestratorProfileType `json:"orchestratorProfile,omitempty"`
2816	// CustomProfile - Properties to configure a custom container service cluster.
2817	CustomProfile *CustomProfile `json:"customProfile,omitempty"`
2818	// ServicePrincipalProfile - Information about a service principal identity for the cluster to use for manipulating Azure APIs. Exact one of secret or keyVaultSecretRef need to be specified.
2819	ServicePrincipalProfile *ServicePrincipalProfile `json:"servicePrincipalProfile,omitempty"`
2820	// MasterProfile - Profile for the container service master.
2821	MasterProfile *MasterProfile `json:"masterProfile,omitempty"`
2822	// AgentPoolProfiles - Properties of the agent pool.
2823	AgentPoolProfiles *[]AgentPoolProfile `json:"agentPoolProfiles,omitempty"`
2824	// WindowsProfile - Profile for Windows VMs in the container service cluster.
2825	WindowsProfile *WindowsProfile `json:"windowsProfile,omitempty"`
2826	// LinuxProfile - Profile for Linux VMs in the container service cluster.
2827	LinuxProfile *LinuxProfile `json:"linuxProfile,omitempty"`
2828	// DiagnosticsProfile - Profile for diagnostics in the container service cluster.
2829	DiagnosticsProfile *DiagnosticsProfile `json:"diagnosticsProfile,omitempty"`
2830}
2831
2832// PurchasePlan used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
2833type PurchasePlan struct {
2834	// Name - The plan ID.
2835	Name *string `json:"name,omitempty"`
2836	// Product - Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element.
2837	Product *string `json:"product,omitempty"`
2838	// PromotionCode - The promotion code.
2839	PromotionCode *string `json:"promotionCode,omitempty"`
2840	// Publisher - The plan ID.
2841	Publisher *string `json:"publisher,omitempty"`
2842}
2843
2844// Resource the Resource model definition.
2845type Resource struct {
2846	// ID - READ-ONLY; Resource Id
2847	ID *string `json:"id,omitempty"`
2848	// Name - READ-ONLY; Resource name
2849	Name *string `json:"name,omitempty"`
2850	// Type - READ-ONLY; Resource type
2851	Type *string `json:"type,omitempty"`
2852	// Location - Resource location
2853	Location *string `json:"location,omitempty"`
2854	// Tags - Resource tags
2855	Tags map[string]*string `json:"tags"`
2856}
2857
2858// MarshalJSON is the custom marshaler for Resource.
2859func (r Resource) MarshalJSON() ([]byte, error) {
2860	objectMap := make(map[string]interface{})
2861	if r.Location != nil {
2862		objectMap["location"] = r.Location
2863	}
2864	if r.Tags != nil {
2865		objectMap["tags"] = r.Tags
2866	}
2867	return json.Marshal(objectMap)
2868}
2869
2870// ServicePrincipalProfile information about a service principal identity for the cluster to use for
2871// manipulating Azure APIs. Either secret or keyVaultSecretRef must be specified.
2872type ServicePrincipalProfile struct {
2873	// ClientID - The ID for the service principal.
2874	ClientID *string `json:"clientId,omitempty"`
2875	// Secret - The secret password associated with the service principal in plain text.
2876	Secret *string `json:"secret,omitempty"`
2877	// KeyVaultSecretRef - Reference to a secret stored in Azure Key Vault.
2878	KeyVaultSecretRef *KeyVaultSecretRef `json:"keyVaultSecretRef,omitempty"`
2879}
2880
2881// SSHConfiguration SSH configuration for Linux-based VMs running on Azure.
2882type SSHConfiguration struct {
2883	// PublicKeys - The list of SSH public keys used to authenticate with Linux-based VMs. Only expect one key specified.
2884	PublicKeys *[]SSHPublicKey `json:"publicKeys,omitempty"`
2885}
2886
2887// SSHPublicKey contains information about SSH certificate public key data.
2888type SSHPublicKey struct {
2889	// KeyData - Certificate public key used to authenticate with VMs through SSH. The certificate must be in PEM format with or without headers.
2890	KeyData *string `json:"keyData,omitempty"`
2891}
2892
2893// SubResource reference to another subresource.
2894type SubResource struct {
2895	// ID - READ-ONLY; Resource ID.
2896	ID *string `json:"id,omitempty"`
2897	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
2898	Name *string `json:"name,omitempty"`
2899	// Type - READ-ONLY; Resource type
2900	Type *string `json:"type,omitempty"`
2901}
2902
2903// TagsObject tags object for patch operations.
2904type TagsObject struct {
2905	// Tags - Resource tags.
2906	Tags map[string]*string `json:"tags"`
2907}
2908
2909// MarshalJSON is the custom marshaler for TagsObject.
2910func (toVar TagsObject) MarshalJSON() ([]byte, error) {
2911	objectMap := make(map[string]interface{})
2912	if toVar.Tags != nil {
2913		objectMap["tags"] = toVar.Tags
2914	}
2915	return json.Marshal(objectMap)
2916}
2917
2918// VMDiagnostics profile for diagnostics on the container service VMs.
2919type VMDiagnostics struct {
2920	// Enabled - Whether the VM diagnostic agent is provisioned on the VM.
2921	Enabled *bool `json:"enabled,omitempty"`
2922	// StorageURI - READ-ONLY; The URI of the storage account where diagnostics are stored.
2923	StorageURI *string `json:"storageUri,omitempty"`
2924}
2925
2926// WindowsProfile profile for Windows VMs in the container service cluster.
2927type WindowsProfile struct {
2928	// AdminUsername - The administrator username to use for Windows VMs.
2929	AdminUsername *string `json:"adminUsername,omitempty"`
2930	// AdminPassword - The administrator password to use for Windows VMs.
2931	AdminPassword *string `json:"adminPassword,omitempty"`
2932}
2933