// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import "github.com/Azure/azure-service-operator/v2/pkg/genruntime"

type ManagedCluster_Spec struct {
	ExtendedLocation *ExtendedLocation         `json:"extendedLocation,omitempty"`
	Identity         *ManagedClusterIdentity   `json:"identity,omitempty"`
	Location         *string                   `json:"location,omitempty"`
	Name             string                    `json:"name,omitempty"`
	Properties       *ManagedClusterProperties `json:"properties,omitempty"`
	Sku              *ManagedClusterSKU        `json:"sku,omitempty"`
	Tags             map[string]string         `json:"tags" serializationType:"explicitEmptyCollection"`
}

var _ genruntime.ARMResourceSpec = &ManagedCluster_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2023-11-02-preview"
func (cluster ManagedCluster_Spec) GetAPIVersion() string {
	return "2023-11-02-preview"
}

// GetName returns the Name of the resource
func (cluster *ManagedCluster_Spec) GetName() string {
	return cluster.Name
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.ContainerService/managedClusters"
func (cluster *ManagedCluster_Spec) GetType() string {
	return "Microsoft.ContainerService/managedClusters"
}

type ExtendedLocation struct {
	Name *string               `json:"name,omitempty"`
	Type *ExtendedLocationType `json:"type,omitempty"`
}

type ManagedClusterIdentity struct {
	DelegatedResources     map[string]DelegatedResource           `json:"delegatedResources"`
	Type                   *ManagedClusterIdentity_Type           `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

type ManagedClusterProperties struct {
	AadProfile                 *ManagedClusterAADProfile                     `json:"aadProfile,omitempty"`
	AddonProfiles              map[string]ManagedClusterAddonProfile         `json:"addonProfiles"`
	AgentPoolProfiles          []ManagedClusterAgentPoolProfile              `json:"agentPoolProfiles"`
	AiToolchainOperatorProfile *ManagedClusterAIToolchainOperatorProfile     `json:"aiToolchainOperatorProfile,omitempty"`
	ApiServerAccessProfile     *ManagedClusterAPIServerAccessProfile         `json:"apiServerAccessProfile,omitempty"`
	AutoScalerProfile          *ManagedClusterProperties_AutoScalerProfile   `json:"autoScalerProfile,omitempty"`
	AutoUpgradeProfile         *ManagedClusterAutoUpgradeProfile             `json:"autoUpgradeProfile,omitempty"`
	AzureMonitorProfile        *ManagedClusterAzureMonitorProfile            `json:"azureMonitorProfile,omitempty"`
	CreationData               *CreationData                                 `json:"creationData,omitempty"`
	DisableLocalAccounts       *bool                                         `json:"disableLocalAccounts,omitempty"`
	DiskEncryptionSetID        *string                                       `json:"diskEncryptionSetID,omitempty"`
	DnsPrefix                  *string                                       `json:"dnsPrefix,omitempty"`
	EnableNamespaceResources   *bool                                         `json:"enableNamespaceResources,omitempty"`
	EnablePodSecurityPolicy    *bool                                         `json:"enablePodSecurityPolicy,omitempty"`
	EnableRBAC                 *bool                                         `json:"enableRBAC,omitempty"`
	FqdnSubdomain              *string                                       `json:"fqdnSubdomain,omitempty"`
	HttpProxyConfig            *ManagedClusterHTTPProxyConfig                `json:"httpProxyConfig,omitempty"`
	IdentityProfile            map[string]UserAssignedIdentity               `json:"identityProfile"`
	IngressProfile             *ManagedClusterIngressProfile                 `json:"ingressProfile,omitempty"`
	KubernetesVersion          *string                                       `json:"kubernetesVersion,omitempty"`
	LinuxProfile               *ContainerServiceLinuxProfile                 `json:"linuxProfile,omitempty"`
	MetricsProfile             *ManagedClusterMetricsProfile                 `json:"metricsProfile,omitempty"`
	NetworkProfile             *ContainerServiceNetworkProfile               `json:"networkProfile,omitempty"`
	NodeProvisioningProfile    *ManagedClusterNodeProvisioningProfile        `json:"nodeProvisioningProfile,omitempty"`
	NodeResourceGroup          *string                                       `json:"nodeResourceGroup,omitempty"`
	NodeResourceGroupProfile   *ManagedClusterNodeResourceGroupProfile       `json:"nodeResourceGroupProfile,omitempty"`
	OidcIssuerProfile          *ManagedClusterOIDCIssuerProfile              `json:"oidcIssuerProfile,omitempty"`
	PodIdentityProfile         *ManagedClusterPodIdentityProfile             `json:"podIdentityProfile,omitempty"`
	PrivateLinkResources       []PrivateLinkResource                         `json:"privateLinkResources"`
	PublicNetworkAccess        *ManagedClusterProperties_PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`
	SafeguardsProfile          *SafeguardsProfile                            `json:"safeguardsProfile,omitempty"`
	SecurityProfile            *ManagedClusterSecurityProfile                `json:"securityProfile,omitempty"`
	ServiceMeshProfile         *ServiceMeshProfile                           `json:"serviceMeshProfile,omitempty"`
	ServicePrincipalProfile    *ManagedClusterServicePrincipalProfile        `json:"servicePrincipalProfile,omitempty"`
	StorageProfile             *ManagedClusterStorageProfile                 `json:"storageProfile,omitempty"`
	SupportPlan                *KubernetesSupportPlan                        `json:"supportPlan,omitempty"`
	UpgradeSettings            *ClusterUpgradeSettings                       `json:"upgradeSettings,omitempty"`
	WindowsProfile             *ManagedClusterWindowsProfile                 `json:"windowsProfile,omitempty"`
	WorkloadAutoScalerProfile  *ManagedClusterWorkloadAutoScalerProfile      `json:"workloadAutoScalerProfile,omitempty"`
}

type ManagedClusterSKU struct {
	Name *ManagedClusterSKU_Name `json:"name,omitempty"`
	Tier *ManagedClusterSKU_Tier `json:"tier,omitempty"`
}

type ClusterUpgradeSettings struct {
	OverrideSettings *UpgradeOverrideSettings `json:"overrideSettings,omitempty"`
}

type ContainerServiceLinuxProfile struct {
	AdminUsername *string                           `json:"adminUsername,omitempty"`
	Ssh           *ContainerServiceSshConfiguration `json:"ssh,omitempty"`
}

type ContainerServiceNetworkProfile struct {
	DnsServiceIP        *string                                         `json:"dnsServiceIP,omitempty"`
	IpFamilies          []IpFamily                                      `json:"ipFamilies"`
	KubeProxyConfig     *ContainerServiceNetworkProfile_KubeProxyConfig `json:"kubeProxyConfig,omitempty"`
	LoadBalancerProfile *ManagedClusterLoadBalancerProfile              `json:"loadBalancerProfile,omitempty"`
	LoadBalancerSku     *LoadBalancerSku                                `json:"loadBalancerSku,omitempty"`
	Monitoring          *NetworkMonitoring                              `json:"monitoring,omitempty"`
	NatGatewayProfile   *ManagedClusterNATGatewayProfile                `json:"natGatewayProfile,omitempty"`
	NetworkDataplane    *NetworkDataplane                               `json:"networkDataplane,omitempty"`
	NetworkMode         *NetworkMode                                    `json:"networkMode,omitempty"`
	NetworkPlugin       *NetworkPlugin                                  `json:"networkPlugin,omitempty"`
	NetworkPluginMode   *NetworkPluginMode                              `json:"networkPluginMode,omitempty"`
	NetworkPolicy       *NetworkPolicy                                  `json:"networkPolicy,omitempty"`
	OutboundType        *ContainerServiceNetworkProfile_OutboundType    `json:"outboundType,omitempty"`
	PodCidr             *string                                         `json:"podCidr,omitempty"`
	PodCidrs            []string                                        `json:"podCidrs"`
	ServiceCidr         *string                                         `json:"serviceCidr,omitempty"`
	ServiceCidrs        []string                                        `json:"serviceCidrs"`
}

type CreationData struct {
	SourceResourceId *string `json:"sourceResourceId,omitempty"`
}

type DelegatedResource struct {
	Location         *string `json:"location,omitempty"`
	ReferralResource *string `json:"referralResource,omitempty"`
	ResourceId       *string `json:"resourceId,omitempty"`
	TenantId         *string `json:"tenantId,omitempty"`
}

// +kubebuilder:validation:Enum={"EdgeZone"}
type ExtendedLocationType string

const ExtendedLocationType_EdgeZone = ExtendedLocationType("EdgeZone")

// Mapping from string to ExtendedLocationType
var extendedLocationType_Values = map[string]ExtendedLocationType{
	"edgezone": ExtendedLocationType_EdgeZone,
}

// +kubebuilder:validation:Enum={"AKSLongTermSupport","KubernetesOfficial"}
type KubernetesSupportPlan string

const (
	KubernetesSupportPlan_AKSLongTermSupport = KubernetesSupportPlan("AKSLongTermSupport")
	KubernetesSupportPlan_KubernetesOfficial = KubernetesSupportPlan("KubernetesOfficial")
)

// Mapping from string to KubernetesSupportPlan
var kubernetesSupportPlan_Values = map[string]KubernetesSupportPlan{
	"akslongtermsupport": KubernetesSupportPlan_AKSLongTermSupport,
	"kubernetesofficial": KubernetesSupportPlan_KubernetesOfficial,
}

type ManagedClusterAADProfile struct {
	AdminGroupObjectIDs []string `json:"adminGroupObjectIDs"`
	ClientAppID         *string  `json:"clientAppID,omitempty"`
	EnableAzureRBAC     *bool    `json:"enableAzureRBAC,omitempty"`
	Managed             *bool    `json:"managed,omitempty"`
	ServerAppID         *string  `json:"serverAppID,omitempty"`
	ServerAppSecret     *string  `json:"serverAppSecret,omitempty"`
	TenantID            *string  `json:"tenantID,omitempty"`
}

type ManagedClusterAddonProfile struct {
	Config  map[string]string `json:"config"`
	Enabled *bool             `json:"enabled,omitempty"`
}

type ManagedClusterAgentPoolProfile struct {
	ArtifactStreamingProfile   *AgentPoolArtifactStreamingProfile `json:"artifactStreamingProfile,omitempty"`
	AvailabilityZones          []string                           `json:"availabilityZones"`
	CapacityReservationGroupID *string                            `json:"capacityReservationGroupID,omitempty"`
	Count                      *int                               `json:"count,omitempty"`
	CreationData               *CreationData                      `json:"creationData,omitempty"`
	EnableAutoScaling          *bool                              `json:"enableAutoScaling,omitempty"`
	EnableCustomCATrust        *bool                              `json:"enableCustomCATrust,omitempty"`
	EnableEncryptionAtHost     *bool                              `json:"enableEncryptionAtHost,omitempty"`
	EnableFIPS                 *bool                              `json:"enableFIPS,omitempty"`
	EnableNodePublicIP         *bool                              `json:"enableNodePublicIP,omitempty"`
	EnableUltraSSD             *bool                              `json:"enableUltraSSD,omitempty"`
	GpuInstanceProfile         *GPUInstanceProfile                `json:"gpuInstanceProfile,omitempty"`
	GpuProfile                 *AgentPoolGPUProfile               `json:"gpuProfile,omitempty"`
	HostGroupID                *string                            `json:"hostGroupID,omitempty"`
	KubeletConfig              *KubeletConfig                     `json:"kubeletConfig,omitempty"`
	KubeletDiskType            *KubeletDiskType                   `json:"kubeletDiskType,omitempty"`
	LinuxOSConfig              *LinuxOSConfig                     `json:"linuxOSConfig,omitempty"`
	MaxCount                   *int                               `json:"maxCount,omitempty"`
	MaxPods                    *int                               `json:"maxPods,omitempty"`
	MessageOfTheDay            *string                            `json:"messageOfTheDay,omitempty"`
	MinCount                   *int                               `json:"minCount,omitempty"`
	Mode                       *AgentPoolMode                     `json:"mode,omitempty"`
	Name                       *string                            `json:"name,omitempty"`
	NetworkProfile             *AgentPoolNetworkProfile           `json:"networkProfile,omitempty"`
	NodeInitializationTaints   []string                           `json:"nodeInitializationTaints"`
	NodeLabels                 map[string]string                  `json:"nodeLabels" serializationType:"explicitEmptyCollection"`
	NodePublicIPPrefixID       *string                            `json:"nodePublicIPPrefixID,omitempty"`
	NodeTaints                 []string                           `json:"nodeTaints" serializationType:"explicitEmptyCollection"`
	OrchestratorVersion        *string                            `json:"orchestratorVersion,omitempty"`
	OsDiskSizeGB               *int                               `json:"osDiskSizeGB,omitempty"`
	OsDiskType                 *OSDiskType                        `json:"osDiskType,omitempty"`
	OsSKU                      *OSSKU                             `json:"osSKU,omitempty"`
	OsType                     *OSType                            `json:"osType,omitempty"`
	PodSubnetID                *string                            `json:"podSubnetID,omitempty"`
	PowerState                 *PowerState                        `json:"powerState,omitempty"`
	ProximityPlacementGroupID  *string                            `json:"proximityPlacementGroupID,omitempty"`
	ScaleDownMode              *ScaleDownMode                     `json:"scaleDownMode,omitempty"`
	ScaleSetEvictionPolicy     *ScaleSetEvictionPolicy            `json:"scaleSetEvictionPolicy,omitempty"`
	ScaleSetPriority           *ScaleSetPriority                  `json:"scaleSetPriority,omitempty"`
	SecurityProfile            *AgentPoolSecurityProfile          `json:"securityProfile,omitempty"`
	SpotMaxPrice               *float64                           `json:"spotMaxPrice,omitempty"`
	Tags                       map[string]string                  `json:"tags" serializationType:"explicitEmptyCollection"`
	Type                       *AgentPoolType                     `json:"type,omitempty"`
	UpgradeSettings            *AgentPoolUpgradeSettings          `json:"upgradeSettings,omitempty"`
	VirtualMachineNodesStatus  []VirtualMachineNodes              `json:"virtualMachineNodesStatus"`
	VirtualMachinesProfile     *VirtualMachinesProfile            `json:"virtualMachinesProfile,omitempty"`
	VmSize                     *string                            `json:"vmSize,omitempty"`
	VnetSubnetID               *string                            `json:"vnetSubnetID,omitempty"`
	WindowsProfile             *AgentPoolWindowsProfile           `json:"windowsProfile,omitempty"`
	WorkloadRuntime            *WorkloadRuntime                   `json:"workloadRuntime,omitempty"`
}

type ManagedClusterAIToolchainOperatorProfile struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterAPIServerAccessProfile struct {
	AuthorizedIPRanges             []string `json:"authorizedIPRanges"`
	DisableRunCommand              *bool    `json:"disableRunCommand,omitempty"`
	EnablePrivateCluster           *bool    `json:"enablePrivateCluster,omitempty"`
	EnablePrivateClusterPublicFQDN *bool    `json:"enablePrivateClusterPublicFQDN,omitempty"`
	EnableVnetIntegration          *bool    `json:"enableVnetIntegration,omitempty"`
	PrivateDNSZone                 *string  `json:"privateDNSZone,omitempty"`
	SubnetId                       *string  `json:"subnetId,omitempty"`
}

type ManagedClusterAutoUpgradeProfile struct {
	NodeOSUpgradeChannel *ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel `json:"nodeOSUpgradeChannel,omitempty"`
	UpgradeChannel       *ManagedClusterAutoUpgradeProfile_UpgradeChannel       `json:"upgradeChannel,omitempty"`
}

type ManagedClusterAzureMonitorProfile struct {
	Logs    *ManagedClusterAzureMonitorProfileLogs    `json:"logs,omitempty"`
	Metrics *ManagedClusterAzureMonitorProfileMetrics `json:"metrics,omitempty"`
}

type ManagedClusterHTTPProxyConfig struct {
	HttpProxy  *string  `json:"httpProxy,omitempty"`
	HttpsProxy *string  `json:"httpsProxy,omitempty"`
	NoProxy    []string `json:"noProxy"`
	TrustedCa  *string  `json:"trustedCa,omitempty"`
}

// +kubebuilder:validation:Enum={"None","SystemAssigned","UserAssigned"}
type ManagedClusterIdentity_Type string

const (
	ManagedClusterIdentity_Type_None           = ManagedClusterIdentity_Type("None")
	ManagedClusterIdentity_Type_SystemAssigned = ManagedClusterIdentity_Type("SystemAssigned")
	ManagedClusterIdentity_Type_UserAssigned   = ManagedClusterIdentity_Type("UserAssigned")
)

// Mapping from string to ManagedClusterIdentity_Type
var managedClusterIdentity_Type_Values = map[string]ManagedClusterIdentity_Type{
	"none":           ManagedClusterIdentity_Type_None,
	"systemassigned": ManagedClusterIdentity_Type_SystemAssigned,
	"userassigned":   ManagedClusterIdentity_Type_UserAssigned,
}

type ManagedClusterIngressProfile struct {
	WebAppRouting *ManagedClusterIngressProfileWebAppRouting `json:"webAppRouting,omitempty"`
}

type ManagedClusterMetricsProfile struct {
	CostAnalysis *ManagedClusterCostAnalysis `json:"costAnalysis,omitempty"`
}

type ManagedClusterNodeProvisioningProfile struct {
	Mode *ManagedClusterNodeProvisioningProfile_Mode `json:"mode,omitempty"`
}

type ManagedClusterNodeResourceGroupProfile struct {
	RestrictionLevel *ManagedClusterNodeResourceGroupProfile_RestrictionLevel `json:"restrictionLevel,omitempty"`
}

type ManagedClusterOIDCIssuerProfile struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterPodIdentityProfile struct {
	AllowNetworkPluginKubenet      *bool                                `json:"allowNetworkPluginKubenet,omitempty"`
	Enabled                        *bool                                `json:"enabled,omitempty"`
	UserAssignedIdentities         []ManagedClusterPodIdentity          `json:"userAssignedIdentities"`
	UserAssignedIdentityExceptions []ManagedClusterPodIdentityException `json:"userAssignedIdentityExceptions"`
}

type ManagedClusterProperties_AutoScalerProfile struct {
	BalanceSimilarNodeGroups          *string   `json:"balance-similar-node-groups,omitempty"`
	DaemonsetEvictionForEmptyNodes    *bool     `json:"daemonset-eviction-for-empty-nodes,omitempty"`
	DaemonsetEvictionForOccupiedNodes *bool     `json:"daemonset-eviction-for-occupied-nodes,omitempty"`
	Expander                          *Expander `json:"expander,omitempty"`
	IgnoreDaemonsetsUtilization       *bool     `json:"ignore-daemonsets-utilization,omitempty"`
	MaxEmptyBulkDelete                *string   `json:"max-empty-bulk-delete,omitempty"`
	MaxGracefulTerminationSec         *string   `json:"max-graceful-termination-sec,omitempty"`
	MaxNodeProvisionTime              *string   `json:"max-node-provision-time,omitempty"`
	MaxTotalUnreadyPercentage         *string   `json:"max-total-unready-percentage,omitempty"`
	NewPodScaleUpDelay                *string   `json:"new-pod-scale-up-delay,omitempty"`
	OkTotalUnreadyCount               *string   `json:"ok-total-unready-count,omitempty"`
	ScaleDownDelayAfterAdd            *string   `json:"scale-down-delay-after-add,omitempty"`
	ScaleDownDelayAfterDelete         *string   `json:"scale-down-delay-after-delete,omitempty"`
	ScaleDownDelayAfterFailure        *string   `json:"scale-down-delay-after-failure,omitempty"`
	ScaleDownUnneededTime             *string   `json:"scale-down-unneeded-time,omitempty"`
	ScaleDownUnreadyTime              *string   `json:"scale-down-unready-time,omitempty"`
	ScaleDownUtilizationThreshold     *string   `json:"scale-down-utilization-threshold,omitempty"`
	ScanInterval                      *string   `json:"scan-interval,omitempty"`
	SkipNodesWithLocalStorage         *string   `json:"skip-nodes-with-local-storage,omitempty"`
	SkipNodesWithSystemPods           *string   `json:"skip-nodes-with-system-pods,omitempty"`
}

// +kubebuilder:validation:Enum={"Disabled","Enabled","SecuredByPerimeter"}
type ManagedClusterProperties_PublicNetworkAccess string

const (
	ManagedClusterProperties_PublicNetworkAccess_Disabled           = ManagedClusterProperties_PublicNetworkAccess("Disabled")
	ManagedClusterProperties_PublicNetworkAccess_Enabled            = ManagedClusterProperties_PublicNetworkAccess("Enabled")
	ManagedClusterProperties_PublicNetworkAccess_SecuredByPerimeter = ManagedClusterProperties_PublicNetworkAccess("SecuredByPerimeter")
)

// Mapping from string to ManagedClusterProperties_PublicNetworkAccess
var managedClusterProperties_PublicNetworkAccess_Values = map[string]ManagedClusterProperties_PublicNetworkAccess{
	"disabled":           ManagedClusterProperties_PublicNetworkAccess_Disabled,
	"enabled":            ManagedClusterProperties_PublicNetworkAccess_Enabled,
	"securedbyperimeter": ManagedClusterProperties_PublicNetworkAccess_SecuredByPerimeter,
}

type ManagedClusterSecurityProfile struct {
	AzureKeyVaultKms          *AzureKeyVaultKms                              `json:"azureKeyVaultKms,omitempty"`
	CustomCATrustCertificates []string                                       `json:"customCATrustCertificates"`
	Defender                  *ManagedClusterSecurityProfileDefender         `json:"defender,omitempty"`
	ImageCleaner              *ManagedClusterSecurityProfileImageCleaner     `json:"imageCleaner,omitempty"`
	ImageIntegrity            *ManagedClusterSecurityProfileImageIntegrity   `json:"imageIntegrity,omitempty"`
	NodeRestriction           *ManagedClusterSecurityProfileNodeRestriction  `json:"nodeRestriction,omitempty"`
	WorkloadIdentity          *ManagedClusterSecurityProfileWorkloadIdentity `json:"workloadIdentity,omitempty"`
}

type ManagedClusterServicePrincipalProfile struct {
	ClientId *string `json:"clientId,omitempty"`
	Secret   *string `json:"secret,omitempty"`
}

// +kubebuilder:validation:Enum={"Base"}
type ManagedClusterSKU_Name string

const ManagedClusterSKU_Name_Base = ManagedClusterSKU_Name("Base")

// Mapping from string to ManagedClusterSKU_Name
var managedClusterSKU_Name_Values = map[string]ManagedClusterSKU_Name{
	"base": ManagedClusterSKU_Name_Base,
}

// +kubebuilder:validation:Enum={"Free","Premium","Standard"}
type ManagedClusterSKU_Tier string

const (
	ManagedClusterSKU_Tier_Free     = ManagedClusterSKU_Tier("Free")
	ManagedClusterSKU_Tier_Premium  = ManagedClusterSKU_Tier("Premium")
	ManagedClusterSKU_Tier_Standard = ManagedClusterSKU_Tier("Standard")
)

// Mapping from string to ManagedClusterSKU_Tier
var managedClusterSKU_Tier_Values = map[string]ManagedClusterSKU_Tier{
	"free":     ManagedClusterSKU_Tier_Free,
	"premium":  ManagedClusterSKU_Tier_Premium,
	"standard": ManagedClusterSKU_Tier_Standard,
}

type ManagedClusterStorageProfile struct {
	BlobCSIDriver      *ManagedClusterStorageProfileBlobCSIDriver      `json:"blobCSIDriver,omitempty"`
	DiskCSIDriver      *ManagedClusterStorageProfileDiskCSIDriver      `json:"diskCSIDriver,omitempty"`
	FileCSIDriver      *ManagedClusterStorageProfileFileCSIDriver      `json:"fileCSIDriver,omitempty"`
	SnapshotController *ManagedClusterStorageProfileSnapshotController `json:"snapshotController,omitempty"`
}

type ManagedClusterWindowsProfile struct {
	AdminPassword  *string                                   `json:"adminPassword,omitempty"`
	AdminUsername  *string                                   `json:"adminUsername,omitempty"`
	EnableCSIProxy *bool                                     `json:"enableCSIProxy,omitempty"`
	GmsaProfile    *WindowsGmsaProfile                       `json:"gmsaProfile,omitempty"`
	LicenseType    *ManagedClusterWindowsProfile_LicenseType `json:"licenseType,omitempty"`
}

type ManagedClusterWorkloadAutoScalerProfile struct {
	Keda                  *ManagedClusterWorkloadAutoScalerProfileKeda                  `json:"keda,omitempty"`
	VerticalPodAutoscaler *ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler `json:"verticalPodAutoscaler,omitempty"`
}

type PrivateLinkResource struct {
	GroupId         *string  `json:"groupId,omitempty"`
	Id              *string  `json:"id,omitempty"`
	Name            *string  `json:"name,omitempty"`
	RequiredMembers []string `json:"requiredMembers"`
	Type            *string  `json:"type,omitempty"`
}

type SafeguardsProfile struct {
	ExcludedNamespaces []string                 `json:"excludedNamespaces"`
	Level              *SafeguardsProfile_Level `json:"level,omitempty"`
	Version            *string                  `json:"version,omitempty"`
}

type ServiceMeshProfile struct {
	Istio *IstioServiceMesh        `json:"istio,omitempty"`
	Mode  *ServiceMeshProfile_Mode `json:"mode,omitempty"`
}

type UserAssignedIdentity struct {
	ClientId   *string `json:"clientId,omitempty" optionalConfigMapPair:"ClientId"`
	ObjectId   *string `json:"objectId,omitempty" optionalConfigMapPair:"ObjectId"`
	ResourceId *string `json:"resourceId,omitempty"`
}

// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
}

