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

import (
	"context"
	storage "github.com/Azure/azure-service-operator/v2/api/containerservice/v1api20250301/storage"
	"github.com/Azure/azure-service-operator/v2/internal/genericarmclient"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/conditions"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/configmaps"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/core"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/secrets"
	"github.com/go-logr/logr"
	"github.com/rotisserie/eris"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

// +kubebuilder:rbac:groups=containerservice.azure.com,resources=managedclusters,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=containerservice.azure.com,resources={managedclusters/status,managedclusters/finalizers},verbs=get;update;patch

// +kubebuilder:object:root=true
// +kubebuilder:resource:categories={azure,containerservice}
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
// +kubebuilder:printcolumn:name="Severity",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].severity"
// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].reason"
// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].message"
// Storage version of v1api20240901.ManagedCluster
// Generator information:
// - Generated from: /containerservice/resource-manager/Microsoft.ContainerService/aks/stable/2024-09-01/managedClusters.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}
type ManagedCluster struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              ManagedCluster_Spec   `json:"spec,omitempty"`
	Status            ManagedCluster_STATUS `json:"status,omitempty"`
}

var _ conditions.Conditioner = &ManagedCluster{}

// GetConditions returns the conditions of the resource
func (cluster *ManagedCluster) GetConditions() conditions.Conditions {
	return cluster.Status.Conditions
}

// SetConditions sets the conditions on the resource status
func (cluster *ManagedCluster) SetConditions(conditions conditions.Conditions) {
	cluster.Status.Conditions = conditions
}

var _ configmaps.Exporter = &ManagedCluster{}

// ConfigMapDestinationExpressions returns the Spec.OperatorSpec.ConfigMapExpressions property
func (cluster *ManagedCluster) ConfigMapDestinationExpressions() []*core.DestinationExpression {
	if cluster.Spec.OperatorSpec == nil {
		return nil
	}
	return cluster.Spec.OperatorSpec.ConfigMapExpressions
}

var _ secrets.Exporter = &ManagedCluster{}

// SecretDestinationExpressions returns the Spec.OperatorSpec.SecretExpressions property
func (cluster *ManagedCluster) SecretDestinationExpressions() []*core.DestinationExpression {
	if cluster.Spec.OperatorSpec == nil {
		return nil
	}
	return cluster.Spec.OperatorSpec.SecretExpressions
}

var _ genruntime.KubernetesConfigExporter = &ManagedCluster{}

// ExportKubernetesConfigMaps defines a resource which can create ConfigMaps in Kubernetes.
func (cluster *ManagedCluster) ExportKubernetesConfigMaps(_ context.Context, _ genruntime.MetaObject, _ *genericarmclient.GenericClient, _ logr.Logger) ([]client.Object, error) {
	collector := configmaps.NewCollector(cluster.Namespace)
	if cluster.Spec.OperatorSpec != nil && cluster.Spec.OperatorSpec.ConfigMaps != nil {
		if cluster.Status.OidcIssuerProfile != nil {
			if cluster.Status.OidcIssuerProfile.IssuerURL != nil {
				collector.AddValue(cluster.Spec.OperatorSpec.ConfigMaps.OIDCIssuerProfile, *cluster.Status.OidcIssuerProfile.IssuerURL)
			}
		}
	}
	result, err := collector.Values()
	if err != nil {
		return nil, err
	}
	return configmaps.SliceToClientObjectSlice(result), nil
}

var _ genruntime.KubernetesResource = &ManagedCluster{}

// AzureName returns the Azure name of the resource
func (cluster *ManagedCluster) AzureName() string {
	return cluster.Spec.AzureName
}

// GetAPIVersion returns the ARM API version of the resource. This is always "2024-09-01"
func (cluster ManagedCluster) GetAPIVersion() string {
	return "2024-09-01"
}

// GetResourceScope returns the scope of the resource
func (cluster *ManagedCluster) GetResourceScope() genruntime.ResourceScope {
	return genruntime.ResourceScopeResourceGroup
}

// GetSpec returns the specification of this resource
func (cluster *ManagedCluster) GetSpec() genruntime.ConvertibleSpec {
	return &cluster.Spec
}

// GetStatus returns the status of this resource
func (cluster *ManagedCluster) GetStatus() genruntime.ConvertibleStatus {
	return &cluster.Status
}

// GetSupportedOperations returns the operations supported by the resource
func (cluster *ManagedCluster) GetSupportedOperations() []genruntime.ResourceOperation {
	return []genruntime.ResourceOperation{
		genruntime.ResourceOperationDelete,
		genruntime.ResourceOperationGet,
		genruntime.ResourceOperationPut,
	}
}

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

// NewEmptyStatus returns a new empty (blank) status
func (cluster *ManagedCluster) NewEmptyStatus() genruntime.ConvertibleStatus {
	return &ManagedCluster_STATUS{}
}

// Owner returns the ResourceReference of the owner
func (cluster *ManagedCluster) Owner() *genruntime.ResourceReference {
	if cluster.Spec.Owner == nil {
		return nil
	}

	group, kind := genruntime.LookupOwnerGroupKind(cluster.Spec)
	return cluster.Spec.Owner.AsResourceReference(group, kind)
}

// SetStatus sets the status of this resource
func (cluster *ManagedCluster) SetStatus(status genruntime.ConvertibleStatus) error {
	// If we have exactly the right type of status, assign it
	if st, ok := status.(*ManagedCluster_STATUS); ok {
		cluster.Status = *st
		return nil
	}

	// Convert status to required version
	var st ManagedCluster_STATUS
	err := status.ConvertStatusTo(&st)
	if err != nil {
		return eris.Wrap(err, "failed to convert status")
	}

	cluster.Status = st
	return nil
}

// Hub marks that this ManagedCluster is the hub type for conversion
func (cluster *ManagedCluster) Hub() {}

// OriginalGVK returns a GroupValueKind for the original API version used to create the resource
func (cluster *ManagedCluster) OriginalGVK() *schema.GroupVersionKind {
	return &schema.GroupVersionKind{
		Group:   GroupVersion.Group,
		Version: cluster.Spec.OriginalVersion,
		Kind:    "ManagedCluster",
	}
}

// +kubebuilder:object:root=true
// Storage version of v1api20240901.ManagedCluster
// Generator information:
// - Generated from: /containerservice/resource-manager/Microsoft.ContainerService/aks/stable/2024-09-01/managedClusters.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}
type ManagedClusterList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ManagedCluster `json:"items"`
}

// Storage version of v1api20240901.ManagedCluster_Spec
type ManagedCluster_Spec struct {
	AadProfile             *ManagedClusterAADProfile                   `json:"aadProfile,omitempty"`
	AddonProfiles          map[string]ManagedClusterAddonProfile       `json:"addonProfiles,omitempty"`
	AgentPoolProfiles      []ManagedClusterAgentPoolProfile            `json:"agentPoolProfiles,omitempty"`
	ApiServerAccessProfile *ManagedClusterAPIServerAccessProfile       `json:"apiServerAccessProfile,omitempty"`
	AutoScalerProfile      *ManagedClusterProperties_AutoScalerProfile `json:"autoScalerProfile,omitempty"`
	AutoUpgradeProfile     *ManagedClusterAutoUpgradeProfile           `json:"autoUpgradeProfile,omitempty"`
	AzureMonitorProfile    *ManagedClusterAzureMonitorProfile          `json:"azureMonitorProfile,omitempty"`

	// AzureName: The name of the resource in Azure. This is often the same as the name of the resource in Kubernetes but it
	// doesn't have to be.
	AzureName            string `json:"azureName,omitempty"`
	DisableLocalAccounts *bool  `json:"disableLocalAccounts,omitempty"`

	// DiskEncryptionSetReference: This is of the form:
	// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{encryptionSetName}'
	DiskEncryptionSetReference *genruntime.ResourceReference           `armReference:"DiskEncryptionSetID" json:"diskEncryptionSetReference,omitempty"`
	DnsPrefix                  *string                                 `json:"dnsPrefix,omitempty"`
	EnablePodSecurityPolicy    *bool                                   `json:"enablePodSecurityPolicy,omitempty"`
	EnableRBAC                 *bool                                   `json:"enableRBAC,omitempty"`
	ExtendedLocation           *ExtendedLocation                       `json:"extendedLocation,omitempty"`
	FqdnSubdomain              *string                                 `json:"fqdnSubdomain,omitempty"`
	HttpProxyConfig            *ManagedClusterHTTPProxyConfig          `json:"httpProxyConfig,omitempty"`
	Identity                   *ManagedClusterIdentity                 `json:"identity,omitempty"`
	IdentityProfile            map[string]UserAssignedIdentity         `json:"identityProfile,omitempty"`
	IngressProfile             *ManagedClusterIngressProfile           `json:"ingressProfile,omitempty"`
	KubernetesVersion          *string                                 `json:"kubernetesVersion,omitempty"`
	LinuxProfile               *ContainerServiceLinuxProfile           `json:"linuxProfile,omitempty"`
	Location                   *string                                 `json:"location,omitempty"`
	MetricsProfile             *ManagedClusterMetricsProfile           `json:"metricsProfile,omitempty"`
	NetworkProfile             *ContainerServiceNetworkProfile         `json:"networkProfile,omitempty"`
	NodeResourceGroup          *string                                 `json:"nodeResourceGroup,omitempty"`
	NodeResourceGroupProfile   *ManagedClusterNodeResourceGroupProfile `json:"nodeResourceGroupProfile,omitempty"`
	OidcIssuerProfile          *ManagedClusterOIDCIssuerProfile        `json:"oidcIssuerProfile,omitempty"`
	OperatorSpec               *ManagedClusterOperatorSpec             `json:"operatorSpec,omitempty"`
	OriginalVersion            string                                  `json:"originalVersion,omitempty"`

	// +kubebuilder:validation:Required
	// Owner: The owner of the resource. The owner controls where the resource goes when it is deployed. The owner also
	// controls the resources lifecycle. When the owner is deleted the resource will also be deleted. Owner is expected to be a
	// reference to a resources.azure.com/ResourceGroup resource
	Owner                     *genruntime.KnownResourceReference       `group:"resources.azure.com" json:"owner,omitempty" kind:"ResourceGroup"`
	PodIdentityProfile        *ManagedClusterPodIdentityProfile        `json:"podIdentityProfile,omitempty"`
	PrivateLinkResources      []PrivateLinkResource                    `json:"privateLinkResources,omitempty"`
	PropertyBag               genruntime.PropertyBag                   `json:"$propertyBag,omitempty"`
	PublicNetworkAccess       *string                                  `json:"publicNetworkAccess,omitempty"`
	SecurityProfile           *ManagedClusterSecurityProfile           `json:"securityProfile,omitempty"`
	ServiceMeshProfile        *ServiceMeshProfile                      `json:"serviceMeshProfile,omitempty"`
	ServicePrincipalProfile   *ManagedClusterServicePrincipalProfile   `json:"servicePrincipalProfile,omitempty"`
	Sku                       *ManagedClusterSKU                       `json:"sku,omitempty"`
	StorageProfile            *ManagedClusterStorageProfile            `json:"storageProfile,omitempty"`
	SupportPlan               *string                                  `json:"supportPlan,omitempty"`
	Tags                      map[string]string                        `json:"tags,omitempty" serializationType:"explicitEmptyCollection"`
	UpgradeSettings           *ClusterUpgradeSettings                  `json:"upgradeSettings,omitempty"`
	WindowsProfile            *ManagedClusterWindowsProfile            `json:"windowsProfile,omitempty"`
	WorkloadAutoScalerProfile *ManagedClusterWorkloadAutoScalerProfile `json:"workloadAutoScalerProfile,omitempty"`
}

