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

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

type OpenShiftCluster_Spec struct {
	// Location: The geo-location where the resource lives
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: The cluster properties.
	Properties *OpenShiftClusterProperties `json:"properties,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`
}

var _ genruntime.ARMResourceSpec = &OpenShiftCluster_Spec{}

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

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.RedHatOpenShift/openShiftClusters"
func (cluster *OpenShiftCluster_Spec) GetType() string {
	return "Microsoft.RedHatOpenShift/openShiftClusters"
}

// OpenShiftClusterProperties represents an OpenShift cluster's properties.
type OpenShiftClusterProperties struct {
	// ApiserverProfile: The cluster API server profile.
	ApiserverProfile *APIServerProfile `json:"apiserverProfile,omitempty"`

	// ClusterProfile: The cluster profile.
	ClusterProfile *ClusterProfile `json:"clusterProfile,omitempty"`

	// IngressProfiles: The cluster ingress profiles.
	IngressProfiles []IngressProfile `json:"ingressProfiles,omitempty"`

	// MasterProfile: The cluster master profile.
	MasterProfile *MasterProfile `json:"masterProfile,omitempty"`

	// NetworkProfile: The cluster network profile.
	NetworkProfile *NetworkProfile `json:"networkProfile,omitempty"`

	// ServicePrincipalProfile: The cluster service principal profile.
	ServicePrincipalProfile *ServicePrincipalProfile `json:"servicePrincipalProfile,omitempty"`

	// WorkerProfiles: The cluster worker profiles.
	WorkerProfiles []WorkerProfile `json:"workerProfiles,omitempty"`
}

// APIServerProfile represents an API server profile.
type APIServerProfile struct {
	// Visibility: API server visibility.
	Visibility *Visibility `json:"visibility,omitempty"`
}

// ClusterProfile represents a cluster profile.
type ClusterProfile struct {
	// Domain: The domain for the cluster.
	Domain *string `json:"domain,omitempty"`

	// FipsValidatedModules: If FIPS validated crypto modules are used
	FipsValidatedModules *FipsValidatedModules `json:"fipsValidatedModules,omitempty"`

	// PullSecret: The pull secret for the cluster.
	PullSecret *string `json:"pullSecret,omitempty"`

	// ResourceGroupId: The ID of the cluster resource group.
	ResourceGroupId *string `json:"resourceGroupId,omitempty"`

	// Version: The version of the cluster.
	Version *string `json:"version,omitempty"`
}

// IngressProfile represents an ingress profile.
type IngressProfile struct {
	// Name: The ingress profile name.
	Name *string `json:"name,omitempty"`

	// Visibility: Ingress visibility.
	Visibility *Visibility `json:"visibility,omitempty"`
}

// MasterProfile represents a master profile.
type MasterProfile struct {
	// DiskEncryptionSetId: The resource ID of an associated DiskEncryptionSet, if applicable.
	DiskEncryptionSetId *string `json:"diskEncryptionSetId,omitempty"`

	// EncryptionAtHost: Whether master virtual machines are encrypted at host.
	EncryptionAtHost *EncryptionAtHost `json:"encryptionAtHost,omitempty"`

	// SubnetId: The Azure resource ID of the master subnet.
	SubnetId *string `json:"subnetId,omitempty"`

	// VmSize: The size of the master VMs.
	VmSize *string `json:"vmSize,omitempty"`
}

// NetworkProfile represents a network profile.
type NetworkProfile struct {
	// LoadBalancerProfile: The cluster load balancer profile.
	LoadBalancerProfile *LoadBalancerProfile `json:"loadBalancerProfile,omitempty"`

	// OutboundType: The OutboundType used for egress traffic.
	OutboundType *OutboundType `json:"outboundType,omitempty"`

	// PodCidr: The CIDR used for OpenShift/Kubernetes Pods.
	PodCidr *string `json:"podCidr,omitempty"`

	// PreconfiguredNSG: Specifies whether subnets are pre-attached with an NSG
	PreconfiguredNSG *PreconfiguredNSG `json:"preconfiguredNSG,omitempty"`

	// ServiceCidr: The CIDR used for OpenShift/Kubernetes Services.
	ServiceCidr *string `json:"serviceCidr,omitempty"`
}