type AzureKeyVaultKms struct {
	Enabled               *bool                                   `json:"enabled,omitempty"`
	KeyId                 *string                                 `json:"keyId,omitempty"`
	KeyVaultNetworkAccess *AzureKeyVaultKms_KeyVaultNetworkAccess `json:"keyVaultNetworkAccess,omitempty"`
	KeyVaultResourceId    *string                                 `json:"keyVaultResourceId,omitempty"`
}

type ContainerServiceNetworkProfile_KubeProxyConfig struct {
	Enabled    *bool                                                      `json:"enabled,omitempty"`
	IpvsConfig *ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig `json:"ipvsConfig,omitempty"`
	Mode       *ContainerServiceNetworkProfile_KubeProxyConfig_Mode       `json:"mode,omitempty"`
}

// +kubebuilder:validation:Enum={"loadBalancer","managedNATGateway","userAssignedNATGateway","userDefinedRouting"}
type ContainerServiceNetworkProfile_OutboundType string

const (
	ContainerServiceNetworkProfile_OutboundType_LoadBalancer           = ContainerServiceNetworkProfile_OutboundType("loadBalancer")
	ContainerServiceNetworkProfile_OutboundType_ManagedNATGateway      = ContainerServiceNetworkProfile_OutboundType("managedNATGateway")
	ContainerServiceNetworkProfile_OutboundType_UserAssignedNATGateway = ContainerServiceNetworkProfile_OutboundType("userAssignedNATGateway")
	ContainerServiceNetworkProfile_OutboundType_UserDefinedRouting     = ContainerServiceNetworkProfile_OutboundType("userDefinedRouting")
)