var _ genruntime.ConvertibleSpec = &ManagedCluster_Spec{}

// ConvertSpecFrom populates our ManagedCluster_Spec from the provided source
func (cluster *ManagedCluster_Spec) ConvertSpecFrom(source genruntime.ConvertibleSpec) error {
	if source == cluster {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return source.ConvertSpecTo(cluster)
}

// ConvertSpecTo populates the provided destination from our ManagedCluster_Spec
func (cluster *ManagedCluster_Spec) ConvertSpecTo(destination genruntime.ConvertibleSpec) error {
	if destination == cluster {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return destination.ConvertSpecFrom(cluster)
}

// Storage version of v1api20240901.ManagedCluster_STATUS
// Managed cluster.
type ManagedCluster_STATUS struct {
	AadProfile                *ManagedClusterAADProfile_STATUS                   `json:"aadProfile,omitempty"`
	AddonProfiles             map[string]ManagedClusterAddonProfile_STATUS       `json:"addonProfiles,omitempty"`
	AgentPoolProfiles         []ManagedClusterAgentPoolProfile_STATUS            `json:"agentPoolProfiles,omitempty"`
	ApiServerAccessProfile    *ManagedClusterAPIServerAccessProfile_STATUS       `json:"apiServerAccessProfile,omitempty"`
	AutoScalerProfile         *ManagedClusterProperties_AutoScalerProfile_STATUS `json:"autoScalerProfile,omitempty"`
	AutoUpgradeProfile        *ManagedClusterAutoUpgradeProfile_STATUS           `json:"autoUpgradeProfile,omitempty"`
	AzureMonitorProfile       *ManagedClusterAzureMonitorProfile_STATUS          `json:"azureMonitorProfile,omitempty"`
	AzurePortalFQDN           *string                                            `json:"azurePortalFQDN,omitempty"`
	Conditions                []conditions.Condition                             `json:"conditions,omitempty"`
	CurrentKubernetesVersion  *string                                            `json:"currentKubernetesVersion,omitempty"`
	DisableLocalAccounts      *bool                                              `json:"disableLocalAccounts,omitempty"`
	DiskEncryptionSetID       *string                                            `json:"diskEncryptionSetID,omitempty"`
	DnsPrefix                 *string                                            `json:"dnsPrefix,omitempty"`
	ETag                      *string                                            `json:"eTag,omitempty"`
	EnablePodSecurityPolicy   *bool                                              `json:"enablePodSecurityPolicy,omitempty"`
	EnableRBAC                *bool                                              `json:"enableRBAC,omitempty"`
	ExtendedLocation          *ExtendedLocation_STATUS                           `json:"extendedLocation,omitempty"`
	Fqdn                      *string                                            `json:"fqdn,omitempty"`
	FqdnSubdomain             *string                                            `json:"fqdnSubdomain,omitempty"`
	HttpProxyConfig           *ManagedClusterHTTPProxyConfig_STATUS              `json:"httpProxyConfig,omitempty"`
	Id                        *string                                            `json:"id,omitempty"`
	Identity                  *ManagedClusterIdentity_STATUS                     `json:"identity,omitempty"`
	IdentityProfile           map[string]UserAssignedIdentity_STATUS             `json:"identityProfile,omitempty"`
	IngressProfile            *ManagedClusterIngressProfile_STATUS               `json:"ingressProfile,omitempty"`
	KubernetesVersion         *string                                            `json:"kubernetesVersion,omitempty"`
	LinuxProfile              *ContainerServiceLinuxProfile_STATUS               `json:"linuxProfile,omitempty"`
	Location                  *string                                            `json:"location,omitempty"`
	MaxAgentPools             *int                                               `json:"maxAgentPools,omitempty"`
	MetricsProfile            *ManagedClusterMetricsProfile_STATUS               `json:"metricsProfile,omitempty"`
	Name                      *string                                            `json:"name,omitempty"`
	NetworkProfile            *ContainerServiceNetworkProfile_STATUS             `json:"networkProfile,omitempty"`
	NodeResourceGroup         *string                                            `json:"nodeResourceGroup,omitempty"`
	NodeResourceGroupProfile  *ManagedClusterNodeResourceGroupProfile_STATUS     `json:"nodeResourceGroupProfile,omitempty"`
	OidcIssuerProfile         *ManagedClusterOIDCIssuerProfile_STATUS            `json:"oidcIssuerProfile,omitempty"`
	PodIdentityProfile        *ManagedClusterPodIdentityProfile_STATUS           `json:"podIdentityProfile,omitempty"`
	PowerState                *PowerState_STATUS                                 `json:"powerState,omitempty"`
	PrivateFQDN               *string                                            `json:"privateFQDN,omitempty"`
	PrivateLinkResources      []PrivateLinkResource_STATUS                       `json:"privateLinkResources,omitempty"`
	PropertyBag               genruntime.PropertyBag                             `json:"$propertyBag,omitempty"`
	ProvisioningState         *string                                            `json:"provisioningState,omitempty"`
	PublicNetworkAccess       *string                                            `json:"publicNetworkAccess,omitempty"`
	ResourceUID               *string                                            `json:"resourceUID,omitempty"`
	SecurityProfile           *ManagedClusterSecurityProfile_STATUS              `json:"securityProfile,omitempty"`
	ServiceMeshProfile        *ServiceMeshProfile_STATUS                         `json:"serviceMeshProfile,omitempty"`
	ServicePrincipalProfile   *ManagedClusterServicePrincipalProfile_STATUS      `json:"servicePrincipalProfile,omitempty"`
	Sku                       *ManagedClusterSKU_STATUS                          `json:"sku,omitempty"`
	StorageProfile            *ManagedClusterStorageProfile_STATUS               `json:"storageProfile,omitempty"`
	SupportPlan               *string                                            `json:"supportPlan,omitempty"`
	SystemData                *SystemData_STATUS                                 `json:"systemData,omitempty"`
	Tags                      map[string]string                                  `json:"tags,omitempty"`
	Type                      *string                                            `json:"type,omitempty"`
	UpgradeSettings           *ClusterUpgradeSettings_STATUS                     `json:"upgradeSettings,omitempty"`
	WindowsProfile            *ManagedClusterWindowsProfile_STATUS               `json:"windowsProfile,omitempty"`
	WorkloadAutoScalerProfile *ManagedClusterWorkloadAutoScalerProfile_STATUS    `json:"workloadAutoScalerProfile,omitempty"`
}

var _ genruntime.ConvertibleStatus = &ManagedCluster_STATUS{}

// ConvertStatusFrom populates our ManagedCluster_STATUS from the provided source
func (cluster *ManagedCluster_STATUS) ConvertStatusFrom(source genruntime.ConvertibleStatus) error {
	if source == cluster {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return source.ConvertStatusTo(cluster)
}

// ConvertStatusTo populates the provided destination from our ManagedCluster_STATUS
func (cluster *ManagedCluster_STATUS) ConvertStatusTo(destination genruntime.ConvertibleStatus) error {
	if destination == cluster {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return destination.ConvertStatusFrom(cluster)
}

// Storage version of v1api20240901.ClusterUpgradeSettings
// Settings for upgrading a cluster.
type ClusterUpgradeSettings struct {
	OverrideSettings *UpgradeOverrideSettings `json:"overrideSettings,omitempty"`
	PropertyBag      genruntime.PropertyBag   `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ClusterUpgradeSettings_STATUS
// Settings for upgrading a cluster.
type ClusterUpgradeSettings_STATUS struct {
	OverrideSettings *UpgradeOverrideSettings_STATUS `json:"overrideSettings,omitempty"`
	PropertyBag      genruntime.PropertyBag          `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceLinuxProfile
// Profile for Linux VMs in the container service cluster.
type ContainerServiceLinuxProfile struct {
	AdminUsername *string                           `json:"adminUsername,omitempty"`
	PropertyBag   genruntime.PropertyBag            `json:"$propertyBag,omitempty"`
	Ssh           *ContainerServiceSshConfiguration `json:"ssh,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceLinuxProfile_STATUS
// Profile for Linux VMs in the container service cluster.
type ContainerServiceLinuxProfile_STATUS struct {
	AdminUsername *string                                  `json:"adminUsername,omitempty"`
	PropertyBag   genruntime.PropertyBag                   `json:"$propertyBag,omitempty"`
	Ssh           *ContainerServiceSshConfiguration_STATUS `json:"ssh,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceNetworkProfile
// Profile of network configuration.
type ContainerServiceNetworkProfile struct {
	AdvancedNetworking  *AdvancedNetworking                `json:"advancedNetworking,omitempty"`
	DnsServiceIP        *string                            `json:"dnsServiceIP,omitempty"`
	IpFamilies          []string                           `json:"ipFamilies,omitempty"`
	LoadBalancerProfile *ManagedClusterLoadBalancerProfile `json:"loadBalancerProfile,omitempty"`
	LoadBalancerSku     *string                            `json:"loadBalancerSku,omitempty"`
	NatGatewayProfile   *ManagedClusterNATGatewayProfile   `json:"natGatewayProfile,omitempty"`
	NetworkDataplane    *string                            `json:"networkDataplane,omitempty"`
	NetworkMode         *string                            `json:"networkMode,omitempty"`
	NetworkPlugin       *string                            `json:"networkPlugin,omitempty"`
	NetworkPluginMode   *string                            `json:"networkPluginMode,omitempty"`
	NetworkPolicy       *string                            `json:"networkPolicy,omitempty"`
	OutboundType        *string                            `json:"outboundType,omitempty"`
	PodCidr             *string                            `json:"podCidr,omitempty"`
	PodCidrs            []string                           `json:"podCidrs,omitempty"`
	PropertyBag         genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
	ServiceCidr         *string                            `json:"serviceCidr,omitempty"`
	ServiceCidrs        []string                           `json:"serviceCidrs,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceNetworkProfile_STATUS
// Profile of network configuration.
type ContainerServiceNetworkProfile_STATUS struct {
	AdvancedNetworking  *AdvancedNetworking_STATUS                `json:"advancedNetworking,omitempty"`
	DnsServiceIP        *string                                   `json:"dnsServiceIP,omitempty"`
	IpFamilies          []string                                  `json:"ipFamilies,omitempty"`
	LoadBalancerProfile *ManagedClusterLoadBalancerProfile_STATUS `json:"loadBalancerProfile,omitempty"`
	LoadBalancerSku     *string                                   `json:"loadBalancerSku,omitempty"`
	NatGatewayProfile   *ManagedClusterNATGatewayProfile_STATUS   `json:"natGatewayProfile,omitempty"`
	NetworkDataplane    *string                                   `json:"networkDataplane,omitempty"`
	NetworkMode         *string                                   `json:"networkMode,omitempty"`
	NetworkPlugin       *string                                   `json:"networkPlugin,omitempty"`
	NetworkPluginMode   *string                                   `json:"networkPluginMode,omitempty"`
	NetworkPolicy       *string                                   `json:"networkPolicy,omitempty"`
	OutboundType        *string                                   `json:"outboundType,omitempty"`
	PodCidr             *string                                   `json:"podCidr,omitempty"`
	PodCidrs            []string                                  `json:"podCidrs,omitempty"`
	PropertyBag         genruntime.PropertyBag                    `json:"$propertyBag,omitempty"`
	ServiceCidr         *string                                   `json:"serviceCidr,omitempty"`
	ServiceCidrs        []string                                  `json:"serviceCidrs,omitempty"`
}

// Storage version of v1api20240901.ExtendedLocation
// The complex type of the extended location.
type ExtendedLocation struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20240901.ExtendedLocation_STATUS
// The complex type of the extended location.
type ExtendedLocation_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAADProfile
// For more details see [managed AAD on AKS](https://docs.microsoft.com/azure/aks/managed-aad).
type ManagedClusterAADProfile struct {
	AdminGroupObjectIDs []string               `json:"adminGroupObjectIDs,omitempty"`
	ClientAppID         *string                `json:"clientAppID,omitempty"`
	EnableAzureRBAC     *bool                  `json:"enableAzureRBAC,omitempty"`
	Managed             *bool                  `json:"managed,omitempty"`
	PropertyBag         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ServerAppID         *string                `json:"serverAppID,omitempty"`
	ServerAppSecret     *string                `json:"serverAppSecret,omitempty"`
	TenantID            *string                `json:"tenantID,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAADProfile_STATUS
// For more details see [managed AAD on AKS](https://docs.microsoft.com/azure/aks/managed-aad).
type ManagedClusterAADProfile_STATUS struct {
	AdminGroupObjectIDs []string               `json:"adminGroupObjectIDs,omitempty"`
	ClientAppID         *string                `json:"clientAppID,omitempty"`
	EnableAzureRBAC     *bool                  `json:"enableAzureRBAC,omitempty"`
	Managed             *bool                  `json:"managed,omitempty"`
	PropertyBag         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ServerAppID         *string                `json:"serverAppID,omitempty"`
	ServerAppSecret     *string                `json:"serverAppSecret,omitempty"`
	TenantID            *string                `json:"tenantID,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAddonProfile
// A Kubernetes add-on profile for a managed cluster.
type ManagedClusterAddonProfile struct {
	Config      map[string]string      `json:"config,omitempty"`
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAddonProfile_STATUS
// A Kubernetes add-on profile for a managed cluster.
type ManagedClusterAddonProfile_STATUS struct {
	Config      map[string]string            `json:"config,omitempty"`
	Enabled     *bool                        `json:"enabled,omitempty"`
	Identity    *UserAssignedIdentity_STATUS `json:"identity,omitempty"`
	PropertyBag genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAgentPoolProfile
// Profile for the container service agent pool.
type ManagedClusterAgentPoolProfile struct {
	AvailabilityZones []string `json:"availabilityZones,omitempty"`

	// CapacityReservationGroupReference: AKS will associate the specified agent pool with the Capacity Reservation Group.
	CapacityReservationGroupReference *genruntime.ResourceReference `armReference:"CapacityReservationGroupID" json:"capacityReservationGroupReference,omitempty"`
	Count                             *int                          `json:"count,omitempty"`
	CreationData                      *CreationData                 `json:"creationData,omitempty"`
	EnableAutoScaling                 *bool                         `json:"enableAutoScaling,omitempty"`
	EnableEncryptionAtHost            *bool                         `json:"enableEncryptionAtHost,omitempty"`
	EnableFIPS                        *bool                         `json:"enableFIPS,omitempty"`
	EnableNodePublicIP                *bool                         `json:"enableNodePublicIP,omitempty"`
	EnableUltraSSD                    *bool                         `json:"enableUltraSSD,omitempty"`
	GpuInstanceProfile                *string                       `json:"gpuInstanceProfile,omitempty"`

	// HostGroupReference: This is of the form:
	// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}.
	// For more information see [Azure dedicated hosts](https://docs.microsoft.com/azure/virtual-machines/dedicated-hosts).
	HostGroupReference *genruntime.ResourceReference `armReference:"HostGroupID" json:"hostGroupReference,omitempty"`
	KubeletConfig      *KubeletConfig                `json:"kubeletConfig,omitempty"`
	KubeletDiskType    *string                       `json:"kubeletDiskType,omitempty"`
	LinuxOSConfig      *LinuxOSConfig                `json:"linuxOSConfig,omitempty"`
	MaxCount           *int                          `json:"maxCount,omitempty"`
	MaxPods            *int                          `json:"maxPods,omitempty"`
	MinCount           *int                          `json:"minCount,omitempty"`
	Mode               *string                       `json:"mode,omitempty"`
	Name               *string                       `json:"name,omitempty"`
	NetworkProfile     *AgentPoolNetworkProfile      `json:"networkProfile,omitempty"`
	NodeLabels         map[string]string             `json:"nodeLabels,omitempty" serializationType:"explicitEmptyCollection"`

	// NodePublicIPPrefixReference: This is of the form:
	// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}
	NodePublicIPPrefixReference *genruntime.ResourceReference `armReference:"NodePublicIPPrefixID" json:"nodePublicIPPrefixReference,omitempty"`
	NodeTaints                  []string                      `json:"nodeTaints,omitempty" serializationType:"explicitEmptyCollection"`
	OrchestratorVersion         *string                       `json:"orchestratorVersion,omitempty"`
	OsDiskSizeGB                *int                          `json:"osDiskSizeGB,omitempty"`
	OsDiskType                  *string                       `json:"osDiskType,omitempty"`
	OsSKU                       *string                       `json:"osSKU,omitempty"`
	OsType                      *string                       `json:"osType,omitempty"`

	// PodSubnetReference: If omitted, pod IPs are statically assigned on the node subnet (see vnetSubnetID for more details).
	// This is of the form:
	// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
	PodSubnetReference *genruntime.ResourceReference `armReference:"PodSubnetID" json:"podSubnetReference,omitempty"`
	PowerState         *PowerState                   `json:"powerState,omitempty"`
	PropertyBag        genruntime.PropertyBag        `json:"$propertyBag,omitempty"`

	// ProximityPlacementGroupReference: The ID for Proximity Placement Group.
	ProximityPlacementGroupReference *genruntime.ResourceReference `armReference:"ProximityPlacementGroupID" json:"proximityPlacementGroupReference,omitempty"`
	ScaleDownMode                    *string                       `json:"scaleDownMode,omitempty"`
	ScaleSetEvictionPolicy           *string                       `json:"scaleSetEvictionPolicy,omitempty"`
	ScaleSetPriority                 *string                       `json:"scaleSetPriority,omitempty"`
	SecurityProfile                  *AgentPoolSecurityProfile     `json:"securityProfile,omitempty"`
	SpotMaxPrice                     *float64                      `json:"spotMaxPrice,omitempty"`
	Tags                             map[string]string             `json:"tags,omitempty" serializationType:"explicitEmptyCollection"`
	Type                             *string                       `json:"type,omitempty"`
	UpgradeSettings                  *AgentPoolUpgradeSettings     `json:"upgradeSettings,omitempty"`
	VmSize                           *string                       `json:"vmSize,omitempty"`

	// VnetSubnetReference: If this is not specified, a VNET and subnet will be generated and used. If no podSubnetID is
	// specified, this applies to nodes and pods, otherwise it applies to just nodes. This is of the form:
	// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
	VnetSubnetReference *genruntime.ResourceReference `armReference:"VnetSubnetID" json:"vnetSubnetReference,omitempty"`
	WindowsProfile      *AgentPoolWindowsProfile      `json:"windowsProfile,omitempty"`
	WorkloadRuntime     *string                       `json:"workloadRuntime,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAgentPoolProfile_STATUS
// Profile for the container service agent pool.
type ManagedClusterAgentPoolProfile_STATUS struct {
	AvailabilityZones          []string                         `json:"availabilityZones,omitempty"`
	CapacityReservationGroupID *string                          `json:"capacityReservationGroupID,omitempty"`
	Count                      *int                             `json:"count,omitempty"`
	CreationData               *CreationData_STATUS             `json:"creationData,omitempty"`
	CurrentOrchestratorVersion *string                          `json:"currentOrchestratorVersion,omitempty"`
	ETag                       *string                          `json:"eTag,omitempty"`
	EnableAutoScaling          *bool                            `json:"enableAutoScaling,omitempty"`
	EnableEncryptionAtHost     *bool                            `json:"enableEncryptionAtHost,omitempty"`
	EnableFIPS                 *bool                            `json:"enableFIPS,omitempty"`
	EnableNodePublicIP         *bool                            `json:"enableNodePublicIP,omitempty"`
	EnableUltraSSD             *bool                            `json:"enableUltraSSD,omitempty"`
	GpuInstanceProfile         *string                          `json:"gpuInstanceProfile,omitempty"`
	HostGroupID                *string                          `json:"hostGroupID,omitempty"`
	KubeletConfig              *KubeletConfig_STATUS            `json:"kubeletConfig,omitempty"`
	KubeletDiskType            *string                          `json:"kubeletDiskType,omitempty"`
	LinuxOSConfig              *LinuxOSConfig_STATUS            `json:"linuxOSConfig,omitempty"`
	MaxCount                   *int                             `json:"maxCount,omitempty"`
	MaxPods                    *int                             `json:"maxPods,omitempty"`
	MinCount                   *int                             `json:"minCount,omitempty"`
	Mode                       *string                          `json:"mode,omitempty"`
	Name                       *string                          `json:"name,omitempty"`
	NetworkProfile             *AgentPoolNetworkProfile_STATUS  `json:"networkProfile,omitempty"`
	NodeImageVersion           *string                          `json:"nodeImageVersion,omitempty"`
	NodeLabels                 map[string]string                `json:"nodeLabels,omitempty"`
	NodePublicIPPrefixID       *string                          `json:"nodePublicIPPrefixID,omitempty"`
	NodeTaints                 []string                         `json:"nodeTaints,omitempty"`
	OrchestratorVersion        *string                          `json:"orchestratorVersion,omitempty"`
	OsDiskSizeGB               *int                             `json:"osDiskSizeGB,omitempty"`
	OsDiskType                 *string                          `json:"osDiskType,omitempty"`
	OsSKU                      *string                          `json:"osSKU,omitempty"`
	OsType                     *string                          `json:"osType,omitempty"`
	PodSubnetID                *string                          `json:"podSubnetID,omitempty"`
	PowerState                 *PowerState_STATUS               `json:"powerState,omitempty"`
	PropertyBag                genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
	ProvisioningState          *string                          `json:"provisioningState,omitempty"`
	ProximityPlacementGroupID  *string                          `json:"proximityPlacementGroupID,omitempty"`
	ScaleDownMode              *string                          `json:"scaleDownMode,omitempty"`
	ScaleSetEvictionPolicy     *string                          `json:"scaleSetEvictionPolicy,omitempty"`
	ScaleSetPriority           *string                          `json:"scaleSetPriority,omitempty"`
	SecurityProfile            *AgentPoolSecurityProfile_STATUS `json:"securityProfile,omitempty"`
	SpotMaxPrice               *float64                         `json:"spotMaxPrice,omitempty"`
	Tags                       map[string]string                `json:"tags,omitempty"`
	Type                       *string                          `json:"type,omitempty"`
	UpgradeSettings            *AgentPoolUpgradeSettings_STATUS `json:"upgradeSettings,omitempty"`
	VmSize                     *string                          `json:"vmSize,omitempty"`
	VnetSubnetID               *string                          `json:"vnetSubnetID,omitempty"`
	WindowsProfile             *AgentPoolWindowsProfile_STATUS  `json:"windowsProfile,omitempty"`
	WorkloadRuntime            *string                          `json:"workloadRuntime,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAPIServerAccessProfile
// Access profile for managed cluster API server.
type ManagedClusterAPIServerAccessProfile struct {
	AuthorizedIPRanges             []string               `json:"authorizedIPRanges,omitempty"`
	DisableRunCommand              *bool                  `json:"disableRunCommand,omitempty"`
	EnablePrivateCluster           *bool                  `json:"enablePrivateCluster,omitempty"`
	EnablePrivateClusterPublicFQDN *bool                  `json:"enablePrivateClusterPublicFQDN,omitempty"`
	PrivateDNSZone                 *string                `json:"privateDNSZone,omitempty"`
	PropertyBag                    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAPIServerAccessProfile_STATUS
// Access profile for managed cluster API server.
type ManagedClusterAPIServerAccessProfile_STATUS struct {
	AuthorizedIPRanges             []string               `json:"authorizedIPRanges,omitempty"`
	DisableRunCommand              *bool                  `json:"disableRunCommand,omitempty"`
	EnablePrivateCluster           *bool                  `json:"enablePrivateCluster,omitempty"`
	EnablePrivateClusterPublicFQDN *bool                  `json:"enablePrivateClusterPublicFQDN,omitempty"`
	PrivateDNSZone                 *string                `json:"privateDNSZone,omitempty"`
	PropertyBag                    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAutoUpgradeProfile
// Auto upgrade profile for a managed cluster.
type ManagedClusterAutoUpgradeProfile struct {
	NodeOSUpgradeChannel *string                `json:"nodeOSUpgradeChannel,omitempty"`
	PropertyBag          genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	UpgradeChannel       *string                `json:"upgradeChannel,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAutoUpgradeProfile_STATUS
// Auto upgrade profile for a managed cluster.
type ManagedClusterAutoUpgradeProfile_STATUS struct {
	NodeOSUpgradeChannel *string                `json:"nodeOSUpgradeChannel,omitempty"`
	PropertyBag          genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	UpgradeChannel       *string                `json:"upgradeChannel,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAzureMonitorProfile
// Azure Monitor addon profiles for monitoring the managed cluster.
type ManagedClusterAzureMonitorProfile struct {
	Metrics     *ManagedClusterAzureMonitorProfileMetrics `json:"metrics,omitempty"`
	PropertyBag genruntime.PropertyBag                    `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAzureMonitorProfile_STATUS
// Azure Monitor addon profiles for monitoring the managed cluster.
type ManagedClusterAzureMonitorProfile_STATUS struct {
	Metrics     *ManagedClusterAzureMonitorProfileMetrics_STATUS `json:"metrics,omitempty"`
	PropertyBag genruntime.PropertyBag                           `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterHTTPProxyConfig
// Cluster HTTP proxy configuration.
type ManagedClusterHTTPProxyConfig struct {
	HttpProxy   *string                `json:"httpProxy,omitempty"`
	HttpsProxy  *string                `json:"httpsProxy,omitempty"`
	NoProxy     []string               `json:"noProxy,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	TrustedCa   *string                `json:"trustedCa,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterHTTPProxyConfig_STATUS
// Cluster HTTP proxy configuration.
type ManagedClusterHTTPProxyConfig_STATUS struct {
	HttpProxy   *string                `json:"httpProxy,omitempty"`
	HttpsProxy  *string                `json:"httpsProxy,omitempty"`
	NoProxy     []string               `json:"noProxy,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	TrustedCa   *string                `json:"trustedCa,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIdentity
// Identity for the managed cluster.
type ManagedClusterIdentity struct {
	DelegatedResources     map[string]DelegatedResource  `json:"delegatedResources,omitempty"`
	PropertyBag            genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	Type                   *string                       `json:"type,omitempty"`
	UserAssignedIdentities []UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIdentity_STATUS
// Identity for the managed cluster.
type ManagedClusterIdentity_STATUS struct {
	DelegatedResources     map[string]DelegatedResource_STATUS                             `json:"delegatedResources,omitempty"`
	PrincipalId            *string                                                         `json:"principalId,omitempty"`
	PropertyBag            genruntime.PropertyBag                                          `json:"$propertyBag,omitempty"`
	TenantId               *string                                                         `json:"tenantId,omitempty"`
	Type                   *string                                                         `json:"type,omitempty"`
	UserAssignedIdentities map[string]ManagedClusterIdentity_UserAssignedIdentities_STATUS `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIngressProfile
// Ingress profile for the container service cluster.
type ManagedClusterIngressProfile struct {
	PropertyBag   genruntime.PropertyBag                     `json:"$propertyBag,omitempty"`
	WebAppRouting *ManagedClusterIngressProfileWebAppRouting `json:"webAppRouting,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIngressProfile_STATUS
// Ingress profile for the container service cluster.
type ManagedClusterIngressProfile_STATUS struct {
	PropertyBag   genruntime.PropertyBag                            `json:"$propertyBag,omitempty"`
	WebAppRouting *ManagedClusterIngressProfileWebAppRouting_STATUS `json:"webAppRouting,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterMetricsProfile
// The metrics profile for the ManagedCluster.
type ManagedClusterMetricsProfile struct {
	CostAnalysis *ManagedClusterCostAnalysis `json:"costAnalysis,omitempty"`
	PropertyBag  genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterMetricsProfile_STATUS
// The metrics profile for the ManagedCluster.
type ManagedClusterMetricsProfile_STATUS struct {
	CostAnalysis *ManagedClusterCostAnalysis_STATUS `json:"costAnalysis,omitempty"`
	PropertyBag  genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterNodeResourceGroupProfile
// Node resource group lockdown profile for a managed cluster.
type ManagedClusterNodeResourceGroupProfile struct {
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RestrictionLevel *string                `json:"restrictionLevel,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterNodeResourceGroupProfile_STATUS
// Node resource group lockdown profile for a managed cluster.
type ManagedClusterNodeResourceGroupProfile_STATUS struct {
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RestrictionLevel *string                `json:"restrictionLevel,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterOIDCIssuerProfile
// The OIDC issuer profile of the Managed Cluster.
type ManagedClusterOIDCIssuerProfile struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterOIDCIssuerProfile_STATUS
// The OIDC issuer profile of the Managed Cluster.
type ManagedClusterOIDCIssuerProfile_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	IssuerURL   *string                `json:"issuerURL,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterOperatorSpec
// Details for configuring operator behavior. Fields in this struct are interpreted by the operator directly rather than being passed to Azure
type ManagedClusterOperatorSpec struct {
	ConfigMapExpressions []*core.DestinationExpression     `json:"configMapExpressions,omitempty"`
	ConfigMaps           *ManagedClusterOperatorConfigMaps `json:"configMaps,omitempty"`
	PropertyBag          genruntime.PropertyBag            `json:"$propertyBag,omitempty"`
	SecretExpressions    []*core.DestinationExpression     `json:"secretExpressions,omitempty"`
	Secrets              *ManagedClusterOperatorSecrets    `json:"secrets,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityProfile
// See [use AAD pod identity](https://docs.microsoft.com/azure/aks/use-azure-ad-pod-identity) for more details on pod
// identity integration.
type ManagedClusterPodIdentityProfile struct {
	AllowNetworkPluginKubenet      *bool                                `json:"allowNetworkPluginKubenet,omitempty"`
	Enabled                        *bool                                `json:"enabled,omitempty"`
	PropertyBag                    genruntime.PropertyBag               `json:"$propertyBag,omitempty"`
	UserAssignedIdentities         []ManagedClusterPodIdentity          `json:"userAssignedIdentities,omitempty"`
	UserAssignedIdentityExceptions []ManagedClusterPodIdentityException `json:"userAssignedIdentityExceptions,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityProfile_STATUS
// See [use AAD pod identity](https://docs.microsoft.com/azure/aks/use-azure-ad-pod-identity) for more details on pod
// identity integration.
type ManagedClusterPodIdentityProfile_STATUS struct {
	AllowNetworkPluginKubenet      *bool                                       `json:"allowNetworkPluginKubenet,omitempty"`
	Enabled                        *bool                                       `json:"enabled,omitempty"`
	PropertyBag                    genruntime.PropertyBag                      `json:"$propertyBag,omitempty"`
	UserAssignedIdentities         []ManagedClusterPodIdentity_STATUS          `json:"userAssignedIdentities,omitempty"`
	UserAssignedIdentityExceptions []ManagedClusterPodIdentityException_STATUS `json:"userAssignedIdentityExceptions,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterProperties_AutoScalerProfile
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                          *string                `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"`
	PropertyBag                       genruntime.PropertyBag `json:"$propertyBag,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"`
}

// Storage version of v1api20240901.ManagedClusterProperties_AutoScalerProfile_STATUS
type ManagedClusterProperties_AutoScalerProfile_STATUS 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                          *string                `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"`
	PropertyBag                       genruntime.PropertyBag `json:"$propertyBag,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"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfile
// Security profile for the container service cluster.
type ManagedClusterSecurityProfile struct {
	AzureKeyVaultKms *AzureKeyVaultKms                              `json:"azureKeyVaultKms,omitempty"`
	Defender         *ManagedClusterSecurityProfileDefender         `json:"defender,omitempty"`
	ImageCleaner     *ManagedClusterSecurityProfileImageCleaner     `json:"imageCleaner,omitempty"`
	PropertyBag      genruntime.PropertyBag                         `json:"$propertyBag,omitempty"`
	WorkloadIdentity *ManagedClusterSecurityProfileWorkloadIdentity `json:"workloadIdentity,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfile_STATUS
// Security profile for the container service cluster.
type ManagedClusterSecurityProfile_STATUS struct {
	AzureKeyVaultKms *AzureKeyVaultKms_STATUS                              `json:"azureKeyVaultKms,omitempty"`
	Defender         *ManagedClusterSecurityProfileDefender_STATUS         `json:"defender,omitempty"`
	ImageCleaner     *ManagedClusterSecurityProfileImageCleaner_STATUS     `json:"imageCleaner,omitempty"`
	PropertyBag      genruntime.PropertyBag                                `json:"$propertyBag,omitempty"`
	WorkloadIdentity *ManagedClusterSecurityProfileWorkloadIdentity_STATUS `json:"workloadIdentity,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterServicePrincipalProfile
// Information about a service principal identity for the cluster to use for manipulating Azure APIs.
type ManagedClusterServicePrincipalProfile struct {
	ClientId    *string                     `json:"clientId,omitempty"`
	PropertyBag genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
	Secret      *genruntime.SecretReference `json:"secret,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterServicePrincipalProfile_STATUS
// Information about a service principal identity for the cluster to use for manipulating Azure APIs.
type ManagedClusterServicePrincipalProfile_STATUS struct {
	ClientId    *string                `json:"clientId,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSKU
// The SKU of a Managed Cluster.
type ManagedClusterSKU struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tier        *string                `json:"tier,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSKU_STATUS
// The SKU of a Managed Cluster.
type ManagedClusterSKU_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tier        *string                `json:"tier,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfile
// Storage profile for the container service cluster.
type ManagedClusterStorageProfile struct {
	BlobCSIDriver      *ManagedClusterStorageProfileBlobCSIDriver      `json:"blobCSIDriver,omitempty"`
	DiskCSIDriver      *ManagedClusterStorageProfileDiskCSIDriver      `json:"diskCSIDriver,omitempty"`
	FileCSIDriver      *ManagedClusterStorageProfileFileCSIDriver      `json:"fileCSIDriver,omitempty"`
	PropertyBag        genruntime.PropertyBag                          `json:"$propertyBag,omitempty"`
	SnapshotController *ManagedClusterStorageProfileSnapshotController `json:"snapshotController,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfile_STATUS
// Storage profile for the container service cluster.
type ManagedClusterStorageProfile_STATUS struct {
	BlobCSIDriver      *ManagedClusterStorageProfileBlobCSIDriver_STATUS      `json:"blobCSIDriver,omitempty"`
	DiskCSIDriver      *ManagedClusterStorageProfileDiskCSIDriver_STATUS      `json:"diskCSIDriver,omitempty"`
	FileCSIDriver      *ManagedClusterStorageProfileFileCSIDriver_STATUS      `json:"fileCSIDriver,omitempty"`
	PropertyBag        genruntime.PropertyBag                                 `json:"$propertyBag,omitempty"`
	SnapshotController *ManagedClusterStorageProfileSnapshotController_STATUS `json:"snapshotController,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWindowsProfile
// Profile for Windows VMs in the managed cluster.
type ManagedClusterWindowsProfile struct {
	AdminPassword  *genruntime.SecretReference `json:"adminPassword,omitempty"`
	AdminUsername  *string                     `json:"adminUsername,omitempty"`
	EnableCSIProxy *bool                       `json:"enableCSIProxy,omitempty"`
	GmsaProfile    *WindowsGmsaProfile         `json:"gmsaProfile,omitempty"`
	LicenseType    *string                     `json:"licenseType,omitempty"`
	PropertyBag    genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWindowsProfile_STATUS
// Profile for Windows VMs in the managed cluster.
type ManagedClusterWindowsProfile_STATUS struct {
	AdminUsername  *string                    `json:"adminUsername,omitempty"`
	EnableCSIProxy *bool                      `json:"enableCSIProxy,omitempty"`
	GmsaProfile    *WindowsGmsaProfile_STATUS `json:"gmsaProfile,omitempty"`
	LicenseType    *string                    `json:"licenseType,omitempty"`
	PropertyBag    genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWorkloadAutoScalerProfile
// Workload Auto-scaler profile for the managed cluster.
type ManagedClusterWorkloadAutoScalerProfile struct {
	Keda                  *ManagedClusterWorkloadAutoScalerProfileKeda                  `json:"keda,omitempty"`
	PropertyBag           genruntime.PropertyBag                                        `json:"$propertyBag,omitempty"`
	VerticalPodAutoscaler *ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler `json:"verticalPodAutoscaler,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWorkloadAutoScalerProfile_STATUS
// Workload Auto-scaler profile for the managed cluster.
type ManagedClusterWorkloadAutoScalerProfile_STATUS struct {
	Keda                  *ManagedClusterWorkloadAutoScalerProfileKeda_STATUS                  `json:"keda,omitempty"`
	PropertyBag           genruntime.PropertyBag                                               `json:"$propertyBag,omitempty"`
	VerticalPodAutoscaler *ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_STATUS `json:"verticalPodAutoscaler,omitempty"`
}

// Storage version of v1api20240901.PowerState_STATUS
// Describes the Power State of the cluster
type PowerState_STATUS struct {
	Code        *string                `json:"code,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.PrivateLinkResource
// A private link resource
type PrivateLinkResource struct {
	GroupId     *string                `json:"groupId,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// Reference: The ID of the private link resource.
	Reference       *genruntime.ResourceReference `armReference:"Id" json:"reference,omitempty"`
	RequiredMembers []string                      `json:"requiredMembers,omitempty"`
	Type            *string                       `json:"type,omitempty"`
}

// Storage version of v1api20240901.PrivateLinkResource_STATUS
// A private link resource
type PrivateLinkResource_STATUS struct {
	GroupId              *string                `json:"groupId,omitempty"`
	Id                   *string                `json:"id,omitempty"`
	Name                 *string                `json:"name,omitempty"`
	PrivateLinkServiceID *string                `json:"privateLinkServiceID,omitempty"`
	PropertyBag          genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RequiredMembers      []string               `json:"requiredMembers,omitempty"`
	Type                 *string                `json:"type,omitempty"`
}

// Storage version of v1api20240901.ServiceMeshProfile
// Service mesh profile for a managed cluster.
type ServiceMeshProfile struct {
	Istio       *IstioServiceMesh      `json:"istio,omitempty"`
	Mode        *string                `json:"mode,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ServiceMeshProfile_STATUS
// Service mesh profile for a managed cluster.
type ServiceMeshProfile_STATUS struct {
	Istio       *IstioServiceMesh_STATUS `json:"istio,omitempty"`
	Mode        *string                  `json:"mode,omitempty"`
	PropertyBag genruntime.PropertyBag   `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.UserAssignedIdentity
// Details about a user assigned identity.
type UserAssignedIdentity struct {
	ClientId           *string                        `json:"clientId,omitempty" optionalConfigMapPair:"ClientId"`
	ClientIdFromConfig *genruntime.ConfigMapReference `json:"clientIdFromConfig,omitempty" optionalConfigMapPair:"ClientId"`
	ObjectId           *string                        `json:"objectId,omitempty" optionalConfigMapPair:"ObjectId"`
	ObjectIdFromConfig *genruntime.ConfigMapReference `json:"objectIdFromConfig,omitempty" optionalConfigMapPair:"ObjectId"`
	PropertyBag        genruntime.PropertyBag         `json:"$propertyBag,omitempty"`

	// ResourceReference: The resource ID of the user assigned identity.
	ResourceReference *genruntime.ResourceReference `armReference:"ResourceId" json:"resourceReference,omitempty"`
}

// Storage version of v1api20240901.UserAssignedIdentity_STATUS
// Details about a user assigned identity.
type UserAssignedIdentity_STATUS struct {
	ClientId    *string                `json:"clientId,omitempty"`
	ObjectId    *string                `json:"objectId,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ResourceId  *string                `json:"resourceId,omitempty"`
}

// Storage version of v1api20240901.AdvancedNetworking
// Advanced Networking profile for enabling observability and security feature suite on a cluster. For more information see
// aka.ms/aksadvancednetworking.
type AdvancedNetworking struct {
	Enabled       *bool                            `json:"enabled,omitempty"`
	Observability *AdvancedNetworkingObservability `json:"observability,omitempty"`
	PropertyBag   genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
	Security      *AdvancedNetworkingSecurity      `json:"security,omitempty"`
}

// Storage version of v1api20240901.AdvancedNetworking_STATUS
// Advanced Networking profile for enabling observability and security feature suite on a cluster. For more information see
// aka.ms/aksadvancednetworking.
type AdvancedNetworking_STATUS struct {
	Enabled       *bool                                   `json:"enabled,omitempty"`
	Observability *AdvancedNetworkingObservability_STATUS `json:"observability,omitempty"`
	PropertyBag   genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
	Security      *AdvancedNetworkingSecurity_STATUS      `json:"security,omitempty"`
}

// Storage version of v1api20240901.AzureKeyVaultKms
// Azure Key Vault key management service settings for the security profile.
type AzureKeyVaultKms struct {
	Enabled               *bool   `json:"enabled,omitempty"`
	KeyId                 *string `json:"keyId,omitempty"`
	KeyVaultNetworkAccess *string `json:"keyVaultNetworkAccess,omitempty"`

	// KeyVaultResourceReference: Resource ID of key vault. When keyVaultNetworkAccess is `Private`, this field is required and
	// must be a valid resource ID. When keyVaultNetworkAccess is `Public`, leave the field empty.
	KeyVaultResourceReference *genruntime.ResourceReference `armReference:"KeyVaultResourceId" json:"keyVaultResourceReference,omitempty"`
	PropertyBag               genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.AzureKeyVaultKms_STATUS
// Azure Key Vault key management service settings for the security profile.
type AzureKeyVaultKms_STATUS struct {
	Enabled               *bool                  `json:"enabled,omitempty"`
	KeyId                 *string                `json:"keyId,omitempty"`
	KeyVaultNetworkAccess *string                `json:"keyVaultNetworkAccess,omitempty"`
	KeyVaultResourceId    *string                `json:"keyVaultResourceId,omitempty"`
	PropertyBag           genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceSshConfiguration
// SSH configuration for Linux-based VMs running on Azure.
type ContainerServiceSshConfiguration struct {
	PropertyBag genruntime.PropertyBag         `json:"$propertyBag,omitempty"`
	PublicKeys  []ContainerServiceSshPublicKey `json:"publicKeys,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceSshConfiguration_STATUS
// SSH configuration for Linux-based VMs running on Azure.
type ContainerServiceSshConfiguration_STATUS struct {
	PropertyBag genruntime.PropertyBag                `json:"$propertyBag,omitempty"`
	PublicKeys  []ContainerServiceSshPublicKey_STATUS `json:"publicKeys,omitempty"`
}

// Storage version of v1api20240901.DelegatedResource
// Delegated resource properties - internal use only.
type DelegatedResource struct {
	Location         *string                `json:"location,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ReferralResource *string                `json:"referralResource,omitempty"`

	// ResourceReference: The ARM resource id of the delegated resource - internal use only.
	ResourceReference *genruntime.ResourceReference `armReference:"ResourceId" json:"resourceReference,omitempty"`
	TenantId          *string                       `json:"tenantId,omitempty"`
}

// Storage version of v1api20240901.DelegatedResource_STATUS
// Delegated resource properties - internal use only.
type DelegatedResource_STATUS struct {
	Location         *string                `json:"location,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ReferralResource *string                `json:"referralResource,omitempty"`
	ResourceId       *string                `json:"resourceId,omitempty"`
	TenantId         *string                `json:"tenantId,omitempty"`
}

// Storage version of v1api20240901.IstioServiceMesh
// Istio service mesh configuration.
type IstioServiceMesh struct {
	CertificateAuthority *IstioCertificateAuthority `json:"certificateAuthority,omitempty"`
	Components           *IstioComponents           `json:"components,omitempty"`
	PropertyBag          genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
	Revisions            []string                   `json:"revisions,omitempty"`
}

// Storage version of v1api20240901.IstioServiceMesh_STATUS
// Istio service mesh configuration.
type IstioServiceMesh_STATUS struct {
	CertificateAuthority *IstioCertificateAuthority_STATUS `json:"certificateAuthority,omitempty"`
	Components           *IstioComponents_STATUS           `json:"components,omitempty"`
	PropertyBag          genruntime.PropertyBag            `json:"$propertyBag,omitempty"`
	Revisions            []string                          `json:"revisions,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAzureMonitorProfileMetrics
// Metrics profile for the Azure Monitor managed service for Prometheus addon. Collect out-of-the-box Kubernetes
// infrastructure metrics to send to an Azure Monitor Workspace and configure additional scraping for custom targets. See
// aka.ms/AzureManagedPrometheus for an overview.
type ManagedClusterAzureMonitorProfileMetrics struct {
	Enabled          *bool                                              `json:"enabled,omitempty"`
	KubeStateMetrics *ManagedClusterAzureMonitorProfileKubeStateMetrics `json:"kubeStateMetrics,omitempty"`
	PropertyBag      genruntime.PropertyBag                             `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAzureMonitorProfileMetrics_STATUS
// Metrics profile for the Azure Monitor managed service for Prometheus addon. Collect out-of-the-box Kubernetes
// infrastructure metrics to send to an Azure Monitor Workspace and configure additional scraping for custom targets. See
// aka.ms/AzureManagedPrometheus for an overview.
type ManagedClusterAzureMonitorProfileMetrics_STATUS struct {
	Enabled          *bool                                                     `json:"enabled,omitempty"`
	KubeStateMetrics *ManagedClusterAzureMonitorProfileKubeStateMetrics_STATUS `json:"kubeStateMetrics,omitempty"`
	PropertyBag      genruntime.PropertyBag                                    `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterCostAnalysis
// The cost analysis configuration for the cluster
type ManagedClusterCostAnalysis struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterCostAnalysis_STATUS
// The cost analysis configuration for the cluster
type ManagedClusterCostAnalysis_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIdentity_UserAssignedIdentities_STATUS
type ManagedClusterIdentity_UserAssignedIdentities_STATUS struct {
	ClientId    *string                `json:"clientId,omitempty"`
	PrincipalId *string                `json:"principalId,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIngressProfileWebAppRouting
// Application Routing add-on settings for the ingress profile.
type ManagedClusterIngressProfileWebAppRouting struct {
	DnsZoneResourceReferences []genruntime.ResourceReference `armReference:"DnsZoneResourceIds" json:"dnsZoneResourceReferences,omitempty"`
	Enabled                   *bool                          `json:"enabled,omitempty"`
	PropertyBag               genruntime.PropertyBag         `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterIngressProfileWebAppRouting_STATUS
// Application Routing add-on settings for the ingress profile.
type ManagedClusterIngressProfileWebAppRouting_STATUS struct {
	DnsZoneResourceIds []string                     `json:"dnsZoneResourceIds,omitempty"`
	Enabled            *bool                        `json:"enabled,omitempty"`
	Identity           *UserAssignedIdentity_STATUS `json:"identity,omitempty"`
	PropertyBag        genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile
// Profile of the managed cluster load balancer.
type ManagedClusterLoadBalancerProfile struct {
	AllocatedOutboundPorts              *int                                                  `json:"allocatedOutboundPorts,omitempty"`
	BackendPoolType                     *string                                               `json:"backendPoolType,omitempty"`
	EffectiveOutboundIPs                []ResourceReference                                   `json:"effectiveOutboundIPs,omitempty"`
	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"`
	PropertyBag                         genruntime.PropertyBag                                `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_STATUS
// Profile of the managed cluster load balancer.
type ManagedClusterLoadBalancerProfile_STATUS struct {
	AllocatedOutboundPorts              *int                                                         `json:"allocatedOutboundPorts,omitempty"`
	BackendPoolType                     *string                                                      `json:"backendPoolType,omitempty"`
	EffectiveOutboundIPs                []ResourceReference_STATUS                                   `json:"effectiveOutboundIPs,omitempty"`
	EnableMultipleStandardLoadBalancers *bool                                                        `json:"enableMultipleStandardLoadBalancers,omitempty"`
	IdleTimeoutInMinutes                *int                                                         `json:"idleTimeoutInMinutes,omitempty"`
	ManagedOutboundIPs                  *ManagedClusterLoadBalancerProfile_ManagedOutboundIPs_STATUS `json:"managedOutboundIPs,omitempty"`
	OutboundIPPrefixes                  *ManagedClusterLoadBalancerProfile_OutboundIPPrefixes_STATUS `json:"outboundIPPrefixes,omitempty"`
	OutboundIPs                         *ManagedClusterLoadBalancerProfile_OutboundIPs_STATUS        `json:"outboundIPs,omitempty"`
	PropertyBag                         genruntime.PropertyBag                                       `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterNATGatewayProfile
// Profile of the managed cluster NAT gateway.
type ManagedClusterNATGatewayProfile struct {
	EffectiveOutboundIPs     []ResourceReference                     `json:"effectiveOutboundIPs,omitempty"`
	IdleTimeoutInMinutes     *int                                    `json:"idleTimeoutInMinutes,omitempty"`
	ManagedOutboundIPProfile *ManagedClusterManagedOutboundIPProfile `json:"managedOutboundIPProfile,omitempty"`
	PropertyBag              genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterNATGatewayProfile_STATUS
// Profile of the managed cluster NAT gateway.
type ManagedClusterNATGatewayProfile_STATUS struct {
	EffectiveOutboundIPs     []ResourceReference_STATUS                     `json:"effectiveOutboundIPs,omitempty"`
	IdleTimeoutInMinutes     *int                                           `json:"idleTimeoutInMinutes,omitempty"`
	ManagedOutboundIPProfile *ManagedClusterManagedOutboundIPProfile_STATUS `json:"managedOutboundIPProfile,omitempty"`
	PropertyBag              genruntime.PropertyBag                         `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterOperatorConfigMaps
type ManagedClusterOperatorConfigMaps struct {
	OIDCIssuerProfile *genruntime.ConfigMapDestination `json:"oidcIssuerProfile,omitempty"`
	PropertyBag       genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterOperatorSecrets
type ManagedClusterOperatorSecrets struct {
	AdminCredentials *genruntime.SecretDestination `json:"adminCredentials,omitempty"`
	PropertyBag      genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	UserCredentials  *genruntime.SecretDestination `json:"userCredentials,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentity
// Details about the pod identity assigned to the Managed Cluster.
type ManagedClusterPodIdentity struct {
	BindingSelector *string                `json:"bindingSelector,omitempty"`
	Identity        *UserAssignedIdentity  `json:"identity,omitempty"`
	Name            *string                `json:"name,omitempty"`
	Namespace       *string                `json:"namespace,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentity_STATUS
// Details about the pod identity assigned to the Managed Cluster.
type ManagedClusterPodIdentity_STATUS struct {
	BindingSelector   *string                                            `json:"bindingSelector,omitempty"`
	Identity          *UserAssignedIdentity_STATUS                       `json:"identity,omitempty"`
	Name              *string                                            `json:"name,omitempty"`
	Namespace         *string                                            `json:"namespace,omitempty"`
	PropertyBag       genruntime.PropertyBag                             `json:"$propertyBag,omitempty"`
	ProvisioningInfo  *ManagedClusterPodIdentity_ProvisioningInfo_STATUS `json:"provisioningInfo,omitempty"`
	ProvisioningState *string                                            `json:"provisioningState,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityException
// See [disable AAD Pod Identity for a specific
// Pod/Application](https://azure.github.io/aad-pod-identity/docs/configure/application_exception/) for more details.
type ManagedClusterPodIdentityException struct {
	Name        *string                `json:"name,omitempty"`
	Namespace   *string                `json:"namespace,omitempty"`
	PodLabels   map[string]string      `json:"podLabels,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityException_STATUS
// See [disable AAD Pod Identity for a specific
// Pod/Application](https://azure.github.io/aad-pod-identity/docs/configure/application_exception/) for more details.
type ManagedClusterPodIdentityException_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	Namespace   *string                `json:"namespace,omitempty"`
	PodLabels   map[string]string      `json:"podLabels,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileDefender
// Microsoft Defender settings for the security profile.
type ManagedClusterSecurityProfileDefender struct {
	// LogAnalyticsWorkspaceResourceReference: Resource ID of the Log Analytics workspace to be associated with Microsoft
	// Defender. When Microsoft Defender is enabled, this field is required and must be a valid workspace resource ID. When
	// Microsoft Defender is disabled, leave the field empty.
	LogAnalyticsWorkspaceResourceReference *genruntime.ResourceReference                            `armReference:"LogAnalyticsWorkspaceResourceId" json:"logAnalyticsWorkspaceResourceReference,omitempty"`
	PropertyBag                            genruntime.PropertyBag                                   `json:"$propertyBag,omitempty"`
	SecurityMonitoring                     *ManagedClusterSecurityProfileDefenderSecurityMonitoring `json:"securityMonitoring,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileDefender_STATUS
// Microsoft Defender settings for the security profile.
type ManagedClusterSecurityProfileDefender_STATUS struct {
	LogAnalyticsWorkspaceResourceId *string                                                         `json:"logAnalyticsWorkspaceResourceId,omitempty"`
	PropertyBag                     genruntime.PropertyBag                                          `json:"$propertyBag,omitempty"`
	SecurityMonitoring              *ManagedClusterSecurityProfileDefenderSecurityMonitoring_STATUS `json:"securityMonitoring,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileImageCleaner
// Image Cleaner removes unused images from nodes, freeing up disk space and helping to reduce attack surface area. Here
// are settings for the security profile.
type ManagedClusterSecurityProfileImageCleaner struct {
	Enabled       *bool                  `json:"enabled,omitempty"`
	IntervalHours *int                   `json:"intervalHours,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileImageCleaner_STATUS
// Image Cleaner removes unused images from nodes, freeing up disk space and helping to reduce attack surface area. Here
// are settings for the security profile.
type ManagedClusterSecurityProfileImageCleaner_STATUS struct {
	Enabled       *bool                  `json:"enabled,omitempty"`
	IntervalHours *int                   `json:"intervalHours,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileWorkloadIdentity
// Workload identity settings for the security profile.
type ManagedClusterSecurityProfileWorkloadIdentity struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileWorkloadIdentity_STATUS
// Workload identity settings for the security profile.
type ManagedClusterSecurityProfileWorkloadIdentity_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileBlobCSIDriver
// AzureBlob CSI Driver settings for the storage profile.
type ManagedClusterStorageProfileBlobCSIDriver struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileBlobCSIDriver_STATUS
// AzureBlob CSI Driver settings for the storage profile.
type ManagedClusterStorageProfileBlobCSIDriver_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileDiskCSIDriver
// AzureDisk CSI Driver settings for the storage profile.
type ManagedClusterStorageProfileDiskCSIDriver struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileDiskCSIDriver_STATUS
// AzureDisk CSI Driver settings for the storage profile.
type ManagedClusterStorageProfileDiskCSIDriver_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileFileCSIDriver
// AzureFile CSI Driver settings for the storage profile.
type ManagedClusterStorageProfileFileCSIDriver struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileFileCSIDriver_STATUS
// AzureFile CSI Driver settings for the storage profile.
type ManagedClusterStorageProfileFileCSIDriver_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileSnapshotController
// Snapshot Controller settings for the storage profile.
type ManagedClusterStorageProfileSnapshotController struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterStorageProfileSnapshotController_STATUS
// Snapshot Controller settings for the storage profile.
type ManagedClusterStorageProfileSnapshotController_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWorkloadAutoScalerProfileKeda
// KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler profile.
type ManagedClusterWorkloadAutoScalerProfileKeda struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWorkloadAutoScalerProfileKeda_STATUS
// KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler profile.
type ManagedClusterWorkloadAutoScalerProfileKeda_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler
// VPA (Vertical Pod Autoscaler) settings for the workload auto-scaler profile.
type ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_STATUS
// VPA (Vertical Pod Autoscaler) settings for the workload auto-scaler profile.
type ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.UpgradeOverrideSettings
// Settings for overrides when upgrading a cluster.
type UpgradeOverrideSettings struct {
	ForceUpgrade *bool                  `json:"forceUpgrade,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Until        *string                `json:"until,omitempty"`
}

// Storage version of v1api20240901.UpgradeOverrideSettings_STATUS
// Settings for overrides when upgrading a cluster.
type UpgradeOverrideSettings_STATUS struct {
	ForceUpgrade *bool                  `json:"forceUpgrade,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Until        *string                `json:"until,omitempty"`
}

// Storage version of v1api20240901.UserAssignedIdentityDetails
// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
	PropertyBag genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
	Reference   genruntime.ResourceReference `armReference:"Reference" json:"reference,omitempty"`
}

// AssignProperties_From_UserAssignedIdentityDetails populates our UserAssignedIdentityDetails from the provided source UserAssignedIdentityDetails
func (details *UserAssignedIdentityDetails) AssignProperties_From_UserAssignedIdentityDetails(source *storage.UserAssignedIdentityDetails) error {
	// Clone the existing property bag
	propertyBag := genruntime.NewPropertyBag(source.PropertyBag)

	// Reference
	details.Reference = source.Reference.Copy()

	// Update the property bag
	if len(propertyBag) > 0 {
		details.PropertyBag = propertyBag
	} else {
		details.PropertyBag = nil
	}

	// Invoke the augmentConversionForUserAssignedIdentityDetails interface (if implemented) to customize the conversion
	var detailsAsAny any = details
	if augmentedDetails, ok := detailsAsAny.(augmentConversionForUserAssignedIdentityDetails); ok {
		err := augmentedDetails.AssignPropertiesFrom(source)
		if err != nil {
			return eris.Wrap(err, "calling augmented AssignPropertiesFrom() for conversion")
		}
	}

	// No error
	return nil
}

// AssignProperties_To_UserAssignedIdentityDetails populates the provided destination UserAssignedIdentityDetails from our UserAssignedIdentityDetails
func (details *UserAssignedIdentityDetails) AssignProperties_To_UserAssignedIdentityDetails(destination *storage.UserAssignedIdentityDetails) error {
	// Clone the existing property bag
	propertyBag := genruntime.NewPropertyBag(details.PropertyBag)

	// Reference
	destination.Reference = details.Reference.Copy()

	// Update the property bag
	if len(propertyBag) > 0 {
		destination.PropertyBag = propertyBag
	} else {
		destination.PropertyBag = nil
	}

	// Invoke the augmentConversionForUserAssignedIdentityDetails interface (if implemented) to customize the conversion
	var detailsAsAny any = details
	if augmentedDetails, ok := detailsAsAny.(augmentConversionForUserAssignedIdentityDetails); ok {
		err := augmentedDetails.AssignPropertiesTo(destination)
		if err != nil {
			return eris.Wrap(err, "calling augmented AssignPropertiesTo() for conversion")
		}
	}

	// No error
	return nil
}

// Storage version of v1api20240901.WindowsGmsaProfile
// Windows gMSA Profile in the managed cluster.
type WindowsGmsaProfile struct {
	DnsServer      *string                `json:"dnsServer,omitempty"`
	Enabled        *bool                  `json:"enabled,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RootDomainName *string                `json:"rootDomainName,omitempty"`
}

// Storage version of v1api20240901.WindowsGmsaProfile_STATUS
// Windows gMSA Profile in the managed cluster.
type WindowsGmsaProfile_STATUS struct {
	DnsServer      *string                `json:"dnsServer,omitempty"`
	Enabled        *bool                  `json:"enabled,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RootDomainName *string                `json:"rootDomainName,omitempty"`
}

// Storage version of v1api20240901.AdvancedNetworkingObservability
// Observability profile to enable advanced network metrics and flow logs with historical contexts.
type AdvancedNetworkingObservability struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.AdvancedNetworkingObservability_STATUS
// Observability profile to enable advanced network metrics and flow logs with historical contexts.
type AdvancedNetworkingObservability_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.AdvancedNetworkingSecurity
// Security profile to enable security features on cilium based cluster.
type AdvancedNetworkingSecurity struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.AdvancedNetworkingSecurity_STATUS
// Security profile to enable security features on cilium based cluster.
type AdvancedNetworkingSecurity_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

type augmentConversionForUserAssignedIdentityDetails interface {
	AssignPropertiesFrom(src *storage.UserAssignedIdentityDetails) error
	AssignPropertiesTo(dst *storage.UserAssignedIdentityDetails) error
}

// Storage version of v1api20240901.ContainerServiceSshPublicKey
// Contains information about SSH certificate public key data.
type ContainerServiceSshPublicKey struct {
	KeyData     *string                `json:"keyData,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ContainerServiceSshPublicKey_STATUS
// Contains information about SSH certificate public key data.
type ContainerServiceSshPublicKey_STATUS struct {
	KeyData     *string                `json:"keyData,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioCertificateAuthority
// Istio Service Mesh Certificate Authority (CA) configuration. For now, we only support plugin certificates as described
// here https://aka.ms/asm-plugin-ca
type IstioCertificateAuthority struct {
	Plugin      *IstioPluginCertificateAuthority `json:"plugin,omitempty"`
	PropertyBag genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioCertificateAuthority_STATUS
// Istio Service Mesh Certificate Authority (CA) configuration. For now, we only support plugin certificates as described
// here https://aka.ms/asm-plugin-ca
type IstioCertificateAuthority_STATUS struct {
	Plugin      *IstioPluginCertificateAuthority_STATUS `json:"plugin,omitempty"`
	PropertyBag genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioComponents
// Istio components configuration.
type IstioComponents struct {
	EgressGateways  []IstioEgressGateway   `json:"egressGateways,omitempty"`
	IngressGateways []IstioIngressGateway  `json:"ingressGateways,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioComponents_STATUS
// Istio components configuration.
type IstioComponents_STATUS struct {
	EgressGateways  []IstioEgressGateway_STATUS  `json:"egressGateways,omitempty"`
	IngressGateways []IstioIngressGateway_STATUS `json:"ingressGateways,omitempty"`
	PropertyBag     genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAzureMonitorProfileKubeStateMetrics
// Kube State Metrics profile for the Azure Managed Prometheus addon. These optional settings are for the
// kube-state-metrics pod that is deployed with the addon. See aka.ms/AzureManagedPrometheus-optional-parameters for
// details.
type ManagedClusterAzureMonitorProfileKubeStateMetrics struct {
	MetricAnnotationsAllowList *string                `json:"metricAnnotationsAllowList,omitempty"`
	MetricLabelsAllowlist      *string                `json:"metricLabelsAllowlist,omitempty"`
	PropertyBag                genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterAzureMonitorProfileKubeStateMetrics_STATUS
// Kube State Metrics profile for the Azure Managed Prometheus addon. These optional settings are for the
// kube-state-metrics pod that is deployed with the addon. See aka.ms/AzureManagedPrometheus-optional-parameters for
// details.
type ManagedClusterAzureMonitorProfileKubeStateMetrics_STATUS struct {
	MetricAnnotationsAllowList *string                `json:"metricAnnotationsAllowList,omitempty"`
	MetricLabelsAllowlist      *string                `json:"metricLabelsAllowlist,omitempty"`
	PropertyBag                genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_ManagedOutboundIPs
type ManagedClusterLoadBalancerProfile_ManagedOutboundIPs struct {
	Count       *int                   `json:"count,omitempty"`
	CountIPv6   *int                   `json:"countIPv6,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_ManagedOutboundIPs_STATUS
type ManagedClusterLoadBalancerProfile_ManagedOutboundIPs_STATUS struct {
	Count       *int                   `json:"count,omitempty"`
	CountIPv6   *int                   `json:"countIPv6,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_OutboundIPPrefixes
type ManagedClusterLoadBalancerProfile_OutboundIPPrefixes struct {
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	PublicIPPrefixes []ResourceReference    `json:"publicIPPrefixes,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_OutboundIPPrefixes_STATUS
type ManagedClusterLoadBalancerProfile_OutboundIPPrefixes_STATUS struct {
	PropertyBag      genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
	PublicIPPrefixes []ResourceReference_STATUS `json:"publicIPPrefixes,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_OutboundIPs
type ManagedClusterLoadBalancerProfile_OutboundIPs struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	PublicIPs   []ResourceReference    `json:"publicIPs,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterLoadBalancerProfile_OutboundIPs_STATUS
type ManagedClusterLoadBalancerProfile_OutboundIPs_STATUS struct {
	PropertyBag genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
	PublicIPs   []ResourceReference_STATUS `json:"publicIPs,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterManagedOutboundIPProfile
// Profile of the managed outbound IP resources of the managed cluster.
type ManagedClusterManagedOutboundIPProfile struct {
	Count       *int                   `json:"count,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterManagedOutboundIPProfile_STATUS
// Profile of the managed outbound IP resources of the managed cluster.
type ManagedClusterManagedOutboundIPProfile_STATUS struct {
	Count       *int                   `json:"count,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentity_ProvisioningInfo_STATUS
type ManagedClusterPodIdentity_ProvisioningInfo_STATUS struct {
	Error       *ManagedClusterPodIdentityProvisioningError_STATUS `json:"error,omitempty"`
	PropertyBag genruntime.PropertyBag                             `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileDefenderSecurityMonitoring
// Microsoft Defender settings for the security profile threat detection.
type ManagedClusterSecurityProfileDefenderSecurityMonitoring struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterSecurityProfileDefenderSecurityMonitoring_STATUS
// Microsoft Defender settings for the security profile threat detection.
type ManagedClusterSecurityProfileDefenderSecurityMonitoring_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ResourceReference
// A reference to an Azure resource.
type ResourceReference struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// Reference: The fully qualified Azure resource id.
	Reference *genruntime.ResourceReference `armReference:"Id" json:"reference,omitempty"`
}

// Storage version of v1api20240901.ResourceReference_STATUS
// A reference to an Azure resource.
type ResourceReference_STATUS struct {
	Id          *string                `json:"id,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioEgressGateway
// Istio egress gateway configuration.
type IstioEgressGateway struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioEgressGateway_STATUS
// Istio egress gateway configuration.
type IstioEgressGateway_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioIngressGateway
// Istio ingress gateway configuration. For now, we support up to one external ingress gateway named
// `aks-istio-ingressgateway-external` and one internal ingress gateway named `aks-istio-ingressgateway-internal`.
type IstioIngressGateway struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	Mode        *string                `json:"mode,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioIngressGateway_STATUS
// Istio ingress gateway configuration. For now, we support up to one external ingress gateway named
// `aks-istio-ingressgateway-external` and one internal ingress gateway named `aks-istio-ingressgateway-internal`.
type IstioIngressGateway_STATUS struct {
	Enabled     *bool                  `json:"enabled,omitempty"`
	Mode        *string                `json:"mode,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.IstioPluginCertificateAuthority
// Plugin certificates information for Service Mesh.
type IstioPluginCertificateAuthority struct {
	CertChainObjectName *string `json:"certChainObjectName,omitempty"`
	CertObjectName      *string `json:"certObjectName,omitempty"`
	KeyObjectName       *string `json:"keyObjectName,omitempty"`

	// KeyVaultReference: The resource ID of the Key Vault.
	KeyVaultReference  *genruntime.ResourceReference `armReference:"KeyVaultId" json:"keyVaultReference,omitempty"`
	PropertyBag        genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	RootCertObjectName *string                       `json:"rootCertObjectName,omitempty"`
}

// Storage version of v1api20240901.IstioPluginCertificateAuthority_STATUS
// Plugin certificates information for Service Mesh.
type IstioPluginCertificateAuthority_STATUS struct {
	CertChainObjectName *string                `json:"certChainObjectName,omitempty"`
	CertObjectName      *string                `json:"certObjectName,omitempty"`
	KeyObjectName       *string                `json:"keyObjectName,omitempty"`
	KeyVaultId          *string                `json:"keyVaultId,omitempty"`
	PropertyBag         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RootCertObjectName  *string                `json:"rootCertObjectName,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityProvisioningError_STATUS
// An error response from the pod identity provisioning.
type ManagedClusterPodIdentityProvisioningError_STATUS struct {
	Error       *ManagedClusterPodIdentityProvisioningErrorBody_STATUS `json:"error,omitempty"`
	PropertyBag genruntime.PropertyBag                                 `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityProvisioningErrorBody_STATUS
// An error response from the pod identity provisioning.
type ManagedClusterPodIdentityProvisioningErrorBody_STATUS struct {
	Code        *string                                                          `json:"code,omitempty"`
	Details     []ManagedClusterPodIdentityProvisioningErrorBody_STATUS_Unrolled `json:"details,omitempty"`
	Message     *string                                                          `json:"message,omitempty"`
	PropertyBag genruntime.PropertyBag                                           `json:"$propertyBag,omitempty"`
	Target      *string                                                          `json:"target,omitempty"`
}

// Storage version of v1api20240901.ManagedClusterPodIdentityProvisioningErrorBody_STATUS_Unrolled
type ManagedClusterPodIdentityProvisioningErrorBody_STATUS_Unrolled struct {
	Code        *string                `json:"code,omitempty"`
	Message     *string                `json:"message,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Target      *string                `json:"target,omitempty"`
}

func init() {
	SchemeBuilder.Register(&ManagedCluster{}, &ManagedClusterList{})
}