// ServicePrincipalProfile represents a service principal profile.
type ServicePrincipalProfile struct {
	// ClientId: The client ID used for the cluster.
	ClientId *string `json:"clientId,omitempty" optionalConfigMapPair:"ClientId"`

	// ClientSecret: The client secret used for the cluster.
	ClientSecret *string `json:"clientSecret,omitempty"`
}

// WorkerProfile represents a worker profile.
type WorkerProfile struct {
	// Count: The number of worker VMs.
	Count *int `json:"count,omitempty"`

	// DiskEncryptionSetId: The resource ID of an associated DiskEncryptionSet, if applicable.
	DiskEncryptionSetId *string `json:"diskEncryptionSetId,omitempty"`

	// DiskSizeGB: The disk size of the worker VMs.
	DiskSizeGB *int `json:"diskSizeGB,omitempty"`

	// EncryptionAtHost: Whether master virtual machines are encrypted at host.
	EncryptionAtHost *EncryptionAtHost `json:"encryptionAtHost,omitempty"`

	// Name: The worker profile name.
	Name *string `json:"name,omitempty"`

	// SubnetId: The Azure resource ID of the worker subnet.
	SubnetId *string `json:"subnetId,omitempty"`

	// VmSize: The size of the worker VMs.
	VmSize *string `json:"vmSize,omitempty"`
}

// EncryptionAtHost represents encryption at host state
// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type EncryptionAtHost string

const (
	EncryptionAtHost_Disabled = EncryptionAtHost("Disabled")
	EncryptionAtHost_Enabled  = EncryptionAtHost("Enabled")
)

// Mapping from string to EncryptionAtHost
var encryptionAtHost_Values = map[string]EncryptionAtHost{
	"disabled": EncryptionAtHost_Disabled,
	"enabled":  EncryptionAtHost_Enabled,
}

// FipsValidatedModules determines if FIPS is used.
// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type FipsValidatedModules string

const (
	FipsValidatedModules_Disabled = FipsValidatedModules("Disabled")
	FipsValidatedModules_Enabled  = FipsValidatedModules("Enabled")
)

// Mapping from string to FipsValidatedModules
var fipsValidatedModules_Values = map[string]FipsValidatedModules{
	"disabled": FipsValidatedModules_Disabled,
	"enabled":  FipsValidatedModules_Enabled,
}

// LoadBalancerProfile represents the profile of the cluster public load balancer.
type LoadBalancerProfile struct {
	// ManagedOutboundIps: The desired managed outbound IPs for the cluster public load balancer.
	ManagedOutboundIps *ManagedOutboundIPs `json:"managedOutboundIps,omitempty"`
}

// The outbound routing strategy used to provide your cluster egress to the internet.
// +kubebuilder:validation:Enum={"Loadbalancer","UserDefinedRouting"}
type OutboundType string

const (
	OutboundType_Loadbalancer       = OutboundType("Loadbalancer")
	OutboundType_UserDefinedRouting = OutboundType("UserDefinedRouting")
)

// Mapping from string to OutboundType
var outboundType_Values = map[string]OutboundType{
	"loadbalancer":       OutboundType_Loadbalancer,
	"userdefinedrouting": OutboundType_UserDefinedRouting,
}

// PreconfiguredNSG represents whether customers want to use their own NSG attached to the subnets
// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type PreconfiguredNSG string

const (
	PreconfiguredNSG_Disabled = PreconfiguredNSG("Disabled")
	PreconfiguredNSG_Enabled  = PreconfiguredNSG("Enabled")
)

// Mapping from string to PreconfiguredNSG
var preconfiguredNSG_Values = map[string]PreconfiguredNSG{
	"disabled": PreconfiguredNSG_Disabled,
	"enabled":  PreconfiguredNSG_Enabled,
}

// Visibility represents visibility.
// +kubebuilder:validation:Enum={"Private","Public"}
type Visibility string

const (
	Visibility_Private = Visibility("Private")
	Visibility_Public  = Visibility("Public")
)

// Mapping from string to Visibility
var visibility_Values = map[string]Visibility{
	"private": Visibility_Private,
	"public":  Visibility_Public,
}

// ManagedOutboundIPs represents the desired managed outbound IPs for the cluster public load balancer.
type ManagedOutboundIPs struct {
	// Count: Count represents the desired number of IPv4 outbound IPs created and managed by Azure for the cluster public load
	// balancer.  Allowed values are in the range of 1 - 20.  The default value is 1.
	Count *int `json:"count,omitempty"`
}