// Mapping from string to ContainerServiceNetworkProfile_OutboundType
var containerServiceNetworkProfile_OutboundType_Values = map[string]ContainerServiceNetworkProfile_OutboundType{
	"loadbalancer":           ContainerServiceNetworkProfile_OutboundType_LoadBalancer,
	"managednatgateway":      ContainerServiceNetworkProfile_OutboundType_ManagedNATGateway,
	"userassignednatgateway": ContainerServiceNetworkProfile_OutboundType_UserAssignedNATGateway,
	"userdefinedrouting":     ContainerServiceNetworkProfile_OutboundType_UserDefinedRouting,
}

type ContainerServiceSshConfiguration struct {
	PublicKeys []ContainerServiceSshPublicKey `json:"publicKeys"`
}

// +kubebuilder:validation:Enum={"least-waste","most-pods","priority","random"}
type Expander string

const (
	Expander_LeastWaste = Expander("least-waste")
	Expander_MostPods   = Expander("most-pods")
	Expander_Priority   = Expander("priority")
	Expander_Random     = Expander("random")
)

// Mapping from string to Expander
var expander_Values = map[string]Expander{
	"least-waste": Expander_LeastWaste,
	"most-pods":   Expander_MostPods,
	"priority":    Expander_Priority,
	"random":      Expander_Random,
}

