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/2020-11-01/containerservice"
32
33// AccessProfile profile for enabling a user to access a managed cluster.
34type AccessProfile struct {
35	// KubeConfig - Base64-encoded Kubernetes configuration file.
36	KubeConfig *[]byte `json:"kubeConfig,omitempty"`
37}
38
39// AgentPool agent Pool.
40type AgentPool struct {
41	autorest.Response `json:"-"`
42	// ManagedClusterAgentPoolProfileProperties - Properties of an agent pool.
43	*ManagedClusterAgentPoolProfileProperties `json:"properties,omitempty"`
44	// ID - READ-ONLY; Resource ID.
45	ID *string `json:"id,omitempty"`
46	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
47	Name *string `json:"name,omitempty"`
48	// Type - READ-ONLY; Resource type
49	Type *string `json:"type,omitempty"`
50}
51
52// MarshalJSON is the custom marshaler for AgentPool.
53func (ap AgentPool) MarshalJSON() ([]byte, error) {
54	objectMap := make(map[string]interface{})
55	if ap.ManagedClusterAgentPoolProfileProperties != nil {
56		objectMap["properties"] = ap.ManagedClusterAgentPoolProfileProperties
57	}
58	return json.Marshal(objectMap)
59}
60
61// UnmarshalJSON is the custom unmarshaler for AgentPool struct.
62func (ap *AgentPool) UnmarshalJSON(body []byte) error {
63	var m map[string]*json.RawMessage
64	err := json.Unmarshal(body, &m)
65	if err != nil {
66		return err
67	}
68	for k, v := range m {
69		switch k {
70		case "properties":
71			if v != nil {
72				var managedClusterAgentPoolProfileProperties ManagedClusterAgentPoolProfileProperties
73				err = json.Unmarshal(*v, &managedClusterAgentPoolProfileProperties)
74				if err != nil {
75					return err
76				}
77				ap.ManagedClusterAgentPoolProfileProperties = &managedClusterAgentPoolProfileProperties
78			}
79		case "id":
80			if v != nil {
81				var ID string
82				err = json.Unmarshal(*v, &ID)
83				if err != nil {
84					return err
85				}
86				ap.ID = &ID
87			}
88		case "name":
89			if v != nil {
90				var name string
91				err = json.Unmarshal(*v, &name)
92				if err != nil {
93					return err
94				}
95				ap.Name = &name
96			}
97		case "type":
98			if v != nil {
99				var typeVar string
100				err = json.Unmarshal(*v, &typeVar)
101				if err != nil {
102					return err
103				}
104				ap.Type = &typeVar
105			}
106		}
107	}
108
109	return nil
110}
111
112// AgentPoolAvailableVersions the list of available versions for an agent pool.
113type AgentPoolAvailableVersions struct {
114	autorest.Response `json:"-"`
115	// ID - READ-ONLY; Id of the agent pool available versions.
116	ID *string `json:"id,omitempty"`
117	// Name - READ-ONLY; Name of the agent pool available versions.
118	Name *string `json:"name,omitempty"`
119	// Type - READ-ONLY; Type of the agent pool  available versions.
120	Type *string `json:"type,omitempty"`
121	// AgentPoolAvailableVersionsProperties - Properties of agent pool available versions.
122	*AgentPoolAvailableVersionsProperties `json:"properties,omitempty"`
123}
124
125// MarshalJSON is the custom marshaler for AgentPoolAvailableVersions.
126func (apav AgentPoolAvailableVersions) MarshalJSON() ([]byte, error) {
127	objectMap := make(map[string]interface{})
128	if apav.AgentPoolAvailableVersionsProperties != nil {
129		objectMap["properties"] = apav.AgentPoolAvailableVersionsProperties
130	}
131	return json.Marshal(objectMap)
132}
133
134// UnmarshalJSON is the custom unmarshaler for AgentPoolAvailableVersions struct.
135func (apav *AgentPoolAvailableVersions) UnmarshalJSON(body []byte) error {
136	var m map[string]*json.RawMessage
137	err := json.Unmarshal(body, &m)
138	if err != nil {
139		return err
140	}
141	for k, v := range m {
142		switch k {
143		case "id":
144			if v != nil {
145				var ID string
146				err = json.Unmarshal(*v, &ID)
147				if err != nil {
148					return err
149				}
150				apav.ID = &ID
151			}
152		case "name":
153			if v != nil {
154				var name string
155				err = json.Unmarshal(*v, &name)
156				if err != nil {
157					return err
158				}
159				apav.Name = &name
160			}
161		case "type":
162			if v != nil {
163				var typeVar string
164				err = json.Unmarshal(*v, &typeVar)
165				if err != nil {
166					return err
167				}
168				apav.Type = &typeVar
169			}
170		case "properties":
171			if v != nil {
172				var agentPoolAvailableVersionsProperties AgentPoolAvailableVersionsProperties
173				err = json.Unmarshal(*v, &agentPoolAvailableVersionsProperties)
174				if err != nil {
175					return err
176				}
177				apav.AgentPoolAvailableVersionsProperties = &agentPoolAvailableVersionsProperties
178			}
179		}
180	}
181
182	return nil
183}
184
185// AgentPoolAvailableVersionsProperties the list of available agent pool versions.
186type AgentPoolAvailableVersionsProperties struct {
187	// AgentPoolVersions - List of versions available for agent pool.
188	AgentPoolVersions *[]AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem `json:"agentPoolVersions,omitempty"`
189}
190
191// AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem ...
192type AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem struct {
193	// Default - Whether this version is the default agent pool version.
194	Default *bool `json:"default,omitempty"`
195	// KubernetesVersion - Kubernetes version (major, minor, patch).
196	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
197	// IsPreview - Whether Kubernetes version is currently in preview.
198	IsPreview *bool `json:"isPreview,omitempty"`
199}
200
201// AgentPoolListResult the response from the List Agent Pools operation.
202type AgentPoolListResult struct {
203	autorest.Response `json:"-"`
204	// Value - The list of agent pools.
205	Value *[]AgentPool `json:"value,omitempty"`
206	// NextLink - READ-ONLY; The URL to get the next set of agent pool results.
207	NextLink *string `json:"nextLink,omitempty"`
208}
209
210// MarshalJSON is the custom marshaler for AgentPoolListResult.
211func (aplr AgentPoolListResult) MarshalJSON() ([]byte, error) {
212	objectMap := make(map[string]interface{})
213	if aplr.Value != nil {
214		objectMap["value"] = aplr.Value
215	}
216	return json.Marshal(objectMap)
217}
218
219// AgentPoolListResultIterator provides access to a complete listing of AgentPool values.
220type AgentPoolListResultIterator struct {
221	i    int
222	page AgentPoolListResultPage
223}
224
225// NextWithContext advances to the next value.  If there was an error making
226// the request the iterator does not advance and the error is returned.
227func (iter *AgentPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
228	if tracing.IsEnabled() {
229		ctx = tracing.StartSpan(ctx, fqdn+"/AgentPoolListResultIterator.NextWithContext")
230		defer func() {
231			sc := -1
232			if iter.Response().Response.Response != nil {
233				sc = iter.Response().Response.Response.StatusCode
234			}
235			tracing.EndSpan(ctx, sc, err)
236		}()
237	}
238	iter.i++
239	if iter.i < len(iter.page.Values()) {
240		return nil
241	}
242	err = iter.page.NextWithContext(ctx)
243	if err != nil {
244		iter.i--
245		return err
246	}
247	iter.i = 0
248	return nil
249}
250
251// Next advances to the next value.  If there was an error making
252// the request the iterator does not advance and the error is returned.
253// Deprecated: Use NextWithContext() instead.
254func (iter *AgentPoolListResultIterator) Next() error {
255	return iter.NextWithContext(context.Background())
256}
257
258// NotDone returns true if the enumeration should be started or is not yet complete.
259func (iter AgentPoolListResultIterator) NotDone() bool {
260	return iter.page.NotDone() && iter.i < len(iter.page.Values())
261}
262
263// Response returns the raw server response from the last page request.
264func (iter AgentPoolListResultIterator) Response() AgentPoolListResult {
265	return iter.page.Response()
266}
267
268// Value returns the current value or a zero-initialized value if the
269// iterator has advanced beyond the end of the collection.
270func (iter AgentPoolListResultIterator) Value() AgentPool {
271	if !iter.page.NotDone() {
272		return AgentPool{}
273	}
274	return iter.page.Values()[iter.i]
275}
276
277// Creates a new instance of the AgentPoolListResultIterator type.
278func NewAgentPoolListResultIterator(page AgentPoolListResultPage) AgentPoolListResultIterator {
279	return AgentPoolListResultIterator{page: page}
280}
281
282// IsEmpty returns true if the ListResult contains no values.
283func (aplr AgentPoolListResult) IsEmpty() bool {
284	return aplr.Value == nil || len(*aplr.Value) == 0
285}
286
287// hasNextLink returns true if the NextLink is not empty.
288func (aplr AgentPoolListResult) hasNextLink() bool {
289	return aplr.NextLink != nil && len(*aplr.NextLink) != 0
290}
291
292// agentPoolListResultPreparer prepares a request to retrieve the next set of results.
293// It returns nil if no more results exist.
294func (aplr AgentPoolListResult) agentPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
295	if !aplr.hasNextLink() {
296		return nil, nil
297	}
298	return autorest.Prepare((&http.Request{}).WithContext(ctx),
299		autorest.AsJSON(),
300		autorest.AsGet(),
301		autorest.WithBaseURL(to.String(aplr.NextLink)))
302}
303
304// AgentPoolListResultPage contains a page of AgentPool values.
305type AgentPoolListResultPage struct {
306	fn   func(context.Context, AgentPoolListResult) (AgentPoolListResult, error)
307	aplr AgentPoolListResult
308}
309
310// NextWithContext advances to the next page of values.  If there was an error making
311// the request the page does not advance and the error is returned.
312func (page *AgentPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
313	if tracing.IsEnabled() {
314		ctx = tracing.StartSpan(ctx, fqdn+"/AgentPoolListResultPage.NextWithContext")
315		defer func() {
316			sc := -1
317			if page.Response().Response.Response != nil {
318				sc = page.Response().Response.Response.StatusCode
319			}
320			tracing.EndSpan(ctx, sc, err)
321		}()
322	}
323	for {
324		next, err := page.fn(ctx, page.aplr)
325		if err != nil {
326			return err
327		}
328		page.aplr = next
329		if !next.hasNextLink() || !next.IsEmpty() {
330			break
331		}
332	}
333	return nil
334}
335
336// Next advances to the next page of values.  If there was an error making
337// the request the page does not advance and the error is returned.
338// Deprecated: Use NextWithContext() instead.
339func (page *AgentPoolListResultPage) Next() error {
340	return page.NextWithContext(context.Background())
341}
342
343// NotDone returns true if the page enumeration should be started or is not yet complete.
344func (page AgentPoolListResultPage) NotDone() bool {
345	return !page.aplr.IsEmpty()
346}
347
348// Response returns the raw server response from the last page request.
349func (page AgentPoolListResultPage) Response() AgentPoolListResult {
350	return page.aplr
351}
352
353// Values returns the slice of values for the current page or nil if there are no values.
354func (page AgentPoolListResultPage) Values() []AgentPool {
355	if page.aplr.IsEmpty() {
356		return nil
357	}
358	return *page.aplr.Value
359}
360
361// Creates a new instance of the AgentPoolListResultPage type.
362func NewAgentPoolListResultPage(cur AgentPoolListResult, getNextPage func(context.Context, AgentPoolListResult) (AgentPoolListResult, error)) AgentPoolListResultPage {
363	return AgentPoolListResultPage{
364		fn:   getNextPage,
365		aplr: cur,
366	}
367}
368
369// AgentPoolsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
370// long-running operation.
371type AgentPoolsCreateOrUpdateFuture struct {
372	azure.FutureAPI
373	// Result returns the result of the asynchronous operation.
374	// If the operation has not completed it will return an error.
375	Result func(AgentPoolsClient) (AgentPool, error)
376}
377
378// AgentPoolsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
379// operation.
380type AgentPoolsDeleteFuture struct {
381	azure.FutureAPI
382	// Result returns the result of the asynchronous operation.
383	// If the operation has not completed it will return an error.
384	Result func(AgentPoolsClient) (autorest.Response, error)
385}
386
387// AgentPoolsUpgradeNodeImageVersionFuture an abstraction for monitoring and retrieving the results of a
388// long-running operation.
389type AgentPoolsUpgradeNodeImageVersionFuture struct {
390	azure.FutureAPI
391	// Result returns the result of the asynchronous operation.
392	// If the operation has not completed it will return an error.
393	Result func(AgentPoolsClient) (AgentPool, error)
394}
395
396// AgentPoolUpgradeProfile the list of available upgrades for an agent pool.
397type AgentPoolUpgradeProfile struct {
398	autorest.Response `json:"-"`
399	// ID - READ-ONLY; Id of the agent pool upgrade profile.
400	ID *string `json:"id,omitempty"`
401	// Name - READ-ONLY; Name of the agent pool upgrade profile.
402	Name *string `json:"name,omitempty"`
403	// Type - READ-ONLY; Type of the agent pool upgrade profile.
404	Type *string `json:"type,omitempty"`
405	// AgentPoolUpgradeProfileProperties - Properties of agent pool upgrade profile.
406	*AgentPoolUpgradeProfileProperties `json:"properties,omitempty"`
407}
408
409// MarshalJSON is the custom marshaler for AgentPoolUpgradeProfile.
410func (apup AgentPoolUpgradeProfile) MarshalJSON() ([]byte, error) {
411	objectMap := make(map[string]interface{})
412	if apup.AgentPoolUpgradeProfileProperties != nil {
413		objectMap["properties"] = apup.AgentPoolUpgradeProfileProperties
414	}
415	return json.Marshal(objectMap)
416}
417
418// UnmarshalJSON is the custom unmarshaler for AgentPoolUpgradeProfile struct.
419func (apup *AgentPoolUpgradeProfile) UnmarshalJSON(body []byte) error {
420	var m map[string]*json.RawMessage
421	err := json.Unmarshal(body, &m)
422	if err != nil {
423		return err
424	}
425	for k, v := range m {
426		switch k {
427		case "id":
428			if v != nil {
429				var ID string
430				err = json.Unmarshal(*v, &ID)
431				if err != nil {
432					return err
433				}
434				apup.ID = &ID
435			}
436		case "name":
437			if v != nil {
438				var name string
439				err = json.Unmarshal(*v, &name)
440				if err != nil {
441					return err
442				}
443				apup.Name = &name
444			}
445		case "type":
446			if v != nil {
447				var typeVar string
448				err = json.Unmarshal(*v, &typeVar)
449				if err != nil {
450					return err
451				}
452				apup.Type = &typeVar
453			}
454		case "properties":
455			if v != nil {
456				var agentPoolUpgradeProfileProperties AgentPoolUpgradeProfileProperties
457				err = json.Unmarshal(*v, &agentPoolUpgradeProfileProperties)
458				if err != nil {
459					return err
460				}
461				apup.AgentPoolUpgradeProfileProperties = &agentPoolUpgradeProfileProperties
462			}
463		}
464	}
465
466	return nil
467}
468
469// AgentPoolUpgradeProfileProperties the list of available upgrade versions.
470type AgentPoolUpgradeProfileProperties struct {
471	// KubernetesVersion - Kubernetes version (major, minor, patch).
472	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
473	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
474	OsType OSType `json:"osType,omitempty"`
475	// Upgrades - List of orchestrator types and versions available for upgrade.
476	Upgrades *[]AgentPoolUpgradeProfilePropertiesUpgradesItem `json:"upgrades,omitempty"`
477	// LatestNodeImageVersion - LatestNodeImageVersion is the latest AKS supported node image version.
478	LatestNodeImageVersion *string `json:"latestNodeImageVersion,omitempty"`
479}
480
481// AgentPoolUpgradeProfilePropertiesUpgradesItem ...
482type AgentPoolUpgradeProfilePropertiesUpgradesItem struct {
483	// KubernetesVersion - Kubernetes version (major, minor, patch).
484	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
485	// IsPreview - Whether Kubernetes version is currently in preview.
486	IsPreview *bool `json:"isPreview,omitempty"`
487}
488
489// AgentPoolUpgradeSettings settings for upgrading an agentpool
490type AgentPoolUpgradeSettings struct {
491	// MaxSurge - Count or percentage of additional nodes to be added during upgrade. If empty uses AKS default
492	MaxSurge *string `json:"maxSurge,omitempty"`
493}
494
495// CloudError an error response from the Container service.
496type CloudError struct {
497	// Error - Details about the error.
498	Error *CloudErrorBody `json:"error,omitempty"`
499}
500
501// CloudErrorBody an error response from the Container service.
502type CloudErrorBody struct {
503	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
504	Code *string `json:"code,omitempty"`
505	// Message - A message describing the error, intended to be suitable for display in a user interface.
506	Message *string `json:"message,omitempty"`
507	// Target - The target of the particular error. For example, the name of the property in error.
508	Target *string `json:"target,omitempty"`
509	// Details - A list of additional details about the error.
510	Details *[]CloudErrorBody `json:"details,omitempty"`
511}
512
513// CredentialResult the credential result response.
514type CredentialResult struct {
515	// Name - READ-ONLY; The name of the credential.
516	Name *string `json:"name,omitempty"`
517	// Value - READ-ONLY; Base64-encoded Kubernetes configuration file.
518	Value *[]byte `json:"value,omitempty"`
519}
520
521// CredentialResults the list of credential result response.
522type CredentialResults struct {
523	autorest.Response `json:"-"`
524	// Kubeconfigs - READ-ONLY; Base64-encoded Kubernetes configuration file.
525	Kubeconfigs *[]CredentialResult `json:"kubeconfigs,omitempty"`
526}
527
528// DiagnosticsProfile profile for diagnostics on the container service cluster.
529type DiagnosticsProfile struct {
530	// VMDiagnostics - Profile for diagnostics on the container service VMs.
531	VMDiagnostics *VMDiagnostics `json:"vmDiagnostics,omitempty"`
532}
533
534// KubeletConfig kubelet configurations of agent nodes.
535type KubeletConfig struct {
536	// CPUManagerPolicy - CPU Manager policy to use.
537	CPUManagerPolicy *string `json:"cpuManagerPolicy,omitempty"`
538	// CPUCfsQuota - Enable CPU CFS quota enforcement for containers that specify CPU limits.
539	CPUCfsQuota *bool `json:"cpuCfsQuota,omitempty"`
540	// CPUCfsQuotaPeriod - Sets CPU CFS quota period value.
541	CPUCfsQuotaPeriod *string `json:"cpuCfsQuotaPeriod,omitempty"`
542	// ImageGcHighThreshold - The percent of disk usage after which image garbage collection is always run.
543	ImageGcHighThreshold *int32 `json:"imageGcHighThreshold,omitempty"`
544	// ImageGcLowThreshold - The percent of disk usage before which image garbage collection is never run.
545	ImageGcLowThreshold *int32 `json:"imageGcLowThreshold,omitempty"`
546	// TopologyManagerPolicy - Topology Manager policy to use.
547	TopologyManagerPolicy *string `json:"topologyManagerPolicy,omitempty"`
548	// AllowedUnsafeSysctls - Allowlist of unsafe sysctls or unsafe sysctl patterns (ending in `*`).
549	AllowedUnsafeSysctls *[]string `json:"allowedUnsafeSysctls,omitempty"`
550	// FailSwapOn - If set to true it will make the Kubelet fail to start if swap is enabled on the node.
551	FailSwapOn *bool `json:"failSwapOn,omitempty"`
552}
553
554// LinuxOSConfig OS configurations of Linux agent nodes.
555type LinuxOSConfig struct {
556	// Sysctls - Sysctl settings for Linux agent nodes.
557	Sysctls *SysctlConfig `json:"sysctls,omitempty"`
558	// TransparentHugePageEnabled - Transparent Huge Page enabled configuration.
559	TransparentHugePageEnabled *string `json:"transparentHugePageEnabled,omitempty"`
560	// TransparentHugePageDefrag - Transparent Huge Page defrag configuration.
561	TransparentHugePageDefrag *string `json:"transparentHugePageDefrag,omitempty"`
562	// SwapFileSizeMB - SwapFileSizeMB specifies size in MB of a swap file will be created on each node.
563	SwapFileSizeMB *int32 `json:"swapFileSizeMB,omitempty"`
564}
565
566// LinuxProfile profile for Linux VMs in the container service cluster.
567type LinuxProfile struct {
568	// AdminUsername - The administrator username to use for Linux VMs.
569	AdminUsername *string `json:"adminUsername,omitempty"`
570	// SSH - SSH configuration for Linux-based VMs running on Azure.
571	SSH *SSHConfiguration `json:"ssh,omitempty"`
572}
573
574// ManagedCluster managed cluster.
575type ManagedCluster struct {
576	autorest.Response `json:"-"`
577	// ManagedClusterProperties - Properties of a managed cluster.
578	*ManagedClusterProperties `json:"properties,omitempty"`
579	// Identity - The identity of the managed cluster, if configured.
580	Identity *ManagedClusterIdentity `json:"identity,omitempty"`
581	// Sku - The managed cluster SKU.
582	Sku *ManagedClusterSKU `json:"sku,omitempty"`
583	// ID - READ-ONLY; Resource Id
584	ID *string `json:"id,omitempty"`
585	// Name - READ-ONLY; Resource name
586	Name *string `json:"name,omitempty"`
587	// Type - READ-ONLY; Resource type
588	Type *string `json:"type,omitempty"`
589	// Location - Resource location
590	Location *string `json:"location,omitempty"`
591	// Tags - Resource tags
592	Tags map[string]*string `json:"tags"`
593}
594
595// MarshalJSON is the custom marshaler for ManagedCluster.
596func (mc ManagedCluster) MarshalJSON() ([]byte, error) {
597	objectMap := make(map[string]interface{})
598	if mc.ManagedClusterProperties != nil {
599		objectMap["properties"] = mc.ManagedClusterProperties
600	}
601	if mc.Identity != nil {
602		objectMap["identity"] = mc.Identity
603	}
604	if mc.Sku != nil {
605		objectMap["sku"] = mc.Sku
606	}
607	if mc.Location != nil {
608		objectMap["location"] = mc.Location
609	}
610	if mc.Tags != nil {
611		objectMap["tags"] = mc.Tags
612	}
613	return json.Marshal(objectMap)
614}
615
616// UnmarshalJSON is the custom unmarshaler for ManagedCluster struct.
617func (mc *ManagedCluster) UnmarshalJSON(body []byte) error {
618	var m map[string]*json.RawMessage
619	err := json.Unmarshal(body, &m)
620	if err != nil {
621		return err
622	}
623	for k, v := range m {
624		switch k {
625		case "properties":
626			if v != nil {
627				var managedClusterProperties ManagedClusterProperties
628				err = json.Unmarshal(*v, &managedClusterProperties)
629				if err != nil {
630					return err
631				}
632				mc.ManagedClusterProperties = &managedClusterProperties
633			}
634		case "identity":
635			if v != nil {
636				var identity ManagedClusterIdentity
637				err = json.Unmarshal(*v, &identity)
638				if err != nil {
639					return err
640				}
641				mc.Identity = &identity
642			}
643		case "sku":
644			if v != nil {
645				var sku ManagedClusterSKU
646				err = json.Unmarshal(*v, &sku)
647				if err != nil {
648					return err
649				}
650				mc.Sku = &sku
651			}
652		case "id":
653			if v != nil {
654				var ID string
655				err = json.Unmarshal(*v, &ID)
656				if err != nil {
657					return err
658				}
659				mc.ID = &ID
660			}
661		case "name":
662			if v != nil {
663				var name string
664				err = json.Unmarshal(*v, &name)
665				if err != nil {
666					return err
667				}
668				mc.Name = &name
669			}
670		case "type":
671			if v != nil {
672				var typeVar string
673				err = json.Unmarshal(*v, &typeVar)
674				if err != nil {
675					return err
676				}
677				mc.Type = &typeVar
678			}
679		case "location":
680			if v != nil {
681				var location string
682				err = json.Unmarshal(*v, &location)
683				if err != nil {
684					return err
685				}
686				mc.Location = &location
687			}
688		case "tags":
689			if v != nil {
690				var tags map[string]*string
691				err = json.Unmarshal(*v, &tags)
692				if err != nil {
693					return err
694				}
695				mc.Tags = tags
696			}
697		}
698	}
699
700	return nil
701}
702
703// ManagedClusterAADProfile aADProfile specifies attributes for Azure Active Directory integration.
704type ManagedClusterAADProfile struct {
705	// Managed - Whether to enable managed AAD.
706	Managed *bool `json:"managed,omitempty"`
707	// EnableAzureRBAC - Whether to enable Azure RBAC for Kubernetes authorization.
708	EnableAzureRBAC *bool `json:"enableAzureRBAC,omitempty"`
709	// AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.
710	AdminGroupObjectIDs *[]string `json:"adminGroupObjectIDs,omitempty"`
711	// ClientAppID - The client AAD application ID.
712	ClientAppID *string `json:"clientAppID,omitempty"`
713	// ServerAppID - The server AAD application ID.
714	ServerAppID *string `json:"serverAppID,omitempty"`
715	// ServerAppSecret - The server AAD application secret.
716	ServerAppSecret *string `json:"serverAppSecret,omitempty"`
717	// TenantID - The AAD tenant ID to use for authentication. If not specified, will use the tenant of the deployment subscription.
718	TenantID *string `json:"tenantID,omitempty"`
719}
720
721// ManagedClusterAccessProfile managed cluster Access Profile.
722type ManagedClusterAccessProfile struct {
723	autorest.Response `json:"-"`
724	// AccessProfile - AccessProfile of a managed cluster.
725	*AccessProfile `json:"properties,omitempty"`
726	// ID - READ-ONLY; Resource Id
727	ID *string `json:"id,omitempty"`
728	// Name - READ-ONLY; Resource name
729	Name *string `json:"name,omitempty"`
730	// Type - READ-ONLY; Resource type
731	Type *string `json:"type,omitempty"`
732	// Location - Resource location
733	Location *string `json:"location,omitempty"`
734	// Tags - Resource tags
735	Tags map[string]*string `json:"tags"`
736}
737
738// MarshalJSON is the custom marshaler for ManagedClusterAccessProfile.
739func (mcap ManagedClusterAccessProfile) MarshalJSON() ([]byte, error) {
740	objectMap := make(map[string]interface{})
741	if mcap.AccessProfile != nil {
742		objectMap["properties"] = mcap.AccessProfile
743	}
744	if mcap.Location != nil {
745		objectMap["location"] = mcap.Location
746	}
747	if mcap.Tags != nil {
748		objectMap["tags"] = mcap.Tags
749	}
750	return json.Marshal(objectMap)
751}
752
753// UnmarshalJSON is the custom unmarshaler for ManagedClusterAccessProfile struct.
754func (mcap *ManagedClusterAccessProfile) UnmarshalJSON(body []byte) error {
755	var m map[string]*json.RawMessage
756	err := json.Unmarshal(body, &m)
757	if err != nil {
758		return err
759	}
760	for k, v := range m {
761		switch k {
762		case "properties":
763			if v != nil {
764				var accessProfile AccessProfile
765				err = json.Unmarshal(*v, &accessProfile)
766				if err != nil {
767					return err
768				}
769				mcap.AccessProfile = &accessProfile
770			}
771		case "id":
772			if v != nil {
773				var ID string
774				err = json.Unmarshal(*v, &ID)
775				if err != nil {
776					return err
777				}
778				mcap.ID = &ID
779			}
780		case "name":
781			if v != nil {
782				var name string
783				err = json.Unmarshal(*v, &name)
784				if err != nil {
785					return err
786				}
787				mcap.Name = &name
788			}
789		case "type":
790			if v != nil {
791				var typeVar string
792				err = json.Unmarshal(*v, &typeVar)
793				if err != nil {
794					return err
795				}
796				mcap.Type = &typeVar
797			}
798		case "location":
799			if v != nil {
800				var location string
801				err = json.Unmarshal(*v, &location)
802				if err != nil {
803					return err
804				}
805				mcap.Location = &location
806			}
807		case "tags":
808			if v != nil {
809				var tags map[string]*string
810				err = json.Unmarshal(*v, &tags)
811				if err != nil {
812					return err
813				}
814				mcap.Tags = tags
815			}
816		}
817	}
818
819	return nil
820}
821
822// ManagedClusterAddonProfile a Kubernetes add-on profile for a managed cluster.
823type ManagedClusterAddonProfile struct {
824	// Enabled - Whether the add-on is enabled or not.
825	Enabled *bool `json:"enabled,omitempty"`
826	// Config - Key-value pairs for configuring an add-on.
827	Config map[string]*string `json:"config"`
828	// Identity - READ-ONLY; Information of user assigned identity used by this add-on.
829	Identity *ManagedClusterAddonProfileIdentity `json:"identity,omitempty"`
830}
831
832// MarshalJSON is the custom marshaler for ManagedClusterAddonProfile.
833func (mcap ManagedClusterAddonProfile) MarshalJSON() ([]byte, error) {
834	objectMap := make(map[string]interface{})
835	if mcap.Enabled != nil {
836		objectMap["enabled"] = mcap.Enabled
837	}
838	if mcap.Config != nil {
839		objectMap["config"] = mcap.Config
840	}
841	return json.Marshal(objectMap)
842}
843
844// ManagedClusterAddonProfileIdentity information of user assigned identity used by this add-on.
845type ManagedClusterAddonProfileIdentity struct {
846	// ResourceID - The resource id of the user assigned identity.
847	ResourceID *string `json:"resourceId,omitempty"`
848	// ClientID - The client id of the user assigned identity.
849	ClientID *string `json:"clientId,omitempty"`
850	// ObjectID - The object id of the user assigned identity.
851	ObjectID *string `json:"objectId,omitempty"`
852}
853
854// ManagedClusterAgentPoolProfile profile for the container service agent pool.
855type ManagedClusterAgentPoolProfile struct {
856	// Name - Unique name of the agent pool profile in the context of the subscription and resource group.
857	Name *string `json:"name,omitempty"`
858	// Count - Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 100 (inclusive) for user pools and in the range of 1 to 100 (inclusive) for system pools. The default value is 1.
859	Count *int32 `json:"count,omitempty"`
860	// VMSize - Size of agent VMs. Possible values include: 'StandardA1', 'StandardA10', 'StandardA11', 'StandardA1V2', 'StandardA2', 'StandardA2V2', 'StandardA2mV2', 'StandardA3', 'StandardA4', 'StandardA4V2', 'StandardA4mV2', 'StandardA5', 'StandardA6', 'StandardA7', 'StandardA8', 'StandardA8V2', 'StandardA8mV2', 'StandardA9', 'StandardB2ms', 'StandardB2s', 'StandardB4ms', 'StandardB8ms', 'StandardD1', 'StandardD11', 'StandardD11V2', 'StandardD11V2Promo', 'StandardD12', 'StandardD12V2', 'StandardD12V2Promo', 'StandardD13', 'StandardD13V2', 'StandardD13V2Promo', 'StandardD14', 'StandardD14V2', 'StandardD14V2Promo', 'StandardD15V2', 'StandardD16V3', 'StandardD16sV3', 'StandardD1V2', 'StandardD2', 'StandardD2V2', 'StandardD2V2Promo', 'StandardD2V3', 'StandardD2sV3', 'StandardD3', 'StandardD32V3', 'StandardD32sV3', 'StandardD3V2', 'StandardD3V2Promo', 'StandardD4', 'StandardD4V2', 'StandardD4V2Promo', 'StandardD4V3', 'StandardD4sV3', 'StandardD5V2', 'StandardD5V2Promo', 'StandardD64V3', 'StandardD64sV3', 'StandardD8V3', 'StandardD8sV3', 'StandardDS1', 'StandardDS11', 'StandardDS11V2', 'StandardDS11V2Promo', 'StandardDS12', 'StandardDS12V2', 'StandardDS12V2Promo', 'StandardDS13', 'StandardDS132V2', 'StandardDS134V2', 'StandardDS13V2', 'StandardDS13V2Promo', 'StandardDS14', 'StandardDS144V2', 'StandardDS148V2', 'StandardDS14V2', 'StandardDS14V2Promo', 'StandardDS15V2', 'StandardDS1V2', 'StandardDS2', 'StandardDS2V2', 'StandardDS2V2Promo', 'StandardDS3', 'StandardDS3V2', 'StandardDS3V2Promo', 'StandardDS4', 'StandardDS4V2', 'StandardDS4V2Promo', 'StandardDS5V2', 'StandardDS5V2Promo', 'StandardE16V3', 'StandardE16sV3', 'StandardE2V3', 'StandardE2sV3', 'StandardE3216sV3', 'StandardE328sV3', 'StandardE32V3', 'StandardE32sV3', 'StandardE4V3', 'StandardE4sV3', 'StandardE6416sV3', 'StandardE6432sV3', 'StandardE64V3', 'StandardE64sV3', 'StandardE8V3', 'StandardE8sV3', 'StandardF1', 'StandardF16', 'StandardF16s', 'StandardF16sV2', 'StandardF1s', 'StandardF2', 'StandardF2s', 'StandardF2sV2', 'StandardF32sV2', 'StandardF4', 'StandardF4s', 'StandardF4sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardF8', 'StandardF8s', 'StandardF8sV2', 'StandardG1', 'StandardG2', 'StandardG3', 'StandardG4', 'StandardG5', 'StandardGS1', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS44', 'StandardGS48', 'StandardGS5', 'StandardGS516', 'StandardGS58', 'StandardH16', 'StandardH16m', 'StandardH16mr', 'StandardH16r', 'StandardH8', 'StandardH8m', 'StandardL16s', 'StandardL32s', 'StandardL4s', 'StandardL8s', 'StandardM12832ms', 'StandardM12864ms', 'StandardM128ms', 'StandardM128s', 'StandardM6416ms', 'StandardM6432ms', 'StandardM64ms', 'StandardM64s', 'StandardNC12', 'StandardNC12sV2', 'StandardNC12sV3', 'StandardNC24', 'StandardNC24r', 'StandardNC24rsV2', 'StandardNC24rsV3', 'StandardNC24sV2', 'StandardNC24sV3', 'StandardNC6', 'StandardNC6sV2', 'StandardNC6sV3', 'StandardND12s', 'StandardND24rs', 'StandardND24s', 'StandardND6s', 'StandardNV12', 'StandardNV24', 'StandardNV6'
861	VMSize VMSizeTypes `json:"vmSize,omitempty"`
862	// 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.
863	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
864	// OsDiskType - OS disk type to be used for machines in a given agent pool. Allowed values are 'Ephemeral' and 'Managed'. Defaults to 'Managed'. May not be changed after creation. Possible values include: 'Managed', 'Ephemeral'
865	OsDiskType OSDiskType `json:"osDiskType,omitempty"`
866	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier for nodes and maybe pods
867	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
868	// PodSubnetID - Pod SubnetID specifies the VNet's subnet identifier for pods.
869	PodSubnetID *string `json:"podSubnetID,omitempty"`
870	// MaxPods - Maximum number of pods that can run on a node.
871	MaxPods *int32 `json:"maxPods,omitempty"`
872	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
873	OsType OSType `json:"osType,omitempty"`
874	// MaxCount - Maximum number of nodes for auto-scaling
875	MaxCount *int32 `json:"maxCount,omitempty"`
876	// MinCount - Minimum number of nodes for auto-scaling
877	MinCount *int32 `json:"minCount,omitempty"`
878	// EnableAutoScaling - Whether to enable auto-scaler
879	EnableAutoScaling *bool `json:"enableAutoScaling,omitempty"`
880	// Type - AgentPoolType represents types of an agent pool. Possible values include: 'VirtualMachineScaleSets', 'AvailabilitySet'
881	Type AgentPoolType `json:"type,omitempty"`
882	// Mode - AgentPoolMode represents mode of an agent pool. Possible values include: 'System', 'User'
883	Mode AgentPoolMode `json:"mode,omitempty"`
884	// OrchestratorVersion - Version of orchestrator specified when creating the managed cluster.
885	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
886	// NodeImageVersion - READ-ONLY; Version of node image
887	NodeImageVersion *string `json:"nodeImageVersion,omitempty"`
888	// UpgradeSettings - Settings for upgrading the agentpool
889	UpgradeSettings *AgentPoolUpgradeSettings `json:"upgradeSettings,omitempty"`
890	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
891	ProvisioningState *string `json:"provisioningState,omitempty"`
892	// PowerState - READ-ONLY; Describes whether the Agent Pool is Running or Stopped
893	PowerState *PowerState `json:"powerState,omitempty"`
894	// AvailabilityZones - Availability zones for nodes. Must use VirtualMachineScaleSets AgentPoolType.
895	AvailabilityZones *[]string `json:"availabilityZones,omitempty"`
896	// EnableNodePublicIP - Enable public IP for nodes
897	EnableNodePublicIP *bool `json:"enableNodePublicIP,omitempty"`
898	// ScaleSetPriority - ScaleSetPriority to be used to specify virtual machine scale set priority. Default to regular. Possible values include: 'Spot', 'Regular'
899	ScaleSetPriority ScaleSetPriority `json:"scaleSetPriority,omitempty"`
900	// ScaleSetEvictionPolicy - ScaleSetEvictionPolicy to be used to specify eviction policy for Spot virtual machine scale set. Default to Delete. Possible values include: 'Delete', 'Deallocate'
901	ScaleSetEvictionPolicy ScaleSetEvictionPolicy `json:"scaleSetEvictionPolicy,omitempty"`
902	// SpotMaxPrice - SpotMaxPrice to be used to specify the maximum price you are willing to pay in US Dollars. Possible values are any decimal value greater than zero or -1 which indicates default price to be up-to on-demand.
903	SpotMaxPrice *float64 `json:"spotMaxPrice,omitempty"`
904	// Tags - Agent pool tags to be persisted on the agent pool virtual machine scale set.
905	Tags map[string]*string `json:"tags"`
906	// NodeLabels - Agent pool node labels to be persisted across all nodes in agent pool.
907	NodeLabels map[string]*string `json:"nodeLabels"`
908	// NodeTaints - Taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
909	NodeTaints *[]string `json:"nodeTaints,omitempty"`
910	// ProximityPlacementGroupID - The ID for Proximity Placement Group.
911	ProximityPlacementGroupID *string `json:"proximityPlacementGroupID,omitempty"`
912	// KubeletConfig - KubeletConfig specifies the configuration of kubelet on agent nodes.
913	KubeletConfig *KubeletConfig `json:"kubeletConfig,omitempty"`
914	// LinuxOSConfig - LinuxOSConfig specifies the OS configuration of linux agent nodes.
915	LinuxOSConfig *LinuxOSConfig `json:"linuxOSConfig,omitempty"`
916}
917
918// MarshalJSON is the custom marshaler for ManagedClusterAgentPoolProfile.
919func (mcapp ManagedClusterAgentPoolProfile) MarshalJSON() ([]byte, error) {
920	objectMap := make(map[string]interface{})
921	if mcapp.Name != nil {
922		objectMap["name"] = mcapp.Name
923	}
924	if mcapp.Count != nil {
925		objectMap["count"] = mcapp.Count
926	}
927	if mcapp.VMSize != "" {
928		objectMap["vmSize"] = mcapp.VMSize
929	}
930	if mcapp.OsDiskSizeGB != nil {
931		objectMap["osDiskSizeGB"] = mcapp.OsDiskSizeGB
932	}
933	if mcapp.OsDiskType != "" {
934		objectMap["osDiskType"] = mcapp.OsDiskType
935	}
936	if mcapp.VnetSubnetID != nil {
937		objectMap["vnetSubnetID"] = mcapp.VnetSubnetID
938	}
939	if mcapp.PodSubnetID != nil {
940		objectMap["podSubnetID"] = mcapp.PodSubnetID
941	}
942	if mcapp.MaxPods != nil {
943		objectMap["maxPods"] = mcapp.MaxPods
944	}
945	if mcapp.OsType != "" {
946		objectMap["osType"] = mcapp.OsType
947	}
948	if mcapp.MaxCount != nil {
949		objectMap["maxCount"] = mcapp.MaxCount
950	}
951	if mcapp.MinCount != nil {
952		objectMap["minCount"] = mcapp.MinCount
953	}
954	if mcapp.EnableAutoScaling != nil {
955		objectMap["enableAutoScaling"] = mcapp.EnableAutoScaling
956	}
957	if mcapp.Type != "" {
958		objectMap["type"] = mcapp.Type
959	}
960	if mcapp.Mode != "" {
961		objectMap["mode"] = mcapp.Mode
962	}
963	if mcapp.OrchestratorVersion != nil {
964		objectMap["orchestratorVersion"] = mcapp.OrchestratorVersion
965	}
966	if mcapp.UpgradeSettings != nil {
967		objectMap["upgradeSettings"] = mcapp.UpgradeSettings
968	}
969	if mcapp.AvailabilityZones != nil {
970		objectMap["availabilityZones"] = mcapp.AvailabilityZones
971	}
972	if mcapp.EnableNodePublicIP != nil {
973		objectMap["enableNodePublicIP"] = mcapp.EnableNodePublicIP
974	}
975	if mcapp.ScaleSetPriority != "" {
976		objectMap["scaleSetPriority"] = mcapp.ScaleSetPriority
977	}
978	if mcapp.ScaleSetEvictionPolicy != "" {
979		objectMap["scaleSetEvictionPolicy"] = mcapp.ScaleSetEvictionPolicy
980	}
981	if mcapp.SpotMaxPrice != nil {
982		objectMap["spotMaxPrice"] = mcapp.SpotMaxPrice
983	}
984	if mcapp.Tags != nil {
985		objectMap["tags"] = mcapp.Tags
986	}
987	if mcapp.NodeLabels != nil {
988		objectMap["nodeLabels"] = mcapp.NodeLabels
989	}
990	if mcapp.NodeTaints != nil {
991		objectMap["nodeTaints"] = mcapp.NodeTaints
992	}
993	if mcapp.ProximityPlacementGroupID != nil {
994		objectMap["proximityPlacementGroupID"] = mcapp.ProximityPlacementGroupID
995	}
996	if mcapp.KubeletConfig != nil {
997		objectMap["kubeletConfig"] = mcapp.KubeletConfig
998	}
999	if mcapp.LinuxOSConfig != nil {
1000		objectMap["linuxOSConfig"] = mcapp.LinuxOSConfig
1001	}
1002	return json.Marshal(objectMap)
1003}
1004
1005// ManagedClusterAgentPoolProfileProperties properties for the container service agent pool profile.
1006type ManagedClusterAgentPoolProfileProperties struct {
1007	// Count - Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 100 (inclusive) for user pools and in the range of 1 to 100 (inclusive) for system pools. The default value is 1.
1008	Count *int32 `json:"count,omitempty"`
1009	// VMSize - Size of agent VMs. Possible values include: 'StandardA1', 'StandardA10', 'StandardA11', 'StandardA1V2', 'StandardA2', 'StandardA2V2', 'StandardA2mV2', 'StandardA3', 'StandardA4', 'StandardA4V2', 'StandardA4mV2', 'StandardA5', 'StandardA6', 'StandardA7', 'StandardA8', 'StandardA8V2', 'StandardA8mV2', 'StandardA9', 'StandardB2ms', 'StandardB2s', 'StandardB4ms', 'StandardB8ms', 'StandardD1', 'StandardD11', 'StandardD11V2', 'StandardD11V2Promo', 'StandardD12', 'StandardD12V2', 'StandardD12V2Promo', 'StandardD13', 'StandardD13V2', 'StandardD13V2Promo', 'StandardD14', 'StandardD14V2', 'StandardD14V2Promo', 'StandardD15V2', 'StandardD16V3', 'StandardD16sV3', 'StandardD1V2', 'StandardD2', 'StandardD2V2', 'StandardD2V2Promo', 'StandardD2V3', 'StandardD2sV3', 'StandardD3', 'StandardD32V3', 'StandardD32sV3', 'StandardD3V2', 'StandardD3V2Promo', 'StandardD4', 'StandardD4V2', 'StandardD4V2Promo', 'StandardD4V3', 'StandardD4sV3', 'StandardD5V2', 'StandardD5V2Promo', 'StandardD64V3', 'StandardD64sV3', 'StandardD8V3', 'StandardD8sV3', 'StandardDS1', 'StandardDS11', 'StandardDS11V2', 'StandardDS11V2Promo', 'StandardDS12', 'StandardDS12V2', 'StandardDS12V2Promo', 'StandardDS13', 'StandardDS132V2', 'StandardDS134V2', 'StandardDS13V2', 'StandardDS13V2Promo', 'StandardDS14', 'StandardDS144V2', 'StandardDS148V2', 'StandardDS14V2', 'StandardDS14V2Promo', 'StandardDS15V2', 'StandardDS1V2', 'StandardDS2', 'StandardDS2V2', 'StandardDS2V2Promo', 'StandardDS3', 'StandardDS3V2', 'StandardDS3V2Promo', 'StandardDS4', 'StandardDS4V2', 'StandardDS4V2Promo', 'StandardDS5V2', 'StandardDS5V2Promo', 'StandardE16V3', 'StandardE16sV3', 'StandardE2V3', 'StandardE2sV3', 'StandardE3216sV3', 'StandardE328sV3', 'StandardE32V3', 'StandardE32sV3', 'StandardE4V3', 'StandardE4sV3', 'StandardE6416sV3', 'StandardE6432sV3', 'StandardE64V3', 'StandardE64sV3', 'StandardE8V3', 'StandardE8sV3', 'StandardF1', 'StandardF16', 'StandardF16s', 'StandardF16sV2', 'StandardF1s', 'StandardF2', 'StandardF2s', 'StandardF2sV2', 'StandardF32sV2', 'StandardF4', 'StandardF4s', 'StandardF4sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardF8', 'StandardF8s', 'StandardF8sV2', 'StandardG1', 'StandardG2', 'StandardG3', 'StandardG4', 'StandardG5', 'StandardGS1', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS44', 'StandardGS48', 'StandardGS5', 'StandardGS516', 'StandardGS58', 'StandardH16', 'StandardH16m', 'StandardH16mr', 'StandardH16r', 'StandardH8', 'StandardH8m', 'StandardL16s', 'StandardL32s', 'StandardL4s', 'StandardL8s', 'StandardM12832ms', 'StandardM12864ms', 'StandardM128ms', 'StandardM128s', 'StandardM6416ms', 'StandardM6432ms', 'StandardM64ms', 'StandardM64s', 'StandardNC12', 'StandardNC12sV2', 'StandardNC12sV3', 'StandardNC24', 'StandardNC24r', 'StandardNC24rsV2', 'StandardNC24rsV3', 'StandardNC24sV2', 'StandardNC24sV3', 'StandardNC6', 'StandardNC6sV2', 'StandardNC6sV3', 'StandardND12s', 'StandardND24rs', 'StandardND24s', 'StandardND6s', 'StandardNV12', 'StandardNV24', 'StandardNV6'
1010	VMSize VMSizeTypes `json:"vmSize,omitempty"`
1011	// 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.
1012	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
1013	// OsDiskType - OS disk type to be used for machines in a given agent pool. Allowed values are 'Ephemeral' and 'Managed'. Defaults to 'Managed'. May not be changed after creation. Possible values include: 'Managed', 'Ephemeral'
1014	OsDiskType OSDiskType `json:"osDiskType,omitempty"`
1015	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier for nodes and maybe pods
1016	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
1017	// PodSubnetID - Pod SubnetID specifies the VNet's subnet identifier for pods.
1018	PodSubnetID *string `json:"podSubnetID,omitempty"`
1019	// MaxPods - Maximum number of pods that can run on a node.
1020	MaxPods *int32 `json:"maxPods,omitempty"`
1021	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
1022	OsType OSType `json:"osType,omitempty"`
1023	// MaxCount - Maximum number of nodes for auto-scaling
1024	MaxCount *int32 `json:"maxCount,omitempty"`
1025	// MinCount - Minimum number of nodes for auto-scaling
1026	MinCount *int32 `json:"minCount,omitempty"`
1027	// EnableAutoScaling - Whether to enable auto-scaler
1028	EnableAutoScaling *bool `json:"enableAutoScaling,omitempty"`
1029	// Type - AgentPoolType represents types of an agent pool. Possible values include: 'VirtualMachineScaleSets', 'AvailabilitySet'
1030	Type AgentPoolType `json:"type,omitempty"`
1031	// Mode - AgentPoolMode represents mode of an agent pool. Possible values include: 'System', 'User'
1032	Mode AgentPoolMode `json:"mode,omitempty"`
1033	// OrchestratorVersion - Version of orchestrator specified when creating the managed cluster.
1034	OrchestratorVersion *string `json:"orchestratorVersion,omitempty"`
1035	// NodeImageVersion - READ-ONLY; Version of node image
1036	NodeImageVersion *string `json:"nodeImageVersion,omitempty"`
1037	// UpgradeSettings - Settings for upgrading the agentpool
1038	UpgradeSettings *AgentPoolUpgradeSettings `json:"upgradeSettings,omitempty"`
1039	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
1040	ProvisioningState *string `json:"provisioningState,omitempty"`
1041	// PowerState - READ-ONLY; Describes whether the Agent Pool is Running or Stopped
1042	PowerState *PowerState `json:"powerState,omitempty"`
1043	// AvailabilityZones - Availability zones for nodes. Must use VirtualMachineScaleSets AgentPoolType.
1044	AvailabilityZones *[]string `json:"availabilityZones,omitempty"`
1045	// EnableNodePublicIP - Enable public IP for nodes
1046	EnableNodePublicIP *bool `json:"enableNodePublicIP,omitempty"`
1047	// ScaleSetPriority - ScaleSetPriority to be used to specify virtual machine scale set priority. Default to regular. Possible values include: 'Spot', 'Regular'
1048	ScaleSetPriority ScaleSetPriority `json:"scaleSetPriority,omitempty"`
1049	// ScaleSetEvictionPolicy - ScaleSetEvictionPolicy to be used to specify eviction policy for Spot virtual machine scale set. Default to Delete. Possible values include: 'Delete', 'Deallocate'
1050	ScaleSetEvictionPolicy ScaleSetEvictionPolicy `json:"scaleSetEvictionPolicy,omitempty"`
1051	// SpotMaxPrice - SpotMaxPrice to be used to specify the maximum price you are willing to pay in US Dollars. Possible values are any decimal value greater than zero or -1 which indicates default price to be up-to on-demand.
1052	SpotMaxPrice *float64 `json:"spotMaxPrice,omitempty"`
1053	// Tags - Agent pool tags to be persisted on the agent pool virtual machine scale set.
1054	Tags map[string]*string `json:"tags"`
1055	// NodeLabels - Agent pool node labels to be persisted across all nodes in agent pool.
1056	NodeLabels map[string]*string `json:"nodeLabels"`
1057	// NodeTaints - Taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
1058	NodeTaints *[]string `json:"nodeTaints,omitempty"`
1059	// ProximityPlacementGroupID - The ID for Proximity Placement Group.
1060	ProximityPlacementGroupID *string `json:"proximityPlacementGroupID,omitempty"`
1061	// KubeletConfig - KubeletConfig specifies the configuration of kubelet on agent nodes.
1062	KubeletConfig *KubeletConfig `json:"kubeletConfig,omitempty"`
1063	// LinuxOSConfig - LinuxOSConfig specifies the OS configuration of linux agent nodes.
1064	LinuxOSConfig *LinuxOSConfig `json:"linuxOSConfig,omitempty"`
1065}
1066
1067// MarshalJSON is the custom marshaler for ManagedClusterAgentPoolProfileProperties.
1068func (mcappp ManagedClusterAgentPoolProfileProperties) MarshalJSON() ([]byte, error) {
1069	objectMap := make(map[string]interface{})
1070	if mcappp.Count != nil {
1071		objectMap["count"] = mcappp.Count
1072	}
1073	if mcappp.VMSize != "" {
1074		objectMap["vmSize"] = mcappp.VMSize
1075	}
1076	if mcappp.OsDiskSizeGB != nil {
1077		objectMap["osDiskSizeGB"] = mcappp.OsDiskSizeGB
1078	}
1079	if mcappp.OsDiskType != "" {
1080		objectMap["osDiskType"] = mcappp.OsDiskType
1081	}
1082	if mcappp.VnetSubnetID != nil {
1083		objectMap["vnetSubnetID"] = mcappp.VnetSubnetID
1084	}
1085	if mcappp.PodSubnetID != nil {
1086		objectMap["podSubnetID"] = mcappp.PodSubnetID
1087	}
1088	if mcappp.MaxPods != nil {
1089		objectMap["maxPods"] = mcappp.MaxPods
1090	}
1091	if mcappp.OsType != "" {
1092		objectMap["osType"] = mcappp.OsType
1093	}
1094	if mcappp.MaxCount != nil {
1095		objectMap["maxCount"] = mcappp.MaxCount
1096	}
1097	if mcappp.MinCount != nil {
1098		objectMap["minCount"] = mcappp.MinCount
1099	}
1100	if mcappp.EnableAutoScaling != nil {
1101		objectMap["enableAutoScaling"] = mcappp.EnableAutoScaling
1102	}
1103	if mcappp.Type != "" {
1104		objectMap["type"] = mcappp.Type
1105	}
1106	if mcappp.Mode != "" {
1107		objectMap["mode"] = mcappp.Mode
1108	}
1109	if mcappp.OrchestratorVersion != nil {
1110		objectMap["orchestratorVersion"] = mcappp.OrchestratorVersion
1111	}
1112	if mcappp.UpgradeSettings != nil {
1113		objectMap["upgradeSettings"] = mcappp.UpgradeSettings
1114	}
1115	if mcappp.AvailabilityZones != nil {
1116		objectMap["availabilityZones"] = mcappp.AvailabilityZones
1117	}
1118	if mcappp.EnableNodePublicIP != nil {
1119		objectMap["enableNodePublicIP"] = mcappp.EnableNodePublicIP
1120	}
1121	if mcappp.ScaleSetPriority != "" {
1122		objectMap["scaleSetPriority"] = mcappp.ScaleSetPriority
1123	}
1124	if mcappp.ScaleSetEvictionPolicy != "" {
1125		objectMap["scaleSetEvictionPolicy"] = mcappp.ScaleSetEvictionPolicy
1126	}
1127	if mcappp.SpotMaxPrice != nil {
1128		objectMap["spotMaxPrice"] = mcappp.SpotMaxPrice
1129	}
1130	if mcappp.Tags != nil {
1131		objectMap["tags"] = mcappp.Tags
1132	}
1133	if mcappp.NodeLabels != nil {
1134		objectMap["nodeLabels"] = mcappp.NodeLabels
1135	}
1136	if mcappp.NodeTaints != nil {
1137		objectMap["nodeTaints"] = mcappp.NodeTaints
1138	}
1139	if mcappp.ProximityPlacementGroupID != nil {
1140		objectMap["proximityPlacementGroupID"] = mcappp.ProximityPlacementGroupID
1141	}
1142	if mcappp.KubeletConfig != nil {
1143		objectMap["kubeletConfig"] = mcappp.KubeletConfig
1144	}
1145	if mcappp.LinuxOSConfig != nil {
1146		objectMap["linuxOSConfig"] = mcappp.LinuxOSConfig
1147	}
1148	return json.Marshal(objectMap)
1149}
1150
1151// ManagedClusterAPIServerAccessProfile access profile for managed cluster API server.
1152type ManagedClusterAPIServerAccessProfile struct {
1153	// AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.
1154	AuthorizedIPRanges *[]string `json:"authorizedIPRanges,omitempty"`
1155	// EnablePrivateCluster - Whether to create the cluster as a private cluster or not.
1156	EnablePrivateCluster *bool `json:"enablePrivateCluster,omitempty"`
1157	// PrivateDNSZone - Private dns zone mode for private cluster.
1158	PrivateDNSZone *string `json:"privateDNSZone,omitempty"`
1159}
1160
1161// ManagedClusterAutoUpgradeProfile auto upgrade profile for a managed cluster.
1162type ManagedClusterAutoUpgradeProfile struct {
1163	// UpgradeChannel - upgrade channel for auto upgrade. Possible values include: 'UpgradeChannelRapid', 'UpgradeChannelStable', 'UpgradeChannelPatch', 'UpgradeChannelNone'
1164	UpgradeChannel UpgradeChannel `json:"upgradeChannel,omitempty"`
1165}
1166
1167// ManagedClusterIdentity identity for the managed cluster.
1168type ManagedClusterIdentity struct {
1169	// PrincipalID - READ-ONLY; The principal id of the system assigned identity which is used by master components.
1170	PrincipalID *string `json:"principalId,omitempty"`
1171	// TenantID - READ-ONLY; The tenant id of the system assigned identity which is used by master components.
1172	TenantID *string `json:"tenantId,omitempty"`
1173	// Type - The type of identity used for the managed cluster. Type 'SystemAssigned' will use an implicitly created identity in master components and an auto-created user assigned identity in MC_ resource group in agent nodes. Type 'None' will not use MSI for the managed cluster, service principal will be used instead. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeNone'
1174	Type ResourceIdentityType `json:"type,omitempty"`
1175	// UserAssignedIdentities - The user identity associated with the managed cluster. This identity will be used in control plane and only one user assigned identity is allowed. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
1176	UserAssignedIdentities map[string]*ManagedClusterIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
1177}
1178
1179// MarshalJSON is the custom marshaler for ManagedClusterIdentity.
1180func (mci ManagedClusterIdentity) MarshalJSON() ([]byte, error) {
1181	objectMap := make(map[string]interface{})
1182	if mci.Type != "" {
1183		objectMap["type"] = mci.Type
1184	}
1185	if mci.UserAssignedIdentities != nil {
1186		objectMap["userAssignedIdentities"] = mci.UserAssignedIdentities
1187	}
1188	return json.Marshal(objectMap)
1189}
1190
1191// ManagedClusterIdentityUserAssignedIdentitiesValue ...
1192type ManagedClusterIdentityUserAssignedIdentitiesValue struct {
1193	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
1194	PrincipalID *string `json:"principalId,omitempty"`
1195	// ClientID - READ-ONLY; The client id of user assigned identity.
1196	ClientID *string `json:"clientId,omitempty"`
1197}
1198
1199// ManagedClusterListResult the response from the List Managed Clusters operation.
1200type ManagedClusterListResult struct {
1201	autorest.Response `json:"-"`
1202	// Value - The list of managed clusters.
1203	Value *[]ManagedCluster `json:"value,omitempty"`
1204	// NextLink - READ-ONLY; The URL to get the next set of managed cluster results.
1205	NextLink *string `json:"nextLink,omitempty"`
1206}
1207
1208// MarshalJSON is the custom marshaler for ManagedClusterListResult.
1209func (mclr ManagedClusterListResult) MarshalJSON() ([]byte, error) {
1210	objectMap := make(map[string]interface{})
1211	if mclr.Value != nil {
1212		objectMap["value"] = mclr.Value
1213	}
1214	return json.Marshal(objectMap)
1215}
1216
1217// ManagedClusterListResultIterator provides access to a complete listing of ManagedCluster values.
1218type ManagedClusterListResultIterator struct {
1219	i    int
1220	page ManagedClusterListResultPage
1221}
1222
1223// NextWithContext advances to the next value.  If there was an error making
1224// the request the iterator does not advance and the error is returned.
1225func (iter *ManagedClusterListResultIterator) NextWithContext(ctx context.Context) (err error) {
1226	if tracing.IsEnabled() {
1227		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedClusterListResultIterator.NextWithContext")
1228		defer func() {
1229			sc := -1
1230			if iter.Response().Response.Response != nil {
1231				sc = iter.Response().Response.Response.StatusCode
1232			}
1233			tracing.EndSpan(ctx, sc, err)
1234		}()
1235	}
1236	iter.i++
1237	if iter.i < len(iter.page.Values()) {
1238		return nil
1239	}
1240	err = iter.page.NextWithContext(ctx)
1241	if err != nil {
1242		iter.i--
1243		return err
1244	}
1245	iter.i = 0
1246	return nil
1247}
1248
1249// Next advances to the next value.  If there was an error making
1250// the request the iterator does not advance and the error is returned.
1251// Deprecated: Use NextWithContext() instead.
1252func (iter *ManagedClusterListResultIterator) Next() error {
1253	return iter.NextWithContext(context.Background())
1254}
1255
1256// NotDone returns true if the enumeration should be started or is not yet complete.
1257func (iter ManagedClusterListResultIterator) NotDone() bool {
1258	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1259}
1260
1261// Response returns the raw server response from the last page request.
1262func (iter ManagedClusterListResultIterator) Response() ManagedClusterListResult {
1263	return iter.page.Response()
1264}
1265
1266// Value returns the current value or a zero-initialized value if the
1267// iterator has advanced beyond the end of the collection.
1268func (iter ManagedClusterListResultIterator) Value() ManagedCluster {
1269	if !iter.page.NotDone() {
1270		return ManagedCluster{}
1271	}
1272	return iter.page.Values()[iter.i]
1273}
1274
1275// Creates a new instance of the ManagedClusterListResultIterator type.
1276func NewManagedClusterListResultIterator(page ManagedClusterListResultPage) ManagedClusterListResultIterator {
1277	return ManagedClusterListResultIterator{page: page}
1278}
1279
1280// IsEmpty returns true if the ListResult contains no values.
1281func (mclr ManagedClusterListResult) IsEmpty() bool {
1282	return mclr.Value == nil || len(*mclr.Value) == 0
1283}
1284
1285// hasNextLink returns true if the NextLink is not empty.
1286func (mclr ManagedClusterListResult) hasNextLink() bool {
1287	return mclr.NextLink != nil && len(*mclr.NextLink) != 0
1288}
1289
1290// managedClusterListResultPreparer prepares a request to retrieve the next set of results.
1291// It returns nil if no more results exist.
1292func (mclr ManagedClusterListResult) managedClusterListResultPreparer(ctx context.Context) (*http.Request, error) {
1293	if !mclr.hasNextLink() {
1294		return nil, nil
1295	}
1296	return autorest.Prepare((&http.Request{}).WithContext(ctx),
1297		autorest.AsJSON(),
1298		autorest.AsGet(),
1299		autorest.WithBaseURL(to.String(mclr.NextLink)))
1300}
1301
1302// ManagedClusterListResultPage contains a page of ManagedCluster values.
1303type ManagedClusterListResultPage struct {
1304	fn   func(context.Context, ManagedClusterListResult) (ManagedClusterListResult, error)
1305	mclr ManagedClusterListResult
1306}
1307
1308// NextWithContext advances to the next page of values.  If there was an error making
1309// the request the page does not advance and the error is returned.
1310func (page *ManagedClusterListResultPage) NextWithContext(ctx context.Context) (err error) {
1311	if tracing.IsEnabled() {
1312		ctx = tracing.StartSpan(ctx, fqdn+"/ManagedClusterListResultPage.NextWithContext")
1313		defer func() {
1314			sc := -1
1315			if page.Response().Response.Response != nil {
1316				sc = page.Response().Response.Response.StatusCode
1317			}
1318			tracing.EndSpan(ctx, sc, err)
1319		}()
1320	}
1321	for {
1322		next, err := page.fn(ctx, page.mclr)
1323		if err != nil {
1324			return err
1325		}
1326		page.mclr = next
1327		if !next.hasNextLink() || !next.IsEmpty() {
1328			break
1329		}
1330	}
1331	return nil
1332}
1333
1334// Next advances to the next page of values.  If there was an error making
1335// the request the page does not advance and the error is returned.
1336// Deprecated: Use NextWithContext() instead.
1337func (page *ManagedClusterListResultPage) Next() error {
1338	return page.NextWithContext(context.Background())
1339}
1340
1341// NotDone returns true if the page enumeration should be started or is not yet complete.
1342func (page ManagedClusterListResultPage) NotDone() bool {
1343	return !page.mclr.IsEmpty()
1344}
1345
1346// Response returns the raw server response from the last page request.
1347func (page ManagedClusterListResultPage) Response() ManagedClusterListResult {
1348	return page.mclr
1349}
1350
1351// Values returns the slice of values for the current page or nil if there are no values.
1352func (page ManagedClusterListResultPage) Values() []ManagedCluster {
1353	if page.mclr.IsEmpty() {
1354		return nil
1355	}
1356	return *page.mclr.Value
1357}
1358
1359// Creates a new instance of the ManagedClusterListResultPage type.
1360func NewManagedClusterListResultPage(cur ManagedClusterListResult, getNextPage func(context.Context, ManagedClusterListResult) (ManagedClusterListResult, error)) ManagedClusterListResultPage {
1361	return ManagedClusterListResultPage{
1362		fn:   getNextPage,
1363		mclr: cur,
1364	}
1365}
1366
1367// ManagedClusterLoadBalancerProfile profile of the managed cluster load balancer.
1368type ManagedClusterLoadBalancerProfile struct {
1369	// ManagedOutboundIPs - Desired managed outbound IPs for the cluster load balancer.
1370	ManagedOutboundIPs *ManagedClusterLoadBalancerProfileManagedOutboundIPs `json:"managedOutboundIPs,omitempty"`
1371	// OutboundIPPrefixes - Desired outbound IP Prefix resources for the cluster load balancer.
1372	OutboundIPPrefixes *ManagedClusterLoadBalancerProfileOutboundIPPrefixes `json:"outboundIPPrefixes,omitempty"`
1373	// OutboundIPs - Desired outbound IP resources for the cluster load balancer.
1374	OutboundIPs *ManagedClusterLoadBalancerProfileOutboundIPs `json:"outboundIPs,omitempty"`
1375	// EffectiveOutboundIPs - The effective outbound IP resources of the cluster load balancer.
1376	EffectiveOutboundIPs *[]ResourceReference `json:"effectiveOutboundIPs,omitempty"`
1377	// AllocatedOutboundPorts - Desired number of allocated SNAT ports per VM. Allowed values must be in the range of 0 to 64000 (inclusive). The default value is 0 which results in Azure dynamically allocating ports.
1378	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
1379	// IdleTimeoutInMinutes - Desired outbound flow idle timeout in minutes. Allowed values must be in the range of 4 to 120 (inclusive). The default value is 30 minutes.
1380	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
1381}
1382
1383// ManagedClusterLoadBalancerProfileManagedOutboundIPs desired managed outbound IPs for the cluster load
1384// balancer.
1385type ManagedClusterLoadBalancerProfileManagedOutboundIPs struct {
1386	// Count - Desired number of outbound IP created/managed by Azure for the cluster load balancer. Allowed values must be in the range of 1 to 100 (inclusive). The default value is 1.
1387	Count *int32 `json:"count,omitempty"`
1388}
1389
1390// ManagedClusterLoadBalancerProfileOutboundIPPrefixes desired outbound IP Prefix resources for the cluster
1391// load balancer.
1392type ManagedClusterLoadBalancerProfileOutboundIPPrefixes struct {
1393	// PublicIPPrefixes - A list of public IP prefix resources.
1394	PublicIPPrefixes *[]ResourceReference `json:"publicIPPrefixes,omitempty"`
1395}
1396
1397// ManagedClusterLoadBalancerProfileOutboundIPs desired outbound IP resources for the cluster load
1398// balancer.
1399type ManagedClusterLoadBalancerProfileOutboundIPs struct {
1400	// PublicIPs - A list of public IP resources.
1401	PublicIPs *[]ResourceReference `json:"publicIPs,omitempty"`
1402}
1403
1404// ManagedClusterPodIdentity ...
1405type ManagedClusterPodIdentity struct {
1406	// Name - Name of the pod identity.
1407	Name *string `json:"name,omitempty"`
1408	// Namespace - Namespace of the pod identity.
1409	Namespace *string `json:"namespace,omitempty"`
1410	// Identity - Information of the user assigned identity.
1411	Identity *UserAssignedIdentity `json:"identity,omitempty"`
1412	// ProvisioningState - READ-ONLY; The current provisioning state of the pod identity. Possible values include: 'Assigned', 'Updating', 'Deleting', 'Failed'
1413	ProvisioningState ManagedClusterPodIdentityProvisioningState `json:"provisioningState,omitempty"`
1414	// ProvisioningInfo - READ-ONLY
1415	ProvisioningInfo *ManagedClusterPodIdentityProvisioningInfo `json:"provisioningInfo,omitempty"`
1416}
1417
1418// MarshalJSON is the custom marshaler for ManagedClusterPodIdentity.
1419func (mcpi ManagedClusterPodIdentity) MarshalJSON() ([]byte, error) {
1420	objectMap := make(map[string]interface{})
1421	if mcpi.Name != nil {
1422		objectMap["name"] = mcpi.Name
1423	}
1424	if mcpi.Namespace != nil {
1425		objectMap["namespace"] = mcpi.Namespace
1426	}
1427	if mcpi.Identity != nil {
1428		objectMap["identity"] = mcpi.Identity
1429	}
1430	return json.Marshal(objectMap)
1431}
1432
1433// ManagedClusterPodIdentityException ...
1434type ManagedClusterPodIdentityException struct {
1435	// Name - Name of the pod identity exception.
1436	Name *string `json:"name,omitempty"`
1437	// Namespace - Namespace of the pod identity exception.
1438	Namespace *string `json:"namespace,omitempty"`
1439	// PodLabels - Pod labels to match.
1440	PodLabels map[string]*string `json:"podLabels"`
1441}
1442
1443// MarshalJSON is the custom marshaler for ManagedClusterPodIdentityException.
1444func (mcpie ManagedClusterPodIdentityException) MarshalJSON() ([]byte, error) {
1445	objectMap := make(map[string]interface{})
1446	if mcpie.Name != nil {
1447		objectMap["name"] = mcpie.Name
1448	}
1449	if mcpie.Namespace != nil {
1450		objectMap["namespace"] = mcpie.Namespace
1451	}
1452	if mcpie.PodLabels != nil {
1453		objectMap["podLabels"] = mcpie.PodLabels
1454	}
1455	return json.Marshal(objectMap)
1456}
1457
1458// ManagedClusterPodIdentityProfile ...
1459type ManagedClusterPodIdentityProfile struct {
1460	// Enabled - Whether the pod identity addon is enabled.
1461	Enabled *bool `json:"enabled,omitempty"`
1462	// UserAssignedIdentities - User assigned pod identity settings.
1463	UserAssignedIdentities *[]ManagedClusterPodIdentity `json:"userAssignedIdentities,omitempty"`
1464	// UserAssignedIdentityExceptions - User assigned pod identity exception settings.
1465	UserAssignedIdentityExceptions *[]ManagedClusterPodIdentityException `json:"userAssignedIdentityExceptions,omitempty"`
1466}
1467
1468// ManagedClusterPodIdentityProvisioningInfo ...
1469type ManagedClusterPodIdentityProvisioningInfo struct {
1470	// Error - Pod identity assignment error (if any).
1471	Error *CloudError `json:"error,omitempty"`
1472}
1473
1474// ManagedClusterPoolUpgradeProfile the list of available upgrade versions.
1475type ManagedClusterPoolUpgradeProfile struct {
1476	// KubernetesVersion - Kubernetes version (major, minor, patch).
1477	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
1478	// Name - Pool name.
1479	Name *string `json:"name,omitempty"`
1480	// OsType - OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. Possible values include: 'Linux', 'Windows'
1481	OsType OSType `json:"osType,omitempty"`
1482	// Upgrades - List of orchestrator types and versions available for upgrade.
1483	Upgrades *[]ManagedClusterPoolUpgradeProfileUpgradesItem `json:"upgrades,omitempty"`
1484}
1485
1486// ManagedClusterPoolUpgradeProfileUpgradesItem ...
1487type ManagedClusterPoolUpgradeProfileUpgradesItem struct {
1488	// KubernetesVersion - Kubernetes version (major, minor, patch).
1489	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
1490	// IsPreview - Whether Kubernetes version is currently in preview.
1491	IsPreview *bool `json:"isPreview,omitempty"`
1492}
1493
1494// ManagedClusterProperties properties of the managed cluster.
1495type ManagedClusterProperties struct {
1496	// ProvisioningState - READ-ONLY; The current deployment or provisioning state, which only appears in the response.
1497	ProvisioningState *string `json:"provisioningState,omitempty"`
1498	// PowerState - READ-ONLY; Represents the Power State of the cluster
1499	PowerState *PowerState `json:"powerState,omitempty"`
1500	// MaxAgentPools - READ-ONLY; The max number of agent pools for the managed cluster.
1501	MaxAgentPools *int32 `json:"maxAgentPools,omitempty"`
1502	// KubernetesVersion - Version of Kubernetes specified when creating the managed cluster.
1503	KubernetesVersion *string `json:"kubernetesVersion,omitempty"`
1504	// DNSPrefix - DNS prefix specified when creating the managed cluster.
1505	DNSPrefix *string `json:"dnsPrefix,omitempty"`
1506	// Fqdn - READ-ONLY; FQDN for the master pool.
1507	Fqdn *string `json:"fqdn,omitempty"`
1508	// PrivateFQDN - READ-ONLY; FQDN of private cluster.
1509	PrivateFQDN *string `json:"privateFQDN,omitempty"`
1510	// AgentPoolProfiles - Properties of the agent pool.
1511	AgentPoolProfiles *[]ManagedClusterAgentPoolProfile `json:"agentPoolProfiles,omitempty"`
1512	// LinuxProfile - Profile for Linux VMs in the container service cluster.
1513	LinuxProfile *LinuxProfile `json:"linuxProfile,omitempty"`
1514	// WindowsProfile - Profile for Windows VMs in the container service cluster.
1515	WindowsProfile *ManagedClusterWindowsProfile `json:"windowsProfile,omitempty"`
1516	// ServicePrincipalProfile - Information about a service principal identity for the cluster to use for manipulating Azure APIs.
1517	ServicePrincipalProfile *ManagedClusterServicePrincipalProfile `json:"servicePrincipalProfile,omitempty"`
1518	// AddonProfiles - Profile of managed cluster add-on.
1519	AddonProfiles map[string]*ManagedClusterAddonProfile `json:"addonProfiles"`
1520	// PodIdentityProfile - Profile of managed cluster pod identity.
1521	PodIdentityProfile *ManagedClusterPodIdentityProfile `json:"podIdentityProfile,omitempty"`
1522	// NodeResourceGroup - Name of the resource group containing agent pool nodes.
1523	NodeResourceGroup *string `json:"nodeResourceGroup,omitempty"`
1524	// EnableRBAC - Whether to enable Kubernetes Role-Based Access Control.
1525	EnableRBAC *bool `json:"enableRBAC,omitempty"`
1526	// EnablePodSecurityPolicy - (DEPRECATING) Whether to enable Kubernetes pod security policy (preview). This feature is set for removal on October 15th, 2020. Learn more at aka.ms/aks/azpodpolicy.
1527	EnablePodSecurityPolicy *bool `json:"enablePodSecurityPolicy,omitempty"`
1528	// NetworkProfile - Profile of network configuration.
1529	NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"`
1530	// AadProfile - Profile of Azure Active Directory configuration.
1531	AadProfile *ManagedClusterAADProfile `json:"aadProfile,omitempty"`
1532	// AutoUpgradeProfile - Profile of auto upgrade configuration.
1533	AutoUpgradeProfile *ManagedClusterAutoUpgradeProfile `json:"autoUpgradeProfile,omitempty"`
1534	// AutoScalerProfile - Parameters to be applied to the cluster-autoscaler when enabled
1535	AutoScalerProfile *ManagedClusterPropertiesAutoScalerProfile `json:"autoScalerProfile,omitempty"`
1536	// APIServerAccessProfile - Access profile for managed cluster API server.
1537	APIServerAccessProfile *ManagedClusterAPIServerAccessProfile `json:"apiServerAccessProfile,omitempty"`
1538	// DiskEncryptionSetID - ResourceId of the disk encryption set to use for enabling encryption at rest.
1539	DiskEncryptionSetID *string `json:"diskEncryptionSetID,omitempty"`
1540	// IdentityProfile - Identities associated with the cluster.
1541	IdentityProfile map[string]*ManagedClusterPropertiesIdentityProfileValue `json:"identityProfile"`
1542}
1543
1544// MarshalJSON is the custom marshaler for ManagedClusterProperties.
1545func (mcp ManagedClusterProperties) MarshalJSON() ([]byte, error) {
1546	objectMap := make(map[string]interface{})
1547	if mcp.KubernetesVersion != nil {
1548		objectMap["kubernetesVersion"] = mcp.KubernetesVersion
1549	}
1550	if mcp.DNSPrefix != nil {
1551		objectMap["dnsPrefix"] = mcp.DNSPrefix
1552	}
1553	if mcp.AgentPoolProfiles != nil {
1554		objectMap["agentPoolProfiles"] = mcp.AgentPoolProfiles
1555	}
1556	if mcp.LinuxProfile != nil {
1557		objectMap["linuxProfile"] = mcp.LinuxProfile
1558	}
1559	if mcp.WindowsProfile != nil {
1560		objectMap["windowsProfile"] = mcp.WindowsProfile
1561	}
1562	if mcp.ServicePrincipalProfile != nil {
1563		objectMap["servicePrincipalProfile"] = mcp.ServicePrincipalProfile
1564	}
1565	if mcp.AddonProfiles != nil {
1566		objectMap["addonProfiles"] = mcp.AddonProfiles
1567	}
1568	if mcp.PodIdentityProfile != nil {
1569		objectMap["podIdentityProfile"] = mcp.PodIdentityProfile
1570	}
1571	if mcp.NodeResourceGroup != nil {
1572		objectMap["nodeResourceGroup"] = mcp.NodeResourceGroup
1573	}
1574	if mcp.EnableRBAC != nil {
1575		objectMap["enableRBAC"] = mcp.EnableRBAC
1576	}
1577	if mcp.EnablePodSecurityPolicy != nil {
1578		objectMap["enablePodSecurityPolicy"] = mcp.EnablePodSecurityPolicy
1579	}
1580	if mcp.NetworkProfile != nil {
1581		objectMap["networkProfile"] = mcp.NetworkProfile
1582	}
1583	if mcp.AadProfile != nil {
1584		objectMap["aadProfile"] = mcp.AadProfile
1585	}
1586	if mcp.AutoUpgradeProfile != nil {
1587		objectMap["autoUpgradeProfile"] = mcp.AutoUpgradeProfile
1588	}
1589	if mcp.AutoScalerProfile != nil {
1590		objectMap["autoScalerProfile"] = mcp.AutoScalerProfile
1591	}
1592	if mcp.APIServerAccessProfile != nil {
1593		objectMap["apiServerAccessProfile"] = mcp.APIServerAccessProfile
1594	}
1595	if mcp.DiskEncryptionSetID != nil {
1596		objectMap["diskEncryptionSetID"] = mcp.DiskEncryptionSetID
1597	}
1598	if mcp.IdentityProfile != nil {
1599		objectMap["identityProfile"] = mcp.IdentityProfile
1600	}
1601	return json.Marshal(objectMap)
1602}
1603
1604// ManagedClusterPropertiesAutoScalerProfile parameters to be applied to the cluster-autoscaler when
1605// enabled
1606type ManagedClusterPropertiesAutoScalerProfile struct {
1607	BalanceSimilarNodeGroups *string `json:"balance-similar-node-groups,omitempty"`
1608	// Expander - Possible values include: 'LeastWaste', 'MostPods', 'Random'
1609	Expander                      Expander `json:"expander,omitempty"`
1610	MaxEmptyBulkDelete            *string  `json:"max-empty-bulk-delete,omitempty"`
1611	MaxGracefulTerminationSec     *string  `json:"max-graceful-termination-sec,omitempty"`
1612	MaxTotalUnreadyPercentage     *string  `json:"max-total-unready-percentage,omitempty"`
1613	NewPodScaleUpDelay            *string  `json:"new-pod-scale-up-delay,omitempty"`
1614	OkTotalUnreadyCount           *string  `json:"ok-total-unready-count,omitempty"`
1615	ScanInterval                  *string  `json:"scan-interval,omitempty"`
1616	ScaleDownDelayAfterAdd        *string  `json:"scale-down-delay-after-add,omitempty"`
1617	ScaleDownDelayAfterDelete     *string  `json:"scale-down-delay-after-delete,omitempty"`
1618	ScaleDownDelayAfterFailure    *string  `json:"scale-down-delay-after-failure,omitempty"`
1619	ScaleDownUnneededTime         *string  `json:"scale-down-unneeded-time,omitempty"`
1620	ScaleDownUnreadyTime          *string  `json:"scale-down-unready-time,omitempty"`
1621	ScaleDownUtilizationThreshold *string  `json:"scale-down-utilization-threshold,omitempty"`
1622	SkipNodesWithLocalStorage     *string  `json:"skip-nodes-with-local-storage,omitempty"`
1623	SkipNodesWithSystemPods       *string  `json:"skip-nodes-with-system-pods,omitempty"`
1624}
1625
1626// ManagedClusterPropertiesIdentityProfileValue ...
1627type ManagedClusterPropertiesIdentityProfileValue struct {
1628	// ResourceID - The resource id of the user assigned identity.
1629	ResourceID *string `json:"resourceId,omitempty"`
1630	// ClientID - The client id of the user assigned identity.
1631	ClientID *string `json:"clientId,omitempty"`
1632	// ObjectID - The object id of the user assigned identity.
1633	ObjectID *string `json:"objectId,omitempty"`
1634}
1635
1636// ManagedClustersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
1637// long-running operation.
1638type ManagedClustersCreateOrUpdateFuture struct {
1639	azure.FutureAPI
1640	// Result returns the result of the asynchronous operation.
1641	// If the operation has not completed it will return an error.
1642	Result func(ManagedClustersClient) (ManagedCluster, error)
1643}
1644
1645// ManagedClustersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
1646// operation.
1647type ManagedClustersDeleteFuture struct {
1648	azure.FutureAPI
1649	// Result returns the result of the asynchronous operation.
1650	// If the operation has not completed it will return an error.
1651	Result func(ManagedClustersClient) (autorest.Response, error)
1652}
1653
1654// ManagedClusterServicePrincipalProfile information about a service principal identity for the cluster to
1655// use for manipulating Azure APIs.
1656type ManagedClusterServicePrincipalProfile struct {
1657	// ClientID - The ID for the service principal.
1658	ClientID *string `json:"clientId,omitempty"`
1659	// Secret - The secret password associated with the service principal in plain text.
1660	Secret *string `json:"secret,omitempty"`
1661}
1662
1663// ManagedClusterSKU ...
1664type ManagedClusterSKU struct {
1665	// Name - Name of a managed cluster SKU. Possible values include: 'ManagedClusterSKUNameBasic'
1666	Name ManagedClusterSKUName `json:"name,omitempty"`
1667	// Tier - Tier of a managed cluster SKU. Possible values include: 'Paid', 'Free'
1668	Tier ManagedClusterSKUTier `json:"tier,omitempty"`
1669}
1670
1671// ManagedClustersResetAADProfileFuture an abstraction for monitoring and retrieving the results of a
1672// long-running operation.
1673type ManagedClustersResetAADProfileFuture struct {
1674	azure.FutureAPI
1675	// Result returns the result of the asynchronous operation.
1676	// If the operation has not completed it will return an error.
1677	Result func(ManagedClustersClient) (autorest.Response, error)
1678}
1679
1680// ManagedClustersResetServicePrincipalProfileFuture an abstraction for monitoring and retrieving the
1681// results of a long-running operation.
1682type ManagedClustersResetServicePrincipalProfileFuture struct {
1683	azure.FutureAPI
1684	// Result returns the result of the asynchronous operation.
1685	// If the operation has not completed it will return an error.
1686	Result func(ManagedClustersClient) (autorest.Response, error)
1687}
1688
1689// ManagedClustersRotateClusterCertificatesFuture an abstraction for monitoring and retrieving the results
1690// of a long-running operation.
1691type ManagedClustersRotateClusterCertificatesFuture struct {
1692	azure.FutureAPI
1693	// Result returns the result of the asynchronous operation.
1694	// If the operation has not completed it will return an error.
1695	Result func(ManagedClustersClient) (autorest.Response, error)
1696}
1697
1698// ManagedClustersStartFuture an abstraction for monitoring and retrieving the results of a long-running
1699// operation.
1700type ManagedClustersStartFuture struct {
1701	azure.FutureAPI
1702	// Result returns the result of the asynchronous operation.
1703	// If the operation has not completed it will return an error.
1704	Result func(ManagedClustersClient) (autorest.Response, error)
1705}
1706
1707// ManagedClustersStopFuture an abstraction for monitoring and retrieving the results of a long-running
1708// operation.
1709type ManagedClustersStopFuture struct {
1710	azure.FutureAPI
1711	// Result returns the result of the asynchronous operation.
1712	// If the operation has not completed it will return an error.
1713	Result func(ManagedClustersClient) (autorest.Response, error)
1714}
1715
1716// ManagedClustersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
1717// long-running operation.
1718type ManagedClustersUpdateTagsFuture struct {
1719	azure.FutureAPI
1720	// Result returns the result of the asynchronous operation.
1721	// If the operation has not completed it will return an error.
1722	Result func(ManagedClustersClient) (ManagedCluster, error)
1723}
1724
1725// ManagedClusterUpgradeProfile the list of available upgrades for compute pools.
1726type ManagedClusterUpgradeProfile struct {
1727	autorest.Response `json:"-"`
1728	// ID - READ-ONLY; Id of upgrade profile.
1729	ID *string `json:"id,omitempty"`
1730	// Name - READ-ONLY; Name of upgrade profile.
1731	Name *string `json:"name,omitempty"`
1732	// Type - READ-ONLY; Type of upgrade profile.
1733	Type *string `json:"type,omitempty"`
1734	// ManagedClusterUpgradeProfileProperties - Properties of upgrade profile.
1735	*ManagedClusterUpgradeProfileProperties `json:"properties,omitempty"`
1736}
1737
1738// MarshalJSON is the custom marshaler for ManagedClusterUpgradeProfile.
1739func (mcup ManagedClusterUpgradeProfile) MarshalJSON() ([]byte, error) {
1740	objectMap := make(map[string]interface{})
1741	if mcup.ManagedClusterUpgradeProfileProperties != nil {
1742		objectMap["properties"] = mcup.ManagedClusterUpgradeProfileProperties
1743	}
1744	return json.Marshal(objectMap)
1745}
1746
1747// UnmarshalJSON is the custom unmarshaler for ManagedClusterUpgradeProfile struct.
1748func (mcup *ManagedClusterUpgradeProfile) UnmarshalJSON(body []byte) error {
1749	var m map[string]*json.RawMessage
1750	err := json.Unmarshal(body, &m)
1751	if err != nil {
1752		return err
1753	}
1754	for k, v := range m {
1755		switch k {
1756		case "id":
1757			if v != nil {
1758				var ID string
1759				err = json.Unmarshal(*v, &ID)
1760				if err != nil {
1761					return err
1762				}
1763				mcup.ID = &ID
1764			}
1765		case "name":
1766			if v != nil {
1767				var name string
1768				err = json.Unmarshal(*v, &name)
1769				if err != nil {
1770					return err
1771				}
1772				mcup.Name = &name
1773			}
1774		case "type":
1775			if v != nil {
1776				var typeVar string
1777				err = json.Unmarshal(*v, &typeVar)
1778				if err != nil {
1779					return err
1780				}
1781				mcup.Type = &typeVar
1782			}
1783		case "properties":
1784			if v != nil {
1785				var managedClusterUpgradeProfileProperties ManagedClusterUpgradeProfileProperties
1786				err = json.Unmarshal(*v, &managedClusterUpgradeProfileProperties)
1787				if err != nil {
1788					return err
1789				}
1790				mcup.ManagedClusterUpgradeProfileProperties = &managedClusterUpgradeProfileProperties
1791			}
1792		}
1793	}
1794
1795	return nil
1796}
1797
1798// ManagedClusterUpgradeProfileProperties control plane and agent pool upgrade profiles.
1799type ManagedClusterUpgradeProfileProperties struct {
1800	// ControlPlaneProfile - The list of available upgrade versions for the control plane.
1801	ControlPlaneProfile *ManagedClusterPoolUpgradeProfile `json:"controlPlaneProfile,omitempty"`
1802	// AgentPoolProfiles - The list of available upgrade versions for agent pools.
1803	AgentPoolProfiles *[]ManagedClusterPoolUpgradeProfile `json:"agentPoolProfiles,omitempty"`
1804}
1805
1806// ManagedClusterWindowsProfile profile for Windows VMs in the container service cluster.
1807type ManagedClusterWindowsProfile struct {
1808	// AdminUsername - Specifies the name of the administrator account. <br><br> **restriction:** Cannot end in "." <br><br> **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5". <br><br> **Minimum-length:** 1 character <br><br> **Max-length:** 20 characters
1809	AdminUsername *string `json:"adminUsername,omitempty"`
1810	// AdminPassword - Specifies the password of the administrator account. <br><br> **Minimum-length:** 8 characters <br><br> **Max-length:** 123 characters <br><br> **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has lower characters <br>Has upper characters <br> Has a digit <br> Has a special character (Regex match [\W_]) <br><br> **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!"
1811	AdminPassword *string `json:"adminPassword,omitempty"`
1812	// LicenseType - The licenseType to use for Windows VMs. Windows_Server is used to enable Azure Hybrid User Benefits for Windows VMs. Possible values include: 'None', 'WindowsServer'
1813	LicenseType LicenseType `json:"licenseType,omitempty"`
1814}
1815
1816// MasterProfile profile for the container service master.
1817type MasterProfile struct {
1818	// Count - Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The default value is 1.
1819	Count *int32 `json:"count,omitempty"`
1820	// DNSPrefix - DNS prefix to be used to create the FQDN for the master pool.
1821	DNSPrefix *string `json:"dnsPrefix,omitempty"`
1822	// VMSize - Size of agent VMs. Possible values include: 'StandardA1', 'StandardA10', 'StandardA11', 'StandardA1V2', 'StandardA2', 'StandardA2V2', 'StandardA2mV2', 'StandardA3', 'StandardA4', 'StandardA4V2', 'StandardA4mV2', 'StandardA5', 'StandardA6', 'StandardA7', 'StandardA8', 'StandardA8V2', 'StandardA8mV2', 'StandardA9', 'StandardB2ms', 'StandardB2s', 'StandardB4ms', 'StandardB8ms', 'StandardD1', 'StandardD11', 'StandardD11V2', 'StandardD11V2Promo', 'StandardD12', 'StandardD12V2', 'StandardD12V2Promo', 'StandardD13', 'StandardD13V2', 'StandardD13V2Promo', 'StandardD14', 'StandardD14V2', 'StandardD14V2Promo', 'StandardD15V2', 'StandardD16V3', 'StandardD16sV3', 'StandardD1V2', 'StandardD2', 'StandardD2V2', 'StandardD2V2Promo', 'StandardD2V3', 'StandardD2sV3', 'StandardD3', 'StandardD32V3', 'StandardD32sV3', 'StandardD3V2', 'StandardD3V2Promo', 'StandardD4', 'StandardD4V2', 'StandardD4V2Promo', 'StandardD4V3', 'StandardD4sV3', 'StandardD5V2', 'StandardD5V2Promo', 'StandardD64V3', 'StandardD64sV3', 'StandardD8V3', 'StandardD8sV3', 'StandardDS1', 'StandardDS11', 'StandardDS11V2', 'StandardDS11V2Promo', 'StandardDS12', 'StandardDS12V2', 'StandardDS12V2Promo', 'StandardDS13', 'StandardDS132V2', 'StandardDS134V2', 'StandardDS13V2', 'StandardDS13V2Promo', 'StandardDS14', 'StandardDS144V2', 'StandardDS148V2', 'StandardDS14V2', 'StandardDS14V2Promo', 'StandardDS15V2', 'StandardDS1V2', 'StandardDS2', 'StandardDS2V2', 'StandardDS2V2Promo', 'StandardDS3', 'StandardDS3V2', 'StandardDS3V2Promo', 'StandardDS4', 'StandardDS4V2', 'StandardDS4V2Promo', 'StandardDS5V2', 'StandardDS5V2Promo', 'StandardE16V3', 'StandardE16sV3', 'StandardE2V3', 'StandardE2sV3', 'StandardE3216sV3', 'StandardE328sV3', 'StandardE32V3', 'StandardE32sV3', 'StandardE4V3', 'StandardE4sV3', 'StandardE6416sV3', 'StandardE6432sV3', 'StandardE64V3', 'StandardE64sV3', 'StandardE8V3', 'StandardE8sV3', 'StandardF1', 'StandardF16', 'StandardF16s', 'StandardF16sV2', 'StandardF1s', 'StandardF2', 'StandardF2s', 'StandardF2sV2', 'StandardF32sV2', 'StandardF4', 'StandardF4s', 'StandardF4sV2', 'StandardF64sV2', 'StandardF72sV2', 'StandardF8', 'StandardF8s', 'StandardF8sV2', 'StandardG1', 'StandardG2', 'StandardG3', 'StandardG4', 'StandardG5', 'StandardGS1', 'StandardGS2', 'StandardGS3', 'StandardGS4', 'StandardGS44', 'StandardGS48', 'StandardGS5', 'StandardGS516', 'StandardGS58', 'StandardH16', 'StandardH16m', 'StandardH16mr', 'StandardH16r', 'StandardH8', 'StandardH8m', 'StandardL16s', 'StandardL32s', 'StandardL4s', 'StandardL8s', 'StandardM12832ms', 'StandardM12864ms', 'StandardM128ms', 'StandardM128s', 'StandardM6416ms', 'StandardM6432ms', 'StandardM64ms', 'StandardM64s', 'StandardNC12', 'StandardNC12sV2', 'StandardNC12sV3', 'StandardNC24', 'StandardNC24r', 'StandardNC24rsV2', 'StandardNC24rsV3', 'StandardNC24sV2', 'StandardNC24sV3', 'StandardNC6', 'StandardNC6sV2', 'StandardNC6sV3', 'StandardND12s', 'StandardND24rs', 'StandardND24s', 'StandardND6s', 'StandardNV12', 'StandardNV24', 'StandardNV6'
1823	VMSize VMSizeTypes `json:"vmSize,omitempty"`
1824	// 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.
1825	OsDiskSizeGB *int32 `json:"osDiskSizeGB,omitempty"`
1826	// VnetSubnetID - VNet SubnetID specifies the VNet's subnet identifier.
1827	VnetSubnetID *string `json:"vnetSubnetID,omitempty"`
1828	// FirstConsecutiveStaticIP - FirstConsecutiveStaticIP used to specify the first static ip of masters.
1829	FirstConsecutiveStaticIP *string `json:"firstConsecutiveStaticIP,omitempty"`
1830	// 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'
1831	StorageProfile StorageProfileTypes `json:"storageProfile,omitempty"`
1832	// Fqdn - READ-ONLY; FQDN for the master pool.
1833	Fqdn *string `json:"fqdn,omitempty"`
1834}
1835
1836// MarshalJSON is the custom marshaler for MasterProfile.
1837func (mp MasterProfile) MarshalJSON() ([]byte, error) {
1838	objectMap := make(map[string]interface{})
1839	if mp.Count != nil {
1840		objectMap["count"] = mp.Count
1841	}
1842	if mp.DNSPrefix != nil {
1843		objectMap["dnsPrefix"] = mp.DNSPrefix
1844	}
1845	if mp.VMSize != "" {
1846		objectMap["vmSize"] = mp.VMSize
1847	}
1848	if mp.OsDiskSizeGB != nil {
1849		objectMap["osDiskSizeGB"] = mp.OsDiskSizeGB
1850	}
1851	if mp.VnetSubnetID != nil {
1852		objectMap["vnetSubnetID"] = mp.VnetSubnetID
1853	}
1854	if mp.FirstConsecutiveStaticIP != nil {
1855		objectMap["firstConsecutiveStaticIP"] = mp.FirstConsecutiveStaticIP
1856	}
1857	if mp.StorageProfile != "" {
1858		objectMap["storageProfile"] = mp.StorageProfile
1859	}
1860	return json.Marshal(objectMap)
1861}
1862
1863// NetworkProfile profile of network configuration.
1864type NetworkProfile struct {
1865	// NetworkPlugin - Network plugin used for building Kubernetes network. Possible values include: 'Azure', 'Kubenet'
1866	NetworkPlugin NetworkPlugin `json:"networkPlugin,omitempty"`
1867	// NetworkPolicy - Network policy used for building Kubernetes network. Possible values include: 'NetworkPolicyCalico', 'NetworkPolicyAzure'
1868	NetworkPolicy NetworkPolicy `json:"networkPolicy,omitempty"`
1869	// NetworkMode - Network mode used for building Kubernetes network. Possible values include: 'Transparent', 'Bridge'
1870	NetworkMode NetworkMode `json:"networkMode,omitempty"`
1871	// PodCidr - A CIDR notation IP range from which to assign pod IPs when kubenet is used.
1872	PodCidr *string `json:"podCidr,omitempty"`
1873	// ServiceCidr - A CIDR notation IP range from which to assign service cluster IPs. It must not overlap with any Subnet IP ranges.
1874	ServiceCidr *string `json:"serviceCidr,omitempty"`
1875	// DNSServiceIP - An IP address assigned to the Kubernetes DNS service. It must be within the Kubernetes service address range specified in serviceCidr.
1876	DNSServiceIP *string `json:"dnsServiceIP,omitempty"`
1877	// 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.
1878	DockerBridgeCidr *string `json:"dockerBridgeCidr,omitempty"`
1879	// OutboundType - The outbound (egress) routing method. Possible values include: 'LoadBalancer', 'UserDefinedRouting'
1880	OutboundType OutboundType `json:"outboundType,omitempty"`
1881	// LoadBalancerSku - The load balancer sku for the managed cluster. Possible values include: 'Standard', 'Basic'
1882	LoadBalancerSku LoadBalancerSku `json:"loadBalancerSku,omitempty"`
1883	// LoadBalancerProfile - Profile of the cluster load balancer.
1884	LoadBalancerProfile *ManagedClusterLoadBalancerProfile `json:"loadBalancerProfile,omitempty"`
1885}
1886
1887// OperationListResult the List Compute Operation operation response.
1888type OperationListResult struct {
1889	autorest.Response `json:"-"`
1890	// Value - READ-ONLY; The list of compute operations
1891	Value *[]OperationValue `json:"value,omitempty"`
1892}
1893
1894// OperationValue describes the properties of a Compute Operation value.
1895type OperationValue struct {
1896	// Origin - READ-ONLY; The origin of the compute operation.
1897	Origin *string `json:"origin,omitempty"`
1898	// Name - READ-ONLY; The name of the compute operation.
1899	Name *string `json:"name,omitempty"`
1900	// OperationValueDisplay - Describes the properties of a Compute Operation Value Display.
1901	*OperationValueDisplay `json:"display,omitempty"`
1902}
1903
1904// MarshalJSON is the custom marshaler for OperationValue.
1905func (ov OperationValue) MarshalJSON() ([]byte, error) {
1906	objectMap := make(map[string]interface{})
1907	if ov.OperationValueDisplay != nil {
1908		objectMap["display"] = ov.OperationValueDisplay
1909	}
1910	return json.Marshal(objectMap)
1911}
1912
1913// UnmarshalJSON is the custom unmarshaler for OperationValue struct.
1914func (ov *OperationValue) UnmarshalJSON(body []byte) error {
1915	var m map[string]*json.RawMessage
1916	err := json.Unmarshal(body, &m)
1917	if err != nil {
1918		return err
1919	}
1920	for k, v := range m {
1921		switch k {
1922		case "origin":
1923			if v != nil {
1924				var origin string
1925				err = json.Unmarshal(*v, &origin)
1926				if err != nil {
1927					return err
1928				}
1929				ov.Origin = &origin
1930			}
1931		case "name":
1932			if v != nil {
1933				var name string
1934				err = json.Unmarshal(*v, &name)
1935				if err != nil {
1936					return err
1937				}
1938				ov.Name = &name
1939			}
1940		case "display":
1941			if v != nil {
1942				var operationValueDisplay OperationValueDisplay
1943				err = json.Unmarshal(*v, &operationValueDisplay)
1944				if err != nil {
1945					return err
1946				}
1947				ov.OperationValueDisplay = &operationValueDisplay
1948			}
1949		}
1950	}
1951
1952	return nil
1953}
1954
1955// OperationValueDisplay describes the properties of a Compute Operation Value Display.
1956type OperationValueDisplay struct {
1957	// Operation - READ-ONLY; The display name of the compute operation.
1958	Operation *string `json:"operation,omitempty"`
1959	// Resource - READ-ONLY; The display name of the resource the operation applies to.
1960	Resource *string `json:"resource,omitempty"`
1961	// Description - READ-ONLY; The description of the operation.
1962	Description *string `json:"description,omitempty"`
1963	// Provider - READ-ONLY; The resource provider for the operation.
1964	Provider *string `json:"provider,omitempty"`
1965}
1966
1967// PowerState describes the Power State of the cluster
1968type PowerState struct {
1969	// Code - Tells whether the cluster is Running or Stopped. Possible values include: 'Running', 'Stopped'
1970	Code Code `json:"code,omitempty"`
1971}
1972
1973// PrivateEndpoint private endpoint which a connection belongs to.
1974type PrivateEndpoint struct {
1975	// ID - The resource Id for private endpoint
1976	ID *string `json:"id,omitempty"`
1977}
1978
1979// PrivateEndpointConnection a private endpoint connection
1980type PrivateEndpointConnection struct {
1981	autorest.Response `json:"-"`
1982	// ID - READ-ONLY; The ID of the private endpoint connection.
1983	ID *string `json:"id,omitempty"`
1984	// Name - READ-ONLY; The name of the private endpoint connection.
1985	Name *string `json:"name,omitempty"`
1986	// Type - READ-ONLY; The resource type.
1987	Type *string `json:"type,omitempty"`
1988	// PrivateEndpointConnectionProperties - The properties of a private endpoint connection.
1989	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
1990}
1991
1992// MarshalJSON is the custom marshaler for PrivateEndpointConnection.
1993func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
1994	objectMap := make(map[string]interface{})
1995	if pec.PrivateEndpointConnectionProperties != nil {
1996		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
1997	}
1998	return json.Marshal(objectMap)
1999}
2000
2001// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
2002func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
2003	var m map[string]*json.RawMessage
2004	err := json.Unmarshal(body, &m)
2005	if err != nil {
2006		return err
2007	}
2008	for k, v := range m {
2009		switch k {
2010		case "id":
2011			if v != nil {
2012				var ID string
2013				err = json.Unmarshal(*v, &ID)
2014				if err != nil {
2015					return err
2016				}
2017				pec.ID = &ID
2018			}
2019		case "name":
2020			if v != nil {
2021				var name string
2022				err = json.Unmarshal(*v, &name)
2023				if err != nil {
2024					return err
2025				}
2026				pec.Name = &name
2027			}
2028		case "type":
2029			if v != nil {
2030				var typeVar string
2031				err = json.Unmarshal(*v, &typeVar)
2032				if err != nil {
2033					return err
2034				}
2035				pec.Type = &typeVar
2036			}
2037		case "properties":
2038			if v != nil {
2039				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
2040				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
2041				if err != nil {
2042					return err
2043				}
2044				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
2045			}
2046		}
2047	}
2048
2049	return nil
2050}
2051
2052// PrivateEndpointConnectionListResult a list of private endpoint connections
2053type PrivateEndpointConnectionListResult struct {
2054	autorest.Response `json:"-"`
2055	// Value - The collection value.
2056	Value *[]PrivateEndpointConnection `json:"value,omitempty"`
2057}
2058
2059// PrivateEndpointConnectionProperties properties of a private endpoint connection.
2060type PrivateEndpointConnectionProperties struct {
2061	// ProvisioningState - READ-ONLY; The current provisioning state. Possible values include: 'PrivateEndpointConnectionProvisioningStateSucceeded', 'PrivateEndpointConnectionProvisioningStateCreating', 'PrivateEndpointConnectionProvisioningStateDeleting', 'PrivateEndpointConnectionProvisioningStateFailed'
2062	ProvisioningState PrivateEndpointConnectionProvisioningState `json:"provisioningState,omitempty"`
2063	// PrivateEndpoint - The resource of private endpoint.
2064	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
2065	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
2066	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
2067}
2068
2069// MarshalJSON is the custom marshaler for PrivateEndpointConnectionProperties.
2070func (pecp PrivateEndpointConnectionProperties) MarshalJSON() ([]byte, error) {
2071	objectMap := make(map[string]interface{})
2072	if pecp.PrivateEndpoint != nil {
2073		objectMap["privateEndpoint"] = pecp.PrivateEndpoint
2074	}
2075	if pecp.PrivateLinkServiceConnectionState != nil {
2076		objectMap["privateLinkServiceConnectionState"] = pecp.PrivateLinkServiceConnectionState
2077	}
2078	return json.Marshal(objectMap)
2079}
2080
2081// PrivateEndpointConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
2082// long-running operation.
2083type PrivateEndpointConnectionsDeleteFuture struct {
2084	azure.FutureAPI
2085	// Result returns the result of the asynchronous operation.
2086	// If the operation has not completed it will return an error.
2087	Result func(PrivateEndpointConnectionsClient) (autorest.Response, error)
2088}
2089
2090// PrivateLinkResource a private link resource
2091type PrivateLinkResource struct {
2092	autorest.Response `json:"-"`
2093	// ID - The ID of the private link resource.
2094	ID *string `json:"id,omitempty"`
2095	// Name - The name of the private link resource.
2096	Name *string `json:"name,omitempty"`
2097	// Type - The resource type.
2098	Type *string `json:"type,omitempty"`
2099	// GroupID - The group ID of the resource.
2100	GroupID *string `json:"groupId,omitempty"`
2101	// RequiredMembers - RequiredMembers of the resource
2102	RequiredMembers *[]string `json:"requiredMembers,omitempty"`
2103	// PrivateLinkServiceID - READ-ONLY; The private link service ID of the resource, this field is exposed only to NRP internally.
2104	PrivateLinkServiceID *string `json:"privateLinkServiceID,omitempty"`
2105}
2106
2107// MarshalJSON is the custom marshaler for PrivateLinkResource.
2108func (plr PrivateLinkResource) MarshalJSON() ([]byte, error) {
2109	objectMap := make(map[string]interface{})
2110	if plr.ID != nil {
2111		objectMap["id"] = plr.ID
2112	}
2113	if plr.Name != nil {
2114		objectMap["name"] = plr.Name
2115	}
2116	if plr.Type != nil {
2117		objectMap["type"] = plr.Type
2118	}
2119	if plr.GroupID != nil {
2120		objectMap["groupId"] = plr.GroupID
2121	}
2122	if plr.RequiredMembers != nil {
2123		objectMap["requiredMembers"] = plr.RequiredMembers
2124	}
2125	return json.Marshal(objectMap)
2126}
2127
2128// PrivateLinkResourcesListResult a list of private link resources
2129type PrivateLinkResourcesListResult struct {
2130	autorest.Response `json:"-"`
2131	// Value - The collection value.
2132	Value *[]PrivateLinkResource `json:"value,omitempty"`
2133}
2134
2135// PrivateLinkServiceConnectionState the state of a private link service connection.
2136type PrivateLinkServiceConnectionState struct {
2137	// Status - The private link service connection status. Possible values include: 'Pending', 'Approved', 'Rejected', 'Disconnected'
2138	Status ConnectionStatus `json:"status,omitempty"`
2139	// Description - The private link service connection description.
2140	Description *string `json:"description,omitempty"`
2141}
2142
2143// Resource the Resource model definition.
2144type Resource struct {
2145	// ID - READ-ONLY; Resource Id
2146	ID *string `json:"id,omitempty"`
2147	// Name - READ-ONLY; Resource name
2148	Name *string `json:"name,omitempty"`
2149	// Type - READ-ONLY; Resource type
2150	Type *string `json:"type,omitempty"`
2151	// Location - Resource location
2152	Location *string `json:"location,omitempty"`
2153	// Tags - Resource tags
2154	Tags map[string]*string `json:"tags"`
2155}
2156
2157// MarshalJSON is the custom marshaler for Resource.
2158func (r Resource) MarshalJSON() ([]byte, error) {
2159	objectMap := make(map[string]interface{})
2160	if r.Location != nil {
2161		objectMap["location"] = r.Location
2162	}
2163	if r.Tags != nil {
2164		objectMap["tags"] = r.Tags
2165	}
2166	return json.Marshal(objectMap)
2167}
2168
2169// ResourceReference a reference to an Azure resource.
2170type ResourceReference struct {
2171	// ID - The fully qualified Azure resource id.
2172	ID *string `json:"id,omitempty"`
2173}
2174
2175// SSHConfiguration SSH configuration for Linux-based VMs running on Azure.
2176type SSHConfiguration struct {
2177	// PublicKeys - The list of SSH public keys used to authenticate with Linux-based VMs. Only expect one key specified.
2178	PublicKeys *[]SSHPublicKey `json:"publicKeys,omitempty"`
2179}
2180
2181// SSHPublicKey contains information about SSH certificate public key data.
2182type SSHPublicKey struct {
2183	// KeyData - Certificate public key used to authenticate with VMs through SSH. The certificate must be in PEM format with or without headers.
2184	KeyData *string `json:"keyData,omitempty"`
2185}
2186
2187// SubResource reference to another subresource.
2188type SubResource struct {
2189	// ID - READ-ONLY; Resource ID.
2190	ID *string `json:"id,omitempty"`
2191	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
2192	Name *string `json:"name,omitempty"`
2193	// Type - READ-ONLY; Resource type
2194	Type *string `json:"type,omitempty"`
2195}
2196
2197// SysctlConfig sysctl settings for Linux agent nodes.
2198type SysctlConfig struct {
2199	// NetCoreSomaxconn - Sysctl setting net.core.somaxconn.
2200	NetCoreSomaxconn *int32 `json:"netCoreSomaxconn,omitempty"`
2201	// NetCoreNetdevMaxBacklog - Sysctl setting net.core.netdev_max_backlog.
2202	NetCoreNetdevMaxBacklog *int32 `json:"netCoreNetdevMaxBacklog,omitempty"`
2203	// NetCoreRmemMax - Sysctl setting net.core.rmem_max.
2204	NetCoreRmemMax *int32 `json:"netCoreRmemMax,omitempty"`
2205	// NetCoreWmemMax - Sysctl setting net.core.wmem_max.
2206	NetCoreWmemMax *int32 `json:"netCoreWmemMax,omitempty"`
2207	// NetCoreOptmemMax - Sysctl setting net.core.optmem_max.
2208	NetCoreOptmemMax *int32 `json:"netCoreOptmemMax,omitempty"`
2209	// NetIpv4TCPMaxSynBacklog - Sysctl setting net.ipv4.tcp_max_syn_backlog.
2210	NetIpv4TCPMaxSynBacklog *int32 `json:"netIpv4TcpMaxSynBacklog,omitempty"`
2211	// NetIpv4TCPMaxTwBuckets - Sysctl setting net.ipv4.tcp_max_tw_buckets.
2212	NetIpv4TCPMaxTwBuckets *int32 `json:"netIpv4TcpMaxTwBuckets,omitempty"`
2213	// NetIpv4TCPFinTimeout - Sysctl setting net.ipv4.tcp_fin_timeout.
2214	NetIpv4TCPFinTimeout *int32 `json:"netIpv4TcpFinTimeout,omitempty"`
2215	// NetIpv4TCPKeepaliveTime - Sysctl setting net.ipv4.tcp_keepalive_time.
2216	NetIpv4TCPKeepaliveTime *int32 `json:"netIpv4TcpKeepaliveTime,omitempty"`
2217	// NetIpv4TCPKeepaliveProbes - Sysctl setting net.ipv4.tcp_keepalive_probes.
2218	NetIpv4TCPKeepaliveProbes *int32 `json:"netIpv4TcpKeepaliveProbes,omitempty"`
2219	// NetIpv4TcpkeepaliveIntvl - Sysctl setting net.ipv4.tcp_keepalive_intvl.
2220	NetIpv4TcpkeepaliveIntvl *int32 `json:"netIpv4TcpkeepaliveIntvl,omitempty"`
2221	// NetIpv4TCPRmem - Sysctl setting net.ipv4.tcp_rmem.
2222	NetIpv4TCPRmem *int32 `json:"netIpv4TcpRmem,omitempty"`
2223	// NetIpv4TCPWmem - Sysctl setting net.ipv4.tcp_wmem.
2224	NetIpv4TCPWmem *int32 `json:"netIpv4TcpWmem,omitempty"`
2225	// NetIpv4TCPTwReuse - Sysctl setting net.ipv4.tcp_tw_reuse.
2226	NetIpv4TCPTwReuse *bool `json:"netIpv4TcpTwReuse,omitempty"`
2227	// NetIpv4IPLocalPortRange - Sysctl setting net.ipv4.ip_local_port_range.
2228	NetIpv4IPLocalPortRange *string `json:"netIpv4IpLocalPortRange,omitempty"`
2229	// NetIpv4NeighDefaultGcThresh1 - Sysctl setting net.ipv4.neigh.default.gc_thresh1.
2230	NetIpv4NeighDefaultGcThresh1 *int32 `json:"netIpv4NeighDefaultGcThresh1,omitempty"`
2231	// NetIpv4NeighDefaultGcThresh2 - Sysctl setting net.ipv4.neigh.default.gc_thresh2.
2232	NetIpv4NeighDefaultGcThresh2 *int32 `json:"netIpv4NeighDefaultGcThresh2,omitempty"`
2233	// NetIpv4NeighDefaultGcThresh3 - Sysctl setting net.ipv4.neigh.default.gc_thresh3.
2234	NetIpv4NeighDefaultGcThresh3 *int32 `json:"netIpv4NeighDefaultGcThresh3,omitempty"`
2235	// NetNetfilterNfConntrackMax - Sysctl setting net.netfilter.nf_conntrack_max.
2236	NetNetfilterNfConntrackMax *int32 `json:"netNetfilterNfConntrackMax,omitempty"`
2237	// NetNetfilterNfConntrackBuckets - Sysctl setting net.netfilter.nf_conntrack_buckets.
2238	NetNetfilterNfConntrackBuckets *int32 `json:"netNetfilterNfConntrackBuckets,omitempty"`
2239	// FsInotifyMaxUserWatches - Sysctl setting fs.inotify.max_user_watches.
2240	FsInotifyMaxUserWatches *int32 `json:"fsInotifyMaxUserWatches,omitempty"`
2241	// FsFileMax - Sysctl setting fs.file-max.
2242	FsFileMax *int32 `json:"fsFileMax,omitempty"`
2243	// FsAioMaxNr - Sysctl setting fs.aio-max-nr.
2244	FsAioMaxNr *int32 `json:"fsAioMaxNr,omitempty"`
2245	// FsNrOpen - Sysctl setting fs.nr_open.
2246	FsNrOpen *int32 `json:"fsNrOpen,omitempty"`
2247	// KernelThreadsMax - Sysctl setting kernel.threads-max.
2248	KernelThreadsMax *int32 `json:"kernelThreadsMax,omitempty"`
2249	// VMMaxMapCount - Sysctl setting vm.max_map_count.
2250	VMMaxMapCount *int32 `json:"vmMaxMapCount,omitempty"`
2251	// VMSwappiness - Sysctl setting vm.swappiness.
2252	VMSwappiness *int32 `json:"vmSwappiness,omitempty"`
2253	// VMVfsCachePressure - Sysctl setting vm.vfs_cache_pressure.
2254	VMVfsCachePressure *int32 `json:"vmVfsCachePressure,omitempty"`
2255}
2256
2257// TagsObject tags object for patch operations.
2258type TagsObject struct {
2259	// Tags - Resource tags.
2260	Tags map[string]*string `json:"tags"`
2261}
2262
2263// MarshalJSON is the custom marshaler for TagsObject.
2264func (toVar TagsObject) MarshalJSON() ([]byte, error) {
2265	objectMap := make(map[string]interface{})
2266	if toVar.Tags != nil {
2267		objectMap["tags"] = toVar.Tags
2268	}
2269	return json.Marshal(objectMap)
2270}
2271
2272// UserAssignedIdentity ...
2273type UserAssignedIdentity struct {
2274	// ResourceID - The resource id of the user assigned identity.
2275	ResourceID *string `json:"resourceId,omitempty"`
2276	// ClientID - The client id of the user assigned identity.
2277	ClientID *string `json:"clientId,omitempty"`
2278	// ObjectID - The object id of the user assigned identity.
2279	ObjectID *string `json:"objectId,omitempty"`
2280}
2281
2282// VMDiagnostics profile for diagnostics on the container service VMs.
2283type VMDiagnostics struct {
2284	// Enabled - Whether the VM diagnostic agent is provisioned on the VM.
2285	Enabled *bool `json:"enabled,omitempty"`
2286	// StorageURI - READ-ONLY; The URI of the storage account where diagnostics are stored.
2287	StorageURI *string `json:"storageUri,omitempty"`
2288}
2289
2290// MarshalJSON is the custom marshaler for VMDiagnostics.
2291func (vd VMDiagnostics) MarshalJSON() ([]byte, error) {
2292	objectMap := make(map[string]interface{})
2293	if vd.Enabled != nil {
2294		objectMap["enabled"] = vd.Enabled
2295	}
2296	return json.Marshal(objectMap)
2297}
2298