// Code generated by Microsoft (R) AutoRest Code Generator (autorest: 3.10.9, generator: @autorest/go@4.0.0-preview.74)
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// Code generated by @autorest/go. DO NOT EDIT.

package armredhatopenshifthcp

import "time"

// APIProfile - Information about the API of a cluster.
type APIProfile struct {
	// The internet visibility of the OpenShift API server
	Visibility *Visibility

	// READ-ONLY; URL endpoint for the API server
	URL *string

	// The list of authorized IPv4 CIDR blocks allowed to access the API server. Maximum 500 entries.
	AuthorizedCIDRs []*string
}

// AzureResourceManagerCommonTypesManagedServiceIdentityUpdate - Managed service identity (system assigned and/or user assigned
// identities)
type AzureResourceManagerCommonTypesManagedServiceIdentityUpdate struct {
	// The type of managed identity assigned to this resource.
	Type *ManagedServiceIdentityType

	// The identities assigned to this resource by the user.
	UserAssignedIdentities map[string]*UserAssignedIdentity
}

// AzureResourceManagerCommonTypesTrackedResourceUpdate - The resource model definition for an Azure Resource Manager tracked
// top level resource which has 'tags' and a 'location'
type AzureResourceManagerCommonTypesTrackedResourceUpdate struct {
	// Resource tags.
	Tags map[string]*string

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// ClusterAutoscalingProfile - ClusterAutoscaling specifies auto-scaling behavior that applies to all NodePools associated
// with a control plane.
type ClusterAutoscalingProfile struct {
	// maxNodeProvisionTimeSeconds is the maximum time to wait for node provisioning before considering the provisioning to be
	// unsuccessful. The default is 900 seconds, or 15 minutes.
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	MaxNodeProvisionTimeSeconds *int32

	// maxNodesTotal is the maximum allowable number of nodes for the Autoscaler scale out to be operational. The autoscaler will
	// not grow the cluster beyond this number. If omitted, the autoscaler will not
	// have a maximum limit.
	MaxNodesTotal *int32

	// maxPodGracePeriod is the maximum seconds to wait for graceful pod termination before scaling down a NodePool. The default
	// is 600 seconds.
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	MaxPodGracePeriodSeconds *int32

	// podPriorityThreshold enables users to schedule "best-effort" pods, which shouldn't trigger autoscaler actions, but only
	// run when there are spare resources available. The default is -10. See the
	// following for more details: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#how-does-cluster-autoscaler-work-with-pod-priority-and-preemption
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	PodPriorityThreshold *int32
}

// ClusterImageRegistryProfile - OpenShift cluster image registry
type ClusterImageRegistryProfile struct {
	// state indicates the desired ImageStream-backed cluster image registry installation mode. This can only be set during cluster
	// creation and cannot be changed after cluster creation. Enabled means the
	// ImageStream-backed image registry will be run as pods on worker nodes in the cluster. Disabled means the ImageStream-backed
	// image registry will not be present in the cluster. The default is Enabled.
	State *ClusterImageRegistryState
}

// Condition represents an observation of a resource's state.
type Condition struct {
	// READ-ONLY; The last time the condition transitioned from one status to another.
	LastTransitionTime *time.Time

	// READ-ONLY; A human readable message indicating details about the transition. This may be an empty string.
	Message *string

	// READ-ONLY; A programmatic identifier indicating the reason for the condition's last transition. This value should be a
	// CamelCase string.
	Reason *string

	// READ-ONLY; The status of the condition.
	Status *StatusType

	// READ-ONLY; Type of the condition. This is a PascalCase identifier representing the type of the condition.
	Type *ConditionType
}

// ConsoleProfile - Configuration of the cluster web console
type ConsoleProfile struct {
	// READ-ONLY; The cluster web console URL endpoint
	URL *string
}

// CustomerManagedEncryptionProfile - Customer managed encryption key profile.
type CustomerManagedEncryptionProfile struct {
	// The encryption type used. By default, "KMS" is used.
	EncryptionType *CustomerManagedEncryptionType

	// The Key Management Service (KMS) encryption key details.
	// Required when encryptionType is "KMS".
	Kms *KmsEncryptionProfile
}

// CustomerManagedEncryptionProfileUpdate - Customer managed encryption key profile.
type CustomerManagedEncryptionProfileUpdate struct {
	// The Key Management Service (KMS) encryption key details.
	// Required when encryptionType is "KMS".
	Kms *KmsEncryptionProfileUpdate
}

// DNSProfile - DNS contains the DNS settings of the cluster
type DNSProfile struct {
	// BaseDomainPrefix is the unique name of the cluster representing the OpenShift's cluster name. BaseDomainPrefix is the name
	// that will appear in the cluster's DNS, provisioned cloud providers resources
	BaseDomainPrefix *string

	// READ-ONLY; BaseDomain is the base DNS domain of the cluster.
	BaseDomain *string
}

// ErrorAdditionalInfo - The resource management error additional info.
type ErrorAdditionalInfo struct {
	// READ-ONLY; The additional info.
	Info any

	// READ-ONLY; The additional info type.
	Type *string
}

// ErrorDetail - The error detail.
type ErrorDetail struct {
	// READ-ONLY; The error additional info.
	AdditionalInfo []*ErrorAdditionalInfo

	// READ-ONLY; The error code.
	Code *string

	// READ-ONLY; The error details.
	Details []*ErrorDetail

	// READ-ONLY; The error message.
	Message *string

	// READ-ONLY; The error target.
	Target *string
}

// ErrorResponse - Common error response for all Azure Resource Manager APIs to return error details for failed operations.
// (This also follows the OData error response format.).
type ErrorResponse struct {
	// The error object.
	Error *ErrorDetail
}

// EtcdDataEncryptionProfile - The ETCD data encryption settings.
type EtcdDataEncryptionProfile struct {
	// REQUIRED; Specify the key management strategy used for the encryption key that encrypts the ETCD data.
	KeyManagementMode *EtcdDataEncryptionKeyManagementModeType

	// Specify customer managed encryption key details. Required when keyManagementMode is "CustomerManaged".
	CustomerManaged *CustomerManagedEncryptionProfile
}

// EtcdDataEncryptionProfileUpdate - The ETCD data encryption settings.
type EtcdDataEncryptionProfileUpdate struct {
	// Specify customer managed encryption key details. Required when keyManagementMode is "CustomerManaged".
	CustomerManaged *CustomerManagedEncryptionProfileUpdate
}

// EtcdProfile - The ETCD settings and configuration options.
type EtcdProfile struct {
	// ETCD Data Encryption settings. If not specified platform managed keys are used.
	DataEncryption *EtcdDataEncryptionProfile
}

// EtcdProfileUpdate - The ETCD settings and configuration options.
type EtcdProfileUpdate struct {
	// ETCD Data Encryption settings. If not specified platform managed keys are used.
	DataEncryption *EtcdDataEncryptionProfileUpdate
}

// ExternalAuth resource
type ExternalAuth struct {
	// The resource-specific properties for this resource.
	Properties *ExternalAuthProperties

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// ExternalAuthClaimProfile - External Auth claim profile
type ExternalAuthClaimProfile struct {
	// REQUIRED; The claim mappings
	Mappings *TokenClaimMappingsProfile

	// The claim validation rules
	ValidationRules []*TokenClaimValidationRule
}

// ExternalAuthClaimProfileUpdate - External Auth claim profile
type ExternalAuthClaimProfileUpdate struct {
	// The claim mappings
	Mappings *TokenClaimMappingsProfileUpdate

	// The claim validation rules
	ValidationRules []*TokenClaimValidationRule
}

// ExternalAuthClientComponentProfile - External Auth component profile Must have unique namespace/name pairs.
type ExternalAuthClientComponentProfile struct {
	// REQUIRED; The namespace of the external Auth client This specifies the namespace in which the platform component being
	// configured to use the identity provider as an authentication mode is running.
	// It is used in combination with name as a unique identifier.
	AuthClientNamespace *string

	// REQUIRED; The name of the external auth client
	// This specifies the name of the platform component being configured to use the identity provider as an authentication mode.
	// It is used in combination with namespace as a unique identifier.
	Name *string
}

// ExternalAuthClientProfile - External Auth client profile This configures how on-cluster, platform clients should request
// tokens from the identity provider.
type ExternalAuthClientProfile struct {
	// REQUIRED; External Auth client id The clientId must appear in the audience field of the TokenIssuerProfile.
	ClientID *string

	// REQUIRED; External Auth client component
	Component *ExternalAuthClientComponentProfile

	// REQUIRED; Determines the OIDC provider client type.
	Type *ExternalAuthClientType

	// external auth client scopes
	// This is useful if you have configured claim mappings that requires specific scopes to be requested beyond the standard
	// OIDC scopes. When omitted, no additional scopes are requested.
	ExtraScopes []*string
}

// ExternalAuthListResult - The response of a ExternalAuth list operation.
type ExternalAuthListResult struct {
	// REQUIRED; The ExternalAuth items on this page
	Value []*ExternalAuth

	// The link to the next page of items
	NextLink *string
}

// ExternalAuthProperties - External Auth profile
type ExternalAuthProperties struct {
	// REQUIRED; External Auth claim This configures how claims are validated and applied.
	Claim *ExternalAuthClaimProfile

	// REQUIRED; Token Issuer profile
	Issuer *TokenIssuerProfile

	// External Auth OIDC clients There must not be more than 20 entries and entries must have unique namespace/name pairs.
	Clients []*ExternalAuthClientProfile

	// READ-ONLY; Provisioning state
	ProvisioningState *ExternalAuthProvisioningState

	// READ-ONLY; Status of the external auth resource
	Status *ResourceStatus
}

// ExternalAuthPropertiesUpdate - External Auth profile
type ExternalAuthPropertiesUpdate struct {
	// External Auth claim This configures how claims are validated and applied.
	Claim *ExternalAuthClaimProfileUpdate

	// External Auth OIDC clients There must not be more than 20 entries and entries must have unique namespace/name pairs.
	Clients []*ExternalAuthClientProfile

	// Token Issuer profile
	Issuer *TokenIssuerProfileUpdate
}

// ExternalAuthUpdate - ExternalAuth resource
type ExternalAuthUpdate struct {
	// The resource-specific properties for this resource.
	Properties *ExternalAuthPropertiesUpdate

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// GroupClaimProfile - External Auth claim profile This configures how the groups of a cluster identity should be constructed
// from the claims in a JWT token issued by the identity provider. When referencing a claim, if the
// claim is present in the JWT token, its value must be a list of groups separated by a comma (',').
// For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
type GroupClaimProfile struct {
	// REQUIRED; Claim name of the external profile
	Claim *string

	// Prefix for the claim external profile If this is specified prefixPolicy will be set to "Prefix" by default
	Prefix *string
}

// GroupClaimProfileUpdate - External Auth claim profile This configures how the groups of a cluster identity should be constructed
// from the claims in a JWT token issued by the identity provider. When referencing a claim, if the
// claim is present in the JWT token, its value must be a list of groups separated by a comma (',').
// For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
type GroupClaimProfileUpdate struct {
	// Claim name of the external profile
	Claim *string

	// Prefix for the claim external profile If this is specified prefixPolicy will be set to "Prefix" by default
	Prefix *string
}

// HcpOpenShiftCluster - HCP cluster resource
type HcpOpenShiftCluster struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// The resource-specific properties for this resource.
	Properties *HcpOpenShiftClusterProperties

	// Resource tags.
	Tags map[string]*string

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// HcpOpenShiftClusterAdminCredential - HCP cluster admin credential
type HcpOpenShiftClusterAdminCredential struct {
	// READ-ONLY; Expiration timestamp for the kubeconfig's client certificate
	ExpirationTimestamp *time.Time

	// READ-ONLY; Admin kubeconfig with a temporary client certificate
	Kubeconfig *string
}

// HcpOpenShiftClusterAdminCredentialRequest - HCP cluster admin credential request body
type HcpOpenShiftClusterAdminCredentialRequest struct {
	// PEM encoded certificate request
	CertificateSigningRequest *string
}

// HcpOpenShiftClusterListResult - The response of a HcpOpenShiftCluster list operation.
type HcpOpenShiftClusterListResult struct {
	// REQUIRED; The HcpOpenShiftCluster items on this page
	Value []*HcpOpenShiftCluster

	// The link to the next page of items
	NextLink *string
}

// HcpOpenShiftClusterProperties - HCP cluster properties
type HcpOpenShiftClusterProperties struct {
	// REQUIRED; Azure platform configuration
	Platform *PlatformProfile

	// REQUIRED; Version of the control plane components
	Version *VersionProfile

	// Shows the cluster API server profile
	API *APIProfile

	// Configure ClusterAutoscaling .
	Autoscaling *ClusterAutoscalingProfile

	// OpenShift internal image registry
	ClusterImageRegistry *ClusterImageRegistryProfile

	// Cryptographic restrictions for kernel and userspace libraries
	CryptoRestrictions *CryptoRestrictions

	// Cluster DNS configuration
	DNS *DNSProfile

	// Configure ETCD.
	Etcd *EtcdProfile

	// imageDigestMirrors is a set of rules to allow pulling images from a mirrored registry by using digest specifications.
	// WARNING: Updating this array will redeploy all node pools in the cluster.
	ImageDigestMirrors []*ImageDigestMirror

	// The cluster ingress configuration
	Ingress *IngressProfile

	// Cluster network configuration
	Network *NetworkProfile

	// nodeDrainTimeoutMinutes is the grace period for how long Pod Disruption Budget-protected workloads will be respected during
	// any node draining operation. After this grace period, any workloads
	// protected by Pod Disruption Budgets that have not been successfully drained from a node will be forcibly evicted. This
	// is especially relevant to cluster upgrades.
	// Valid values are in minutes and from 0 to 10080 minutes (1 week). 0 means that the MachinePool can be drained without any
	// time limitation.
	// This is the value is used a default for all NodePools. It can be overridden by specifying nodeDrainTimeoutMinutes for a
	// given NodePool
	NodeDrainTimeoutMinutes *int32

	// READ-ONLY; Shows the cluster web console information
	Console *ConsoleProfile

	// READ-ONLY; The status of the last operation.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Status of the cluster resource
	Status *ResourceStatus
}

// HcpOpenShiftClusterPropertiesUpdate - HCP cluster properties
type HcpOpenShiftClusterPropertiesUpdate struct {
	// Configure ClusterAutoscaling .
	Autoscaling *ClusterAutoscalingProfile

	// Configure ETCD.
	Etcd *EtcdProfileUpdate

	// imageDigestMirrors is a set of rules to allow pulling images from a mirrored registry by using digest specifications.
	// WARNING: Updating this array will redeploy all node pools in the cluster.
	ImageDigestMirrors []*ImageDigestMirror

	// nodeDrainTimeoutMinutes is the grace period for how long Pod Disruption Budget-protected workloads will be respected during
	// any node draining operation. After this grace period, any workloads
	// protected by Pod Disruption Budgets that have not been successfully drained from a node will be forcibly evicted. This
	// is especially relevant to cluster upgrades.
	// Valid values are in minutes and from 0 to 10080 minutes (1 week). 0 means that the MachinePool can be drained without any
	// time limitation.
	// This is the value is used a default for all NodePools. It can be overridden by specifying nodeDrainTimeoutMinutes for a
	// given NodePool
	NodeDrainTimeoutMinutes *int32

	// Azure platform configuration
	Platform *PlatformProfileUpdate

	// Version of the control plane components
	Version *VersionProfileUpdate
}

// HcpOpenShiftClusterUpdate - HCP cluster resource
type HcpOpenShiftClusterUpdate struct {
	// The managed service identities assigned to this resource.
	Identity *AzureResourceManagerCommonTypesManagedServiceIdentityUpdate

	// The resource-specific properties for this resource.
	Properties *HcpOpenShiftClusterPropertiesUpdate

	// Resource tags.
	Tags map[string]*string

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// HcpOpenShiftVersion represents a location based available HCP OpenShift version
type HcpOpenShiftVersion struct {
	// The resource-specific properties for this resource.
	Properties *HcpOpenShiftVersionProperties

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// HcpOpenShiftVersionListResult - The response of a HcpOpenShiftVersion list operation.
type HcpOpenShiftVersionListResult struct {
	// REQUIRED; The HcpOpenShiftVersion items on this page
	Value []*HcpOpenShiftVersion

	// The link to the next page of items
	NextLink *string
}

// HcpOpenShiftVersionProperties contains details of an available HCP Openshift version
type HcpOpenShiftVersionProperties struct {
	// REQUIRED; ChannelGroup is the name of the group where this version belongs.
	ChannelGroup *string

	// REQUIRED; Enabled indicates if this version can be used to create clusters.
	Enabled *bool

	// REQUIRED; EndOfLifeTimestamp is the date and time when this version will reach End of Life.
	EndOfLifeTimestamp *time.Time
}

// HcpOperatorIdentityRoleSet - HcpOperatorIdentityRoles represents a location based representation of the required platform
// workload identities and their required roles for a given OpenShift version
type HcpOperatorIdentityRoleSet struct {
	// The resource-specific properties for this resource.
	Properties *HcpOperatorIdentityRoleSetProperties

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// HcpOperatorIdentityRoleSetListResult - The response of a HcpOperatorIdentityRoleSet list operation.
type HcpOperatorIdentityRoleSetListResult struct {
	// REQUIRED; The HcpOperatorIdentityRoleSet items on this page
	Value []*HcpOperatorIdentityRoleSet

	// The link to the next page of items
	NextLink *string
}

// HcpOperatorIdentityRoleSetProperties - HCP Operator Identity Roles properties
type HcpOperatorIdentityRoleSetProperties struct {
	// REQUIRED; The role definitions required for the User-Assigned managed identities used by Control Plane operators on a cluster.
	ControlPlaneOperators []*OperatorIdentityRoles

	// REQUIRED; The role definitions required for the User-Assigned managed identities used by Data Plane operators on a cluster.
	DataPlaneOperators []*OperatorIdentityRoles
}

// ImageDigestMirror specifies a set of mirror registries to redirect image pulls targeting the specified source registries.
type ImageDigestMirror struct {
	// REQUIRED; mirrors is zero or more locations that may also contain the same images. No mirror will be configured if not
	// specified. Images can be pulled from these mirrors only if they are referenced by their
	// digests. The mirrored location is obtained by replacing the part of the input reference that matches source by the mirrors
	// entry, e.g. for registry.redhat.io/product/repo reference, a (source, mirror)
	// pair *.redhat.io, mirror.local/redhat causes a mirror.local/redhat/product/repo repository to be used.
	// The order of mirrors in this list is treated as the user's desired priority, while source is by default considered lower
	// priority than all mirrors.
	// If no mirror is specified or all image pulls from the mirror list fail, the image will continue to be pulled from the repository
	// in the pull spec.
	// Other cluster configuration, including (but not limited to) other imageDigestMirrors objects, may impact the exact order
	// mirrors are contacted in, or some mirrors may be contacted in parallel, so this
	// should be considered a preference rather than a guarantee of ordering.
	// mirrors uses one of the following formats:
	// * host[:port]
	// * host[:port]/namespace[/namespace…]
	// * host[:port]/namespace[/namespace…]/repo
	// for more information about the format, see: https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md#choosing-a-registry-toml-table
	Mirrors []*string

	// REQUIRED; source matches the repository that users refer to, e.g. in image pull specifications. Setting source to a registry
	// hostname, e.g. docker.io, quay.io, or registry.redhat.io, will match the image pull
	// specification of the corresponding registry.
	// source uses one of the following formats:
	// * host[:port]
	// * host[:port]/namespace[/namespace…]
	// * host[:port]/namespace[/namespace…]/repo
	// * [*.]host
	// for more information about the format, see: https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md#choosing-a-registry-toml-table
	Source *string
}

// IngressProfile - Information about the Ingress of a cluster.
type IngressProfile struct {
	// The type of the default cluster ingress.
	Type *IngressType
}

// KmsEncryptionProfile - Configure etcd encryption Key Management Service (KMS) key. Your Microsoft Entra application used
// to create the cluster must be authorized to access this keyvault, e.g using the AzureCLI: az keyvault
// set-policy -n $KEYVAULT_NAME --key-permissions decrypt encrypt --spn (YOUR APPLICATION CLIENT ID)
type KmsEncryptionProfile struct {
	// REQUIRED; The details of the active key.
	ActiveKey *KmsKey

	// REQUIRED; vaultName is the name of the keyvault that contains the secret.
	VaultName *string

	// REQUIRED; visibility of the keyvault that contains the secret.
	Visibility *KeyVaultVisibility
}

// KmsEncryptionProfileUpdate - Configure etcd encryption Key Management Service (KMS) key. Your Microsoft Entra application
// used to create the cluster must be authorized to access this keyvault, e.g using the AzureCLI: az keyvault
// set-policy -n $KEYVAULT_NAME --key-permissions decrypt encrypt --spn (YOUR APPLICATION CLIENT ID)
type KmsEncryptionProfileUpdate struct {
	// The details of the active key.
	ActiveKey *KmsKeyUpdate
}

// KmsKey - A representation of a KeyVault Secret.
type KmsKey struct {
	// REQUIRED; name is the name of the keyvault key used for encryption/decryption.
	Name *string

	// REQUIRED; version contains the version of the key to use.
	Version *string
}

// KmsKeyUpdate - A representation of a KeyVault Secret.
type KmsKeyUpdate struct {
	// version contains the version of the key to use.
	Version *string
}

// Label represents the Kubernetes label
type Label struct {
	// REQUIRED; The key of the label
	Key *string

	// The value of the label
	Value *string
}

// ManagedServiceIdentity - Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	// REQUIRED; Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
	Type *ManagedServiceIdentityType

	// The set of user assigned identities associated with the resource. The userAssignedIdentities dictionary keys will be ARM
	// resource ids in the form:
	// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}.
	// The dictionary values can be empty objects ({}) in
	// requests.
	UserAssignedIdentities map[string]*UserAssignedIdentity

	// READ-ONLY; The service principal ID of the system assigned identity. This property will only be provided for a system assigned
	// identity.
	PrincipalID *string

	// READ-ONLY; The tenant ID of the system assigned identity. This property will only be provided for a system assigned identity.
	TenantID *string
}

// NetworkProfile - OpenShift networking configuration
type NetworkProfile struct {
	// Network host prefix
	HostPrefix *int32

	// The CIDR block from which to assign machine IP addresses
	MachineCIDR *string

	// The main controller responsible for rendering the core networking components
	NetworkType *NetworkType

	// The CIDR of the pod IP addresses
	PodCIDR *string

	// The CIDR block for assigned service IPs
	ServiceCIDR *string
}

// NodePool - Concrete tracked resource types can be created by aliasing this type using a specific property type.
type NodePool struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// The resource-specific properties for this resource.
	Properties *NodePoolProperties

	// Resource tags.
	Tags map[string]*string

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// NodePoolAutoScaling - Node pool autoscaling
type NodePoolAutoScaling struct {
	// The maximum number of nodes in the node pool. Validation:
	// * Minimum: 0 (must be >= min)
	// * Maximum: 200 (only when availabilityZone is not specified)
	// * No maximum when availabilityZone is specified
	Max *int32

	// The minimum number of nodes in the node pool. Validation:
	// * Minimum: 0
	// * Maximum: 200 (only when availabilityZone is not specified)
	// * No maximum when availabilityZone is specified
	Min *int32
}

// NodePoolListResult - The response of a NodePool list operation.
type NodePoolListResult struct {
	// REQUIRED; The NodePool items on this page
	Value []*NodePool

	// The link to the next page of items
	NextLink *string
}

// NodePoolPlatformProfile - Azure node pool platform configuration
type NodePoolPlatformProfile struct {
	// REQUIRED; The VM size according to the documentation:
	// * https://learn.microsoft.com/en-us/azure/virtual-machines/sizes
	VMSize *string

	// The availability zone for the node pool. Please read the documentation to see which regions support availability zones
	// * https://learn.microsoft.com/en-us/azure/availability-zones/az-overview
	AvailabilityZone *string

	// Whether to enable host based OS and data drive encryption.
	// * https://learn.microsoft.com/en-us/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data
	EnableEncryptionAtHost *bool

	// The settings and configuration options for OSDisk
	OSDisk *OsDiskProfile

	// The Azure resource ID of the worker subnet Note that a subnet cannot be reused between ARO-HCP Clusters, however the same
	// subnet can be used for NodePools of the same cluster.
	SubnetID *string
}

// NodePoolProperties - Represents the node pool properties
type NodePoolProperties struct {
	// REQUIRED; Azure node pool platform configuration
	Platform *NodePoolPlatformProfile

	// Auto-repair
	AutoRepair *bool

	// Representation of a autoscaling in a node pool.
	AutoScaling *NodePoolAutoScaling

	// Kubernetes labels to propagate to the NodePool Nodes Note that when the labels are updated this is only applied to newly
	// create nodes in the Nodepool, existing node labels remain unchanged.
	Labels []*Label

	// nodeDrainTimeoutMinutes is the grace period for how long Pod Disruption Budget-protected workloads will be respected during
	// any node draining operation. After this grace period, any workloads
	// protected by Pod Disruption Budgets that have not been successfully drained from a node will be forcibly evicted. This
	// is especially relevant to cluster upgrades.
	// Valid values are from 0 to 10080 minutes (1 week) . 0 means that the NodePool can be drained without any time limitation.
	// If unset the cluster nodeDrainTimeoutMinutes value is used as a default.
	NodeDrainTimeoutMinutes *int32

	// The number of worker nodes, it cannot be used together with autoscaling. Validation:
	// * Minimum: 0
	// * Maximum: 200 (only when availabilityZone is not specified)
	// * No maximum when availabilityZone is specified
	Replicas *int32

	// Taints for the nodes
	Taints []*Taint

	// OpenShift version for the nodepool
	Version *NodePoolVersionProfile

	// READ-ONLY; Provisioning state
	ProvisioningState *ProvisioningState

	// READ-ONLY; Status of the node pool resource
	Status *ResourceStatus
}

// NodePoolPropertiesUpdate - Represents the node pool properties
type NodePoolPropertiesUpdate struct {
	// Representation of a autoscaling in a node pool.
	AutoScaling *NodePoolAutoScaling

	// Kubernetes labels to propagate to the NodePool Nodes Note that when the labels are updated this is only applied to newly
	// create nodes in the Nodepool, existing node labels remain unchanged.
	Labels []*Label

	// nodeDrainTimeoutMinutes is the grace period for how long Pod Disruption Budget-protected workloads will be respected during
	// any node draining operation. After this grace period, any workloads
	// protected by Pod Disruption Budgets that have not been successfully drained from a node will be forcibly evicted. This
	// is especially relevant to cluster upgrades.
	// Valid values are from 0 to 10080 minutes (1 week) . 0 means that the NodePool can be drained without any time limitation.
	// If unset the cluster nodeDrainTimeoutMinutes value is used as a default.
	NodeDrainTimeoutMinutes *int32

	// The number of worker nodes, it cannot be used together with autoscaling. Validation:
	// * Minimum: 0
	// * Maximum: 200 (only when availabilityZone is not specified)
	// * No maximum when availabilityZone is specified
	Replicas *int32

	// Taints for the nodes
	Taints []*Taint

	// OpenShift version for the nodepool
	Version *NodePoolVersionProfileUpdate
}

// NodePoolUpdate - Concrete tracked resource types can be created by aliasing this type using a specific property type.
type NodePoolUpdate struct {
	// The managed service identities assigned to this resource.
	Identity *AzureResourceManagerCommonTypesManagedServiceIdentityUpdate

	// The resource-specific properties for this resource.
	Properties *NodePoolPropertiesUpdate

	// Resource tags.
	Tags map[string]*string

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// NodePoolVersionProfile - Versions represents an OpenShift version.
type NodePoolVersionProfile struct {
	// REQUIRED; ID is the unique identifier of the version.
	ID *string

	// ChannelGroup is the name of the set to which this version belongs. Each version belongs to only a single set.
	// If not specified, the default value is 'stable'.
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	ChannelGroup *string
}

// NodePoolVersionProfileUpdate - Versions represents an OpenShift version.
type NodePoolVersionProfileUpdate struct {
	// ChannelGroup is the name of the set to which this version belongs. Each version belongs to only a single set.
	// If not specified, the default value is 'stable'.
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	ChannelGroup *string

	// ID is the unique identifier of the version.
	ID *string
}

// Operation - Details of a REST API operation, returned from the Resource Provider Operations API
type Operation struct {
	// Localized display information for this particular operation.
	Display *OperationDisplay

	// READ-ONLY; Enum. Indicates the action type. "Internal" refers to actions that are for internal only APIs.
	ActionType *ActionType

	// READ-ONLY; Whether the operation applies to data-plane. This is "true" for data-plane operations and "false" for ARM/control-plane
	// operations.
	IsDataAction *bool

	// READ-ONLY; The name of the operation, as per Resource-Based Access Control (RBAC). Examples: "Microsoft.Compute/virtualMachines/write",
	// "Microsoft.Compute/virtualMachines/capture/action"
	Name *string

	// READ-ONLY; The intended executor of the operation; as in Resource Based Access Control (RBAC) and audit logs UX. Default
	// value is "user,system"
	Origin *Origin
}

// OperationDisplay - Localized display information for this particular operation.
type OperationDisplay struct {
	// READ-ONLY; The short, localized friendly description of the operation; suitable for tool tips and detailed views.
	Description *string

	// READ-ONLY; The concise, localized friendly name for the operation; suitable for dropdowns. E.g. "Create or Update Virtual
	// Machine", "Restart Virtual Machine".
	Operation *string

	// READ-ONLY; The localized friendly form of the resource provider name, e.g. "Microsoft Monitoring Insights" or "Microsoft
	// Compute".
	Provider *string

	// READ-ONLY; The localized friendly name of the resource type related to this operation. E.g. "Virtual Machines" or "Job
	// Schedule Collections".
	Resource *string
}

// OperationListResult - A list of REST API operations supported by an Azure Resource Provider. It contains an URL link to
// get the next set of results.
type OperationListResult struct {
	// READ-ONLY; URL to get the next set of operation list results (if there are any).
	NextLink *string

	// READ-ONLY; List of operations supported by the resource provider
	Value []*Operation
}

// OperatorIdentityRoles - Role definitions for a specific operator
type OperatorIdentityRoles struct {
	// REQUIRED; Name of the operator
	Name *string

	// REQUIRED; Whether or not the operator is required for installation
	Required *OperatorIdentityRequired

	// REQUIRED; The role definitions required to be assigned to the identity assumed by this operator
	RoleDefinitions []*RoleDefinition
}

// OperatorsAuthenticationProfile - The configuration that the operators of the cluster have to authenticate to Azure.
type OperatorsAuthenticationProfile struct {
	// REQUIRED; Represents the information related to Azure User-Assigned managed identities needed to perform Operators authentication
	// based on Azure User-Assigned Managed Identities
	UserAssignedIdentities *UserAssignedIdentitiesProfile
}

// OperatorsAuthenticationProfileUpdate - The configuration that the operators of the cluster have to authenticate to Azure.
type OperatorsAuthenticationProfileUpdate struct {
	// Represents the information related to Azure User-Assigned managed identities needed to perform Operators authentication
	// based on Azure User-Assigned Managed Identities
	UserAssignedIdentities *UserAssignedIdentitiesProfileUpdate
}

// OsDiskProfile - The settings and configuration options for OSDisk
type OsDiskProfile struct {
	// The type of the disk storage account
	// * https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types
	DiskStorageAccountType *DiskStorageAccountType

	// The type of the OS disk.
	// * https://learn.microsoft.com/en-us/azure/virtual-machines/ephemeral-os-disks
	DiskType *OsDiskType

	// The ID of the DiskEncryptionSet resource to use to encrypt the OS disks for the VMs. This needs to exist in the same subscription
	// id listed in the Hosted Cluster,
	// HostedCluster.Spec.Platform.Azure.SubscriptionID. DiskEncryptionSetID should also exist in a resource group under the same
	// subscription id and the same location listed in the Hosted Cluster,
	// HostedCluster.Spec.Platform.Azure.Location.
	// Details on how to create a Disk Encryption Set can be found here: https://learn.microsoft.com/en-us/azure/virtual-machines/disks-enable-customer-managed-keys-portal#set-up-your-disk-encryption-set
	EncryptionSetID *string

	// The OS disk size in GiB. Maximum is 4095 GiB for Managed disks. For Ephemeral disks, the maximum is 2040 GiB; Azure may
	// enforce a lower effective limit based on the selected VM size's local cache,
	// temp, or NVMe capacity.
	SizeGiB *int32
}

// PlatformProfile - Azure specific configuration
type PlatformProfile struct {
	// REQUIRED; ResourceId for the NSG (network security group) attached to the cluster subnet
	// Note that NSGs cannot be reused for other ARO-HCP clusters.
	NetworkSecurityGroupID *string

	// REQUIRED; The configuration that the operators of the cluster have to authenticate to Azure
	OperatorsAuthentication *OperatorsAuthenticationProfile

	// REQUIRED; The Azure resource ID of the worker subnet Note that a subnet cannot be reused between ARO-HCP Clusters.
	SubnetID *string

	// REQUIRED; The Azure resource ID of a subnet that enables direct, private network connectivity between the hosted control
	// plane and your cluster's nodes. This subnet must be dedicated to ARO HCP and cannot be
	// shared with the cluster subnet or any node pool subnets.
	VnetIntegrationSubnetID *string

	// Resource group name to put cluster resources
	// If not specified then a unique name is generated from the following pattern
	// "aro-hcp-" + clusterName + "-" + UUID
	// where clusterName means the hcpOpenShiftClusters resource name (up to 45 characters) followed by a 16-byte universally
	// unique identifier per RFC 4122.
	ManagedResourceGroup *string

	// The core outgoing configuration
	OutboundType *OutboundType

	// READ-ONLY; URL for the OIDC provider to be used for authentication to authenticate against user Azure cloud account
	IssuerURL *string
}

// PlatformProfileUpdate - Azure specific configuration
type PlatformProfileUpdate struct {
	// The configuration that the operators of the cluster have to authenticate to Azure
	OperatorsAuthentication *OperatorsAuthenticationProfileUpdate
}

// ProxyResource - The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a
// location
type ProxyResource struct {
	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// Resource - Common fields that are returned in the response for all Azure Resource Manager resources
type Resource struct {
	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// ResourceStatus represents the observed status of the resource.
type ResourceStatus struct {
	// READ-ONLY; The conditions on the resource
	Conditions []*Condition
}

// RoleDefinition - A single role definition required by a given operator
type RoleDefinition struct {
	// REQUIRED; The name of the required role definition
	Name *string

	// REQUIRED; The resource ID of the role definition
	ResourceID *string
}

// SystemData - Metadata pertaining to creation and last modification of the resource.
type SystemData struct {
	// The timestamp of resource creation (UTC).
	CreatedAt *time.Time

	// The identity that created the resource.
	CreatedBy *string

	// The type of identity that created the resource.
	CreatedByType *CreatedByType

	// The timestamp of resource last modification (UTC)
	LastModifiedAt *time.Time

	// The identity that last modified the resource.
	LastModifiedBy *string

	// The type of identity that last modified the resource.
	LastModifiedByType *CreatedByType
}

// Taint is controlling the node taint and its effects
type Taint struct {
	// REQUIRED; The effect of the taint
	Effect *Effect

	// REQUIRED; The key of the taint
	Key *string

	// The value of the taint
	Value *string
}

// TokenClaimMappingsProfile - External Auth claim mappings profile. At a minimum username or groups must be defined.
type TokenClaimMappingsProfile struct {
	// REQUIRED; The claim mappings username.
	Username *UsernameClaimProfile

	// The claim mappings groups.
	Groups *GroupClaimProfile
}

// TokenClaimMappingsProfileUpdate - External Auth claim mappings profile. At a minimum username or groups must be defined.
type TokenClaimMappingsProfileUpdate struct {
	// The claim mappings groups.
	Groups *GroupClaimProfileUpdate

	// The claim mappings username.
	Username *UsernameClaimProfileUpdate
}

// TokenClaimValidationRule - External Auth claim validation rule
type TokenClaimValidationRule struct {
	// The required claim rule to be applied.
	RequiredClaim *TokenRequiredClaim

	// This configures the type of the validation rule. It defaults to "RequiredClaim"
	Type *TokenValidationRuleType
}

// TokenIssuerProfile - Token issuer profile This configures how the platform interacts with the identity provider and how
// tokens issued from the identity provider are evaluated by the Kubernetes API server.
type TokenIssuerProfile struct {
	// REQUIRED; This configures the acceptable audiences the JWT token, issued by the identity provider, must be issued to. At
	// least one of the entries must match the 'aud' claim in the JWT token.
	// audiences must contain at least one entry and must not exceed ten entries.
	Audiences []*string

	// REQUIRED; This configures the URL used to issue tokens by the identity provider. The Kubernetes API server determines how
	// authentication tokens should be handled by matching the 'iss' claim in the JWT to the
	// issuerURL of configured identity providers.
	// issuerURL must use the 'https' scheme.
	URL *string

	// The issuer of the token
	// Certificate bundle to use to validate server certificates for the configured URL. It must be PEM encoded and when not specified,
	// the system trust is used.
	CA *string
}

// TokenIssuerProfileUpdate - Token issuer profile This configures how the platform interacts with the identity provider and
// how tokens issued from the identity provider are evaluated by the Kubernetes API server.
type TokenIssuerProfileUpdate struct {
	// This configures the acceptable audiences the JWT token, issued by the identity provider, must be issued to. At least one
	// of the entries must match the 'aud' claim in the JWT token.
	// audiences must contain at least one entry and must not exceed ten entries.
	Audiences []*string

	// The issuer of the token
	// Certificate bundle to use to validate server certificates for the configured URL. It must be PEM encoded and when not specified,
	// the system trust is used.
	CA *string

	// This configures the URL used to issue tokens by the identity provider. The Kubernetes API server determines how authentication
	// tokens should be handled by matching the 'iss' claim in the JWT to the
	// issuerURL of configured identity providers.
	// issuerURL must use the 'https' scheme.
	URL *string
}

// TokenRequiredClaim - Token required claim validation rule.
type TokenRequiredClaim struct {
	// REQUIRED; Claim name for the validation profile claim is a required field that configures the name of the required claim.
	Claim *string

	// REQUIRED; Required value requiredValue is a required field that configures the value that 'claim' must have when taken
	// from the incoming JWT claims. If the value in the JWT claims does not match, the token will
	// be rejected for authentication.
	RequiredValue *string
}

// TrackedResource - The resource model definition for an Azure Resource Manager tracked top level resource which has 'tags'
// and a 'location'
type TrackedResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// Resource tags.
	Tags map[string]*string

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}"
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// UserAssignedIdentitiesProfile - Represents the information related to Azure User-Assigned managed identities needed to
// perform Operators authentication based on Azure User-Assigned Managed Identities
type UserAssignedIdentitiesProfile struct {
	// REQUIRED; The set of Azure User-Assigned Managed Identities leveraged for the Control Plane operators of the cluster. The
	// set of required managed identities is dependent on the Cluster's OpenShift version.
	ControlPlaneOperators map[string]*string

	// REQUIRED; The set of Azure User-Assigned Managed Identities leveraged for the Data Plane operators of the cluster. The
	// set of required managed identities is dependent on the Cluster's OpenShift version.
	DataPlaneOperators map[string]*string

	// REQUIRED; Represents the information associated to an Azure User-Assigned Managed Identity whose purpose is to perform
	// service level actions.
	ServiceManagedIdentity *string
}

// UserAssignedIdentitiesProfileUpdate - Represents the information related to Azure User-Assigned managed identities needed
// to perform Operators authentication based on Azure User-Assigned Managed Identities
type UserAssignedIdentitiesProfileUpdate struct {
	// The set of Azure User-Assigned Managed Identities leveraged for the Control Plane operators of the cluster. The set of
	// required managed identities is dependent on the Cluster's OpenShift version.
	ControlPlaneOperators map[string]*string

	// The set of Azure User-Assigned Managed Identities leveraged for the Data Plane operators of the cluster. The set of required
	// managed identities is dependent on the Cluster's OpenShift version.
	DataPlaneOperators map[string]*string

	// Represents the information associated to an Azure User-Assigned Managed Identity whose purpose is to perform service level
	// actions.
	ServiceManagedIdentity *string
}

// UserAssignedIdentity - User assigned identity properties
type UserAssignedIdentity struct {
	// READ-ONLY; The client ID of the assigned identity.
	ClientID *string

	// READ-ONLY; The principal ID of the assigned identity.
	PrincipalID *string
}

// UsernameClaimProfile - External Auth claim profile This configures how the username of a cluster identity should be constructed
// from the claims in a JWT token issued by the identity provider.
type UsernameClaimProfile struct {
	// REQUIRED; Claim name of the external profile
	Claim *string

	// Prefix for the claim external profile Must be set when the prefixPolicy field is set to 'Prefix' and must be unset otherwise.
	Prefix *string

	// Prefix policy is an optional field that configures how a prefix should be applied to the value of the JWT claim specified
	// in the 'claim' field.
	// Allowed values are 'Prefix', 'NoPrefix', and 'None'. If not specified, the default policy is 'None'.
	// When set to 'Prefix', the value specified in the prefix field will be prepended to the value of the JWT claim. The prefix
	// field must be set when prefixPolicy is 'Prefix'.
	// When set to 'NoPrefix', no prefix will be prepended to the value of the JWT claim.
	// When set to 'None', this means no opinion and the platform is left to choose any prefixes that are applied which is subject
	// to change over time. Currently, the platform prepends {issuerURL}# to the
	// value of the JWT claim when the claim is not 'email'. As an example, consider the following scenario:prefix is unset, issuerURL
	// is set to https://myoidc.tld, the JWT claims include "username":"userA"
	// and "email":"userA
	PrefixPolicy *UsernameClaimPrefixPolicy
}

// UsernameClaimProfileUpdate - External Auth claim profile This configures how the username of a cluster identity should
// be constructed from the claims in a JWT token issued by the identity provider.
type UsernameClaimProfileUpdate struct {
	// Claim name of the external profile
	Claim *string

	// Prefix for the claim external profile Must be set when the prefixPolicy field is set to 'Prefix' and must be unset otherwise.
	Prefix *string

	// Prefix policy is an optional field that configures how a prefix should be applied to the value of the JWT claim specified
	// in the 'claim' field.
	// Allowed values are 'Prefix', 'NoPrefix', and 'None'. If not specified, the default policy is 'None'.
	// When set to 'Prefix', the value specified in the prefix field will be prepended to the value of the JWT claim. The prefix
	// field must be set when prefixPolicy is 'Prefix'.
	// When set to 'NoPrefix', no prefix will be prepended to the value of the JWT claim.
	// When set to 'None', this means no opinion and the platform is left to choose any prefixes that are applied which is subject
	// to change over time. Currently, the platform prepends {issuerURL}# to the
	// value of the JWT claim when the claim is not 'email'. As an example, consider the following scenario:prefix is unset, issuerURL
	// is set to https://myoidc.tld, the JWT claims include "username":"userA"
	// and "email":"userA
	PrefixPolicy *UsernameClaimPrefixPolicy
}

// VersionProfile - Versions represents an OpenShift version.
type VersionProfile struct {
	// REQUIRED; ID is the desired X.Y version of the cluster control plane.
	ID *string

	// ChannelGroup is the name of the set to which this version belongs. Each version belongs to only a single set.
	// If not specified, the default value is 'stable'.
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	ChannelGroup *string
}

// VersionProfileUpdate - Versions represents an OpenShift version.
type VersionProfileUpdate struct {
	// ChannelGroup is the name of the set to which this version belongs. Each version belongs to only a single set.
	// If not specified, the default value is 'stable'.
	// Note: The default value is not declared in the API specification because of a TypeSpec bug with updatable fields. The default
	// value will be declared in a future API version once the TypeSpec bug is
	// fixed. https://github.com/Azure/typespec-azure/issues/1586
	ChannelGroup *string

	// ID is the desired X.Y version of the cluster control plane.
	ID *string
}