// +kubebuilder:validation:Enum={"IPv4","IPv6"}
type IpFamily string

const (
	IpFamily_IPv4 = IpFamily("IPv4")
	IpFamily_IPv6 = IpFamily("IPv6")
)

// Mapping from string to IpFamily
var ipFamily_Values = map[string]IpFamily{
	"ipv4": IpFamily_IPv4,
	"ipv6": IpFamily_IPv6,
}

type IstioServiceMesh struct {
	CertificateAuthority *IstioCertificateAuthority `json:"certificateAuthority,omitempty"`
	Components           *IstioComponents           `json:"components,omitempty"`
	Revisions            []string                   `json:"revisions"`
}

// +kubebuilder:validation:Enum={"basic","standard"}
type LoadBalancerSku string

const (
	LoadBalancerSku_Basic    = LoadBalancerSku("basic")
	LoadBalancerSku_Standard = LoadBalancerSku("standard")
)

// Mapping from string to LoadBalancerSku
var loadBalancerSku_Values = map[string]LoadBalancerSku{
	"basic":    LoadBalancerSku_Basic,
	"standard": LoadBalancerSku_Standard,
}

// +kubebuilder:validation:Enum={"NodeImage","None","SecurityPatch","Unmanaged"}
type ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel string

const (
	ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_NodeImage     = ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel("NodeImage")
	ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_None          = ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel("None")
	ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_SecurityPatch = ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel("SecurityPatch")
	ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_Unmanaged     = ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel("Unmanaged")
)

// Mapping from string to ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel
var managedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_Values = map[string]ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel{
	"nodeimage":     ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_NodeImage,
	"none":          ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_None,
	"securitypatch": ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_SecurityPatch,
	"unmanaged":     ManagedClusterAutoUpgradeProfile_NodeOSUpgradeChannel_Unmanaged,
}

// +kubebuilder:validation:Enum={"node-image","none","patch","rapid","stable"}
type ManagedClusterAutoUpgradeProfile_UpgradeChannel string

const (
	ManagedClusterAutoUpgradeProfile_UpgradeChannel_NodeImage = ManagedClusterAutoUpgradeProfile_UpgradeChannel("node-image")
	ManagedClusterAutoUpgradeProfile_UpgradeChannel_None      = ManagedClusterAutoUpgradeProfile_UpgradeChannel("none")
	ManagedClusterAutoUpgradeProfile_UpgradeChannel_Patch     = ManagedClusterAutoUpgradeProfile_UpgradeChannel("patch")
	ManagedClusterAutoUpgradeProfile_UpgradeChannel_Rapid     = ManagedClusterAutoUpgradeProfile_UpgradeChannel("rapid")
	ManagedClusterAutoUpgradeProfile_UpgradeChannel_Stable    = ManagedClusterAutoUpgradeProfile_UpgradeChannel("stable")
)

// Mapping from string to ManagedClusterAutoUpgradeProfile_UpgradeChannel
var managedClusterAutoUpgradeProfile_UpgradeChannel_Values = map[string]ManagedClusterAutoUpgradeProfile_UpgradeChannel{
	"node-image": ManagedClusterAutoUpgradeProfile_UpgradeChannel_NodeImage,
	"none":       ManagedClusterAutoUpgradeProfile_UpgradeChannel_None,
	"patch":      ManagedClusterAutoUpgradeProfile_UpgradeChannel_Patch,
	"rapid":      ManagedClusterAutoUpgradeProfile_UpgradeChannel_Rapid,
	"stable":     ManagedClusterAutoUpgradeProfile_UpgradeChannel_Stable,
}

type ManagedClusterAzureMonitorProfileLogs struct {
	AppMonitoring     *ManagedClusterAzureMonitorProfileAppMonitoring     `json:"appMonitoring,omitempty"`
	ContainerInsights *ManagedClusterAzureMonitorProfileContainerInsights `json:"containerInsights,omitempty"`
}

type ManagedClusterAzureMonitorProfileMetrics struct {
	AppMonitoringOpenTelemetryMetrics *ManagedClusterAzureMonitorProfileAppMonitoringOpenTelemetryMetrics `json:"appMonitoringOpenTelemetryMetrics,omitempty"`
	Enabled                           *bool                                                               `json:"enabled,omitempty"`
	KubeStateMetrics                  *ManagedClusterAzureMonitorProfileKubeStateMetrics                  `json:"kubeStateMetrics,omitempty"`
}

type ManagedClusterCostAnalysis struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterIngressProfileWebAppRouting struct {
	DnsZoneResourceIds []string `json:"dnsZoneResourceIds,omitempty"`
	Enabled            *bool    `json:"enabled,omitempty"`
}

type ManagedClusterLoadBalancerProfile struct {
	AllocatedOutboundPorts              *int                                                  `json:"allocatedOutboundPorts,omitempty"`
	BackendPoolType                     *ManagedClusterLoadBalancerProfile_BackendPoolType    `json:"backendPoolType,omitempty"`
	EffectiveOutboundIPs                []ResourceReference                                   `json:"effectiveOutboundIPs"`
	EnableMultipleStandardLoadBalancers *bool                                                 `json:"enableMultipleStandardLoadBalancers,omitempty"`
	IdleTimeoutInMinutes                *int                                                  `json:"idleTimeoutInMinutes,omitempty"`
	ManagedOutboundIPs                  *ManagedClusterLoadBalancerProfile_ManagedOutboundIPs `json:"managedOutboundIPs,omitempty"`
	OutboundIPPrefixes                  *ManagedClusterLoadBalancerProfile_OutboundIPPrefixes `json:"outboundIPPrefixes,omitempty"`
	OutboundIPs                         *ManagedClusterLoadBalancerProfile_OutboundIPs        `json:"outboundIPs,omitempty"`
}

type ManagedClusterNATGatewayProfile struct {
	EffectiveOutboundIPs     []ResourceReference                     `json:"effectiveOutboundIPs"`
	IdleTimeoutInMinutes     *int                                    `json:"idleTimeoutInMinutes,omitempty"`
	ManagedOutboundIPProfile *ManagedClusterManagedOutboundIPProfile `json:"managedOutboundIPProfile,omitempty"`
}

// +kubebuilder:validation:Enum={"Auto","Manual"}
type ManagedClusterNodeProvisioningProfile_Mode string

const (
	ManagedClusterNodeProvisioningProfile_Mode_Auto   = ManagedClusterNodeProvisioningProfile_Mode("Auto")
	ManagedClusterNodeProvisioningProfile_Mode_Manual = ManagedClusterNodeProvisioningProfile_Mode("Manual")
)

// Mapping from string to ManagedClusterNodeProvisioningProfile_Mode
var managedClusterNodeProvisioningProfile_Mode_Values = map[string]ManagedClusterNodeProvisioningProfile_Mode{
	"auto":   ManagedClusterNodeProvisioningProfile_Mode_Auto,
	"manual": ManagedClusterNodeProvisioningProfile_Mode_Manual,
}

// +kubebuilder:validation:Enum={"ReadOnly","Unrestricted"}
type ManagedClusterNodeResourceGroupProfile_RestrictionLevel string

const (
	ManagedClusterNodeResourceGroupProfile_RestrictionLevel_ReadOnly     = ManagedClusterNodeResourceGroupProfile_RestrictionLevel("ReadOnly")
	ManagedClusterNodeResourceGroupProfile_RestrictionLevel_Unrestricted = ManagedClusterNodeResourceGroupProfile_RestrictionLevel("Unrestricted")
)

// Mapping from string to ManagedClusterNodeResourceGroupProfile_RestrictionLevel
var managedClusterNodeResourceGroupProfile_RestrictionLevel_Values = map[string]ManagedClusterNodeResourceGroupProfile_RestrictionLevel{
	"readonly":     ManagedClusterNodeResourceGroupProfile_RestrictionLevel_ReadOnly,
	"unrestricted": ManagedClusterNodeResourceGroupProfile_RestrictionLevel_Unrestricted,
}

type ManagedClusterPodIdentity struct {
	BindingSelector *string               `json:"bindingSelector,omitempty"`
	Identity        *UserAssignedIdentity `json:"identity,omitempty"`
	Name            *string               `json:"name,omitempty"`
	Namespace       *string               `json:"namespace,omitempty"`
}

type ManagedClusterPodIdentityException struct {
	Name      *string           `json:"name,omitempty"`
	Namespace *string           `json:"namespace,omitempty"`
	PodLabels map[string]string `json:"podLabels"`
}

type ManagedClusterSecurityProfileDefender struct {
	LogAnalyticsWorkspaceResourceId *string                                                  `json:"logAnalyticsWorkspaceResourceId,omitempty"`
	SecurityMonitoring              *ManagedClusterSecurityProfileDefenderSecurityMonitoring `json:"securityMonitoring,omitempty"`
}

type ManagedClusterSecurityProfileImageCleaner struct {
	Enabled       *bool `json:"enabled,omitempty"`
	IntervalHours *int  `json:"intervalHours,omitempty"`
}

type ManagedClusterSecurityProfileImageIntegrity struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterSecurityProfileNodeRestriction struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterSecurityProfileWorkloadIdentity struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterStorageProfileBlobCSIDriver struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterStorageProfileDiskCSIDriver struct {
	Enabled *bool   `json:"enabled,omitempty"`
	Version *string `json:"version,omitempty"`
}

type ManagedClusterStorageProfileFileCSIDriver struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterStorageProfileSnapshotController struct {
	Enabled *bool `json:"enabled,omitempty"`
}

// +kubebuilder:validation:Enum={"None","Windows_Server"}
type ManagedClusterWindowsProfile_LicenseType string

const (
	ManagedClusterWindowsProfile_LicenseType_None           = ManagedClusterWindowsProfile_LicenseType("None")
	ManagedClusterWindowsProfile_LicenseType_Windows_Server = ManagedClusterWindowsProfile_LicenseType("Windows_Server")
)

// Mapping from string to ManagedClusterWindowsProfile_LicenseType
var managedClusterWindowsProfile_LicenseType_Values = map[string]ManagedClusterWindowsProfile_LicenseType{
	"none":           ManagedClusterWindowsProfile_LicenseType_None,
	"windows_server": ManagedClusterWindowsProfile_LicenseType_Windows_Server,
}

type ManagedClusterWorkloadAutoScalerProfileKeda struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler struct {
	AddonAutoscaling *ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling `json:"addonAutoscaling,omitempty"`
	Enabled          *bool                                                                          `json:"enabled,omitempty"`
}

// +kubebuilder:validation:Enum={"azure","cilium"}
type NetworkDataplane string

const (
	NetworkDataplane_Azure  = NetworkDataplane("azure")
	NetworkDataplane_Cilium = NetworkDataplane("cilium")
)

// Mapping from string to NetworkDataplane
var networkDataplane_Values = map[string]NetworkDataplane{
	"azure":  NetworkDataplane_Azure,
	"cilium": NetworkDataplane_Cilium,
}

// +kubebuilder:validation:Enum={"bridge","transparent"}
type NetworkMode string

const (
	NetworkMode_Bridge      = NetworkMode("bridge")
	NetworkMode_Transparent = NetworkMode("transparent")
)

// Mapping from string to NetworkMode
var networkMode_Values = map[string]NetworkMode{
	"bridge":      NetworkMode_Bridge,
	"transparent": NetworkMode_Transparent,
}

type NetworkMonitoring struct {
	Enabled *bool `json:"enabled,omitempty"`
}

// +kubebuilder:validation:Enum={"azure","kubenet","none"}
type NetworkPlugin string

const (
	NetworkPlugin_Azure   = NetworkPlugin("azure")
	NetworkPlugin_Kubenet = NetworkPlugin("kubenet")
	NetworkPlugin_None    = NetworkPlugin("none")
)

// Mapping from string to NetworkPlugin
var networkPlugin_Values = map[string]NetworkPlugin{
	"azure":   NetworkPlugin_Azure,
	"kubenet": NetworkPlugin_Kubenet,
	"none":    NetworkPlugin_None,
}

// +kubebuilder:validation:Enum={"overlay"}
type NetworkPluginMode string

const NetworkPluginMode_Overlay = NetworkPluginMode("overlay")

// Mapping from string to NetworkPluginMode
var networkPluginMode_Values = map[string]NetworkPluginMode{
	"overlay": NetworkPluginMode_Overlay,
}

// +kubebuilder:validation:Enum={"azure","calico","cilium","none"}
type NetworkPolicy string

const (
	NetworkPolicy_Azure  = NetworkPolicy("azure")
	NetworkPolicy_Calico = NetworkPolicy("calico")
	NetworkPolicy_Cilium = NetworkPolicy("cilium")
	NetworkPolicy_None   = NetworkPolicy("none")
)

// Mapping from string to NetworkPolicy
var networkPolicy_Values = map[string]NetworkPolicy{
	"azure":  NetworkPolicy_Azure,
	"calico": NetworkPolicy_Calico,
	"cilium": NetworkPolicy_Cilium,
	"none":   NetworkPolicy_None,
}

// +kubebuilder:validation:Enum={"Enforcement","Off","Warning"}
type SafeguardsProfile_Level string

const (
	SafeguardsProfile_Level_Enforcement = SafeguardsProfile_Level("Enforcement")
	SafeguardsProfile_Level_Off         = SafeguardsProfile_Level("Off")
	SafeguardsProfile_Level_Warning     = SafeguardsProfile_Level("Warning")
)

// Mapping from string to SafeguardsProfile_Level
var safeguardsProfile_Level_Values = map[string]SafeguardsProfile_Level{
	"enforcement": SafeguardsProfile_Level_Enforcement,
	"off":         SafeguardsProfile_Level_Off,
	"warning":     SafeguardsProfile_Level_Warning,
}

// +kubebuilder:validation:Enum={"Disabled","Istio"}
type ServiceMeshProfile_Mode string

const (
	ServiceMeshProfile_Mode_Disabled = ServiceMeshProfile_Mode("Disabled")
	ServiceMeshProfile_Mode_Istio    = ServiceMeshProfile_Mode("Istio")
)

// Mapping from string to ServiceMeshProfile_Mode
var serviceMeshProfile_Mode_Values = map[string]ServiceMeshProfile_Mode{
	"disabled": ServiceMeshProfile_Mode_Disabled,
	"istio":    ServiceMeshProfile_Mode_Istio,
}

type UpgradeOverrideSettings struct {
	ForceUpgrade *bool   `json:"forceUpgrade,omitempty"`
	Until        *string `json:"until,omitempty"`
}

type WindowsGmsaProfile struct {
	DnsServer      *string `json:"dnsServer,omitempty"`
	Enabled        *bool   `json:"enabled,omitempty"`
	RootDomainName *string `json:"rootDomainName,omitempty"`
}

// +kubebuilder:validation:Enum={"Private","Public"}
type AzureKeyVaultKms_KeyVaultNetworkAccess string

const (
	AzureKeyVaultKms_KeyVaultNetworkAccess_Private = AzureKeyVaultKms_KeyVaultNetworkAccess("Private")
	AzureKeyVaultKms_KeyVaultNetworkAccess_Public  = AzureKeyVaultKms_KeyVaultNetworkAccess("Public")
)

// Mapping from string to AzureKeyVaultKms_KeyVaultNetworkAccess
var azureKeyVaultKms_KeyVaultNetworkAccess_Values = map[string]AzureKeyVaultKms_KeyVaultNetworkAccess{
	"private": AzureKeyVaultKms_KeyVaultNetworkAccess_Private,
	"public":  AzureKeyVaultKms_KeyVaultNetworkAccess_Public,
}

type ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig struct {
	Scheduler            *ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler `json:"scheduler,omitempty"`
	TcpFinTimeoutSeconds *int                                                                 `json:"tcpFinTimeoutSeconds,omitempty"`
	TcpTimeoutSeconds    *int                                                                 `json:"tcpTimeoutSeconds,omitempty"`
	UdpTimeoutSeconds    *int                                                                 `json:"udpTimeoutSeconds,omitempty"`
}

// +kubebuilder:validation:Enum={"IPTABLES","IPVS"}
type ContainerServiceNetworkProfile_KubeProxyConfig_Mode string

const (
	ContainerServiceNetworkProfile_KubeProxyConfig_Mode_IPTABLES = ContainerServiceNetworkProfile_KubeProxyConfig_Mode("IPTABLES")
	ContainerServiceNetworkProfile_KubeProxyConfig_Mode_IPVS     = ContainerServiceNetworkProfile_KubeProxyConfig_Mode("IPVS")
)

// Mapping from string to ContainerServiceNetworkProfile_KubeProxyConfig_Mode
var containerServiceNetworkProfile_KubeProxyConfig_Mode_Values = map[string]ContainerServiceNetworkProfile_KubeProxyConfig_Mode{
	"iptables": ContainerServiceNetworkProfile_KubeProxyConfig_Mode_IPTABLES,
	"ipvs":     ContainerServiceNetworkProfile_KubeProxyConfig_Mode_IPVS,
}

type ContainerServiceSshPublicKey struct {
	KeyData *string `json:"keyData,omitempty"`
}

type IstioCertificateAuthority struct {
	Plugin *IstioPluginCertificateAuthority `json:"plugin,omitempty"`
}

type IstioComponents struct {
	EgressGateways  []IstioEgressGateway  `json:"egressGateways"`
	IngressGateways []IstioIngressGateway `json:"ingressGateways"`
}

type ManagedClusterAzureMonitorProfileAppMonitoring struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterAzureMonitorProfileAppMonitoringOpenTelemetryMetrics struct {
	Enabled *bool `json:"enabled,omitempty"`
}

type ManagedClusterAzureMonitorProfileContainerInsights struct {
	Enabled                         *bool                                             `json:"enabled,omitempty"`
	LogAnalyticsWorkspaceResourceId *string                                           `json:"logAnalyticsWorkspaceResourceId,omitempty"`
	WindowsHostLogs                 *ManagedClusterAzureMonitorProfileWindowsHostLogs `json:"windowsHostLogs,omitempty"`
}

type ManagedClusterAzureMonitorProfileKubeStateMetrics struct {
	MetricAnnotationsAllowList *string `json:"metricAnnotationsAllowList,omitempty"`
	MetricLabelsAllowlist      *string `json:"metricLabelsAllowlist,omitempty"`
}

// +kubebuilder:validation:Enum={"NodeIP","NodeIPConfiguration"}
type ManagedClusterLoadBalancerProfile_BackendPoolType string

const (
	ManagedClusterLoadBalancerProfile_BackendPoolType_NodeIP              = ManagedClusterLoadBalancerProfile_BackendPoolType("NodeIP")
	ManagedClusterLoadBalancerProfile_BackendPoolType_NodeIPConfiguration = ManagedClusterLoadBalancerProfile_BackendPoolType("NodeIPConfiguration")
)

// Mapping from string to ManagedClusterLoadBalancerProfile_BackendPoolType
var managedClusterLoadBalancerProfile_BackendPoolType_Values = map[string]ManagedClusterLoadBalancerProfile_BackendPoolType{
	"nodeip":              ManagedClusterLoadBalancerProfile_BackendPoolType_NodeIP,
	"nodeipconfiguration": ManagedClusterLoadBalancerProfile_BackendPoolType_NodeIPConfiguration,
}

type ManagedClusterLoadBalancerProfile_ManagedOutboundIPs struct {
	Count     *int `json:"count,omitempty"`
	CountIPv6 *int `json:"countIPv6,omitempty"`
}

type ManagedClusterLoadBalancerProfile_OutboundIPPrefixes struct {
	PublicIPPrefixes []ResourceReference `json:"publicIPPrefixes"`
}

type ManagedClusterLoadBalancerProfile_OutboundIPs struct {
	PublicIPs []ResourceReference `json:"publicIPs"`
}

type ManagedClusterManagedOutboundIPProfile struct {
	Count *int `json:"count,omitempty"`
}

type ManagedClusterSecurityProfileDefenderSecurityMonitoring struct {
	Enabled *bool `json:"enabled,omitempty"`
}

// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling string

const (
	ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling_Disabled = ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling("Disabled")
	ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling_Enabled  = ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling("Enabled")
)

// Mapping from string to ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling
var managedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling_Values = map[string]ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling{
	"disabled": ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling_Disabled,
	"enabled":  ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_AddonAutoscaling_Enabled,
}

type ResourceReference struct {
	Id *string `json:"id,omitempty"`
}

// +kubebuilder:validation:Enum={"LeastConnection","RoundRobin"}
type ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler string

const (
	ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler_LeastConnection = ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler("LeastConnection")
	ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler_RoundRobin      = ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler("RoundRobin")
)

// Mapping from string to ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler
var containerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler_Values = map[string]ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler{
	"leastconnection": ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler_LeastConnection,
	"roundrobin":      ContainerServiceNetworkProfile_KubeProxyConfig_IpvsConfig_Scheduler_RoundRobin,
}

type IstioEgressGateway struct {
	Enabled      *bool             `json:"enabled,omitempty"`
	NodeSelector map[string]string `json:"nodeSelector"`
}

type IstioIngressGateway struct {
	Enabled *bool                     `json:"enabled,omitempty"`
	Mode    *IstioIngressGateway_Mode `json:"mode,omitempty"`
}

type IstioPluginCertificateAuthority struct {
	CertChainObjectName *string `json:"certChainObjectName,omitempty"`
	CertObjectName      *string `json:"certObjectName,omitempty"`
	KeyObjectName       *string `json:"keyObjectName,omitempty"`
	KeyVaultId          *string `json:"keyVaultId,omitempty"`
	RootCertObjectName  *string `json:"rootCertObjectName,omitempty"`
}

type ManagedClusterAzureMonitorProfileWindowsHostLogs struct {
	Enabled *bool `json:"enabled,omitempty"`
}

// +kubebuilder:validation:Enum={"External","Internal"}
type IstioIngressGateway_Mode string

const (
	IstioIngressGateway_Mode_External = IstioIngressGateway_Mode("External")
	IstioIngressGateway_Mode_Internal = IstioIngressGateway_Mode("Internal")
)

// Mapping from string to IstioIngressGateway_Mode
var istioIngressGateway_Mode_Values = map[string]IstioIngressGateway_Mode{
	"external": IstioIngressGateway_Mode_External,
	"internal": IstioIngressGateway_Mode_Internal,
}
