Documentation
¶
Overview ¶
Package v1alpha1 contains API Schema definitions for the butler v1alpha1 API group. +kubebuilder:object:generate=true +groupName=butler.butlerlabs.dev
Index ¶
- Constants
- Variables
- type AWSProviderConfig
- type AddonCategory
- type AddonChartSpec
- type AddonDefaults
- type AddonDefinition
- func (in *AddonDefinition) DeepCopy() *AddonDefinition
- func (in *AddonDefinition) DeepCopyInto(out *AddonDefinition)
- func (in *AddonDefinition) DeepCopyObject() runtime.Object
- func (a *AddonDefinition) GetNamespace() string
- func (a *AddonDefinition) GetReleaseName() string
- func (a *AddonDefinition) IsBuiltIn() bool
- type AddonDefinitionList
- type AddonDefinitionSpec
- type AddonLinks
- type AddonMaintainer
- type AddonStatus
- type AddonVersions
- type AddonsSpec
- type AutoEnrollConfig
- type AzureProviderConfig
- type ButlerConfig
- func (in *ButlerConfig) DeepCopy() *ButlerConfig
- func (in *ButlerConfig) DeepCopyInto(out *ButlerConfig)
- func (in *ButlerConfig) DeepCopyObject() runtime.Object
- func (c *ButlerConfig) GetControlPlaneExposureControllerType() string
- func (c *ButlerConfig) GetControlPlaneExposureGatewayRef() string
- func (c *ButlerConfig) GetControlPlaneExposureHostname() string
- func (c *ButlerConfig) GetControlPlaneExposureIngressClassName() string
- func (c *ButlerConfig) GetControlPlaneExposureMode() ControlPlaneExposureMode
- func (c *ButlerConfig) GetDefaultControlPlaneResources() *ControlPlaneResourcesSpec
- func (c *ButlerConfig) GetGitProviderURL() string
- func (c *ButlerConfig) GetImageFactoryURL() string
- func (c *ButlerConfig) IsAutoSyncEnabled() bool
- func (c *ButlerConfig) IsGitProviderConfigured() bool
- func (c *ButlerConfig) IsImageFactoryConfigured() bool
- func (c *ButlerConfig) IsObservabilityConfigured() bool
- func (c *ButlerConfig) IsTCPProxyRequired() bool
- type ButlerConfigList
- type ButlerConfigSpec
- type ButlerConfigStatus
- type ButlerControllerAddonSpec
- type CAPIAddonSpec
- type CAPIInfraProviderSpec
- type CNIAddonSpec
- type CNISpec
- type CertManagerAddonSpec
- type CertManagerSpec
- type ClusterBootstrap
- func (c *ClusterBootstrap) AllMachinesRunning() bool
- func (in *ClusterBootstrap) DeepCopy() *ClusterBootstrap
- func (in *ClusterBootstrap) DeepCopyInto(out *ClusterBootstrap)
- func (in *ClusterBootstrap) DeepCopyObject() runtime.Object
- func (c *ClusterBootstrap) GetControlPlaneExposureGatewayRef() string
- func (c *ClusterBootstrap) GetControlPlaneExposureHostname() string
- func (c *ClusterBootstrap) GetControlPlaneExposureIngressClassName() string
- func (c *ClusterBootstrap) GetControlPlaneExposureMode() ControlPlaneExposureMode
- func (c *ClusterBootstrap) GetControlPlaneIPs() []string
- func (c *ClusterBootstrap) GetControlPlaneReplicas() int32
- func (c *ClusterBootstrap) GetExpectedMachineCount() int
- func (c *ClusterBootstrap) GetLoadBalancerAddressPool() string
- func (c *ClusterBootstrap) GetStorageReplicaCount() int32
- func (c *ClusterBootstrap) GetWorkerIPs() []string
- func (c *ClusterBootstrap) IsCloudProvider() bool
- func (c *ClusterBootstrap) IsFailed() bool
- func (c *ClusterBootstrap) IsReady() bool
- func (c *ClusterBootstrap) IsSingleNode() bool
- func (c *ClusterBootstrap) IsTCPProxyRequired() bool
- type ClusterBootstrapAddonsSpec
- func (in *ClusterBootstrapAddonsSpec) DeepCopy() *ClusterBootstrapAddonsSpec
- func (in *ClusterBootstrapAddonsSpec) DeepCopyInto(out *ClusterBootstrapAddonsSpec)
- func (s *ClusterBootstrapAddonsSpec) GetButlerControllerImage() string
- func (s *ClusterBootstrapAddonsSpec) GetCAPIVersion() string
- func (s *ClusterBootstrapAddonsSpec) GetConsoleIngressHost(clusterName string) string
- func (s *ClusterBootstrapAddonsSpec) GetConsoleVersion() string
- func (s *ClusterBootstrapAddonsSpec) IsButlerControllerEnabled() bool
- func (s *ClusterBootstrapAddonsSpec) IsCAPIEnabled() bool
- func (s *ClusterBootstrapAddonsSpec) IsConsoleEnabled() bool
- type ClusterBootstrapClusterSpec
- type ClusterBootstrapList
- type ClusterBootstrapMachineStatus
- type ClusterBootstrapNetworkSpec
- type ClusterBootstrapNodePool
- type ClusterBootstrapPhase
- type ClusterBootstrapSpec
- type ClusterBootstrapStatus
- type ClusterBootstrapTalosSpec
- type ClusterDefaults
- type ClusterTopology
- type ComponentResources
- type ConsoleAddonSpec
- type ConsoleIngressSpec
- type ControlPlaneExposureMode
- type ControlPlaneExposureSpec
- type ControlPlaneHAAddonSpec
- type ControlPlaneProviderAddonSpec
- type ControlPlaneResourcesSpec
- type ControlPlaneSpec
- type DiskSpec
- type DotfilesSpec
- type EditorConfig
- type ExtensionValues
- type GCPOverride
- type GCPProviderConfig
- type GitOpsAddonSpec
- type GitOpsDirectoryLayout
- type GitOpsExportFormat
- type GitOpsSpec
- type GitProviderConfig
- type GitProviderStatus
- type GitProviderType
- type GitRepositorySpec
- type GoogleWorkspaceConfig
- type HarvesterOverride
- type HarvesterProviderConfig
- type HelmChartSpec
- type HelmReleaseStatus
- type IPAllocation
- type IPAllocationList
- type IPAllocationPhase
- type IPAllocationSpec
- type IPAllocationStatus
- type IPAllocationType
- type IPPool
- type IdentityProvider
- func (in *IdentityProvider) DeepCopy() *IdentityProvider
- func (in *IdentityProvider) DeepCopyInto(out *IdentityProvider)
- func (in *IdentityProvider) DeepCopyObject() runtime.Object
- func (idp *IdentityProvider) GetDisplayName() string
- func (idp *IdentityProvider) GetEmailClaim() string
- func (idp *IdentityProvider) GetGroupsClaim() string
- func (idp *IdentityProvider) GetScopes() []string
- func (idp *IdentityProvider) IsReady() bool
- type IdentityProviderList
- type IdentityProviderPhase
- type IdentityProviderSpec
- type IdentityProviderStatus
- type IdentityProviderType
- type ImageFactoryConfig
- type ImageFactoryRef
- type ImageSync
- func (in *ImageSync) DeepCopy() *ImageSync
- func (in *ImageSync) DeepCopyInto(out *ImageSync)
- func (in *ImageSync) DeepCopyObject() runtime.Object
- func (is *ImageSync) IsFailed() bool
- func (is *ImageSync) IsReady() bool
- func (is *ImageSync) SetFailure(reason, message string)
- func (is *ImageSync) SetPhase(phase ImageSyncPhase)
- type ImageSyncList
- type ImageSyncPhase
- type ImageSyncSpec
- type ImageSyncStatus
- type InfrastructureOverride
- type IngressAddonSpec
- type IngressSpec
- type LoadBalancerAddonSpec
- type LoadBalancerPhase
- type LoadBalancerPoolSpec
- type LoadBalancerRequest
- func (in *LoadBalancerRequest) DeepCopy() *LoadBalancerRequest
- func (in *LoadBalancerRequest) DeepCopyInto(out *LoadBalancerRequest)
- func (in *LoadBalancerRequest) DeepCopyObject() runtime.Object
- func (lbr *LoadBalancerRequest) GetHealthCheckPort() int32
- func (lbr *LoadBalancerRequest) IsFailed() bool
- func (lbr *LoadBalancerRequest) IsReady() bool
- func (lbr *LoadBalancerRequest) IsTerminating() bool
- func (lbr *LoadBalancerRequest) SetFailure(reason, message string)
- func (lbr *LoadBalancerRequest) SetPhase(phase LoadBalancerPhase)
- type LoadBalancerRequestList
- type LoadBalancerRequestSpec
- type LoadBalancerRequestStatus
- type LoadBalancerSpec
- type LoadBalancerTarget
- type LocalObjectReference
- type LogCollectionDefaults
- type MachinePhase
- type MachineRequest
- func (in *MachineRequest) DeepCopy() *MachineRequest
- func (in *MachineRequest) DeepCopyInto(out *MachineRequest)
- func (in *MachineRequest) DeepCopyObject() runtime.Object
- func (mr *MachineRequest) IsFailed() bool
- func (mr *MachineRequest) IsReady() bool
- func (mr *MachineRequest) IsTerminating() bool
- func (mr *MachineRequest) SetFailure(reason, message string)
- func (mr *MachineRequest) SetPhase(phase MachinePhase)
- type MachineRequestList
- type MachineRequestSpec
- type MachineRequestStatus
- type MachineRole
- type MachineTemplateSpec
- type ManagementAddon
- type ManagementAddonList
- type ManagementAddonPhase
- type ManagementAddonSpec
- type ManagementAddonStatus
- type ManagementMode
- type ManagementPolicySpec
- type MetricCollectionDefaults
- type MultiTenancyConfig
- type MultiTenancyMode
- type NamespacedObjectReference
- type NetworkPool
- type NetworkPoolList
- type NetworkPoolSpec
- type NetworkPoolStatus
- type NetworkQuota
- type NetworkingSpec
- type NutanixOverride
- type NutanixProviderConfig
- type OIDCConfig
- type OIDCDiscoveredEndpoints
- type OSSpec
- type OSType
- type ObservabilityCollectionConfig
- type ObservabilityConfig
- type ObservabilityPipelineConfig
- type ObservabilityStatus
- type ObservedClusterState
- type PinnedIPRange
- type PoolReference
- type ProviderCapacity
- type ProviderConfig
- type ProviderConfigList
- type ProviderConfigScope
- type ProviderConfigScopeType
- type ProviderConfigSpec
- type ProviderConfigStatus
- type ProviderLBConfig
- type ProviderLimits
- type ProviderNetworkConfig
- type ProviderReference
- type ProviderType
- type ProxmoxOverride
- type ProxmoxProviderConfig
- type ReservedRange
- type ResourceLimits
- type ResourceQuantities
- type SSHKeyEntry
- type SecretReference
- type StorageAddonSpec
- type StorageSpec
- type TalosConfig
- type TalosConfigPatch
- type Team
- type TeamAccess
- type TeamGroup
- type TeamList
- type TeamPhase
- type TeamResourceLimits
- type TeamResourceUsage
- type TeamRole
- type TeamSpec
- type TeamStatus
- type TeamUser
- type TenantAddon
- type TenantAddonList
- type TenantAddonPhase
- type TenantAddonSpec
- type TenantAddonStatus
- type TenantAllocationConfig
- type TenantAllocationDefaults
- type TenantCluster
- type TenantClusterList
- type TenantClusterPhase
- type TenantClusterSpec
- type TenantClusterStatus
- type User
- type UserAuthType
- type UserList
- type UserPhase
- type UserSpec
- type UserStatus
- type UserTeamMembership
- type VMIDRange
- type WorkerStatus
- type WorkersSpec
- type Workspace
- type WorkspaceEnvSource
- type WorkspaceList
- type WorkspacePhase
- type WorkspaceRepository
- type WorkspaceResourceQuota
- type WorkspaceResources
- type WorkspaceSpec
- type WorkspaceStatus
- type WorkspaceTemplate
- type WorkspaceTemplateBody
- type WorkspaceTemplateCategory
- type WorkspaceTemplateList
- type WorkspaceTemplateScope
- type WorkspaceTemplateSpec
- type WorkspacesConfig
Constants ¶
const ( // LabelTeam identifies the team that owns a resource. LabelTeam = "butler.butlerlabs.dev/team" // LabelTenant identifies the tenant cluster. LabelTenant = "butler.butlerlabs.dev/tenant" // LabelSourceNamespace indicates the source namespace for generated resources. LabelSourceNamespace = "butler.butlerlabs.dev/source-namespace" // LabelSourceName indicates the source name for generated resources. LabelSourceName = "butler.butlerlabs.dev/source-name" // LabelNetworkPool identifies the NetworkPool associated with a resource. LabelNetworkPool = "butler.butlerlabs.dev/network-pool" // LabelProviderConfig identifies the ProviderConfig associated with a resource. LabelProviderConfig = "butler.butlerlabs.dev/provider-config" // LabelWorkspaceOwner identifies the owner of a workspace (hashed email). LabelWorkspaceOwner = "butler.butlerlabs.dev/workspace-owner" // LabelAllocationType identifies the IP allocation type (loadbalancer, nodes). LabelAllocationType = "butler.butlerlabs.dev/allocation-type" // LabelSchematicID identifies the factory schematic for image sync deduplication. LabelSchematicID = "butler.butlerlabs.dev/schematic-id" // LabelImageVersion identifies the image version for image sync deduplication. LabelImageVersion = "butler.butlerlabs.dev/image-version" // LabelImageArch identifies the image architecture for image sync deduplication. LabelImageArch = "butler.butlerlabs.dev/image-arch" )
Butler-specific labels for resource tracking and multi-tenancy.
const ( // AnnotationDescription provides a human-readable description. AnnotationDescription = "butler.butlerlabs.dev/description" // AnnotationCreatedBy indicates who created the resource. AnnotationCreatedBy = "butler.butlerlabs.dev/created-by" // AnnotationConnect signals the controller to create/tear down the SSH service. AnnotationConnect = "butler.butlerlabs.dev/connect" // AnnotationConnectTime records when the SSH service was created. AnnotationConnectTime = "butler.butlerlabs.dev/connect-time" )
Butler-specific annotations.
const ( // FinalizerTeam is the finalizer for Team resources. FinalizerTeam = "butler.butlerlabs.dev/team" // FinalizerTenantCluster is the finalizer for TenantCluster resources. FinalizerTenantCluster = "butler.butlerlabs.dev/tenantcluster" // FinalizerTenantAddon is the finalizer for TenantAddon resources. FinalizerTenantAddon = "butler.butlerlabs.dev/tenantaddon" // FinalizerUser is the finalizer for User resources. FinalizerUser = "butler.butlerlabs.dev/user" // FinalizerNetworkPool is the finalizer for NetworkPool resources. FinalizerNetworkPool = "butler.butlerlabs.dev/networkpool" // FinalizerIPAllocation is the finalizer for IPAllocation resources. FinalizerIPAllocation = "butler.butlerlabs.dev/ipallocation" // FinalizerProviderConfig is the finalizer for ProviderConfig resources. FinalizerProviderConfig = "butler.butlerlabs.dev/providerconfig" // FinalizerWorkspace is the finalizer for Workspace resources. FinalizerWorkspace = "butler.butlerlabs.dev/workspace" // FinalizerImageSync is the finalizer for ImageSync resources. FinalizerImageSync = "butler.butlerlabs.dev/imagesync" // FinalizerLoadBalancerRequest is the finalizer for LoadBalancerRequest resources. FinalizerLoadBalancerRequest = "butler.butlerlabs.dev/loadbalancerrequest" )
Finalizers.
const ( // ConditionTypeReady indicates the resource is ready for use. ConditionTypeReady = "Ready" // ConditionTypeProgressing indicates the resource is making progress toward Ready. ConditionTypeProgressing = "Progressing" // ConditionTypeDegraded indicates the resource is in a degraded state. ConditionTypeDegraded = "Degraded" )
Condition types following Kubernetes API conventions. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties
const ( // ReasonPending indicates the request is waiting to be processed. ReasonPending = "Pending" // ReasonCreating indicates the resource is being created. ReasonCreating = "Creating" // ReasonCreated indicates the resource was successfully created. ReasonCreated = "Created" // ReasonRunning indicates the resource is running. ReasonRunning = "Running" // ReasonWaitingForIP indicates waiting for IP address assignment. ReasonWaitingForIP = "WaitingForIP" // ReasonFailed indicates the operation failed. ReasonFailed = "Failed" // ReasonDeleting indicates the resource is being deleted. ReasonDeleting = "Deleting" // ReasonDeleted indicates the resource was deleted. ReasonDeleted = "Deleted" // ReasonProviderError indicates an error from the infrastructure provider. ReasonProviderError = "ProviderError" // ReasonInvalidConfiguration indicates invalid configuration. ReasonInvalidConfiguration = "InvalidConfiguration" // ReasonReady indicates the resource is ready. ReasonReady = "Ready" // ReasonWaitingForDependencies indicates waiting for dependencies. ReasonWaitingForDependencies = "WaitingForDependencies" // ReasonReconciling indicates active reconciliation. ReasonReconciling = "Reconciling" // ReasonValidationFailed indicates validation failed. ReasonValidationFailed = "ValidationFailed" // ReasonQuotaExceeded indicates a resource quota was exceeded. ReasonQuotaExceeded = "QuotaExceeded" // ReasonPoolExhausted indicates a NetworkPool has no available IPs. ReasonPoolExhausted = "PoolExhausted" // ReasonAllocationFailed indicates an IP allocation failed. ReasonAllocationFailed = "AllocationFailed" // ReasonProviderAccessDenied indicates the team does not have access to the provider. ReasonProviderAccessDenied = "ProviderAccessDenied" // ReasonNetworkNotReady indicates the network is not ready. ReasonNetworkNotReady = "NetworkNotReady" // ReasonCredentialsInvalid indicates provider credentials are invalid. ReasonCredentialsInvalid = "CredentialsInvalid" // ReasonNetworkReachable indicates the network is reachable. ReasonNetworkReachable = "NetworkReachable" // ReasonPoolAvailable indicates the network pool has capacity. ReasonPoolAvailable = "PoolAvailable" // ReasonImageBuilding indicates the factory is building the image. ReasonImageBuilding = "ImageBuilding" // ReasonImageDownloading indicates the image is being downloaded. ReasonImageDownloading = "ImageDownloading" // ReasonImageUploading indicates the image is being uploaded to the provider. ReasonImageUploading = "ImageUploading" // ReasonImageReady indicates the image is available on the provider. ReasonImageReady = "ImageReady" // ReasonImageSyncFailed indicates the image sync failed. ReasonImageSyncFailed = "ImageSyncFailed" )
Condition reasons for MachineRequest.
const ( // IdentityProviderConditionDiscovered indicates OIDC discovery succeeded. IdentityProviderConditionDiscovered = "Discovered" // IdentityProviderConditionSecretValid indicates the client secret is valid. IdentityProviderConditionSecretValid = "SecretValid" // IdentityProviderConditionReady indicates the provider is ready for use. IdentityProviderConditionReady = "Ready" )
IdentityProvider condition types.
const ( // TransferModeDirect means the provider downloads directly from the factory URL. TransferModeDirect = "direct" // TransferModeProxy means the provider controller downloads first, then uploads to the provider. TransferModeProxy = "proxy" )
TransferMode constants.
const ( // ConditionTypeLBProvisioned indicates the cloud LB resources are created. ConditionTypeLBProvisioned = "Provisioned" // ConditionTypeLBTargetsSynced indicates backends are registered with the LB. ConditionTypeLBTargetsSynced = "TargetsSynced" )
LoadBalancerRequest condition types.
const ( // TeamConditionNamespaceReady indicates the Team namespace exists. TeamConditionNamespaceReady = "NamespaceReady" // TeamConditionRBACReady indicates RBAC is configured. TeamConditionRBACReady = "RBACReady" // TeamConditionReady indicates the Team is fully ready. TeamConditionReady = "Ready" // TeamConditionQuotaExceeded indicates the Team has exceeded quota. TeamConditionQuotaExceeded = "QuotaExceeded" )
Team condition types.
const ( // TenantAddonConditionClusterReady indicates the target cluster is ready. TenantAddonConditionClusterReady = "ClusterReady" // TenantAddonConditionDependenciesMet indicates dependencies are satisfied. TenantAddonConditionDependenciesMet = "DependenciesMet" // TenantAddonConditionInstalled indicates the addon is installed. TenantAddonConditionInstalled = "Installed" // TenantAddonConditionHealthy indicates the addon is healthy. TenantAddonConditionHealthy = "Healthy" // TenantAddonConditionReady indicates the addon is fully ready. TenantAddonConditionReady = "Ready" )
TenantAddon condition types.
const ( // TenantClusterConditionInfrastructureReady indicates CAPI resources are ready. TenantClusterConditionInfrastructureReady = "InfrastructureReady" // TenantClusterConditionControlPlaneReady indicates the control plane is ready. TenantClusterConditionControlPlaneReady = "ControlPlaneReady" // TenantClusterConditionWorkersReady indicates workers are ready. TenantClusterConditionWorkersReady = "WorkersReady" // TenantClusterConditionAddonsReady indicates addons are installed. TenantClusterConditionAddonsReady = "AddonsReady" // TenantClusterConditionReady indicates the cluster is fully ready. TenantClusterConditionReady = "Ready" // TenantClusterConditionNetworkReady indicates IP allocation is complete. TenantClusterConditionNetworkReady = "NetworkReady" // TenantClusterConditionProviderAccessGranted indicates scope check passed. TenantClusterConditionProviderAccessGranted = "ProviderAccessGranted" // TenantClusterConditionImageReady indicates the OS image is synced to the provider. TenantClusterConditionImageReady = "ImageReady" )
TenantCluster condition types.
const ( // UserConditionReady indicates the user account is ready for login. UserConditionReady = "Ready" // UserConditionInvitePending indicates waiting for user to accept invite. UserConditionInvitePending = "InvitePending" // UserConditionInviteExpired indicates the invite has expired. UserConditionInviteExpired = "InviteExpired" )
User condition types.
const ( // WorkspaceConditionPVCReady indicates the PVC is created and bound. WorkspaceConditionPVCReady = "PVCReady" // WorkspaceConditionPodReady indicates the pod is created and running. WorkspaceConditionPodReady = "PodReady" // WorkspaceConditionRepositoryCloned indicates the Git repository was cloned. WorkspaceConditionRepositoryCloned = "RepositoryCloned" // WorkspaceConditionDotfilesInstalled indicates dotfiles were installed. WorkspaceConditionDotfilesInstalled = "DotfilesInstalled" // WorkspaceConditionSSHReady indicates the SSH server is accessible. WorkspaceConditionSSHReady = "SSHReady" // WorkspaceConditionReady indicates the workspace is fully operational. WorkspaceConditionReady = "Ready" )
Workspace condition types.
const ( // LabelManagedBy indicates the tool managing the resource. // Uses the Kubernetes standard label for interoperability with // kubectl, Helm, ArgoCD, Prometheus, and other CNCF tools. LabelManagedBy = "app.kubernetes.io/managed-by" )
Kubernetes recommended labels. See: https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "butler.butlerlabs.dev", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme. SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
Functions ¶
This section is empty.
Types ¶
type AWSProviderConfig ¶ added in v0.3.0
type AWSProviderConfig struct {
// Region is the AWS region.
// +kubebuilder:validation:Required
Region string `json:"region"`
// VPCID is the VPC identifier.
// +optional
VPCID string `json:"vpcID,omitempty"`
// SubnetIDs are the subnet identifiers for VM placement.
// +optional
SubnetIDs []string `json:"subnetIDs,omitempty"`
// SecurityGroupIDs are the security group identifiers.
// +optional
SecurityGroupIDs []string `json:"securityGroupIDs,omitempty"`
}
AWSProviderConfig contains AWS-specific configuration.
func (*AWSProviderConfig) DeepCopy ¶ added in v0.3.0
func (in *AWSProviderConfig) DeepCopy() *AWSProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSProviderConfig.
func (*AWSProviderConfig) DeepCopyInto ¶ added in v0.3.0
func (in *AWSProviderConfig) DeepCopyInto(out *AWSProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonCategory ¶
type AddonCategory string
AddonCategory defines the category of an addon for UI grouping. +kubebuilder:validation:Enum=cni;loadbalancer;storage;certmanager;ingress;observability;backup;gitops;security;dns;database;messaging;service-mesh;other
const ( AddonCategoryCNI AddonCategory = "cni" AddonCategoryLoadBalancer AddonCategory = "loadbalancer" AddonCategoryStorage AddonCategory = "storage" AddonCategoryCertManager AddonCategory = "certmanager" AddonCategoryIngress AddonCategory = "ingress" AddonCategoryObservability AddonCategory = "observability" AddonCategoryBackup AddonCategory = "backup" AddonCategoryGitOps AddonCategory = "gitops" AddonCategorySecurity AddonCategory = "security" AddonCategoryDNS AddonCategory = "dns" AddonCategoryDatabase AddonCategory = "database" AddonCategoryMessaging AddonCategory = "messaging" AddonCategoryServiceMesh AddonCategory = "service-mesh" AddonCategoryOther AddonCategory = "other" )
type AddonChartSpec ¶
type AddonChartSpec struct {
// Repository is the Helm repository URL.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https?://`
Repository string `json:"repository"`
// Name is the chart name within the repository.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// DefaultVersion is the chart version used when TenantAddon
// doesn't specify a version. Should be a stable, tested version.
// +kubebuilder:validation:Required
DefaultVersion string `json:"defaultVersion"`
// AvailableVersions lists other versions known to work with Butler.
// Used for version dropdown in UI. If empty, only defaultVersion shown.
// +optional
AvailableVersions []string `json:"availableVersions,omitempty"`
}
AddonChartSpec specifies the Helm chart to install.
func (*AddonChartSpec) DeepCopy ¶
func (in *AddonChartSpec) DeepCopy() *AddonChartSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonChartSpec.
func (*AddonChartSpec) DeepCopyInto ¶
func (in *AddonChartSpec) DeepCopyInto(out *AddonChartSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonDefaults ¶
type AddonDefaults struct {
// Namespace is the target namespace for installation.
// If not specified, defaults to the addon name.
// +optional
Namespace string `json:"namespace,omitempty"`
// ReleaseName is the Helm release name.
// If not specified, defaults to the addon name.
// +optional
ReleaseName string `json:"releaseName,omitempty"`
// CreateNamespace indicates whether to create the namespace.
// +kubebuilder:default=true
// +optional
CreateNamespace bool `json:"createNamespace,omitempty"`
// Values are default Helm values applied during installation.
// These can be overridden in TenantAddon.spec.values.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
// Timeout for Helm operations.
// +kubebuilder:default="10m"
// +optional
Timeout string `json:"timeout,omitempty"`
}
AddonDefaults provides default installation settings.
func (*AddonDefaults) DeepCopy ¶
func (in *AddonDefaults) DeepCopy() *AddonDefaults
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonDefaults.
func (*AddonDefaults) DeepCopyInto ¶
func (in *AddonDefaults) DeepCopyInto(out *AddonDefaults)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonDefinition ¶
type AddonDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec AddonDefinitionSpec `json:"spec,omitempty"`
}
AddonDefinition defines an addon available for installation in tenant clusters. AddonDefinitions are cluster-scoped resources that describe Helm charts that can be installed via TenantAddon resources.
Butler ships with built-in AddonDefinitions for common CNCF tools. Organizations can add custom AddonDefinitions for internal charts.
func (*AddonDefinition) DeepCopy ¶
func (in *AddonDefinition) DeepCopy() *AddonDefinition
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonDefinition.
func (*AddonDefinition) DeepCopyInto ¶
func (in *AddonDefinition) DeepCopyInto(out *AddonDefinition)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AddonDefinition) DeepCopyObject ¶
func (in *AddonDefinition) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*AddonDefinition) GetNamespace ¶
func (a *AddonDefinition) GetNamespace() string
GetNamespace returns the target namespace, defaulting to addon name.
func (*AddonDefinition) GetReleaseName ¶
func (a *AddonDefinition) GetReleaseName() string
GetReleaseName returns the release name, defaulting to addon name.
func (*AddonDefinition) IsBuiltIn ¶
func (a *AddonDefinition) IsBuiltIn() bool
IsBuiltIn returns true if this is a Butler-maintained addon.
type AddonDefinitionList ¶
type AddonDefinitionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []AddonDefinition `json:"items"`
}
AddonDefinitionList contains a list of AddonDefinition.
func (*AddonDefinitionList) DeepCopy ¶
func (in *AddonDefinitionList) DeepCopy() *AddonDefinitionList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonDefinitionList.
func (*AddonDefinitionList) DeepCopyInto ¶
func (in *AddonDefinitionList) DeepCopyInto(out *AddonDefinitionList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*AddonDefinitionList) DeepCopyObject ¶
func (in *AddonDefinitionList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type AddonDefinitionSpec ¶
type AddonDefinitionSpec struct {
// DisplayName is the human-readable name shown in the Butler UI.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=64
DisplayName string `json:"displayName"`
// Description explains what this addon provides.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=512
Description string `json:"description"`
// Category groups addons in the UI for easier discovery.
// +kubebuilder:validation:Required
Category AddonCategory `json:"category"`
// Icon is an emoji or icon identifier for UI display.
// +kubebuilder:validation:MaxLength=8
// +optional
Icon string `json:"icon,omitempty"`
// Chart specifies the Helm chart to install.
// +kubebuilder:validation:Required
Chart AddonChartSpec `json:"chart"`
// Defaults provides installation defaults.
// These can be overridden in TenantAddon.
// +optional
Defaults *AddonDefaults `json:"defaults,omitempty"`
// Platform marks this as a core platform addon.
// Platform addons are installed during cluster bootstrap and cannot
// be uninstalled via the UI. They appear in a separate section.
// +kubebuilder:default=false
// +optional
Platform bool `json:"platform,omitempty"`
// DependsOn lists addon names that must be installed first.
// The TenantAddon controller will wait for these dependencies
// to be in Installed phase before proceeding.
// +optional
DependsOn []string `json:"dependsOn,omitempty"`
// Maintainer identifies who maintains this addon definition.
// +optional
Maintainer *AddonMaintainer `json:"maintainer,omitempty"`
// Links provides URLs for documentation, source, etc.
// +optional
Links *AddonLinks `json:"links,omitempty"`
}
AddonDefinitionSpec defines the desired state of AddonDefinition. An AddonDefinition is a cluster-scoped resource that defines an addon available for installation in tenant clusters.
func (*AddonDefinitionSpec) DeepCopy ¶
func (in *AddonDefinitionSpec) DeepCopy() *AddonDefinitionSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonDefinitionSpec.
func (*AddonDefinitionSpec) DeepCopyInto ¶
func (in *AddonDefinitionSpec) DeepCopyInto(out *AddonDefinitionSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonLinks ¶
type AddonLinks struct {
// Documentation URL.
// +optional
Documentation string `json:"documentation,omitempty"`
// Source code URL.
// +optional
Source string `json:"source,omitempty"`
// Project homepage URL.
// +optional
Homepage string `json:"homepage,omitempty"`
}
AddonLinks provides URLs related to the addon.
func (*AddonLinks) DeepCopy ¶
func (in *AddonLinks) DeepCopy() *AddonLinks
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonLinks.
func (*AddonLinks) DeepCopyInto ¶
func (in *AddonLinks) DeepCopyInto(out *AddonLinks)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonMaintainer ¶
type AddonMaintainer struct {
// Name of the maintainer.
// +optional
Name string `json:"name,omitempty"`
// Email of the maintainer.
// +optional
Email string `json:"email,omitempty"`
}
AddonMaintainer identifies the maintainer of an addon definition.
func (*AddonMaintainer) DeepCopy ¶
func (in *AddonMaintainer) DeepCopy() *AddonMaintainer
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonMaintainer.
func (*AddonMaintainer) DeepCopyInto ¶
func (in *AddonMaintainer) DeepCopyInto(out *AddonMaintainer)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonStatus ¶
type AddonStatus struct {
// Name is the addon name.
Name string `json:"name"`
// Version is the installed version.
Version string `json:"version"`
// Status is the addon health status.
// +kubebuilder:validation:Enum=Pending;Installing;Healthy;Degraded;Failed
Status string `json:"status"`
// ManagedBy indicates who manages this addon.
// +kubebuilder:validation:Enum=butler;flux;argocd;manual
ManagedBy string `json:"managedBy"`
}
AddonStatus shows the status of an installed addon.
func (*AddonStatus) DeepCopy ¶
func (in *AddonStatus) DeepCopy() *AddonStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonStatus.
func (*AddonStatus) DeepCopyInto ¶
func (in *AddonStatus) DeepCopyInto(out *AddonStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonVersions ¶
type AddonVersions struct {
// Cilium version.
// +optional
Cilium string `json:"cilium,omitempty"`
// MetalLB version.
// +optional
MetalLB string `json:"metallb,omitempty"`
// CertManager version.
// +optional
CertManager string `json:"certManager,omitempty"`
// Longhorn version.
// +optional
Longhorn string `json:"longhorn,omitempty"`
// Traefik version.
// +optional
Traefik string `json:"traefik,omitempty"`
// FluxCD version.
// +optional
FluxCD string `json:"fluxcd,omitempty"`
}
AddonVersions specifies default versions for Butler-managed addons.
func (*AddonVersions) DeepCopy ¶
func (in *AddonVersions) DeepCopy() *AddonVersions
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonVersions.
func (*AddonVersions) DeepCopyInto ¶
func (in *AddonVersions) DeepCopyInto(out *AddonVersions)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AddonsSpec ¶
type AddonsSpec struct {
// CNI configures the Container Network Interface.
// +optional
CNI *CNISpec `json:"cni,omitempty"`
// LoadBalancer configures the load balancer.
// +optional
LoadBalancer *LoadBalancerSpec `json:"loadBalancer,omitempty"`
// CertManager configures cert-manager.
// +optional
CertManager *CertManagerSpec `json:"certManager,omitempty"`
// Storage configures persistent storage.
// +optional
Storage *StorageSpec `json:"storage,omitempty"`
// Ingress configures the ingress controller.
// +optional
Ingress *IngressSpec `json:"ingress,omitempty"`
// GitOps configures GitOps (Flux or ArgoCD).
// +optional
GitOps *GitOpsSpec `json:"gitops,omitempty"`
}
AddonsSpec defines the addons to install.
func (*AddonsSpec) DeepCopy ¶
func (in *AddonsSpec) DeepCopy() *AddonsSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddonsSpec.
func (*AddonsSpec) DeepCopyInto ¶
func (in *AddonsSpec) DeepCopyInto(out *AddonsSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AutoEnrollConfig ¶ added in v0.5.0
type AutoEnrollConfig struct {
// VectorAgent enables automatic installation of the Vector log/metric collector.
// Requires pipeline.logEndpoint to be configured.
// +optional
VectorAgent bool `json:"vectorAgent,omitempty"`
// Prometheus enables automatic installation of the Prometheus monitoring stack.
// Requires pipeline.metricEndpoint to be configured.
// +optional
Prometheus bool `json:"prometheus,omitempty"`
// OtelCollector enables automatic installation of the OpenTelemetry Collector.
// Requires pipeline.traceEndpoint to be configured.
// +optional
OtelCollector bool `json:"otelCollector,omitempty"`
}
AutoEnrollConfig controls per-agent auto-enrollment for new tenant clusters.
func (*AutoEnrollConfig) DeepCopy ¶ added in v0.5.0
func (in *AutoEnrollConfig) DeepCopy() *AutoEnrollConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoEnrollConfig.
func (*AutoEnrollConfig) DeepCopyInto ¶ added in v0.5.0
func (in *AutoEnrollConfig) DeepCopyInto(out *AutoEnrollConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AzureProviderConfig ¶ added in v0.3.0
type AzureProviderConfig struct {
// SubscriptionID is the Azure subscription ID.
// +kubebuilder:validation:Required
SubscriptionID string `json:"subscriptionID"`
// ResourceGroup is the Azure resource group.
// +kubebuilder:validation:Required
ResourceGroup string `json:"resourceGroup"`
// Location is the Azure region.
// +optional
Location string `json:"location,omitempty"`
// VNetName is the Azure Virtual Network name.
// +optional
VNetName string `json:"vnetName,omitempty"`
// SubnetName is the subnet within the VNet.
// +optional
SubnetName string `json:"subnetName,omitempty"`
// VMSize is the default Azure VM size (e.g., "Standard_D4s_v3").
// +optional
VMSize string `json:"vmSize,omitempty"`
// ImageURN is the VM image reference. Supports three formats:
// - URN: "publisher:offer:sku:version" (e.g., "Canonical:UbuntuServer:18.04-LTS:latest")
// - Managed image resource ID: "/subscriptions/.../images/my-image"
// - Shared gallery image ID: "/subscriptions/.../galleries/.../images/.../versions/..."
// +optional
ImageURN string `json:"imageURN,omitempty"`
}
AzureProviderConfig contains Azure-specific configuration.
func (*AzureProviderConfig) DeepCopy ¶ added in v0.3.0
func (in *AzureProviderConfig) DeepCopy() *AzureProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureProviderConfig.
func (*AzureProviderConfig) DeepCopyInto ¶ added in v0.3.0
func (in *AzureProviderConfig) DeepCopyInto(out *AzureProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ButlerConfig ¶
type ButlerConfig struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ButlerConfigSpec `json:"spec,omitempty"`
Status ButlerConfigStatus `json:"status,omitempty"`
}
ButlerConfig is the Schema for the butlerconfigs API. It is a singleton resource that configures platform-wide Butler settings. Only one ButlerConfig named "butler" should exist in the cluster.
func (*ButlerConfig) DeepCopy ¶
func (in *ButlerConfig) DeepCopy() *ButlerConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ButlerConfig.
func (*ButlerConfig) DeepCopyInto ¶
func (in *ButlerConfig) DeepCopyInto(out *ButlerConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ButlerConfig) DeepCopyObject ¶
func (in *ButlerConfig) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*ButlerConfig) GetControlPlaneExposureControllerType ¶ added in v0.2.0
func (c *ButlerConfig) GetControlPlaneExposureControllerType() string
GetControlPlaneExposureControllerType returns the ingress controller type for automatic TLS passthrough.
func (*ButlerConfig) GetControlPlaneExposureGatewayRef ¶ added in v0.2.0
func (c *ButlerConfig) GetControlPlaneExposureGatewayRef() string
GetControlPlaneExposureGatewayRef returns the Gateway reference for Gateway mode.
func (*ButlerConfig) GetControlPlaneExposureHostname ¶ added in v0.2.0
func (c *ButlerConfig) GetControlPlaneExposureHostname() string
GetControlPlaneExposureHostname returns the hostname pattern for tenant API servers.
func (*ButlerConfig) GetControlPlaneExposureIngressClassName ¶ added in v0.2.0
func (c *ButlerConfig) GetControlPlaneExposureIngressClassName() string
GetControlPlaneExposureIngressClassName returns the Ingress class name for Ingress mode.
func (*ButlerConfig) GetControlPlaneExposureMode ¶ added in v0.2.0
func (c *ButlerConfig) GetControlPlaneExposureMode() ControlPlaneExposureMode
GetControlPlaneExposureMode returns the control plane exposure mode, defaulting to LoadBalancer.
func (*ButlerConfig) GetDefaultControlPlaneResources ¶ added in v0.5.0
func (c *ButlerConfig) GetDefaultControlPlaneResources() *ControlPlaneResourcesSpec
GetDefaultControlPlaneResources returns the platform-wide default control plane resources. Returns nil if not configured (BestEffort QoS).
func (*ButlerConfig) GetGitProviderURL ¶ added in v0.2.0
func (c *ButlerConfig) GetGitProviderURL() string
GetGitProviderURL returns the Git provider URL with a sensible default.
func (*ButlerConfig) GetImageFactoryURL ¶ added in v0.6.0
func (c *ButlerConfig) GetImageFactoryURL() string
GetImageFactoryURL returns the Image Factory URL, or empty string if not configured.
func (*ButlerConfig) IsAutoSyncEnabled ¶ added in v0.6.0
func (c *ButlerConfig) IsAutoSyncEnabled() bool
IsAutoSyncEnabled returns true if automatic image syncing is enabled.
func (*ButlerConfig) IsGitProviderConfigured ¶ added in v0.2.0
func (c *ButlerConfig) IsGitProviderConfigured() bool
IsGitProviderConfigured returns true if a Git provider is configured.
func (*ButlerConfig) IsImageFactoryConfigured ¶ added in v0.6.0
func (c *ButlerConfig) IsImageFactoryConfigured() bool
IsImageFactoryConfigured returns true if the Image Factory is configured.
func (*ButlerConfig) IsObservabilityConfigured ¶ added in v0.5.0
func (c *ButlerConfig) IsObservabilityConfigured() bool
IsObservabilityConfigured returns true if an observability pipeline is configured.
func (*ButlerConfig) IsTCPProxyRequired ¶ added in v0.2.0
func (c *ButlerConfig) IsTCPProxyRequired() bool
IsTCPProxyRequired returns true if tcp-proxy should be auto-enabled for tenants. This is true when the exposure mode is Ingress or Gateway.
type ButlerConfigList ¶
type ButlerConfigList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ButlerConfig `json:"items"`
}
ButlerConfigList contains a list of ButlerConfig.
func (*ButlerConfigList) DeepCopy ¶
func (in *ButlerConfigList) DeepCopy() *ButlerConfigList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ButlerConfigList.
func (*ButlerConfigList) DeepCopyInto ¶
func (in *ButlerConfigList) DeepCopyInto(out *ButlerConfigList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ButlerConfigList) DeepCopyObject ¶
func (in *ButlerConfigList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ButlerConfigSpec ¶
type ButlerConfigSpec struct {
// MultiTenancy configures how multi-tenancy is handled.
// +optional
MultiTenancy MultiTenancyConfig `json:"multiTenancy,omitempty"`
// DefaultNamespace is the namespace for TenantClusters when not using Teams.
// Used in Disabled and Optional modes.
// +kubebuilder:default="butler-tenants"
// +optional
DefaultNamespace string `json:"defaultNamespace,omitempty"`
// DefaultProviderConfigRef references the default ProviderConfig.
// Used when Teams or TenantClusters don't specify their own.
// +optional
DefaultProviderConfigRef *LocalObjectReference `json:"defaultProviderConfigRef,omitempty"`
// DefaultTeamLimits are the default resource limits for new Teams.
// Admins can override these when creating individual Teams.
// +optional
DefaultTeamLimits *ResourceLimits `json:"defaultTeamLimits,omitempty"`
// DefaultAddonVersions specifies the default versions for addons.
// Used when TenantCluster doesn't specify versions.
// +optional
DefaultAddonVersions *AddonVersions `json:"defaultAddonVersions,omitempty"`
// GitProvider configures the default Git provider for GitOps operations.
// This enables features like exporting clusters to GitOps, enabling Flux
// on clusters, and managing addons via Git repositories.
// +optional
GitProvider *GitProviderConfig `json:"gitProvider,omitempty"`
// ControlPlaneExposure configures how tenant control planes are exposed.
// This is a platform-level setting populated from ClusterBootstrap during
// initial setup and inherited by all TenantClusters.
// +optional
ControlPlaneExposure *ControlPlaneExposureSpec `json:"controlPlaneExposure,omitempty"`
// Observability configures platform-level observability (pipeline, collection defaults).
// +optional
Observability *ObservabilityConfig `json:"observability,omitempty"`
// DefaultControlPlaneResources configures default resource allocations for
// tenant control plane components (apiserver, controller-manager, scheduler).
// Applied to new TenantClusters when they don't specify per-cluster overrides.
// If not set, pods run with no resource requests (BestEffort QoS).
// +optional
DefaultControlPlaneResources *ControlPlaneResourcesSpec `json:"defaultControlPlaneResources,omitempty"`
// ImageFactory configures the Butler Image Factory connection.
// Required for automatic image syncing to infrastructure providers.
// +optional
ImageFactory *ImageFactoryConfig `json:"imageFactory,omitempty"`
// SSHAuthorizedKey is the default SSH public key injected into worker nodes
// for platform-level diagnostic access. Applied to non-Talos workers only.
// Can be overridden per-cluster via TenantCluster.spec.workers.machineTemplate.os.sshAuthorizedKey.
// +optional
SSHAuthorizedKey string `json:"sshAuthorizedKey,omitempty"`
}
ButlerConfigSpec defines the desired state of ButlerConfig.
func (*ButlerConfigSpec) DeepCopy ¶
func (in *ButlerConfigSpec) DeepCopy() *ButlerConfigSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ButlerConfigSpec.
func (*ButlerConfigSpec) DeepCopyInto ¶
func (in *ButlerConfigSpec) DeepCopyInto(out *ButlerConfigSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ButlerConfigStatus ¶
type ButlerConfigStatus struct {
// Conditions represent the latest available observations of the config's state.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// TeamCount is the current number of Teams.
// +optional
TeamCount int32 `json:"teamCount,omitempty"`
// ClusterCount is the current number of TenantClusters.
// +optional
ClusterCount int32 `json:"clusterCount,omitempty"`
// GitProvider shows the status of the configured Git provider.
// +optional
GitProvider *GitProviderStatus `json:"gitProvider,omitempty"`
// ControlPlaneExposureMode is the active control plane exposure mode.
// +optional
ControlPlaneExposureMode ControlPlaneExposureMode `json:"controlPlaneExposureMode,omitempty"`
// TCPProxyRequired indicates if tcp-proxy is auto-enabled for tenants.
// True when ControlPlaneExposureMode is Ingress or Gateway.
// +optional
TCPProxyRequired bool `json:"tcpProxyRequired,omitempty"`
// Observability shows the status of platform observability.
// +optional
Observability *ObservabilityStatus `json:"observability,omitempty"`
}
ButlerConfigStatus defines the observed state of ButlerConfig.
func (*ButlerConfigStatus) DeepCopy ¶
func (in *ButlerConfigStatus) DeepCopy() *ButlerConfigStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ButlerConfigStatus.
func (*ButlerConfigStatus) DeepCopyInto ¶
func (in *ButlerConfigStatus) DeepCopyInto(out *ButlerConfigStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ButlerControllerAddonSpec ¶
type ButlerControllerAddonSpec struct {
// Enabled controls whether butler-controller is installed
// +kubebuilder:default=true
// +optional
Enabled *bool `json:"enabled,omitempty"`
// Version is the butler-controller version (image tag)
// +kubebuilder:default="latest"
// +optional
Version string `json:"version,omitempty"`
// Image is the full image reference (overrides default)
// +optional
// +kubebuilder:default="ghcr.io/butlerdotdev/butler-controller"
Image string `json:"image,omitempty"`
}
ButlerControllerAddonSpec defines Butler controller configuration
func (*ButlerControllerAddonSpec) DeepCopy ¶
func (in *ButlerControllerAddonSpec) DeepCopy() *ButlerControllerAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ButlerControllerAddonSpec.
func (*ButlerControllerAddonSpec) DeepCopyInto ¶
func (in *ButlerControllerAddonSpec) DeepCopyInto(out *ButlerControllerAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CAPIAddonSpec ¶
type CAPIAddonSpec struct {
// Enabled controls whether CAPI is installed
// +kubebuilder:default=true
// +optional
Enabled *bool `json:"enabled,omitempty"`
// Version is the CAPI core version
// +kubebuilder:default="v1.9.4"
// +optional
Version string `json:"version,omitempty"`
// InfrastructureProviders lists additional infrastructure providers to install
// The management cluster's provider is ALWAYS included automatically
// +optional
InfrastructureProviders []CAPIInfraProviderSpec `json:"infrastructureProviders,omitempty"`
}
CAPIAddonSpec defines Cluster API configuration
func (*CAPIAddonSpec) DeepCopy ¶
func (in *CAPIAddonSpec) DeepCopy() *CAPIAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CAPIAddonSpec.
func (*CAPIAddonSpec) DeepCopyInto ¶
func (in *CAPIAddonSpec) DeepCopyInto(out *CAPIAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CAPIInfraProviderSpec ¶
type CAPIInfraProviderSpec struct {
// Name is the provider name
// +kubebuilder:validation:Enum=harvester;nutanix;proxmox;gcp;aws;azure
Name string `json:"name"`
// Version overrides the default provider version
// +optional
Version string `json:"version,omitempty"`
// CredentialsSecretRef points to provider credentials
// Required for providers other than the management cluster's provider
// +optional
CredentialsSecretRef *SecretReference `json:"credentialsSecretRef,omitempty"`
}
CAPIInfraProviderSpec defines an infrastructure provider configuration
func (*CAPIInfraProviderSpec) DeepCopy ¶
func (in *CAPIInfraProviderSpec) DeepCopy() *CAPIInfraProviderSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CAPIInfraProviderSpec.
func (*CAPIInfraProviderSpec) DeepCopyInto ¶
func (in *CAPIInfraProviderSpec) DeepCopyInto(out *CAPIInfraProviderSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CNIAddonSpec ¶
type CNIAddonSpec struct {
// Type is the CNI type
// +kubebuilder:validation:Enum=cilium;none
// +kubebuilder:default=cilium
Type string `json:"type,omitempty"`
// Version is the addon version
// +optional
Version string `json:"version,omitempty"`
// HubbleEnabled enables Hubble observability (Cilium only)
// +optional
// +kubebuilder:default=true
HubbleEnabled bool `json:"hubbleEnabled,omitempty"`
}
CNIAddonSpec defines CNI configuration
func (*CNIAddonSpec) DeepCopy ¶
func (in *CNIAddonSpec) DeepCopy() *CNIAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNIAddonSpec.
func (*CNIAddonSpec) DeepCopyInto ¶
func (in *CNIAddonSpec) DeepCopyInto(out *CNIAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CNISpec ¶
type CNISpec struct {
// Provider is the CNI provider.
// +kubebuilder:validation:Enum=cilium
// +kubebuilder:default="cilium"
// +optional
Provider string `json:"provider,omitempty"`
// Version is the addon version.
// +kubebuilder:validation:Required
Version string `json:"version"`
// Values are Helm values for customization.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
}
CNISpec configures the CNI addon.
func (*CNISpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNISpec.
func (*CNISpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CertManagerAddonSpec ¶
type CertManagerAddonSpec struct {
// Enabled controls whether cert-manager is installed
// +optional
// +kubebuilder:default=true
Enabled *bool `json:"enabled,omitempty"`
// Version is the addon version
// +optional
Version string `json:"version,omitempty"`
}
CertManagerAddonSpec defines cert-manager configuration
func (*CertManagerAddonSpec) DeepCopy ¶
func (in *CertManagerAddonSpec) DeepCopy() *CertManagerAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertManagerAddonSpec.
func (*CertManagerAddonSpec) DeepCopyInto ¶
func (in *CertManagerAddonSpec) DeepCopyInto(out *CertManagerAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CertManagerSpec ¶
type CertManagerSpec struct {
// Enabled indicates whether cert-manager should be installed.
// +kubebuilder:default=true
// +optional
Enabled bool `json:"enabled,omitempty"`
// Version is the addon version.
// +kubebuilder:validation:Required
Version string `json:"version"`
// Values are Helm values for customization.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
}
CertManagerSpec configures cert-manager.
func (*CertManagerSpec) DeepCopy ¶
func (in *CertManagerSpec) DeepCopy() *CertManagerSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertManagerSpec.
func (*CertManagerSpec) DeepCopyInto ¶
func (in *CertManagerSpec) DeepCopyInto(out *CertManagerSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterBootstrap ¶
type ClusterBootstrap struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ClusterBootstrapSpec `json:"spec,omitempty"`
Status ClusterBootstrapStatus `json:"status,omitempty"`
}
ClusterBootstrap is the Schema for the clusterbootstraps API
func (*ClusterBootstrap) AllMachinesRunning ¶
func (c *ClusterBootstrap) AllMachinesRunning() bool
AllMachinesRunning returns true if all machines are in Running phase with IPs
func (*ClusterBootstrap) DeepCopy ¶
func (in *ClusterBootstrap) DeepCopy() *ClusterBootstrap
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrap.
func (*ClusterBootstrap) DeepCopyInto ¶
func (in *ClusterBootstrap) DeepCopyInto(out *ClusterBootstrap)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterBootstrap) DeepCopyObject ¶
func (in *ClusterBootstrap) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*ClusterBootstrap) GetControlPlaneExposureGatewayRef ¶ added in v0.2.0
func (c *ClusterBootstrap) GetControlPlaneExposureGatewayRef() string
GetControlPlaneExposureGatewayRef returns the Gateway reference for Gateway mode
func (*ClusterBootstrap) GetControlPlaneExposureHostname ¶ added in v0.2.0
func (c *ClusterBootstrap) GetControlPlaneExposureHostname() string
GetControlPlaneExposureHostname returns the hostname pattern for tenant API servers
func (*ClusterBootstrap) GetControlPlaneExposureIngressClassName ¶ added in v0.2.0
func (c *ClusterBootstrap) GetControlPlaneExposureIngressClassName() string
GetControlPlaneExposureIngressClassName returns the Ingress class name for Ingress mode
func (*ClusterBootstrap) GetControlPlaneExposureMode ¶ added in v0.2.0
func (c *ClusterBootstrap) GetControlPlaneExposureMode() ControlPlaneExposureMode
GetControlPlaneExposureMode returns the control plane exposure mode, defaulting to LoadBalancer
func (*ClusterBootstrap) GetControlPlaneIPs ¶
func (c *ClusterBootstrap) GetControlPlaneIPs() []string
GetControlPlaneIPs returns the IP addresses of control plane nodes
func (*ClusterBootstrap) GetControlPlaneReplicas ¶
func (c *ClusterBootstrap) GetControlPlaneReplicas() int32
GetControlPlaneReplicas returns the effective control plane replicas based on topology
func (*ClusterBootstrap) GetExpectedMachineCount ¶
func (c *ClusterBootstrap) GetExpectedMachineCount() int
GetExpectedMachineCount returns the expected number of machines based on topology
func (*ClusterBootstrap) GetLoadBalancerAddressPool ¶
func (c *ClusterBootstrap) GetLoadBalancerAddressPool() string
GetLoadBalancerAddressPool returns the address pool string for MetalLB Prefers network.loadBalancerPool (validated), falls back to addons.loadBalancer.addressPool (legacy)
func (*ClusterBootstrap) GetStorageReplicaCount ¶
func (c *ClusterBootstrap) GetStorageReplicaCount() int32
GetStorageReplicaCount returns the effective storage replica count based on topology
func (*ClusterBootstrap) GetWorkerIPs ¶
func (c *ClusterBootstrap) GetWorkerIPs() []string
GetWorkerIPs returns the IP addresses of worker nodes
func (*ClusterBootstrap) IsCloudProvider ¶ added in v0.8.0
func (c *ClusterBootstrap) IsCloudProvider() bool
IsCloudProvider returns true if the provider is a cloud provider (gcp, aws, azure). Cloud providers skip kube-vip (no gratuitous ARP) and use the first control plane node IP as the API server endpoint instead of a VIP.
func (*ClusterBootstrap) IsFailed ¶
func (c *ClusterBootstrap) IsFailed() bool
IsFailed returns true if the cluster bootstrap has failed
func (*ClusterBootstrap) IsReady ¶
func (c *ClusterBootstrap) IsReady() bool
IsReady returns true if the cluster bootstrap is complete
func (*ClusterBootstrap) IsSingleNode ¶
func (c *ClusterBootstrap) IsSingleNode() bool
IsSingleNode returns true if this is a single-node topology
func (*ClusterBootstrap) IsTCPProxyRequired ¶ added in v0.2.0
func (c *ClusterBootstrap) IsTCPProxyRequired() bool
IsTCPProxyRequired returns true if tcp-proxy should be auto-enabled for tenants. This is true when the exposure mode is Ingress or Gateway.
type ClusterBootstrapAddonsSpec ¶
type ClusterBootstrapAddonsSpec struct {
// CNI defines the CNI configuration
// +optional
CNI *CNIAddonSpec `json:"cni,omitempty"`
// Storage defines storage configuration
// +optional
Storage *StorageAddonSpec `json:"storage,omitempty"`
// LoadBalancer defines load balancer configuration
// +optional
LoadBalancer *LoadBalancerAddonSpec `json:"loadBalancer,omitempty"`
// GitOps defines GitOps configuration
// +optional
GitOps *GitOpsAddonSpec `json:"gitOps,omitempty"`
// ControlPlaneHA defines control plane HA configuration
// +optional
ControlPlaneHA *ControlPlaneHAAddonSpec `json:"controlPlaneHA,omitempty"`
// CertManager defines cert-manager configuration
// +optional
CertManager *CertManagerAddonSpec `json:"certManager,omitempty"`
// Ingress defines ingress controller configuration
// +optional
Ingress *IngressAddonSpec `json:"ingress,omitempty"`
// ControlPlaneProvider defines hosted control plane provider (Steward)
// +optional
ControlPlaneProvider *ControlPlaneProviderAddonSpec `json:"controlPlaneProvider,omitempty"`
// CAPI defines Cluster API configuration
// +optional
CAPI *CAPIAddonSpec `json:"capi,omitempty"`
// ButlerController defines butler-controller configuration
// +optional
ButlerController *ButlerControllerAddonSpec `json:"butlerController,omitempty"`
// Console defines Butler Console configuration
// +optional
Console *ConsoleAddonSpec `json:"console,omitempty"`
}
ClusterBootstrapAddonsSpec defines which addons to install during bootstrap
func (*ClusterBootstrapAddonsSpec) DeepCopy ¶
func (in *ClusterBootstrapAddonsSpec) DeepCopy() *ClusterBootstrapAddonsSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapAddonsSpec.
func (*ClusterBootstrapAddonsSpec) DeepCopyInto ¶
func (in *ClusterBootstrapAddonsSpec) DeepCopyInto(out *ClusterBootstrapAddonsSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterBootstrapAddonsSpec) GetButlerControllerImage ¶
func (s *ClusterBootstrapAddonsSpec) GetButlerControllerImage() string
GetButlerControllerImage returns the full butler-controller image reference
func (*ClusterBootstrapAddonsSpec) GetCAPIVersion ¶
func (s *ClusterBootstrapAddonsSpec) GetCAPIVersion() string
GetCAPIVersion returns the CAPI version to install
func (*ClusterBootstrapAddonsSpec) GetConsoleIngressHost ¶
func (s *ClusterBootstrapAddonsSpec) GetConsoleIngressHost(clusterName string) string
GetConsoleIngressHost returns the ingress host, with fallback to cluster name
func (*ClusterBootstrapAddonsSpec) GetConsoleVersion ¶
func (s *ClusterBootstrapAddonsSpec) GetConsoleVersion() string
GetConsoleVersion returns the console version to install
func (*ClusterBootstrapAddonsSpec) IsButlerControllerEnabled ¶
func (s *ClusterBootstrapAddonsSpec) IsButlerControllerEnabled() bool
IsButlerControllerEnabled returns whether butler-controller should be installed
func (*ClusterBootstrapAddonsSpec) IsCAPIEnabled ¶
func (s *ClusterBootstrapAddonsSpec) IsCAPIEnabled() bool
IsCAPIEnabled returns whether CAPI should be installed
func (*ClusterBootstrapAddonsSpec) IsConsoleEnabled ¶
func (s *ClusterBootstrapAddonsSpec) IsConsoleEnabled() bool
IsConsoleEnabled returns whether butler-console should be installed
type ClusterBootstrapClusterSpec ¶
type ClusterBootstrapClusterSpec struct {
// Name is the cluster name used for resource naming
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
Name string `json:"name"`
// Topology defines the cluster topology
// - "single-node": Single control plane node that also runs workloads (no workers needed)
// - "ha": High-availability with separate control plane and worker nodes (default)
// +kubebuilder:validation:Enum=single-node;ha
// +kubebuilder:default=ha
// +optional
Topology ClusterTopology `json:"topology,omitempty"`
// ControlPlane defines control plane node configuration
// +kubebuilder:validation:Required
ControlPlane ClusterBootstrapNodePool `json:"controlPlane"`
// Workers defines worker node configuration
// Ignored when topology is "single-node"
// +optional
Workers *ClusterBootstrapNodePool `json:"workers,omitempty"`
}
ClusterBootstrapClusterSpec defines the cluster topology for bootstrap
func (*ClusterBootstrapClusterSpec) DeepCopy ¶
func (in *ClusterBootstrapClusterSpec) DeepCopy() *ClusterBootstrapClusterSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapClusterSpec.
func (*ClusterBootstrapClusterSpec) DeepCopyInto ¶
func (in *ClusterBootstrapClusterSpec) DeepCopyInto(out *ClusterBootstrapClusterSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterBootstrapList ¶
type ClusterBootstrapList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ClusterBootstrap `json:"items"`
}
ClusterBootstrapList contains a list of ClusterBootstrap
func (*ClusterBootstrapList) DeepCopy ¶
func (in *ClusterBootstrapList) DeepCopy() *ClusterBootstrapList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapList.
func (*ClusterBootstrapList) DeepCopyInto ¶
func (in *ClusterBootstrapList) DeepCopyInto(out *ClusterBootstrapList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterBootstrapList) DeepCopyObject ¶
func (in *ClusterBootstrapList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ClusterBootstrapMachineStatus ¶
type ClusterBootstrapMachineStatus struct {
// Name is the MachineRequest name
Name string `json:"name"`
// Role is the machine role (control-plane or worker)
Role string `json:"role"`
// Phase is the MachineRequest phase
Phase string `json:"phase"`
// IPAddress is the machine's IP address
// +optional
IPAddress string `json:"ipAddress,omitempty"`
// TalosConfigured indicates if Talos config has been applied
// +optional
TalosConfigured bool `json:"talosConfigured,omitempty"`
// Ready indicates if the node has joined the cluster
// +optional
Ready bool `json:"ready,omitempty"`
}
ClusterBootstrapMachineStatus tracks the status of a machine in the cluster
func (*ClusterBootstrapMachineStatus) DeepCopy ¶
func (in *ClusterBootstrapMachineStatus) DeepCopy() *ClusterBootstrapMachineStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapMachineStatus.
func (*ClusterBootstrapMachineStatus) DeepCopyInto ¶
func (in *ClusterBootstrapMachineStatus) DeepCopyInto(out *ClusterBootstrapMachineStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterBootstrapNetworkSpec ¶
type ClusterBootstrapNetworkSpec struct {
// PodCIDR is the CIDR for pod networking
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$`
PodCIDR string `json:"podCIDR"`
// ServiceCIDR is the CIDR for service networking
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$`
ServiceCIDR string `json:"serviceCIDR"`
// VIP is the control plane endpoint. For on-prem providers this is
// a virtual IP managed by kube-vip. For cloud providers this can be
// a load balancer IP or DNS name. Optional for cloud providers where
// the first control plane node IP is used as the endpoint instead.
// +optional
VIP string `json:"vip,omitempty"`
// VIPInterface is the network interface for the VIP (optional, auto-detected)
// +optional
VIPInterface string `json:"vipInterface,omitempty"`
// LoadBalancerPool defines the IP range for MetalLB LoadBalancer services
// This range must NOT include the VIP address to avoid conflicts between
// kube-vip (control plane) and MetalLB (services)
// +optional
LoadBalancerPool *LoadBalancerPoolSpec `json:"loadBalancerPool,omitempty"`
}
ClusterBootstrapNetworkSpec defines cluster networking for bootstrap
func (*ClusterBootstrapNetworkSpec) DeepCopy ¶
func (in *ClusterBootstrapNetworkSpec) DeepCopy() *ClusterBootstrapNetworkSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapNetworkSpec.
func (*ClusterBootstrapNetworkSpec) DeepCopyInto ¶
func (in *ClusterBootstrapNetworkSpec) DeepCopyInto(out *ClusterBootstrapNetworkSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterBootstrapNetworkSpec) Validate ¶
func (n *ClusterBootstrapNetworkSpec) Validate() error
Validate validates the network configuration. VIP is optional for cloud providers where kube-vip is not used. VIP may be an IP address (on-prem) or a DNS hostname (cloud LB endpoint).
type ClusterBootstrapNodePool ¶
type ClusterBootstrapNodePool struct {
// Replicas is the number of nodes in this pool
// For single-node topology, controlPlane.replicas is forced to 1
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=10
Replicas int32 `json:"replicas"`
// CPU is the number of CPU cores per node
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=128
CPU int32 `json:"cpu"`
// MemoryMB is the memory in MB per node (matches MachineRequest)
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=2048
MemoryMB int32 `json:"memoryMB"`
// DiskGB is the root disk size in GB per node (matches MachineRequest)
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=20
DiskGB int32 `json:"diskGB"`
// ExtraDisks defines additional disks to attach to each node
// Reuses DiskSpec from machinerequest_types.go
// +optional
ExtraDisks []DiskSpec `json:"extraDisks,omitempty"`
// Labels to apply to nodes in this pool
// +optional
Labels map[string]string `json:"labels,omitempty"`
}
ClusterBootstrapNodePool defines a pool of nodes for bootstrap Uses same units as MachineRequest (MemoryMB, DiskGB) for consistency
func (*ClusterBootstrapNodePool) DeepCopy ¶
func (in *ClusterBootstrapNodePool) DeepCopy() *ClusterBootstrapNodePool
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapNodePool.
func (*ClusterBootstrapNodePool) DeepCopyInto ¶
func (in *ClusterBootstrapNodePool) DeepCopyInto(out *ClusterBootstrapNodePool)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterBootstrapPhase ¶
type ClusterBootstrapPhase string
ClusterBootstrapPhase represents the current phase of bootstrap
const ( ClusterBootstrapPhasePending ClusterBootstrapPhase = "Pending" ClusterBootstrapPhaseProvisioningMachines ClusterBootstrapPhase = "ProvisioningMachines" ClusterBootstrapPhaseConfiguringTalos ClusterBootstrapPhase = "ConfiguringTalos" ClusterBootstrapPhaseBootstrappingCluster ClusterBootstrapPhase = "BootstrappingCluster" ClusterBootstrapPhaseInstallingAddons ClusterBootstrapPhase = "InstallingAddons" ClusterBootstrapPhasePivoting ClusterBootstrapPhase = "Pivoting" ClusterBootstrapPhaseReady ClusterBootstrapPhase = "Ready" ClusterBootstrapPhaseFailed ClusterBootstrapPhase = "Failed" )
type ClusterBootstrapSpec ¶
type ClusterBootstrapSpec struct {
// Provider is the infrastructure provider type.
// +kubebuilder:validation:Enum=harvester;nutanix;proxmox;gcp;aws;azure
Provider string `json:"provider"`
// ProviderRef references the ProviderConfig to use for provisioning
// Reuses existing ProviderReference from common_types.go
// +kubebuilder:validation:Required
ProviderRef ProviderReference `json:"providerRef"`
// Cluster defines the cluster configuration
// +kubebuilder:validation:Required
Cluster ClusterBootstrapClusterSpec `json:"cluster"`
// Network defines network configuration for the cluster
// +kubebuilder:validation:Required
Network ClusterBootstrapNetworkSpec `json:"network"`
// Talos defines Talos-specific configuration
// +kubebuilder:validation:Required
Talos ClusterBootstrapTalosSpec `json:"talos"`
// Addons defines which addons to install
// +optional
Addons ClusterBootstrapAddonsSpec `json:"addons,omitempty"`
// ControlPlaneExposure configures how tenant control planes are exposed.
// This is a platform-level setting written to ButlerConfig after bootstrap
// and inherited by all TenantClusters.
// Defaults to LoadBalancer mode if not specified.
// +optional
ControlPlaneExposure *ControlPlaneExposureSpec `json:"controlPlaneExposure,omitempty"`
// Paused can be set to true to pause reconciliation
// +optional
Paused bool `json:"paused,omitempty"`
}
ClusterBootstrapSpec defines the desired state of ClusterBootstrap
func (*ClusterBootstrapSpec) DeepCopy ¶
func (in *ClusterBootstrapSpec) DeepCopy() *ClusterBootstrapSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapSpec.
func (*ClusterBootstrapSpec) DeepCopyInto ¶
func (in *ClusterBootstrapSpec) DeepCopyInto(out *ClusterBootstrapSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterBootstrapStatus ¶
type ClusterBootstrapStatus struct {
// Phase is the current phase of bootstrap
// +optional
Phase ClusterBootstrapPhase `json:"phase,omitempty"`
// ControlPlaneEndpoint is the endpoint for the control plane
// +optional
ControlPlaneEndpoint string `json:"controlPlaneEndpoint,omitempty"`
// Kubeconfig contains the base64-encoded kubeconfig for the cluster
// +optional
Kubeconfig string `json:"kubeconfig,omitempty"`
// TalosConfig contains the base64-encoded talosconfig for the cluster
// +optional
TalosConfig string `json:"talosconfig,omitempty"`
// ConsoleURL is the URL to access the Butler Console
// +optional
ConsoleURL string `json:"consoleURL,omitempty"`
// Machines contains the status of each machine
// +optional
Machines []ClusterBootstrapMachineStatus `json:"machines,omitempty"`
// FailureReason indicates why bootstrap failed
// +optional
FailureReason string `json:"failureReason,omitempty"`
// FailureMessage provides details about the failure
// +optional
FailureMessage string `json:"failureMessage,omitempty"`
// Conditions represents the current conditions of the ClusterBootstrap
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
// LastUpdated is the timestamp of the last status update
// +optional
LastUpdated metav1.Time `json:"lastUpdated,omitempty"`
// ObservedGeneration is the last observed generation
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// AddonsInstalled tracks which addons have been installed
// +optional
AddonsInstalled map[string]bool `json:"addonsInstalled,omitempty"`
}
ClusterBootstrapStatus defines the observed state of ClusterBootstrap
func (*ClusterBootstrapStatus) DeepCopy ¶
func (in *ClusterBootstrapStatus) DeepCopy() *ClusterBootstrapStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapStatus.
func (*ClusterBootstrapStatus) DeepCopyInto ¶
func (in *ClusterBootstrapStatus) DeepCopyInto(out *ClusterBootstrapStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterBootstrapTalosSpec ¶
type ClusterBootstrapTalosSpec struct {
// Version is the Talos version to use
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^v[0-9]+\.[0-9]+\.[0-9]+$`
Version string `json:"version"`
// Schematic is the Talos factory schematic ID for the image
// +kubebuilder:validation:Required
Schematic string `json:"schematic"`
// ConfigPatches allows inline Talos config patches
// +optional
ConfigPatches []TalosConfigPatch `json:"configPatches,omitempty"`
// InstallDisk overrides the default install disk
// +optional
// +kubebuilder:default="/dev/vda"
InstallDisk string `json:"installDisk,omitempty"`
}
ClusterBootstrapTalosSpec defines Talos configuration for bootstrap
func (*ClusterBootstrapTalosSpec) DeepCopy ¶
func (in *ClusterBootstrapTalosSpec) DeepCopy() *ClusterBootstrapTalosSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterBootstrapTalosSpec.
func (*ClusterBootstrapTalosSpec) DeepCopyInto ¶
func (in *ClusterBootstrapTalosSpec) DeepCopyInto(out *ClusterBootstrapTalosSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterDefaults ¶
type ClusterDefaults struct {
// KubernetesVersion is the default K8s version for new clusters.
// +optional
KubernetesVersion string `json:"kubernetesVersion,omitempty"`
// WorkerCount is the default number of worker nodes.
// +optional
// +kubebuilder:validation:Minimum=0
WorkerCount *int32 `json:"workerCount,omitempty"`
// WorkerCPU is the default CPU cores per worker.
// +optional
// +kubebuilder:validation:Minimum=1
WorkerCPU *int32 `json:"workerCPU,omitempty"`
// WorkerMemoryGi is the default memory per worker in Gi.
// +optional
// +kubebuilder:validation:Minimum=1
WorkerMemoryGi *int32 `json:"workerMemoryGi,omitempty"`
// WorkerDiskGi is the default disk size per worker in Gi.
// +optional
// +kubebuilder:validation:Minimum=10
WorkerDiskGi *int32 `json:"workerDiskGi,omitempty"`
// DefaultAddons are addons automatically installed on new clusters.
// +optional
DefaultAddons []string `json:"defaultAddons,omitempty"`
}
ClusterDefaults defines default values for new TenantClusters.
func (*ClusterDefaults) DeepCopy ¶
func (in *ClusterDefaults) DeepCopy() *ClusterDefaults
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDefaults.
func (*ClusterDefaults) DeepCopyInto ¶
func (in *ClusterDefaults) DeepCopyInto(out *ClusterDefaults)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterTopology ¶
type ClusterTopology string
ClusterTopology defines the cluster topology type
const ( // ClusterTopologySingleNode is a single-node cluster where the control plane also runs workloads. // This is useful for development, testing, and edge deployments where resources are limited. // In single-node mode: // - Only 1 control plane node is created // - Workers section is ignored // - Control plane is configured to allow scheduling workloads // - etcd runs as a single member (not HA) ClusterTopologySingleNode ClusterTopology = "single-node" // ClusterTopologyHA is a high-availability cluster with separate control plane and worker nodes. // This is the default and recommended mode for production deployments. ClusterTopologyHA ClusterTopology = "ha" )
type ComponentResources ¶ added in v0.5.0
type ComponentResources struct {
// Requests describes the minimum resources required.
// +optional
Requests *ResourceQuantities `json:"requests,omitempty"`
// Limits describes the maximum resources allowed.
// +optional
Limits *ResourceQuantities `json:"limits,omitempty"`
}
ComponentResources defines CPU and memory requests/limits for a component.
func (*ComponentResources) DeepCopy ¶ added in v0.5.0
func (in *ComponentResources) DeepCopy() *ComponentResources
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentResources.
func (*ComponentResources) DeepCopyInto ¶ added in v0.5.0
func (in *ComponentResources) DeepCopyInto(out *ComponentResources)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ConsoleAddonSpec ¶
type ConsoleAddonSpec struct {
// Enabled controls whether butler-console is installed
// +kubebuilder:default=false
// +optional
Enabled *bool `json:"enabled,omitempty"`
// Version is the console version (image tag)
// +kubebuilder:default="latest"
// +optional
Version string `json:"version,omitempty"`
// Ingress defines ingress configuration for the console
// +optional
Ingress *ConsoleIngressSpec `json:"ingress,omitempty"`
}
ConsoleAddonSpec defines Butler Console configuration
func (*ConsoleAddonSpec) DeepCopy ¶
func (in *ConsoleAddonSpec) DeepCopy() *ConsoleAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleAddonSpec.
func (*ConsoleAddonSpec) DeepCopyInto ¶
func (in *ConsoleAddonSpec) DeepCopyInto(out *ConsoleAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ConsoleIngressSpec ¶
type ConsoleIngressSpec struct {
// Enabled controls whether to create an Ingress resource
// +kubebuilder:default=false
// +optional
Enabled bool `json:"enabled,omitempty"`
// Host is the hostname for the console (e.g., "butler.example.com")
// If not set and ingress is enabled, uses "butler.<cluster-name>.local"
// +optional
Host string `json:"host,omitempty"`
// ClassName is the ingress class (e.g., "traefik", "nginx")
// +optional
ClassName string `json:"className,omitempty"`
// TLS enables TLS termination
// +kubebuilder:default=false
// +optional
TLS bool `json:"tls,omitempty"`
// TLSSecretName is the name of the TLS secret
// +optional
TLSSecretName string `json:"tlsSecretName,omitempty"`
}
ConsoleIngressSpec defines ingress configuration for the Butler Console
func (*ConsoleIngressSpec) DeepCopy ¶
func (in *ConsoleIngressSpec) DeepCopy() *ConsoleIngressSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleIngressSpec.
func (*ConsoleIngressSpec) DeepCopyInto ¶
func (in *ConsoleIngressSpec) DeepCopyInto(out *ConsoleIngressSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ControlPlaneExposureMode ¶ added in v0.2.0
type ControlPlaneExposureMode string
ControlPlaneExposureMode defines how tenant control planes are exposed. +kubebuilder:validation:Enum=LoadBalancer;Ingress;Gateway
const ( // ControlPlaneExposureModeLoadBalancer exposes each tenant API server via a dedicated // LoadBalancer IP. This is the default mode, providing direct access with 1 IP per tenant. // tcp-proxy is NOT required in this mode. ControlPlaneExposureModeLoadBalancer ControlPlaneExposureMode = "LoadBalancer" // ControlPlaneExposureModeIngress exposes tenant API servers through an Ingress controller // with TLS passthrough. Multiple tenants share a single IP with SNI-based routing. // tcp-proxy is auto-enabled to rewrite in-cluster kubernetes.default.svc endpoints. ControlPlaneExposureModeIngress ControlPlaneExposureMode = "Ingress" // ControlPlaneExposureModeGateway exposes tenant API servers through Gateway API TLSRoute. // Multiple tenants share a single IP with SNI-based routing via L4/L7 Gateway. // tcp-proxy is auto-enabled to rewrite in-cluster kubernetes.default.svc endpoints. ControlPlaneExposureModeGateway ControlPlaneExposureMode = "Gateway" )
type ControlPlaneExposureSpec ¶ added in v0.2.0
type ControlPlaneExposureSpec struct {
// Mode determines how tenant API servers are exposed.
// LoadBalancer: 1 IP per tenant, direct access (default)
// Ingress: L7 proxy via Ingress controller with TLS passthrough, shared IP
// Gateway: L4/L7 via Gateway API TLSRoute, shared IP
// +kubebuilder:default="LoadBalancer"
// +optional
Mode ControlPlaneExposureMode `json:"mode,omitempty"`
// Hostname is the wildcard domain for tenant API servers.
// Required when Mode is Ingress or Gateway.
// Example: "*.k8s.platform.example.com"
// Tenant clusters get: "{cluster}.{namespace}.k8s.platform.example.com"
// +optional
Hostname string `json:"hostname,omitempty"`
// IngressClassName specifies the Ingress class when Mode is Ingress.
// +optional
IngressClassName string `json:"ingressClassName,omitempty"`
// ControllerType specifies the ingress controller type for automatic TLS passthrough.
// Used when Mode is Ingress. Supported values:
// - "haproxy": Uses haproxy.org/ssl-passthrough annotation
// - "nginx": Uses nginx.ingress.kubernetes.io/ssl-passthrough annotation
// - "traefik": Creates IngressRouteTCP instead of standard Ingress
// - "generic": No automatic annotations, use custom annotations in Steward config
// +kubebuilder:validation:Enum=haproxy;nginx;traefik;generic
// +optional
ControllerType string `json:"controllerType,omitempty"`
// GatewayRef references the Gateway resource when Mode is Gateway.
// Format: "namespace/name"
// +optional
GatewayRef string `json:"gatewayRef,omitempty"`
}
ControlPlaneExposureSpec configures how tenant control planes are exposed. This is a platform-level setting inherited by all TenantClusters.
func (*ControlPlaneExposureSpec) DeepCopy ¶ added in v0.2.0
func (in *ControlPlaneExposureSpec) DeepCopy() *ControlPlaneExposureSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneExposureSpec.
func (*ControlPlaneExposureSpec) DeepCopyInto ¶ added in v0.2.0
func (in *ControlPlaneExposureSpec) DeepCopyInto(out *ControlPlaneExposureSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ControlPlaneHAAddonSpec ¶
type ControlPlaneHAAddonSpec struct {
// Type is the control plane HA type
// +kubebuilder:validation:Enum=kube-vip;none
// +kubebuilder:default=kube-vip
Type string `json:"type,omitempty"`
// Version is the addon version
// +optional
Version string `json:"version,omitempty"`
}
ControlPlaneHAAddonSpec defines control plane HA configuration
func (*ControlPlaneHAAddonSpec) DeepCopy ¶
func (in *ControlPlaneHAAddonSpec) DeepCopy() *ControlPlaneHAAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneHAAddonSpec.
func (*ControlPlaneHAAddonSpec) DeepCopyInto ¶
func (in *ControlPlaneHAAddonSpec) DeepCopyInto(out *ControlPlaneHAAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ControlPlaneProviderAddonSpec ¶
type ControlPlaneProviderAddonSpec struct {
// Type is the control plane provider type
// +kubebuilder:validation:Enum=steward;kamaji;none
// +kubebuilder:default=steward
Type string `json:"type,omitempty"`
// Enabled controls whether Steward is installed
// +optional
// +kubebuilder:default=true
Enabled *bool `json:"enabled,omitempty"`
// Version is the addon version
// +optional
Version string `json:"version,omitempty"`
}
ControlPlaneProviderAddonSpec defines hosted control plane provider configuration
func (*ControlPlaneProviderAddonSpec) DeepCopy ¶
func (in *ControlPlaneProviderAddonSpec) DeepCopy() *ControlPlaneProviderAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneProviderAddonSpec.
func (*ControlPlaneProviderAddonSpec) DeepCopyInto ¶
func (in *ControlPlaneProviderAddonSpec) DeepCopyInto(out *ControlPlaneProviderAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ControlPlaneResourcesSpec ¶ added in v0.5.0
type ControlPlaneResourcesSpec struct {
// APIServer resource requirements.
// +optional
APIServer *ComponentResources `json:"apiServer,omitempty"`
// ControllerManager resource requirements.
// +optional
ControllerManager *ComponentResources `json:"controllerManager,omitempty"`
// Scheduler resource requirements.
// +optional
Scheduler *ComponentResources `json:"scheduler,omitempty"`
}
ControlPlaneResourcesSpec defines resource requests/limits for tenant control plane components. Used in ButlerConfig (platform defaults) and TenantCluster (per-cluster overrides).
func (*ControlPlaneResourcesSpec) DeepCopy ¶ added in v0.5.0
func (in *ControlPlaneResourcesSpec) DeepCopy() *ControlPlaneResourcesSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneResourcesSpec.
func (*ControlPlaneResourcesSpec) DeepCopyInto ¶ added in v0.5.0
func (in *ControlPlaneResourcesSpec) DeepCopyInto(out *ControlPlaneResourcesSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ControlPlaneSpec ¶
type ControlPlaneSpec struct {
// Replicas is the number of API server replicas.
// Steward manages high availability automatically.
// +kubebuilder:default=1
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=3
// +optional
Replicas int32 `json:"replicas,omitempty"`
// DataStoreRef references the Steward DataStore to use.
// If not specified, the default DataStore is used.
// +optional
DataStoreRef *LocalObjectReference `json:"dataStoreRef,omitempty"`
// ServiceType for the control plane endpoint.
// If not specified, inherits from ButlerConfig.spec.controlPlaneExposure.mode.
// Only set this to override the platform-level setting for this specific cluster.
// +kubebuilder:validation:Enum=LoadBalancer;NodePort;ClusterIP
// +optional
ServiceType string `json:"serviceType,omitempty"`
// CertSANs are additional Subject Alternative Names for the API server certificate.
// Use this to add custom DNS names or IPs for API server access.
// +optional
CertSANs []string `json:"certSANs,omitempty"`
// ExternalCloudProvider enables --cloud-provider=external on apiserver and controller-manager.
// Required for Harvester, vSphere, and other infrastructure providers.
// +kubebuilder:default=true
// +optional
ExternalCloudProvider *bool `json:"externalCloudProvider,omitempty"`
// Resources overrides platform-level control plane resource defaults from ButlerConfig.
// Per-component: if a component is set here, it fully replaces the ButlerConfig default
// for that component. Components not set here inherit from ButlerConfig.
// +optional
Resources *ControlPlaneResourcesSpec `json:"resources,omitempty"`
}
ControlPlaneSpec configures the Steward-hosted control plane.
func (*ControlPlaneSpec) DeepCopy ¶
func (in *ControlPlaneSpec) DeepCopy() *ControlPlaneSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneSpec.
func (*ControlPlaneSpec) DeepCopyInto ¶
func (in *ControlPlaneSpec) DeepCopyInto(out *ControlPlaneSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DiskSpec ¶
type DiskSpec struct {
// SizeGB is the disk size in gigabytes.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=1
SizeGB int32 `json:"sizeGB"`
// StorageClass is the provider-specific storage class or tier.
// +optional
StorageClass string `json:"storageClass,omitempty"`
}
DiskSpec defines an additional disk to attach to a machine.
func (*DiskSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiskSpec.
func (*DiskSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DotfilesSpec ¶ added in v0.4.0
type DotfilesSpec struct {
// URL is the Git repository URL for dotfiles.
// +kubebuilder:validation:Required
URL string `json:"url"`
// InstallCommand to run after cloning. If not specified, the controller
// looks for install.sh, install, bootstrap.sh, bootstrap, setup.sh, setup, or Makefile.
// +optional
InstallCommand string `json:"installCommand,omitempty"`
}
DotfilesSpec configures a dotfiles repository to clone and install on workspace creation.
func (*DotfilesSpec) DeepCopy ¶ added in v0.4.0
func (in *DotfilesSpec) DeepCopy() *DotfilesSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DotfilesSpec.
func (*DotfilesSpec) DeepCopyInto ¶ added in v0.4.0
func (in *DotfilesSpec) DeepCopyInto(out *DotfilesSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type EditorConfig ¶ added in v0.4.0
type EditorConfig struct {
// NeovimConfigRepo is a Git URL for a Neovim configuration.
// Cloned to ~/.config/nvim on first workspace creation.
// +optional
NeovimConfigRepo string `json:"neovimConfigRepo,omitempty"`
// NeovimInitLua is inline init.lua content written to ~/.config/nvim/init.lua.
// Use this when the config is not in a git repo. Ignored if NeovimConfigRepo is set.
// +optional
NeovimInitLua string `json:"neovimInitLua,omitempty"`
// NeovimConfigArchive is a base64-encoded tar.gz archive of a Neovim config directory.
// Extracted to ~/.config/nvim on workspace creation. Supports multi-file configs
// (init.lua + lua/ subdirectories). Ignored if NeovimConfigRepo is set.
// +optional
NeovimConfigArchive string `json:"neovimConfigArchive,omitempty"`
}
EditorConfig configures editor-specific settings for the workspace.
func (*EditorConfig) DeepCopy ¶ added in v0.4.0
func (in *EditorConfig) DeepCopy() *EditorConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EditorConfig.
func (*EditorConfig) DeepCopyInto ¶ added in v0.4.0
func (in *EditorConfig) DeepCopyInto(out *EditorConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ExtensionValues ¶
type ExtensionValues struct {
// Raw is the raw JSON/YAML values.
// +optional
Raw []byte `json:"-"`
}
ExtensionValues holds arbitrary Helm values. +kubebuilder:pruning:PreserveUnknownFields
func (*ExtensionValues) DeepCopy ¶
func (in *ExtensionValues) DeepCopy() *ExtensionValues
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtensionValues.
func (*ExtensionValues) DeepCopyInto ¶
func (in *ExtensionValues) DeepCopyInto(out *ExtensionValues)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (ExtensionValues) MarshalJSON ¶ added in v0.5.0
func (v ExtensionValues) MarshalJSON() ([]byte, error)
MarshalJSON implements json.Marshaler for ExtensionValues.
func (*ExtensionValues) ToMap ¶ added in v0.5.0
func (v *ExtensionValues) ToMap() (map[string]interface{}, error)
ToMap converts ExtensionValues to a map for use with Helm.
func (*ExtensionValues) UnmarshalJSON ¶ added in v0.5.0
func (v *ExtensionValues) UnmarshalJSON(data []byte) error
UnmarshalJSON implements json.Unmarshaler for ExtensionValues.
type GCPOverride ¶ added in v0.8.0
type GCPOverride struct {
// Zone overrides the default GCP compute zone.
// +optional
Zone string `json:"zone,omitempty"`
// MachineType overrides the default GCE machine type.
// +optional
MachineType string `json:"machineType,omitempty"`
// Image overrides the default image.
// +optional
Image string `json:"image,omitempty"`
// ImageFamily overrides the default image family.
// +optional
ImageFamily string `json:"imageFamily,omitempty"`
// Subnetwork overrides the default subnetwork.
// +optional
Subnetwork string `json:"subnetwork,omitempty"`
}
GCPOverride contains GCP-specific settings that can be overridden per-cluster.
func (*GCPOverride) DeepCopy ¶ added in v0.8.0
func (in *GCPOverride) DeepCopy() *GCPOverride
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCPOverride.
func (*GCPOverride) DeepCopyInto ¶ added in v0.8.0
func (in *GCPOverride) DeepCopyInto(out *GCPOverride)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GCPProviderConfig ¶ added in v0.3.0
type GCPProviderConfig struct {
// ProjectID is the GCP project identifier.
// +kubebuilder:validation:Required
ProjectID string `json:"projectID"`
// Region is the GCP region (e.g., "us-central1").
// +kubebuilder:validation:Required
Region string `json:"region"`
// Zone is the GCP compute zone (e.g., "us-central1-a").
// If not specified, defaults to "{region}-a".
// +optional
Zone string `json:"zone,omitempty"`
// Network is the VPC network name.
// +optional
Network string `json:"network,omitempty"`
// Subnetwork is the subnetwork name.
// +optional
Subnetwork string `json:"subnetwork,omitempty"`
// MachineType is the default GCE machine type (e.g., "n2-standard-4").
// +optional
MachineType string `json:"machineType,omitempty"`
// ImageProject is the GCP project containing the source image (e.g., "ubuntu-os-cloud").
// +optional
ImageProject string `json:"imageProject,omitempty"`
// ImageFamily is the image family to use (e.g., "ubuntu-2204-lts").
// Ignored if Image is specified.
// +optional
ImageFamily string `json:"imageFamily,omitempty"`
// Image is the specific image name to use.
// Takes precedence over ImageFamily.
// +optional
Image string `json:"image,omitempty"`
// ServiceAccount is the GCE service account email for VM instances.
// +optional
ServiceAccount string `json:"serviceAccount,omitempty"`
// Tags are network tags applied to VM instances for firewall rules.
// +optional
Tags []string `json:"tags,omitempty"`
}
GCPProviderConfig contains GCP-specific configuration.
func (*GCPProviderConfig) DeepCopy ¶ added in v0.3.0
func (in *GCPProviderConfig) DeepCopy() *GCPProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCPProviderConfig.
func (*GCPProviderConfig) DeepCopyInto ¶ added in v0.3.0
func (in *GCPProviderConfig) DeepCopyInto(out *GCPProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitOpsAddonSpec ¶
type GitOpsAddonSpec struct {
// Type is the GitOps type
// +kubebuilder:validation:Enum=flux;none
// +kubebuilder:default=flux
Type string `json:"type,omitempty"`
// Enabled controls whether GitOps is installed
// +optional
// +kubebuilder:default=true
Enabled *bool `json:"enabled,omitempty"`
}
GitOpsAddonSpec defines GitOps configuration
func (*GitOpsAddonSpec) DeepCopy ¶
func (in *GitOpsAddonSpec) DeepCopy() *GitOpsAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitOpsAddonSpec.
func (*GitOpsAddonSpec) DeepCopyInto ¶
func (in *GitOpsAddonSpec) DeepCopyInto(out *GitOpsAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitOpsDirectoryLayout ¶ added in v0.2.0
type GitOpsDirectoryLayout struct {
// ClustersPath is the path for cluster-specific configurations.
// +kubebuilder:default="clusters"
// +optional
ClustersPath string `json:"clustersPath,omitempty"`
// InfrastructurePath is the path for infrastructure components.
// +kubebuilder:default="infrastructure"
// +optional
InfrastructurePath string `json:"infrastructurePath,omitempty"`
// AppsPath is the path for application workloads.
// +kubebuilder:default="apps"
// +optional
AppsPath string `json:"appsPath,omitempty"`
// PlatformPath is the path for platform components (observability, security, etc).
// +kubebuilder:default="platform"
// +optional
PlatformPath string `json:"platformPath,omitempty"`
}
GitOpsDirectoryLayout defines the standard directory structure for GitOps repositories.
func DefaultGitOpsDirectoryLayout ¶ added in v0.2.0
func DefaultGitOpsDirectoryLayout() GitOpsDirectoryLayout
DefaultGitOpsDirectoryLayout returns the default directory layout.
func (*GitOpsDirectoryLayout) DeepCopy ¶ added in v0.2.0
func (in *GitOpsDirectoryLayout) DeepCopy() *GitOpsDirectoryLayout
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitOpsDirectoryLayout.
func (*GitOpsDirectoryLayout) DeepCopyInto ¶ added in v0.2.0
func (in *GitOpsDirectoryLayout) DeepCopyInto(out *GitOpsDirectoryLayout)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitOpsExportFormat ¶ added in v0.2.0
type GitOpsExportFormat string
GitOpsExportFormat defines the output format for GitOps exports. +kubebuilder:validation:Enum=flux;argocd;raw;kustomize
const ( // GitOpsExportFormatFlux generates Flux HelmRelease and Kustomization resources. GitOpsExportFormatFlux GitOpsExportFormat = "flux" // GitOpsExportFormatArgoCD generates ArgoCD Application resources. GitOpsExportFormatArgoCD GitOpsExportFormat = "argocd" // GitOpsExportFormatRaw generates plain Kubernetes manifests. GitOpsExportFormatRaw GitOpsExportFormat = "raw" // GitOpsExportFormatKustomize generates Kustomization structure. GitOpsExportFormatKustomize GitOpsExportFormat = "kustomize" )
type GitOpsSpec ¶
type GitOpsSpec struct {
// Provider is the GitOps provider.
// +kubebuilder:validation:Enum=fluxcd;argocd
// +optional
Provider string `json:"provider,omitempty"`
// Version is the addon version.
// +optional
Version string `json:"version,omitempty"`
// Repository configures the Git repository for GitOps.
// +optional
Repository *GitRepositorySpec `json:"repository,omitempty"`
}
GitOpsSpec configures GitOps tooling.
func (*GitOpsSpec) DeepCopy ¶
func (in *GitOpsSpec) DeepCopy() *GitOpsSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitOpsSpec.
func (*GitOpsSpec) DeepCopyInto ¶
func (in *GitOpsSpec) DeepCopyInto(out *GitOpsSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitProviderConfig ¶ added in v0.2.0
type GitProviderConfig struct {
// Type is the Git provider type.
// +kubebuilder:validation:Required
Type GitProviderType `json:"type"`
// URL is the Git provider API URL.
// For GitHub: https://api.github.com (or https://github.example.com/api/v3 for enterprise)
// For GitLab: https://gitlab.com (or self-hosted URL)
// +kubebuilder:default="https://api.github.com"
// +optional
URL string `json:"url,omitempty"`
// Organization is the default organization/group for repositories.
// When set, repository listings will be scoped to this org.
// +optional
Organization string `json:"organization,omitempty"`
// SecretRef references the Secret containing credentials.
// Required keys depend on provider type:
// - GitHub: "token" (Personal Access Token with repo scope)
// - GitLab: "token" (Personal Access Token with api scope)
// - Bitbucket: "username" and "app-password"
// +kubebuilder:validation:Required
SecretRef LocalObjectReference `json:"secretRef"`
}
GitProviderConfig configures a Git provider for GitOps operations. This is stored in ButlerConfig and used as the default for all GitOps operations.
func (*GitProviderConfig) DeepCopy ¶ added in v0.2.0
func (in *GitProviderConfig) DeepCopy() *GitProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitProviderConfig.
func (*GitProviderConfig) DeepCopyInto ¶ added in v0.2.0
func (in *GitProviderConfig) DeepCopyInto(out *GitProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitProviderStatus ¶ added in v0.2.0
type GitProviderStatus struct {
// Connected indicates whether the provider credentials are valid.
// +optional
Connected bool `json:"connected,omitempty"`
// Username is the authenticated username (from token validation).
// +optional
Username string `json:"username,omitempty"`
// LastValidated is when the credentials were last validated.
// +optional
LastValidated *metav1.Time `json:"lastValidated,omitempty"`
// Message provides additional status information.
// +optional
Message string `json:"message,omitempty"`
}
GitProviderStatus shows the status of the Git provider configuration.
func (*GitProviderStatus) DeepCopy ¶ added in v0.2.0
func (in *GitProviderStatus) DeepCopy() *GitProviderStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitProviderStatus.
func (*GitProviderStatus) DeepCopyInto ¶ added in v0.2.0
func (in *GitProviderStatus) DeepCopyInto(out *GitProviderStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitProviderType ¶ added in v0.2.0
type GitProviderType string
GitProviderType defines supported Git providers. +kubebuilder:validation:Enum=github;gitlab;bitbucket
const ( // GitProviderTypeGitHub is GitHub.com or GitHub Enterprise. GitProviderTypeGitHub GitProviderType = "github" // GitProviderTypeGitLab is GitLab.com or self-hosted GitLab. GitProviderTypeGitLab GitProviderType = "gitlab" // GitProviderTypeBitbucket is Bitbucket Cloud or Server. GitProviderTypeBitbucket GitProviderType = "bitbucket" )
type GitRepositorySpec ¶
type GitRepositorySpec struct {
// URL is the Git repository URL.
// +kubebuilder:validation:Required
URL string `json:"url"`
// Branch is the branch to use.
// +kubebuilder:default="main"
// +optional
Branch string `json:"branch,omitempty"`
// Path is the path within the repository for this cluster's manifests.
// +optional
Path string `json:"path,omitempty"`
// SecretRef references the Secret containing Git credentials.
// +optional
SecretRef *LocalObjectReference `json:"secretRef,omitempty"`
}
GitRepositorySpec configures a Git repository for GitOps.
func (*GitRepositorySpec) DeepCopy ¶
func (in *GitRepositorySpec) DeepCopy() *GitRepositorySpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositorySpec.
func (*GitRepositorySpec) DeepCopyInto ¶
func (in *GitRepositorySpec) DeepCopyInto(out *GitRepositorySpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GoogleWorkspaceConfig ¶ added in v0.2.0
type GoogleWorkspaceConfig struct {
// ServiceAccountSecretRef references a Secret containing the service account
// JSON key file. The Secret must contain a key named "service-account.json".
// +kubebuilder:validation:Required
ServiceAccountSecretRef SecretReference `json:"serviceAccountSecretRef"`
// AdminEmail is the email address of a Google Workspace super admin.
// The service account will impersonate this user to access the Admin SDK.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Format=email
AdminEmail string `json:"adminEmail"`
}
GoogleWorkspaceConfig contains configuration for fetching groups from Google Workspace using the Admin SDK Directory API.
func (*GoogleWorkspaceConfig) DeepCopy ¶ added in v0.2.0
func (in *GoogleWorkspaceConfig) DeepCopy() *GoogleWorkspaceConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GoogleWorkspaceConfig.
func (*GoogleWorkspaceConfig) DeepCopyInto ¶ added in v0.2.0
func (in *GoogleWorkspaceConfig) DeepCopyInto(out *GoogleWorkspaceConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HarvesterOverride ¶
type HarvesterOverride struct {
// Namespace is the Harvester namespace for VMs.
// +optional
Namespace string `json:"namespace,omitempty"`
// NetworkName is the Harvester network to use (format: namespace/name).
// +optional
NetworkName string `json:"networkName,omitempty"`
// ImageName is the VM image to use (format: namespace/name).
// +optional
ImageName string `json:"imageName,omitempty"`
}
HarvesterOverride contains Harvester-specific settings.
func (*HarvesterOverride) DeepCopy ¶
func (in *HarvesterOverride) DeepCopy() *HarvesterOverride
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HarvesterOverride.
func (*HarvesterOverride) DeepCopyInto ¶
func (in *HarvesterOverride) DeepCopyInto(out *HarvesterOverride)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HarvesterProviderConfig ¶
type HarvesterProviderConfig struct {
// Endpoint is the Harvester API server URL.
// If not specified, extracted from the kubeconfig.
// +optional
Endpoint string `json:"endpoint,omitempty"`
// Namespace is the Harvester namespace for VM resources.
// +kubebuilder:default="default"
// +optional
Namespace string `json:"namespace,omitempty"`
// NetworkName is the VM network in "namespace/name" format.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^[a-z0-9-]+/[a-z0-9-]+$`
NetworkName string `json:"networkName"`
// ImageName is the default OS image in "namespace/name" format.
// Used when MachineRequest doesn't specify an image.
// +optional
ImageName string `json:"imageName,omitempty"`
// StorageClassName is the default storage class for VM disks.
// +optional
StorageClassName string `json:"storageClassName,omitempty"`
}
HarvesterProviderConfig contains Harvester-specific configuration.
func (*HarvesterProviderConfig) DeepCopy ¶
func (in *HarvesterProviderConfig) DeepCopy() *HarvesterProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HarvesterProviderConfig.
func (*HarvesterProviderConfig) DeepCopyInto ¶
func (in *HarvesterProviderConfig) DeepCopyInto(out *HarvesterProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HelmChartSpec ¶
type HelmChartSpec struct {
// Repository is the Helm repository URL.
// +kubebuilder:validation:Required
Repository string `json:"repository"`
// Chart is the chart name within the repository.
// +kubebuilder:validation:Required
Chart string `json:"chart"`
// ReleaseName is the Helm release name.
// If not specified, defaults to the TenantAddon name.
// +optional
ReleaseName string `json:"releaseName,omitempty"`
// Namespace is the target namespace for the Helm release.
// If not specified, a namespace is chosen based on the chart.
// +optional
Namespace string `json:"namespace,omitempty"`
// CreateNamespace creates the namespace if it doesn't exist.
// +kubebuilder:default=true
// +optional
CreateNamespace bool `json:"createNamespace,omitempty"`
}
HelmChartSpec defines a custom Helm chart to install.
func (*HelmChartSpec) DeepCopy ¶
func (in *HelmChartSpec) DeepCopy() *HelmChartSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartSpec.
func (*HelmChartSpec) DeepCopyInto ¶
func (in *HelmChartSpec) DeepCopyInto(out *HelmChartSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HelmReleaseStatus ¶
type HelmReleaseStatus struct {
// Name is the name of the Helm release
// +optional
Name string `json:"name,omitempty"`
// Namespace is the namespace where the release is installed
// +optional
Namespace string `json:"namespace,omitempty"`
// Version is the chart version
// +optional
Version string `json:"version,omitempty"`
// Revision is the Helm release revision number
// +optional
Revision int `json:"revision,omitempty"`
// Status is the Helm release status (deployed, failed, etc.)
// +optional
Status string `json:"status,omitempty"`
}
HelmReleaseStatus contains information about the Helm release
func (*HelmReleaseStatus) DeepCopy ¶
func (in *HelmReleaseStatus) DeepCopy() *HelmReleaseStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmReleaseStatus.
func (*HelmReleaseStatus) DeepCopyInto ¶
func (in *HelmReleaseStatus) DeepCopyInto(out *HelmReleaseStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IPAllocation ¶ added in v0.3.0
type IPAllocation struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec IPAllocationSpec `json:"spec,omitempty"`
Status IPAllocationStatus `json:"status,omitempty"`
}
IPAllocation represents an individual IP allocation from a NetworkPool.
func (*IPAllocation) DeepCopy ¶ added in v0.3.0
func (in *IPAllocation) DeepCopy() *IPAllocation
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAllocation.
func (*IPAllocation) DeepCopyInto ¶ added in v0.3.0
func (in *IPAllocation) DeepCopyInto(out *IPAllocation)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*IPAllocation) DeepCopyObject ¶ added in v0.3.0
func (in *IPAllocation) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type IPAllocationList ¶ added in v0.3.0
type IPAllocationList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []IPAllocation `json:"items"`
}
IPAllocationList contains a list of IPAllocation.
func (*IPAllocationList) DeepCopy ¶ added in v0.3.0
func (in *IPAllocationList) DeepCopy() *IPAllocationList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAllocationList.
func (*IPAllocationList) DeepCopyInto ¶ added in v0.3.0
func (in *IPAllocationList) DeepCopyInto(out *IPAllocationList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*IPAllocationList) DeepCopyObject ¶ added in v0.3.0
func (in *IPAllocationList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type IPAllocationPhase ¶ added in v0.3.0
type IPAllocationPhase string
IPAllocationPhase represents the current phase of an IPAllocation. +kubebuilder:validation:Enum=Pending;Allocated;Released;Failed
const ( // IPAllocationPhasePending indicates the allocation is waiting to be fulfilled. IPAllocationPhasePending IPAllocationPhase = "Pending" // IPAllocationPhaseAllocated indicates IPs have been assigned. IPAllocationPhaseAllocated IPAllocationPhase = "Allocated" // IPAllocationPhaseReleased indicates IPs have been released. IPAllocationPhaseReleased IPAllocationPhase = "Released" // IPAllocationPhaseFailed indicates the allocation failed. IPAllocationPhaseFailed IPAllocationPhase = "Failed" )
type IPAllocationSpec ¶ added in v0.3.0
type IPAllocationSpec struct {
// PoolRef references the NetworkPool to allocate from.
// +kubebuilder:validation:Required
PoolRef LocalObjectReference `json:"poolRef"`
// TenantClusterRef references the TenantCluster this allocation is for.
// +kubebuilder:validation:Required
TenantClusterRef NamespacedObjectReference `json:"tenantClusterRef"`
// Type specifies the purpose of the allocation.
// +kubebuilder:validation:Required
Type IPAllocationType `json:"type"`
// Count is the number of IPs to allocate.
// If not specified, defaults from the NetworkPool are used.
// Ignored when PinnedRange is set.
// +optional
// +kubebuilder:validation:Minimum=1
Count *int32 `json:"count,omitempty"`
// PinnedRange requests a specific IP range instead of automatic allocation.
// Used for migrating existing clusters to IPAM or reserving well-known addresses.
// The allocator validates the range is within the pool and not already allocated.
// +optional
PinnedRange *PinnedIPRange `json:"pinnedRange,omitempty"`
}
IPAllocationSpec defines the desired state of IPAllocation.
func (*IPAllocationSpec) DeepCopy ¶ added in v0.3.0
func (in *IPAllocationSpec) DeepCopy() *IPAllocationSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAllocationSpec.
func (*IPAllocationSpec) DeepCopyInto ¶ added in v0.3.0
func (in *IPAllocationSpec) DeepCopyInto(out *IPAllocationSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IPAllocationStatus ¶ added in v0.3.0
type IPAllocationStatus struct {
// Phase represents the current phase of the allocation.
// +optional
Phase IPAllocationPhase `json:"phase,omitempty"`
// Conditions represent the latest available observations.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// CIDR is the allocated range in CIDR notation if power-of-2 aligned.
// +optional
CIDR string `json:"cidr,omitempty"`
// StartAddress is the first IP in the allocated range.
// +optional
StartAddress string `json:"startAddress,omitempty"`
// EndAddress is the last IP in the allocated range.
// +optional
EndAddress string `json:"endAddress,omitempty"`
// Addresses lists all individual IPs in the allocated range.
// +optional
Addresses []string `json:"addresses,omitempty"`
// AllocatedCount is the number of IPs allocated.
// +optional
AllocatedCount int32 `json:"allocatedCount,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// AllocatedAt is the timestamp when IPs were assigned.
// +optional
AllocatedAt *metav1.Time `json:"allocatedAt,omitempty"`
// AllocatedBy identifies the controller that fulfilled the allocation.
// +optional
AllocatedBy string `json:"allocatedBy,omitempty"`
// ReleasedAt is the timestamp when IPs were released.
// +optional
ReleasedAt *metav1.Time `json:"releasedAt,omitempty"`
}
IPAllocationStatus defines the observed state of IPAllocation.
func (*IPAllocationStatus) DeepCopy ¶ added in v0.3.0
func (in *IPAllocationStatus) DeepCopy() *IPAllocationStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAllocationStatus.
func (*IPAllocationStatus) DeepCopyInto ¶ added in v0.3.0
func (in *IPAllocationStatus) DeepCopyInto(out *IPAllocationStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IPAllocationType ¶ added in v0.3.0
type IPAllocationType string
IPAllocationType defines the purpose of an IP allocation. +kubebuilder:validation:Enum=nodes;loadbalancer
const ( // IPAllocationTypeNodes is for worker node IPs. IPAllocationTypeNodes IPAllocationType = "nodes" // IPAllocationTypeLoadBalancer is for load balancer IPs. IPAllocationTypeLoadBalancer IPAllocationType = "loadbalancer" )
type IPPool ¶
type IPPool struct {
// Start is the first IP in the pool.
// +kubebuilder:validation:Required
Start string `json:"start"`
// End is the last IP in the pool.
// +kubebuilder:validation:Required
End string `json:"end"`
}
IPPool defines a range of IP addresses.
func (*IPPool) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPPool.
func (*IPPool) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IdentityProvider ¶
type IdentityProvider struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec IdentityProviderSpec `json:"spec,omitempty"`
Status IdentityProviderStatus `json:"status,omitempty"`
}
IdentityProvider defines an external identity provider for authentication. Butler uses IdentityProviders to authenticate users via OIDC (OpenID Connect). Users are matched to Teams based on their email or group memberships.
Example for Google Workspace:
apiVersion: butler.butlerlabs.dev/v1alpha1
kind: IdentityProvider
metadata:
name: google-workspace
spec:
type: oidc
displayName: "Google Workspace"
oidc:
issuerURL: "https://accounts.google.com"
clientID: "xxx.apps.googleusercontent.com"
clientSecretRef:
name: google-oidc-secret
namespace: butler-system
key: client-secret
redirectURL: "https://butler.example.com/api/auth/callback"
hostedDomain: "example.com"
func (*IdentityProvider) DeepCopy ¶
func (in *IdentityProvider) DeepCopy() *IdentityProvider
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProvider.
func (*IdentityProvider) DeepCopyInto ¶
func (in *IdentityProvider) DeepCopyInto(out *IdentityProvider)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*IdentityProvider) DeepCopyObject ¶
func (in *IdentityProvider) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*IdentityProvider) GetDisplayName ¶
func (idp *IdentityProvider) GetDisplayName() string
GetDisplayName returns the display name or a default based on issuer.
func (*IdentityProvider) GetEmailClaim ¶
func (idp *IdentityProvider) GetEmailClaim() string
GetEmailClaim returns the configured email claim or default.
func (*IdentityProvider) GetGroupsClaim ¶
func (idp *IdentityProvider) GetGroupsClaim() string
GetGroupsClaim returns the configured groups claim or default.
func (*IdentityProvider) GetScopes ¶
func (idp *IdentityProvider) GetScopes() []string
GetScopes returns the configured scopes or defaults.
func (*IdentityProvider) IsReady ¶
func (idp *IdentityProvider) IsReady() bool
IsReady returns true if the provider is in Ready phase.
type IdentityProviderList ¶
type IdentityProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []IdentityProvider `json:"items"`
}
IdentityProviderList contains a list of IdentityProvider.
func (*IdentityProviderList) DeepCopy ¶
func (in *IdentityProviderList) DeepCopy() *IdentityProviderList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProviderList.
func (*IdentityProviderList) DeepCopyInto ¶
func (in *IdentityProviderList) DeepCopyInto(out *IdentityProviderList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*IdentityProviderList) DeepCopyObject ¶
func (in *IdentityProviderList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type IdentityProviderPhase ¶
type IdentityProviderPhase string
IdentityProviderPhase represents the current phase of an IdentityProvider. +kubebuilder:validation:Enum=Pending;Ready;Failed
const ( // IdentityProviderPhasePending indicates the provider is being validated. IdentityProviderPhasePending IdentityProviderPhase = "Pending" // IdentityProviderPhaseReady indicates the provider is validated and ready. IdentityProviderPhaseReady IdentityProviderPhase = "Ready" // IdentityProviderPhaseFailed indicates validation failed. IdentityProviderPhaseFailed IdentityProviderPhase = "Failed" )
type IdentityProviderSpec ¶
type IdentityProviderSpec struct {
// Type specifies the identity provider type.
// Currently only "oidc" is supported.
// +kubebuilder:validation:Required
Type IdentityProviderType `json:"type"`
// DisplayName is a human-readable name for this provider.
// Shown in the login UI when multiple providers are configured.
// +optional
DisplayName string `json:"displayName,omitempty"`
// OIDC contains OpenID Connect configuration.
// Required when type is "oidc".
// +optional
OIDC *OIDCConfig `json:"oidc,omitempty"`
}
IdentityProviderSpec defines the desired state of IdentityProvider.
func (*IdentityProviderSpec) DeepCopy ¶
func (in *IdentityProviderSpec) DeepCopy() *IdentityProviderSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProviderSpec.
func (*IdentityProviderSpec) DeepCopyInto ¶
func (in *IdentityProviderSpec) DeepCopyInto(out *IdentityProviderSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IdentityProviderStatus ¶
type IdentityProviderStatus struct {
// Conditions represent the latest available observations.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Phase represents the current phase of the provider.
// +optional
Phase IdentityProviderPhase `json:"phase,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// LastValidatedTime is when the provider was last successfully validated.
// +optional
LastValidatedTime *metav1.Time `json:"lastValidatedTime,omitempty"`
// DiscoveredEndpoints contains endpoints discovered via OIDC Discovery.
// +optional
DiscoveredEndpoints *OIDCDiscoveredEndpoints `json:"discoveredEndpoints,omitempty"`
// Message provides additional status information.
// +optional
Message string `json:"message,omitempty"`
}
IdentityProviderStatus defines the observed state of IdentityProvider.
func (*IdentityProviderStatus) DeepCopy ¶
func (in *IdentityProviderStatus) DeepCopy() *IdentityProviderStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProviderStatus.
func (*IdentityProviderStatus) DeepCopyInto ¶
func (in *IdentityProviderStatus) DeepCopyInto(out *IdentityProviderStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IdentityProviderType ¶
type IdentityProviderType string
IdentityProviderType defines the type of identity provider. +kubebuilder:validation:Enum=oidc
const ( // IdentityProviderTypeOIDC is an OpenID Connect provider. // Supports Google Workspace, Microsoft Entra ID, Okta, Auth0, Keycloak, etc. IdentityProviderTypeOIDC IdentityProviderType = "oidc" )
type ImageFactoryConfig ¶ added in v0.6.0
type ImageFactoryConfig struct {
// URL is the base URL of the Image Factory API.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https?://`
URL string `json:"url"`
// CredentialsRef references the Secret containing the factory API key.
// The Secret must contain a key named "apiKey".
// +optional
CredentialsRef *SecretReference `json:"credentialsRef,omitempty"`
// DefaultSchematicID is the default schematic used when TenantClusters
// don't specify one. Content-addressable SHA-256 hex string.
// +optional
DefaultSchematicID string `json:"defaultSchematicID,omitempty"`
// AutoSync enables automatic image syncing when a TenantCluster references
// an image not yet available on the target provider.
// +kubebuilder:default=true
// +optional
AutoSync *bool `json:"autoSync,omitempty"`
}
ImageFactoryConfig configures the Butler Image Factory.
func (*ImageFactoryConfig) DeepCopy ¶ added in v0.6.0
func (in *ImageFactoryConfig) DeepCopy() *ImageFactoryConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageFactoryConfig.
func (*ImageFactoryConfig) DeepCopyInto ¶ added in v0.6.0
func (in *ImageFactoryConfig) DeepCopyInto(out *ImageFactoryConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ImageFactoryRef ¶ added in v0.6.0
type ImageFactoryRef struct {
// SchematicID is the content-addressable schematic identifier (SHA-256 hex).
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=8
SchematicID string `json:"schematicID"`
// Version is the OS version (e.g., "v1.12.4", "9.5").
// +kubebuilder:validation:Required
Version string `json:"version"`
// Arch is the CPU architecture.
// +kubebuilder:validation:Enum=amd64;arm64
// +kubebuilder:default="amd64"
// +optional
Arch string `json:"arch,omitempty"`
// Platform is the target platform for the image artifact.
// Maps to the Talos Image Factory platform identifier (e.g., "nocloud", "metal", "vmware").
// Defaults to "nocloud" which works for KubeVirt/cloud-init environments (Harvester, Nutanix).
// +kubebuilder:default="nocloud"
// +optional
Platform string `json:"platform,omitempty"`
}
ImageFactoryRef identifies an image in the Butler Image Factory.
func (*ImageFactoryRef) DeepCopy ¶ added in v0.6.0
func (in *ImageFactoryRef) DeepCopy() *ImageFactoryRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageFactoryRef.
func (*ImageFactoryRef) DeepCopyInto ¶ added in v0.6.0
func (in *ImageFactoryRef) DeepCopyInto(out *ImageFactoryRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ImageSync ¶ added in v0.6.0
type ImageSync struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ImageSyncSpec `json:"spec,omitempty"`
Status ImageSyncStatus `json:"status,omitempty"`
}
ImageSync is the Schema for the imagesyncs API. It represents a request to sync an image from the Butler Image Factory to an infrastructure provider.
func (*ImageSync) DeepCopy ¶ added in v0.6.0
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSync.
func (*ImageSync) DeepCopyInto ¶ added in v0.6.0
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ImageSync) DeepCopyObject ¶ added in v0.6.0
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*ImageSync) IsFailed ¶ added in v0.6.0
IsFailed returns true if the image sync is in a failed state.
func (*ImageSync) IsReady ¶ added in v0.6.0
IsReady returns true if the image sync is complete and the provider image ref is set.
func (*ImageSync) SetFailure ¶ added in v0.6.0
SetFailure sets the failure reason and message.
func (*ImageSync) SetPhase ¶ added in v0.6.0
func (is *ImageSync) SetPhase(phase ImageSyncPhase)
SetPhase updates the phase and last updated timestamp.
type ImageSyncList ¶ added in v0.6.0
type ImageSyncList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ImageSync `json:"items"`
}
ImageSyncList contains a list of ImageSync.
func (*ImageSyncList) DeepCopy ¶ added in v0.6.0
func (in *ImageSyncList) DeepCopy() *ImageSyncList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSyncList.
func (*ImageSyncList) DeepCopyInto ¶ added in v0.6.0
func (in *ImageSyncList) DeepCopyInto(out *ImageSyncList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ImageSyncList) DeepCopyObject ¶ added in v0.6.0
func (in *ImageSyncList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ImageSyncPhase ¶ added in v0.6.0
type ImageSyncPhase string
ImageSyncPhase represents the lifecycle phase of an ImageSync. +kubebuilder:validation:Enum=Pending;Building;Downloading;Uploading;Ready;Failed
const ( // ImageSyncPhasePending indicates the sync request has been received but not yet processed. ImageSyncPhasePending ImageSyncPhase = "Pending" // ImageSyncPhaseBuilding indicates the factory is building the image. ImageSyncPhaseBuilding ImageSyncPhase = "Building" // ImageSyncPhaseDownloading indicates the image is being downloaded from the factory. ImageSyncPhaseDownloading ImageSyncPhase = "Downloading" // ImageSyncPhaseUploading indicates the image is being uploaded to the provider. ImageSyncPhaseUploading ImageSyncPhase = "Uploading" // ImageSyncPhaseReady indicates the image is available on the provider. ImageSyncPhaseReady ImageSyncPhase = "Ready" // ImageSyncPhaseFailed indicates the image sync failed. ImageSyncPhaseFailed ImageSyncPhase = "Failed" )
type ImageSyncSpec ¶ added in v0.6.0
type ImageSyncSpec struct {
// FactoryRef identifies the image in Butler Image Factory.
// +kubebuilder:validation:Required
FactoryRef ImageFactoryRef `json:"factoryRef"`
// ProviderConfigRef references the target ProviderConfig.
// +kubebuilder:validation:Required
ProviderConfigRef ProviderReference `json:"providerConfigRef"`
// Format is the image format to sync (e.g., "qcow2", "raw", "iso").
// +kubebuilder:default="qcow2"
// +optional
Format string `json:"format,omitempty"`
// TransferMode controls how the image artifact is transferred to the provider.
// "direct" means the provider downloads directly from the factory URL.
// "proxy" means the provider controller downloads first, then uploads to the provider.
// +kubebuilder:validation:Enum=direct;proxy
// +kubebuilder:default="direct"
// +optional
TransferMode string `json:"transferMode,omitempty"`
// DisplayName is the human-readable name for the image on the provider.
// If not set, auto-generated from OS type + version + schematic ID prefix.
// +optional
DisplayName string `json:"displayName,omitempty"`
}
ImageSyncSpec defines the desired state of ImageSync.
func (*ImageSyncSpec) DeepCopy ¶ added in v0.6.0
func (in *ImageSyncSpec) DeepCopy() *ImageSyncSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSyncSpec.
func (*ImageSyncSpec) DeepCopyInto ¶ added in v0.6.0
func (in *ImageSyncSpec) DeepCopyInto(out *ImageSyncSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ImageSyncStatus ¶ added in v0.6.0
type ImageSyncStatus struct {
// Phase represents the current lifecycle phase.
// +optional
Phase ImageSyncPhase `json:"phase,omitempty"`
// Conditions represent the latest available observations.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// ProviderImageRef is the provider-specific image reference once synced.
// Harvester: "namespace/name", Nutanix: UUID, Proxmox: template ID.
// +optional
ProviderImageRef string `json:"providerImageRef,omitempty"`
// ArtifactURL is the factory download URL used.
// +optional
ArtifactURL string `json:"artifactURL,omitempty"`
// ArtifactSHA256 is the verified checksum.
// +optional
ArtifactSHA256 string `json:"artifactSHA256,omitempty"`
// ProviderTaskID tracks a provider-side async task (e.g., Nutanix Prism Central task UUID).
// Set during Downloading/Uploading phases, cleared on completion or failure.
// +optional
ProviderTaskID string `json:"providerTaskID,omitempty"`
// FailureReason provides a machine-readable failure reason.
// +optional
FailureReason string `json:"failureReason,omitempty"`
// FailureMessage provides a human-readable failure message.
// +optional
FailureMessage string `json:"failureMessage,omitempty"`
// ObservedGeneration is the generation most recently observed by the controller.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// LastUpdated is the timestamp of the last status update.
// +optional
LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`
}
ImageSyncStatus defines the observed state of ImageSync.
func (*ImageSyncStatus) DeepCopy ¶ added in v0.6.0
func (in *ImageSyncStatus) DeepCopy() *ImageSyncStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSyncStatus.
func (*ImageSyncStatus) DeepCopyInto ¶ added in v0.6.0
func (in *ImageSyncStatus) DeepCopyInto(out *ImageSyncStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type InfrastructureOverride ¶
type InfrastructureOverride struct {
// Harvester contains Harvester-specific overrides.
// +optional
Harvester *HarvesterOverride `json:"harvester,omitempty"`
// Nutanix contains Nutanix-specific overrides.
// +optional
Nutanix *NutanixOverride `json:"nutanix,omitempty"`
// Proxmox contains Proxmox-specific overrides.
// +optional
Proxmox *ProxmoxOverride `json:"proxmox,omitempty"`
// GCP contains GCP-specific overrides.
// +optional
GCP *GCPOverride `json:"gcp,omitempty"`
}
InfrastructureOverride allows overriding provider-specific settings per-cluster.
func (*InfrastructureOverride) DeepCopy ¶
func (in *InfrastructureOverride) DeepCopy() *InfrastructureOverride
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InfrastructureOverride.
func (*InfrastructureOverride) DeepCopyInto ¶
func (in *InfrastructureOverride) DeepCopyInto(out *InfrastructureOverride)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IngressAddonSpec ¶
type IngressAddonSpec struct {
// Type is the ingress controller type
// +kubebuilder:validation:Enum=traefik;nginx;none
// +kubebuilder:default=traefik
Type string `json:"type,omitempty"`
// Enabled controls whether the ingress controller is installed
// +optional
// +kubebuilder:default=true
Enabled *bool `json:"enabled,omitempty"`
// Version is the addon version
// +optional
Version string `json:"version,omitempty"`
}
IngressAddonSpec defines ingress controller configuration
func (*IngressAddonSpec) DeepCopy ¶
func (in *IngressAddonSpec) DeepCopy() *IngressAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressAddonSpec.
func (*IngressAddonSpec) DeepCopyInto ¶
func (in *IngressAddonSpec) DeepCopyInto(out *IngressAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type IngressSpec ¶
type IngressSpec struct {
// Provider is the ingress provider.
// +kubebuilder:validation:Enum=traefik;nginx
// +optional
Provider string `json:"provider,omitempty"`
// Version is the addon version.
// +kubebuilder:validation:Required
Version string `json:"version"`
// Values are Helm values for customization.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
}
IngressSpec configures the ingress controller.
func (*IngressSpec) DeepCopy ¶
func (in *IngressSpec) DeepCopy() *IngressSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressSpec.
func (*IngressSpec) DeepCopyInto ¶
func (in *IngressSpec) DeepCopyInto(out *IngressSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LoadBalancerAddonSpec ¶
type LoadBalancerAddonSpec struct {
// Type is the load balancer type
// +kubebuilder:validation:Enum=metallb;none
// +kubebuilder:default=metallb
Type string `json:"type,omitempty"`
// AddressPool is the IP address range for MetalLB
// DEPRECATED: Use network.loadBalancerPool instead for proper validation
// +optional
AddressPool string `json:"addressPool,omitempty"`
}
LoadBalancerAddonSpec defines load balancer configuration
func (*LoadBalancerAddonSpec) DeepCopy ¶
func (in *LoadBalancerAddonSpec) DeepCopy() *LoadBalancerAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerAddonSpec.
func (*LoadBalancerAddonSpec) DeepCopyInto ¶
func (in *LoadBalancerAddonSpec) DeepCopyInto(out *LoadBalancerAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LoadBalancerPhase ¶ added in v0.9.0
type LoadBalancerPhase string
LoadBalancerPhase represents the lifecycle phase of a LoadBalancerRequest. +kubebuilder:validation:Enum=Pending;Creating;Ready;Failed;Deleting
const ( // LoadBalancerPhasePending indicates the request has been received but not yet processed. LoadBalancerPhasePending LoadBalancerPhase = "Pending" // LoadBalancerPhaseCreating indicates the load balancer is being provisioned. LoadBalancerPhaseCreating LoadBalancerPhase = "Creating" // LoadBalancerPhaseReady indicates the load balancer is provisioned and has an endpoint. LoadBalancerPhaseReady LoadBalancerPhase = "Ready" // LoadBalancerPhaseFailed indicates the load balancer provisioning failed. LoadBalancerPhaseFailed LoadBalancerPhase = "Failed" // LoadBalancerPhaseDeleting indicates the load balancer is being torn down. LoadBalancerPhaseDeleting LoadBalancerPhase = "Deleting" )
type LoadBalancerPoolSpec ¶
type LoadBalancerPoolSpec struct {
// Start is the first IP in the pool (inclusive)
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^([0-9]{1,3}\.){3}[0-9]{1,3}$`
Start string `json:"start"`
// End is the last IP in the pool (inclusive)
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^([0-9]{1,3}\.){3}[0-9]{1,3}$`
End string `json:"end"`
}
LoadBalancerPoolSpec defines an IP address range for LoadBalancer services
func (*LoadBalancerPoolSpec) ContainsIP ¶
func (p *LoadBalancerPoolSpec) ContainsIP(ip string) bool
ContainsIP checks if the given IP is within the pool range
func (*LoadBalancerPoolSpec) DeepCopy ¶
func (in *LoadBalancerPoolSpec) DeepCopy() *LoadBalancerPoolSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerPoolSpec.
func (*LoadBalancerPoolSpec) DeepCopyInto ¶
func (in *LoadBalancerPoolSpec) DeepCopyInto(out *LoadBalancerPoolSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*LoadBalancerPoolSpec) ToAddressRange ¶
func (p *LoadBalancerPoolSpec) ToAddressRange() string
ToAddressRange returns the pool as "start-end" string for MetalLB
func (*LoadBalancerPoolSpec) Validate ¶
func (p *LoadBalancerPoolSpec) Validate() error
Validate validates the LoadBalancerPoolSpec
type LoadBalancerRequest ¶ added in v0.9.0
type LoadBalancerRequest struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec LoadBalancerRequestSpec `json:"spec,omitempty"`
Status LoadBalancerRequestStatus `json:"status,omitempty"`
}
LoadBalancerRequest is the Schema for the loadbalancerrequests API. It represents a request to create a cloud load balancer for a management cluster's control plane endpoint. Provider controllers watch this resource and provision the appropriate cloud-native load balancer (GCP forwarding rule, AWS NLB, or Azure Standard LB).
func (*LoadBalancerRequest) DeepCopy ¶ added in v0.9.0
func (in *LoadBalancerRequest) DeepCopy() *LoadBalancerRequest
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerRequest.
func (*LoadBalancerRequest) DeepCopyInto ¶ added in v0.9.0
func (in *LoadBalancerRequest) DeepCopyInto(out *LoadBalancerRequest)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*LoadBalancerRequest) DeepCopyObject ¶ added in v0.9.0
func (in *LoadBalancerRequest) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*LoadBalancerRequest) GetHealthCheckPort ¶ added in v0.9.0
func (lbr *LoadBalancerRequest) GetHealthCheckPort() int32
GetHealthCheckPort returns the health check port, defaulting to the target port.
func (*LoadBalancerRequest) IsFailed ¶ added in v0.9.0
func (lbr *LoadBalancerRequest) IsFailed() bool
IsFailed returns true if the load balancer provisioning failed.
func (*LoadBalancerRequest) IsReady ¶ added in v0.9.0
func (lbr *LoadBalancerRequest) IsReady() bool
IsReady returns true if the load balancer is provisioned and has an endpoint.
func (*LoadBalancerRequest) IsTerminating ¶ added in v0.9.0
func (lbr *LoadBalancerRequest) IsTerminating() bool
IsTerminating returns true if the load balancer is being deleted.
func (*LoadBalancerRequest) SetFailure ¶ added in v0.9.0
func (lbr *LoadBalancerRequest) SetFailure(reason, message string)
SetFailure sets the failure reason and message.
func (*LoadBalancerRequest) SetPhase ¶ added in v0.9.0
func (lbr *LoadBalancerRequest) SetPhase(phase LoadBalancerPhase)
SetPhase updates the phase and last updated timestamp.
type LoadBalancerRequestList ¶ added in v0.9.0
type LoadBalancerRequestList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []LoadBalancerRequest `json:"items"`
}
LoadBalancerRequestList contains a list of LoadBalancerRequest.
func (*LoadBalancerRequestList) DeepCopy ¶ added in v0.9.0
func (in *LoadBalancerRequestList) DeepCopy() *LoadBalancerRequestList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerRequestList.
func (*LoadBalancerRequestList) DeepCopyInto ¶ added in v0.9.0
func (in *LoadBalancerRequestList) DeepCopyInto(out *LoadBalancerRequestList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*LoadBalancerRequestList) DeepCopyObject ¶ added in v0.9.0
func (in *LoadBalancerRequestList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type LoadBalancerRequestSpec ¶ added in v0.9.0
type LoadBalancerRequestSpec struct {
// ClusterName is the name of the cluster this load balancer serves.
// Used as a prefix for cloud resource naming. Must be DNS-safe since
// cloud providers use it in resource names.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
ClusterName string `json:"clusterName"`
// ProviderConfigRef references the ProviderConfig with cloud credentials.
// +kubebuilder:validation:Required
ProviderConfigRef ProviderReference `json:"providerConfigRef"`
// Port is the target port on backend instances.
// +optional
// +kubebuilder:default=6443
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=65535
Port int32 `json:"port,omitempty"`
// HealthCheckPort is the port used for backend health checks.
// Defaults to the same value as Port.
// +optional
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=65535
HealthCheckPort int32 `json:"healthCheckPort,omitempty"`
// Targets are the backend instances to register with the load balancer.
// Updated incrementally as machines come online.
// +optional
Targets []LoadBalancerTarget `json:"targets,omitempty"`
}
LoadBalancerRequestSpec defines the desired state of a cloud load balancer for a management cluster control plane endpoint. +kubebuilder:validation:XValidation:rule="self.clusterName == oldSelf.clusterName",message="clusterName is immutable" +kubebuilder:validation:XValidation:rule="self.providerConfigRef == oldSelf.providerConfigRef",message="providerConfigRef is immutable"
func (*LoadBalancerRequestSpec) DeepCopy ¶ added in v0.9.0
func (in *LoadBalancerRequestSpec) DeepCopy() *LoadBalancerRequestSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerRequestSpec.
func (*LoadBalancerRequestSpec) DeepCopyInto ¶ added in v0.9.0
func (in *LoadBalancerRequestSpec) DeepCopyInto(out *LoadBalancerRequestSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LoadBalancerRequestStatus ¶ added in v0.9.0
type LoadBalancerRequestStatus struct {
// Phase represents the current lifecycle phase.
// +optional
Phase LoadBalancerPhase `json:"phase,omitempty"`
// Endpoint is the load balancer's IP address or DNS name.
// Populated when Phase reaches Ready.
// +optional
Endpoint string `json:"endpoint,omitempty"`
// ResourceID is the cloud-provider resource identifier for the load balancer.
// Used during cleanup to locate the resource for deletion.
// +optional
ResourceID string `json:"resourceID,omitempty"`
// FailureReason provides a machine-readable failure reason.
// +optional
FailureReason string `json:"failureReason,omitempty"`
// FailureMessage provides a human-readable failure message.
// +optional
FailureMessage string `json:"failureMessage,omitempty"`
// RegisteredTargets is the number of targets currently registered with the load balancer.
// +optional
RegisteredTargets int32 `json:"registeredTargets,omitempty"`
// Conditions represent the latest available observations of the request's state.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// LastUpdated is the timestamp of the last status update.
// +optional
LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`
// ObservedGeneration is the generation most recently observed by the controller.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
LoadBalancerRequestStatus defines the observed state of LoadBalancerRequest.
func (*LoadBalancerRequestStatus) DeepCopy ¶ added in v0.9.0
func (in *LoadBalancerRequestStatus) DeepCopy() *LoadBalancerRequestStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerRequestStatus.
func (*LoadBalancerRequestStatus) DeepCopyInto ¶ added in v0.9.0
func (in *LoadBalancerRequestStatus) DeepCopyInto(out *LoadBalancerRequestStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LoadBalancerSpec ¶
type LoadBalancerSpec struct {
// Provider is the load balancer provider.
// +kubebuilder:validation:Enum=metallb
// +kubebuilder:default="metallb"
// +optional
Provider string `json:"provider,omitempty"`
// Version is the addon version.
// +kubebuilder:validation:Required
Version string `json:"version"`
// Values are Helm values for customization.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
}
LoadBalancerSpec configures the load balancer addon.
func (*LoadBalancerSpec) DeepCopy ¶
func (in *LoadBalancerSpec) DeepCopy() *LoadBalancerSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerSpec.
func (*LoadBalancerSpec) DeepCopyInto ¶
func (in *LoadBalancerSpec) DeepCopyInto(out *LoadBalancerSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LoadBalancerTarget ¶ added in v0.9.0
type LoadBalancerTarget struct {
// IP is the target IP address.
// +optional
IP string `json:"ip,omitempty"`
// InstanceID is the cloud-provider instance identifier.
// Used for instance-based target groups (e.g., AWS NLB).
// +optional
InstanceID string `json:"instanceID,omitempty"`
// InstanceName is the cloud-provider instance name.
// Used for name-based registration (e.g., GCP target pools).
// +optional
InstanceName string `json:"instanceName,omitempty"`
}
LoadBalancerTarget identifies a backend instance for load balancer registration.
func (*LoadBalancerTarget) DeepCopy ¶ added in v0.9.0
func (in *LoadBalancerTarget) DeepCopy() *LoadBalancerTarget
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerTarget.
func (*LoadBalancerTarget) DeepCopyInto ¶ added in v0.9.0
func (in *LoadBalancerTarget) DeepCopyInto(out *LoadBalancerTarget)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LocalObjectReference ¶
type LocalObjectReference struct {
// Name is the name of the resource.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
}
LocalObjectReference references a resource in the same namespace.
func (*LocalObjectReference) DeepCopy ¶
func (in *LocalObjectReference) DeepCopy() *LocalObjectReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalObjectReference.
func (*LocalObjectReference) DeepCopyInto ¶
func (in *LocalObjectReference) DeepCopyInto(out *LocalObjectReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type LogCollectionDefaults ¶ added in v0.5.0
type LogCollectionDefaults struct {
// PodLogs enables collection of container stdout/stderr logs.
// +optional
PodLogs bool `json:"podLogs,omitempty"`
// Journald enables collection of systemd journal logs.
// +optional
Journald bool `json:"journald,omitempty"`
// KubernetesEvents enables collection of Kubernetes events.
// +optional
KubernetesEvents bool `json:"kubernetesEvents,omitempty"`
}
LogCollectionDefaults configures which log sources are collected by default.
func (*LogCollectionDefaults) DeepCopy ¶ added in v0.5.0
func (in *LogCollectionDefaults) DeepCopy() *LogCollectionDefaults
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LogCollectionDefaults.
func (*LogCollectionDefaults) DeepCopyInto ¶ added in v0.5.0
func (in *LogCollectionDefaults) DeepCopyInto(out *LogCollectionDefaults)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MachinePhase ¶
type MachinePhase string
MachinePhase represents the lifecycle phase of a MachineRequest. +kubebuilder:validation:Enum=Pending;Creating;Running;Failed;Deleting;Deleted;Unknown
const ( // MachinePhasePending indicates the request has been received but not yet processed. MachinePhasePending MachinePhase = "Pending" // MachinePhaseCreating indicates the machine is being created. MachinePhaseCreating MachinePhase = "Creating" // MachinePhaseRunning indicates the machine is running and has an IP address. MachinePhaseRunning MachinePhase = "Running" // MachinePhaseFailed indicates the machine creation failed. MachinePhaseFailed MachinePhase = "Failed" // MachinePhaseDeleting indicates the machine is being deleted. MachinePhaseDeleting MachinePhase = "Deleting" // MachinePhaseDeleted indicates the machine has been deleted. MachinePhaseDeleted MachinePhase = "Deleted" // MachinePhaseUnknown indicates the machine state cannot be determined. MachinePhaseUnknown MachinePhase = "Unknown" )
type MachineRequest ¶
type MachineRequest struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec MachineRequestSpec `json:"spec,omitempty"`
Status MachineRequestStatus `json:"status,omitempty"`
}
MachineRequest is the Schema for the machinerequests API. It represents a request to create a virtual machine on an infrastructure provider. This resource serves as the interface contract between the Butler bootstrap controller and provider-specific controllers.
func (*MachineRequest) DeepCopy ¶
func (in *MachineRequest) DeepCopy() *MachineRequest
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineRequest.
func (*MachineRequest) DeepCopyInto ¶
func (in *MachineRequest) DeepCopyInto(out *MachineRequest)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*MachineRequest) DeepCopyObject ¶
func (in *MachineRequest) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*MachineRequest) IsFailed ¶
func (mr *MachineRequest) IsFailed() bool
IsFailed returns true if the machine is in a failed state.
func (*MachineRequest) IsReady ¶
func (mr *MachineRequest) IsReady() bool
IsReady returns true if the machine is in the Running phase with an IP address.
func (*MachineRequest) IsTerminating ¶
func (mr *MachineRequest) IsTerminating() bool
IsTerminating returns true if the machine is being deleted.
func (*MachineRequest) SetFailure ¶
func (mr *MachineRequest) SetFailure(reason, message string)
SetFailure sets the failure reason and message.
func (*MachineRequest) SetPhase ¶
func (mr *MachineRequest) SetPhase(phase MachinePhase)
SetPhase updates the phase and last updated timestamp.
type MachineRequestList ¶
type MachineRequestList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []MachineRequest `json:"items"`
}
MachineRequestList contains a list of MachineRequest.
func (*MachineRequestList) DeepCopy ¶
func (in *MachineRequestList) DeepCopy() *MachineRequestList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineRequestList.
func (*MachineRequestList) DeepCopyInto ¶
func (in *MachineRequestList) DeepCopyInto(out *MachineRequestList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*MachineRequestList) DeepCopyObject ¶
func (in *MachineRequestList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type MachineRequestSpec ¶
type MachineRequestSpec struct {
// ProviderRef references the ProviderConfig to use for this machine.
// +kubebuilder:validation:Required
ProviderRef ProviderReference `json:"providerRef"`
// MachineName is the desired name for the virtual machine.
// Must be unique within the provider's namespace/project.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
MachineName string `json:"machineName"`
// Role indicates the intended role of this machine in the cluster.
// +kubebuilder:validation:Required
Role MachineRole `json:"role"`
// CPU is the number of virtual CPU cores.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=128
CPU int32 `json:"cpu"`
// MemoryMB is the amount of memory in megabytes.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=1024
MemoryMB int32 `json:"memoryMB"`
// DiskGB is the root disk size in gigabytes.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=10
DiskGB int32 `json:"diskGB"`
// ExtraDisks defines additional disks to attach to the machine.
// +optional
ExtraDisks []DiskSpec `json:"extraDisks,omitempty"`
// Image overrides the default OS image from ProviderConfig.
// Format is provider-specific:
// - harvester: "namespace/image-name"
// - nutanix: UUID
// - proxmox: template ID or image name
// +optional
Image string `json:"image,omitempty"`
// UserData is cloud-init user data to configure the machine.
// This typically contains the Talos machine configuration.
// +optional
UserData string `json:"userData,omitempty"`
// NetworkData is cloud-init network configuration.
// +optional
NetworkData string `json:"networkData,omitempty"`
// Labels are key-value pairs to apply to the VM in the provider.
// +optional
Labels map[string]string `json:"labels,omitempty"`
}
MachineRequestSpec defines the desired state of MachineRequest. This is the interface contract between the bootstrap controller and infrastructure provider controllers.
func (*MachineRequestSpec) DeepCopy ¶
func (in *MachineRequestSpec) DeepCopy() *MachineRequestSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineRequestSpec.
func (*MachineRequestSpec) DeepCopyInto ¶
func (in *MachineRequestSpec) DeepCopyInto(out *MachineRequestSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MachineRequestStatus ¶
type MachineRequestStatus struct {
// Phase represents the current lifecycle phase of the machine.
// +optional
Phase MachinePhase `json:"phase,omitempty"`
// ProviderID is the provider-specific identifier for the machine.
// Format is provider-specific (e.g., Harvester VM UID, Nutanix VM UUID).
// +optional
ProviderID string `json:"providerID,omitempty"`
// IPAddress is the primary IP address of the machine.
// This is set when the machine reaches the Running phase.
// +optional
IPAddress string `json:"ipAddress,omitempty"`
// IPAddresses contains all IP addresses assigned to the machine.
// +optional
IPAddresses []string `json:"ipAddresses,omitempty"`
// MACAddress is the primary MAC address of the machine.
// +optional
MACAddress string `json:"macAddress,omitempty"`
// FailureReason provides a machine-readable failure reason.
// +optional
FailureReason string `json:"failureReason,omitempty"`
// FailureMessage provides a human-readable failure message.
// +optional
FailureMessage string `json:"failureMessage,omitempty"`
// Conditions represent the latest available observations of the
// MachineRequest's state.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// LastUpdated is the timestamp of the last status update.
// +optional
LastUpdated *metav1.Time `json:"lastUpdated,omitempty"`
// ObservedGeneration is the generation most recently observed by the controller.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
MachineRequestStatus defines the observed state of MachineRequest.
func (*MachineRequestStatus) DeepCopy ¶
func (in *MachineRequestStatus) DeepCopy() *MachineRequestStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineRequestStatus.
func (*MachineRequestStatus) DeepCopyInto ¶
func (in *MachineRequestStatus) DeepCopyInto(out *MachineRequestStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MachineRole ¶
type MachineRole string
MachineRole defines the role of a machine in a cluster. +kubebuilder:validation:Enum=control-plane;worker
const ( // MachineRoleControlPlane is a control plane node. MachineRoleControlPlane MachineRole = "control-plane" // MachineRoleWorker is a worker node. MachineRoleWorker MachineRole = "worker" )
type MachineTemplateSpec ¶
type MachineTemplateSpec struct {
// CPU is the number of CPU cores.
// +kubebuilder:default=4
// +kubebuilder:validation:Minimum=1
// +optional
CPU int32 `json:"cpu,omitempty"`
// Memory is the amount of RAM.
// +kubebuilder:default="16Gi"
// +optional
Memory resource.Quantity `json:"memory,omitempty"`
// DiskSize is the root disk size.
// +kubebuilder:default="100Gi"
// +optional
DiskSize resource.Quantity `json:"diskSize,omitempty"`
// OS configures the operating system.
// +optional
OS OSSpec `json:"os,omitempty"`
}
MachineTemplateSpec defines VM specifications.
func (*MachineTemplateSpec) DeepCopy ¶
func (in *MachineTemplateSpec) DeepCopy() *MachineTemplateSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineTemplateSpec.
func (*MachineTemplateSpec) DeepCopyInto ¶
func (in *MachineTemplateSpec) DeepCopyInto(out *MachineTemplateSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ManagementAddon ¶
type ManagementAddon struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ManagementAddonSpec `json:"spec,omitempty"`
Status ManagementAddonStatus `json:"status,omitempty"`
}
ManagementAddon is the Schema for the managementaddons API. It represents an addon to be installed on the management cluster.
func (*ManagementAddon) DeepCopy ¶
func (in *ManagementAddon) DeepCopy() *ManagementAddon
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagementAddon.
func (*ManagementAddon) DeepCopyInto ¶
func (in *ManagementAddon) DeepCopyInto(out *ManagementAddon)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ManagementAddon) DeepCopyObject ¶
func (in *ManagementAddon) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ManagementAddonList ¶
type ManagementAddonList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ManagementAddon `json:"items"`
}
ManagementAddonList contains a list of ManagementAddon
func (*ManagementAddonList) DeepCopy ¶
func (in *ManagementAddonList) DeepCopy() *ManagementAddonList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagementAddonList.
func (*ManagementAddonList) DeepCopyInto ¶
func (in *ManagementAddonList) DeepCopyInto(out *ManagementAddonList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ManagementAddonList) DeepCopyObject ¶
func (in *ManagementAddonList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ManagementAddonPhase ¶
type ManagementAddonPhase string
ManagementAddonPhase represents the current phase of a management addon +kubebuilder:validation:Enum=Pending;Installing;Installed;Upgrading;Failed;Uninstalling
const ( ManagementAddonPhasePending ManagementAddonPhase = "Pending" ManagementAddonPhaseInstalling ManagementAddonPhase = "Installing" ManagementAddonPhaseInstalled ManagementAddonPhase = "Installed" ManagementAddonPhaseUpgrading ManagementAddonPhase = "Upgrading" ManagementAddonPhaseFailed ManagementAddonPhase = "Failed" ManagementAddonPhaseUninstalling ManagementAddonPhase = "Uninstalling" )
type ManagementAddonSpec ¶
type ManagementAddonSpec struct {
// Addon is the name of the addon to install (must match an AddonDefinition)
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Addon string `json:"addon"`
// Version is the specific version to install. If not specified, uses the
// default version from the AddonDefinition.
// +optional
Version string `json:"version,omitempty"`
// Values are the Helm values to use for installation.
// These are merged with any default values from the AddonDefinition.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *runtime.RawExtension `json:"values,omitempty"`
// Paused indicates whether reconciliation of this addon is paused.
// When paused, the controller will not make any changes to the addon.
// +optional
Paused bool `json:"paused,omitempty"`
}
ManagementAddonSpec defines the desired state of ManagementAddon
func (*ManagementAddonSpec) DeepCopy ¶
func (in *ManagementAddonSpec) DeepCopy() *ManagementAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagementAddonSpec.
func (*ManagementAddonSpec) DeepCopyInto ¶
func (in *ManagementAddonSpec) DeepCopyInto(out *ManagementAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ManagementAddonStatus ¶
type ManagementAddonStatus struct {
// Phase represents the current phase of the addon installation
// +optional
Phase ManagementAddonPhase `json:"phase,omitempty"`
// InstalledVersion is the currently installed version of the addon
// +optional
InstalledVersion string `json:"installedVersion,omitempty"`
// HelmRelease contains information about the Helm release
// +optional
HelmRelease *HelmReleaseStatus `json:"helmRelease,omitempty"`
// Message provides additional information about the current state
// +optional
Message string `json:"message,omitempty"`
// LastAttemptedVersion is the version that was last attempted to install
// +optional
LastAttemptedVersion string `json:"lastAttemptedVersion,omitempty"`
// Conditions represent the latest available observations of the addon's state
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
// ObservedGeneration is the last observed generation of the ManagementAddon
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
ManagementAddonStatus defines the observed state of ManagementAddon
func (*ManagementAddonStatus) DeepCopy ¶
func (in *ManagementAddonStatus) DeepCopy() *ManagementAddonStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagementAddonStatus.
func (*ManagementAddonStatus) DeepCopyInto ¶
func (in *ManagementAddonStatus) DeepCopyInto(out *ManagementAddonStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ManagementMode ¶
type ManagementMode string
ManagementMode defines how Butler manages addons after initial installation. +kubebuilder:validation:Enum=Active;Observe;GitOps
const ( // ManagementModeActive means Butler actively manages addons. // New addons in spec are installed. Removal is user-initiated. ManagementModeActive ManagementMode = "Active" // ManagementModeObserve means Butler only observes after initial install. // Changes to spec.addons are ignored after cluster is ready. ManagementModeObserve ManagementMode = "Observe" // ManagementModeGitOps means Butler bootstraps Flux and hands off. // Flux manages the cluster from the configured Git repository. ManagementModeGitOps ManagementMode = "GitOps" )
type ManagementPolicySpec ¶
type ManagementPolicySpec struct {
// Mode determines how Butler manages addons.
// +kubebuilder:default="Active"
// +optional
Mode ManagementMode `json:"mode,omitempty"`
}
ManagementPolicySpec defines how Butler manages the cluster.
func (*ManagementPolicySpec) DeepCopy ¶
func (in *ManagementPolicySpec) DeepCopy() *ManagementPolicySpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagementPolicySpec.
func (*ManagementPolicySpec) DeepCopyInto ¶
func (in *ManagementPolicySpec) DeepCopyInto(out *ManagementPolicySpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MetricCollectionDefaults ¶ added in v0.5.0
type MetricCollectionDefaults struct {
// Enabled controls whether metrics collection is enabled by default.
// +optional
Enabled bool `json:"enabled,omitempty"`
// Retention is the Prometheus data retention period (e.g., "15d").
// +optional
Retention string `json:"retention,omitempty"`
}
MetricCollectionDefaults configures default metric collection settings.
func (*MetricCollectionDefaults) DeepCopy ¶ added in v0.5.0
func (in *MetricCollectionDefaults) DeepCopy() *MetricCollectionDefaults
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetricCollectionDefaults.
func (*MetricCollectionDefaults) DeepCopyInto ¶ added in v0.5.0
func (in *MetricCollectionDefaults) DeepCopyInto(out *MetricCollectionDefaults)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MultiTenancyConfig ¶
type MultiTenancyConfig struct {
// Mode determines how multi-tenancy is enforced.
// +kubebuilder:default="Disabled"
// +optional
Mode MultiTenancyMode `json:"mode,omitempty"`
}
MultiTenancyConfig configures multi-tenancy behavior.
func (*MultiTenancyConfig) DeepCopy ¶
func (in *MultiTenancyConfig) DeepCopy() *MultiTenancyConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MultiTenancyConfig.
func (*MultiTenancyConfig) DeepCopyInto ¶
func (in *MultiTenancyConfig) DeepCopyInto(out *MultiTenancyConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MultiTenancyMode ¶
type MultiTenancyMode string
MultiTenancyMode defines how multi-tenancy is enforced. +kubebuilder:validation:Enum=Enforced;Optional;Disabled
const ( // MultiTenancyModeEnforced requires all TenantClusters to belong to a Team. // Teams must exist before TenantClusters can be created. // This is the recommended mode for enterprise deployments. MultiTenancyModeEnforced MultiTenancyMode = "Enforced" // MultiTenancyModeOptional allows Teams but doesn't require them. // TenantClusters can exist in the default namespace without a Team. MultiTenancyModeOptional MultiTenancyMode = "Optional" // MultiTenancyModeDisabled disables Team functionality. // All TenantClusters exist in the default namespace. // This is the simplest mode for demos and single-user deployments. MultiTenancyModeDisabled MultiTenancyMode = "Disabled" )
type NamespacedObjectReference ¶
type NamespacedObjectReference struct {
// Name is the name of the resource.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Namespace is the namespace of the resource.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Namespace string `json:"namespace"`
}
NamespacedObjectReference references a resource in any namespace.
func (*NamespacedObjectReference) DeepCopy ¶
func (in *NamespacedObjectReference) DeepCopy() *NamespacedObjectReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedObjectReference.
func (*NamespacedObjectReference) DeepCopyInto ¶
func (in *NamespacedObjectReference) DeepCopyInto(out *NamespacedObjectReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NetworkPool ¶ added in v0.3.0
type NetworkPool struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec NetworkPoolSpec `json:"spec,omitempty"`
Status NetworkPoolStatus `json:"status,omitempty"`
}
NetworkPool defines a platform-level IP pool for on-prem IPAM.
func (*NetworkPool) DeepCopy ¶ added in v0.3.0
func (in *NetworkPool) DeepCopy() *NetworkPool
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPool.
func (*NetworkPool) DeepCopyInto ¶ added in v0.3.0
func (in *NetworkPool) DeepCopyInto(out *NetworkPool)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*NetworkPool) DeepCopyObject ¶ added in v0.3.0
func (in *NetworkPool) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type NetworkPoolList ¶ added in v0.3.0
type NetworkPoolList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []NetworkPool `json:"items"`
}
NetworkPoolList contains a list of NetworkPool.
func (*NetworkPoolList) DeepCopy ¶ added in v0.3.0
func (in *NetworkPoolList) DeepCopy() *NetworkPoolList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPoolList.
func (*NetworkPoolList) DeepCopyInto ¶ added in v0.3.0
func (in *NetworkPoolList) DeepCopyInto(out *NetworkPoolList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*NetworkPoolList) DeepCopyObject ¶ added in v0.3.0
func (in *NetworkPoolList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type NetworkPoolSpec ¶ added in v0.3.0
type NetworkPoolSpec struct {
// CIDR is the network range in CIDR notation.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$`
CIDR string `json:"cidr"`
// Reserved defines ranges excluded from allocation.
// +optional
Reserved []ReservedRange `json:"reserved,omitempty"`
// TenantAllocation configures the allocatable sub-range and defaults.
// If not specified, the entire CIDR (minus reserved ranges) is allocatable.
// +optional
TenantAllocation *TenantAllocationConfig `json:"tenantAllocation,omitempty"`
}
NetworkPoolSpec defines the desired state of NetworkPool.
func (*NetworkPoolSpec) DeepCopy ¶ added in v0.3.0
func (in *NetworkPoolSpec) DeepCopy() *NetworkPoolSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPoolSpec.
func (*NetworkPoolSpec) DeepCopyInto ¶ added in v0.3.0
func (in *NetworkPoolSpec) DeepCopyInto(out *NetworkPoolSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NetworkPoolStatus ¶ added in v0.3.0
type NetworkPoolStatus struct {
// Conditions represent the latest available observations.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// TotalIPs is the total number of usable IPs (excluding reserved).
// +optional
TotalIPs int32 `json:"totalIPs,omitempty"`
// AllocatedIPs is the number of currently allocated IPs.
// +optional
AllocatedIPs int32 `json:"allocatedIPs,omitempty"`
// AvailableIPs is the number of available IPs.
// +optional
AvailableIPs int32 `json:"availableIPs,omitempty"`
// AllocationCount is the total number of IPAllocations from this pool.
// +optional
AllocationCount int32 `json:"allocationCount,omitempty"`
// FragmentationPercent indicates how fragmented the free space is (0-100).
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
FragmentationPercent *int32 `json:"fragmentationPercent,omitempty"`
// LargestFreeBlock is the size of the largest contiguous free block.
// +optional
LargestFreeBlock int32 `json:"largestFreeBlock,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
NetworkPoolStatus defines the observed state of NetworkPool.
func (*NetworkPoolStatus) DeepCopy ¶ added in v0.3.0
func (in *NetworkPoolStatus) DeepCopy() *NetworkPoolStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPoolStatus.
func (*NetworkPoolStatus) DeepCopyInto ¶ added in v0.3.0
func (in *NetworkPoolStatus) DeepCopyInto(out *NetworkPoolStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NetworkQuota ¶ added in v0.3.0
type NetworkQuota struct {
// MaxNodeIPs limits the number of node IPs per tenant.
// +optional
// +kubebuilder:validation:Minimum=1
MaxNodeIPs *int32 `json:"maxNodeIPs,omitempty"`
// MaxLoadBalancerIPs limits the number of LB IPs per tenant.
// +optional
// +kubebuilder:validation:Minimum=1
MaxLoadBalancerIPs *int32 `json:"maxLoadBalancerIPs,omitempty"`
}
NetworkQuota defines per-tenant network resource quotas.
func (*NetworkQuota) DeepCopy ¶ added in v0.3.0
func (in *NetworkQuota) DeepCopy() *NetworkQuota
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkQuota.
func (*NetworkQuota) DeepCopyInto ¶ added in v0.3.0
func (in *NetworkQuota) DeepCopyInto(out *NetworkQuota)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NetworkingSpec ¶
type NetworkingSpec struct {
// PodCIDR is the CIDR for pod IPs.
// +kubebuilder:default="10.244.0.0/16"
// +optional
PodCIDR string `json:"podCIDR,omitempty"`
// ServiceCIDR is the CIDR for service IPs.
// +kubebuilder:default="10.96.0.0/12"
// +optional
ServiceCIDR string `json:"serviceCIDR,omitempty"`
// LoadBalancerPool defines the IP pool for LoadBalancer services.
// When IPAM is active, this is populated automatically from IPAllocation.
// +optional
LoadBalancerPool *IPPool `json:"loadBalancerPool,omitempty"`
// LBPoolSize overrides the default load balancer pool size from the provider.
// Only used when the provider has network.mode=ipam.
// +optional
// +kubebuilder:validation:Minimum=1
LBPoolSize *int32 `json:"lbPoolSize,omitempty"`
}
NetworkingSpec configures cluster networking.
func (*NetworkingSpec) DeepCopy ¶
func (in *NetworkingSpec) DeepCopy() *NetworkingSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkingSpec.
func (*NetworkingSpec) DeepCopyInto ¶
func (in *NetworkingSpec) DeepCopyInto(out *NetworkingSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NutanixOverride ¶
type NutanixOverride struct {
// ClusterUUID is the Nutanix cluster UUID.
// +optional
ClusterUUID string `json:"clusterUUID,omitempty"`
// SubnetUUID is the Nutanix subnet UUID.
// +optional
SubnetUUID string `json:"subnetUUID,omitempty"`
// ImageUUID is the Nutanix image UUID.
// +optional
ImageUUID string `json:"imageUUID,omitempty"`
// StorageContainerUUID is the Nutanix storage container UUID.
// +optional
StorageContainerUUID string `json:"storageContainerUUID,omitempty"`
}
NutanixOverride contains Nutanix-specific settings.
func (*NutanixOverride) DeepCopy ¶
func (in *NutanixOverride) DeepCopy() *NutanixOverride
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NutanixOverride.
func (*NutanixOverride) DeepCopyInto ¶
func (in *NutanixOverride) DeepCopyInto(out *NutanixOverride)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NutanixProviderConfig ¶
type NutanixProviderConfig struct {
// Endpoint is the Prism Central API URL.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https?://`
Endpoint string `json:"endpoint"`
// Port is the Prism Central API port.
// +kubebuilder:default=9440
// +optional
Port int32 `json:"port,omitempty"`
// Insecure allows insecure TLS connections.
// +kubebuilder:default=false
// +optional
Insecure bool `json:"insecure,omitempty"`
// ClusterUUID is the target Nutanix cluster UUID.
// +kubebuilder:validation:Required
ClusterUUID string `json:"clusterUUID"`
// SubnetUUID is the network subnet UUID for VMs.
// +kubebuilder:validation:Required
SubnetUUID string `json:"subnetUUID"`
// ImageUUID is the default OS image UUID.
// Used when MachineRequest doesn't specify an image.
// +optional
ImageUUID string `json:"imageUUID,omitempty"`
// StorageContainerUUID is the storage container for VM disks.
// +optional
StorageContainerUUID string `json:"storageContainerUUID,omitempty"`
}
NutanixProviderConfig contains Nutanix-specific configuration.
func (*NutanixProviderConfig) DeepCopy ¶
func (in *NutanixProviderConfig) DeepCopy() *NutanixProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NutanixProviderConfig.
func (*NutanixProviderConfig) DeepCopyInto ¶
func (in *NutanixProviderConfig) DeepCopyInto(out *NutanixProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type OIDCConfig ¶
type OIDCConfig struct {
// IssuerURL is the OIDC provider's issuer URL.
// Butler appends /.well-known/openid-configuration for discovery.
// Examples:
// - Google: https://accounts.google.com
// - Microsoft: https://login.microsoftonline.com/{tenant}/v2.0
// - Okta: https://{domain}.okta.com
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https://`
IssuerURL string `json:"issuerURL"`
// ClientID is the OAuth2 client ID from the identity provider.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
ClientID string `json:"clientID"`
// ClientSecretRef references a Secret containing the OAuth2 client secret.
// The Secret must contain a key named "client-secret".
// +kubebuilder:validation:Required
ClientSecretRef SecretReference `json:"clientSecretRef"`
// RedirectURL is the OAuth2 callback URL.
// Must match the redirect URI configured in the identity provider.
// Example: https://butler.example.com/api/auth/callback
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https?://`
RedirectURL string `json:"redirectURL"`
// Scopes are the OAuth2 scopes to request.
// Defaults to ["openid", "email", "profile"] if not specified.
// Some providers require additional scopes for group information:
// - Microsoft: add "groups" or use Graph API
// - Okta: add "groups"
// - Google: groups require separate Cloud Identity API call
// +optional
Scopes []string `json:"scopes,omitempty"`
// GroupsClaim is the JWT claim containing group memberships.
// Defaults to "groups". Set to empty string to disable group extraction.
// Note: Google Workspace doesn't include groups in the ID token by default.
// +kubebuilder:default="groups"
// +optional
GroupsClaim string `json:"groupsClaim,omitempty"`
// EmailClaim is the JWT claim containing the user's email.
// Defaults to "email".
// +kubebuilder:default="email"
// +optional
EmailClaim string `json:"emailClaim,omitempty"`
// HostedDomain restricts authentication to a specific domain.
// Only supported by Google Workspace. Users outside this domain
// will see an error during Google authentication.
// Example: "butlerlabs.dev"
// +optional
HostedDomain string `json:"hostedDomain,omitempty"`
// InsecureSkipVerify disables TLS certificate verification.
// WARNING: Only use for development with self-signed certificates.
// +kubebuilder:default=false
// +optional
InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"`
// GoogleWorkspace contains optional Google Workspace Admin SDK configuration
// for fetching user group memberships. Required because Google OIDC tokens
// don't include groups by default.
// +optional
GoogleWorkspace *GoogleWorkspaceConfig `json:"googleWorkspace,omitempty"`
}
OIDCConfig contains OpenID Connect provider configuration. Butler uses OIDC Discovery to automatically configure endpoints.
func (*OIDCConfig) DeepCopy ¶
func (in *OIDCConfig) DeepCopy() *OIDCConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OIDCConfig.
func (*OIDCConfig) DeepCopyInto ¶
func (in *OIDCConfig) DeepCopyInto(out *OIDCConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type OIDCDiscoveredEndpoints ¶
type OIDCDiscoveredEndpoints struct {
// AuthorizationEndpoint is the OAuth2 authorization URL.
// +optional
AuthorizationEndpoint string `json:"authorizationEndpoint,omitempty"`
// TokenEndpoint is the OAuth2 token URL.
// +optional
TokenEndpoint string `json:"tokenEndpoint,omitempty"`
// UserInfoEndpoint is the OIDC userinfo URL.
// +optional
UserInfoEndpoint string `json:"userInfoEndpoint,omitempty"`
// JWKSURI is the JSON Web Key Set URL for token validation.
// +optional
JWKSURI string `json:"jwksURI,omitempty"`
}
OIDCDiscoveredEndpoints contains endpoints from OIDC Discovery.
func (*OIDCDiscoveredEndpoints) DeepCopy ¶
func (in *OIDCDiscoveredEndpoints) DeepCopy() *OIDCDiscoveredEndpoints
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OIDCDiscoveredEndpoints.
func (*OIDCDiscoveredEndpoints) DeepCopyInto ¶
func (in *OIDCDiscoveredEndpoints) DeepCopyInto(out *OIDCDiscoveredEndpoints)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type OSSpec ¶
type OSSpec struct {
// Type is the OS type.
// +kubebuilder:default="rocky"
// +optional
Type OSType `json:"type,omitempty"`
// Version is the OS version.
// +kubebuilder:default="9.5"
// +optional
Version string `json:"version,omitempty"`
// ImageRef references a specific image to use.
// Overrides Type and Version if specified.
// +optional
ImageRef string `json:"imageRef,omitempty"`
// SchematicID references a Butler Image Factory schematic.
// When set with AutoSync enabled, Butler automatically syncs the
// factory-built image to the target provider before VM creation.
// +optional
SchematicID string `json:"schematicID,omitempty"`
// SSHAuthorizedKey overrides the platform default SSH public key for this cluster's workers.
// Only applies to non-Talos OS types (Flatcar, Bottlerocket).
// If empty, falls back to ButlerConfig.spec.sshAuthorizedKey.
// +optional
SSHAuthorizedKey string `json:"sshAuthorizedKey,omitempty"`
// Talos provides Talos-specific worker node configuration.
// Required when type is "talos".
// +optional
Talos *TalosConfig `json:"talos,omitempty"`
}
OSSpec configures the operating system.
func (*OSSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OSSpec.
func (*OSSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type OSType ¶
type OSType string
OSType defines the operating system for worker nodes. +kubebuilder:validation:Enum=rocky;flatcar;talos;kairos;bottlerocket
const ( // OSTypeRocky is Rocky Linux. OSTypeRocky OSType = "rocky" // OSTypeFlatcar is Flatcar Container Linux. OSTypeFlatcar OSType = "flatcar" // OSTypeTalos is Talos Linux (immutable OS). OSTypeTalos OSType = "talos" // OSTypeKairos is Kairos (immutable, cloud-config based OS). OSTypeKairos OSType = "kairos" // OSTypeBottlerocket is Bottlerocket (immutable, TOML-configured OS). OSTypeBottlerocket OSType = "bottlerocket" )
type ObservabilityCollectionConfig ¶ added in v0.5.0
type ObservabilityCollectionConfig struct {
// AutoEnroll controls which observability agents are automatically installed
// on new tenant clusters when they reach Ready phase.
// +optional
AutoEnroll *AutoEnrollConfig `json:"autoEnroll,omitempty"`
// Logs configures default log collection settings.
// +optional
Logs *LogCollectionDefaults `json:"logs,omitempty"`
// Metrics configures default metric collection settings.
// +optional
Metrics *MetricCollectionDefaults `json:"metrics,omitempty"`
}
ObservabilityCollectionConfig configures default collection settings.
func (*ObservabilityCollectionConfig) DeepCopy ¶ added in v0.5.0
func (in *ObservabilityCollectionConfig) DeepCopy() *ObservabilityCollectionConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObservabilityCollectionConfig.
func (*ObservabilityCollectionConfig) DeepCopyInto ¶ added in v0.5.0
func (in *ObservabilityCollectionConfig) DeepCopyInto(out *ObservabilityCollectionConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ObservabilityConfig ¶ added in v0.5.0
type ObservabilityConfig struct {
// Pipeline configures the centralized observability pipeline cluster.
// +optional
Pipeline *ObservabilityPipelineConfig `json:"pipeline,omitempty"`
// Collection configures default collection settings for tenant clusters.
// +optional
Collection *ObservabilityCollectionConfig `json:"collection,omitempty"`
}
ObservabilityConfig configures platform-level observability. This is stored in ButlerConfig and used as the default for all observability operations.
func (*ObservabilityConfig) DeepCopy ¶ added in v0.5.0
func (in *ObservabilityConfig) DeepCopy() *ObservabilityConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObservabilityConfig.
func (*ObservabilityConfig) DeepCopyInto ¶ added in v0.5.0
func (in *ObservabilityConfig) DeepCopyInto(out *ObservabilityConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ObservabilityPipelineConfig ¶ added in v0.5.0
type ObservabilityPipelineConfig struct {
// ClusterRef references the TenantCluster serving as the observability pipeline.
// +optional
ClusterRef *NamespacedObjectReference `json:"clusterRef,omitempty"`
// LogEndpoint is the Vector aggregator ingestion URL.
// Example: "http://vector-aggregator.vector.svc:9000"
// +optional
LogEndpoint string `json:"logEndpoint,omitempty"`
// MetricEndpoint is the optional remote-write endpoint for metrics.
// +optional
MetricEndpoint string `json:"metricEndpoint,omitempty"`
// TraceEndpoint is the optional OTLP endpoint for traces.
// Example: "tempo.tracing.svc:4317"
// +optional
TraceEndpoint string `json:"traceEndpoint,omitempty"`
}
ObservabilityPipelineConfig configures the centralized pipeline.
func (*ObservabilityPipelineConfig) DeepCopy ¶ added in v0.5.0
func (in *ObservabilityPipelineConfig) DeepCopy() *ObservabilityPipelineConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObservabilityPipelineConfig.
func (*ObservabilityPipelineConfig) DeepCopyInto ¶ added in v0.5.0
func (in *ObservabilityPipelineConfig) DeepCopyInto(out *ObservabilityPipelineConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ObservabilityStatus ¶ added in v0.5.0
type ObservabilityStatus struct {
// PipelineReady indicates whether the observability pipeline cluster is healthy.
// +optional
PipelineReady bool `json:"pipelineReady,omitempty"`
// EnrolledCount is the number of tenant clusters with observability agents installed.
// +optional
EnrolledCount int32 `json:"enrolledCount,omitempty"`
// TotalCount is the total number of tenant clusters.
// +optional
TotalCount int32 `json:"totalCount,omitempty"`
}
ObservabilityStatus shows the observed state of platform observability.
func (*ObservabilityStatus) DeepCopy ¶ added in v0.5.0
func (in *ObservabilityStatus) DeepCopy() *ObservabilityStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObservabilityStatus.
func (*ObservabilityStatus) DeepCopyInto ¶ added in v0.5.0
func (in *ObservabilityStatus) DeepCopyInto(out *ObservabilityStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ObservedClusterState ¶
type ObservedClusterState struct {
// KubernetesVersion is the actual Kubernetes version running.
// +optional
KubernetesVersion string `json:"kubernetesVersion,omitempty"`
// Workers shows worker node status.
// +optional
Workers *WorkerStatus `json:"workers,omitempty"`
// Addons shows installed addon status.
// +optional
Addons []AddonStatus `json:"addons,omitempty"`
}
ObservedClusterState captures the current state of the cluster.
func (*ObservedClusterState) DeepCopy ¶
func (in *ObservedClusterState) DeepCopy() *ObservedClusterState
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObservedClusterState.
func (*ObservedClusterState) DeepCopyInto ¶
func (in *ObservedClusterState) DeepCopyInto(out *ObservedClusterState)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PinnedIPRange ¶ added in v0.3.0
type PinnedIPRange struct {
// StartAddress is the first IP of the pinned range.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^(\d{1,3}\.){3}\d{1,3}$`
StartAddress string `json:"startAddress"`
// EndAddress is the last IP of the pinned range.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^(\d{1,3}\.){3}\d{1,3}$`
EndAddress string `json:"endAddress"`
}
PinnedIPRange specifies an exact IP range to allocate.
func (*PinnedIPRange) DeepCopy ¶ added in v0.3.0
func (in *PinnedIPRange) DeepCopy() *PinnedIPRange
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PinnedIPRange.
func (*PinnedIPRange) DeepCopyInto ¶ added in v0.3.0
func (in *PinnedIPRange) DeepCopyInto(out *PinnedIPRange)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PoolReference ¶ added in v0.3.0
type PoolReference struct {
// Name is the name of the NetworkPool.
// +kubebuilder:validation:Required
Name string `json:"name"`
// Priority determines allocation order (lower = higher priority).
// Pools at the same priority are tried in list order.
// +kubebuilder:default=0
// +optional
Priority *int32 `json:"priority,omitempty"`
}
PoolReference references a NetworkPool with a priority.
func (*PoolReference) DeepCopy ¶ added in v0.3.0
func (in *PoolReference) DeepCopy() *PoolReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolReference.
func (*PoolReference) DeepCopyInto ¶ added in v0.3.0
func (in *PoolReference) DeepCopyInto(out *PoolReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderCapacity ¶ added in v0.3.0
type ProviderCapacity struct {
// AvailableIPs is the number of available IPs across all pools.
// +optional
AvailableIPs int32 `json:"availableIPs,omitempty"`
// EstimatedTenants is the estimated number of tenants that can be provisioned.
// +optional
EstimatedTenants int32 `json:"estimatedTenants,omitempty"`
}
ProviderCapacity reports the available capacity of a provider.
func (*ProviderCapacity) DeepCopy ¶ added in v0.3.0
func (in *ProviderCapacity) DeepCopy() *ProviderCapacity
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderCapacity.
func (*ProviderCapacity) DeepCopyInto ¶ added in v0.3.0
func (in *ProviderCapacity) DeepCopyInto(out *ProviderCapacity)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderConfig ¶
type ProviderConfig struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ProviderConfigSpec `json:"spec,omitempty"`
Status ProviderConfigStatus `json:"status,omitempty"`
}
ProviderConfig defines the configuration for an infrastructure provider. It contains credentials and provider-specific settings needed to create and manage virtual machines.
func (*ProviderConfig) DeepCopy ¶
func (in *ProviderConfig) DeepCopy() *ProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfig.
func (*ProviderConfig) DeepCopyInto ¶
func (in *ProviderConfig) DeepCopyInto(out *ProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ProviderConfig) DeepCopyObject ¶
func (in *ProviderConfig) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ProviderConfigList ¶
type ProviderConfigList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ProviderConfig `json:"items"`
}
ProviderConfigList contains a list of ProviderConfig.
func (*ProviderConfigList) DeepCopy ¶
func (in *ProviderConfigList) DeepCopy() *ProviderConfigList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigList.
func (*ProviderConfigList) DeepCopyInto ¶
func (in *ProviderConfigList) DeepCopyInto(out *ProviderConfigList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ProviderConfigList) DeepCopyObject ¶
func (in *ProviderConfigList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ProviderConfigScope ¶ added in v0.3.0
type ProviderConfigScope struct {
// Type is the scope type.
// +kubebuilder:default="platform"
// +optional
Type ProviderConfigScopeType `json:"type,omitempty"`
// TeamRef references the Team when type is "team".
// Required when type is "team".
// +optional
TeamRef *LocalObjectReference `json:"teamRef,omitempty"`
}
ProviderConfigScope defines the visibility of a ProviderConfig.
func (*ProviderConfigScope) DeepCopy ¶ added in v0.3.0
func (in *ProviderConfigScope) DeepCopy() *ProviderConfigScope
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigScope.
func (*ProviderConfigScope) DeepCopyInto ¶ added in v0.3.0
func (in *ProviderConfigScope) DeepCopyInto(out *ProviderConfigScope)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderConfigScopeType ¶ added in v0.3.0
type ProviderConfigScopeType string
ProviderConfigScopeType defines the visibility scope. +kubebuilder:validation:Enum=platform;team
const ( // ProviderConfigScopePlatform means the provider is available to all teams. ProviderConfigScopePlatform ProviderConfigScopeType = "platform" // ProviderConfigScopeTeam means the provider is restricted to a specific team. ProviderConfigScopeTeam ProviderConfigScopeType = "team" )
type ProviderConfigSpec ¶
type ProviderConfigSpec struct {
// Provider specifies the infrastructure provider type.
// +kubebuilder:validation:Required
Provider ProviderType `json:"provider"`
// CredentialsRef references the Secret containing provider credentials.
// The Secret must contain the appropriate keys for the provider type:
// - harvester: "kubeconfig" (Harvester kubeconfig)
// - nutanix: "username", "password"
// - proxmox: "username", "password" or "token"
// - gcp: "serviceAccountKey" (JSON service account key)
// +kubebuilder:validation:Required
CredentialsRef SecretReference `json:"credentialsRef"`
// Harvester contains Harvester-specific configuration.
// Required when provider is "harvester".
// +optional
Harvester *HarvesterProviderConfig `json:"harvester,omitempty"`
// Nutanix contains Nutanix-specific configuration.
// Required when provider is "nutanix".
// +optional
Nutanix *NutanixProviderConfig `json:"nutanix,omitempty"`
// Proxmox contains Proxmox-specific configuration.
// Required when provider is "proxmox".
// +optional
Proxmox *ProxmoxProviderConfig `json:"proxmox,omitempty"`
// Azure contains Azure-specific configuration.
// Required when provider is "azure".
// +optional
Azure *AzureProviderConfig `json:"azure,omitempty"`
// AWS contains AWS-specific configuration.
// Required when provider is "aws".
// +optional
AWS *AWSProviderConfig `json:"aws,omitempty"`
// GCP contains GCP-specific configuration.
// Required when provider is "gcp".
// +optional
GCP *GCPProviderConfig `json:"gcp,omitempty"`
// Scope defines the visibility of this ProviderConfig.
// Platform-scoped providers are available to all teams.
// Team-scoped providers are restricted to a specific team.
// +optional
Scope *ProviderConfigScope `json:"scope,omitempty"`
// Network configures IPAM and network settings for this provider.
// +optional
Network *ProviderNetworkConfig `json:"network,omitempty"`
// Limits defines resource limits enforced per-team on this provider.
// +optional
Limits *ProviderLimits `json:"limits,omitempty"`
}
ProviderConfigSpec defines the desired state of ProviderConfig.
func (*ProviderConfigSpec) DeepCopy ¶
func (in *ProviderConfigSpec) DeepCopy() *ProviderConfigSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigSpec.
func (*ProviderConfigSpec) DeepCopyInto ¶
func (in *ProviderConfigSpec) DeepCopyInto(out *ProviderConfigSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderConfigStatus ¶
type ProviderConfigStatus struct {
// Conditions represent the latest available observations of the ProviderConfig's state.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Validated indicates whether the provider configuration has been validated.
// +optional
Validated bool `json:"validated,omitempty"`
// LastValidationTime is the timestamp of the last successful validation.
// +optional
LastValidationTime *metav1.Time `json:"lastValidationTime,omitempty"`
// ProviderVersion is the detected version of the infrastructure provider.
// +optional
ProviderVersion string `json:"providerVersion,omitempty"`
// Ready indicates overall readiness of the provider.
// +optional
Ready bool `json:"ready,omitempty"`
// LastProbeTime is the timestamp of the last health probe.
// +optional
LastProbeTime *metav1.Time `json:"lastProbeTime,omitempty"`
// Capacity reports the available capacity of this provider.
// +optional
Capacity *ProviderCapacity `json:"capacity,omitempty"`
}
ProviderConfigStatus defines the observed state of ProviderConfig.
func (*ProviderConfigStatus) DeepCopy ¶
func (in *ProviderConfigStatus) DeepCopy() *ProviderConfigStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigStatus.
func (*ProviderConfigStatus) DeepCopyInto ¶
func (in *ProviderConfigStatus) DeepCopyInto(out *ProviderConfigStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderLBConfig ¶ added in v0.3.0
type ProviderLBConfig struct {
// DefaultPoolSize is the default number of LB IPs per tenant in static mode.
// +kubebuilder:default=8
// +kubebuilder:validation:Minimum=1
// +optional
DefaultPoolSize *int32 `json:"defaultPoolSize,omitempty"`
// AllocationMode controls how LB IPs are allocated to tenants.
// "static" pre-allocates a fixed block (DefaultPoolSize IPs).
// "elastic" starts small and grows/shrinks based on usage.
// +kubebuilder:validation:Enum=static;elastic
// +kubebuilder:default="static"
// +optional
AllocationMode string `json:"allocationMode,omitempty"`
// InitialPoolSize is the number of LB IPs initially allocated in elastic mode.
// +kubebuilder:default=2
// +kubebuilder:validation:Minimum=1
// +optional
InitialPoolSize *int32 `json:"initialPoolSize,omitempty"`
// GrowthIncrement is the number of IPs added per expansion in elastic mode.
// +kubebuilder:default=2
// +kubebuilder:validation:Minimum=1
// +optional
GrowthIncrement *int32 `json:"growthIncrement,omitempty"`
}
ProviderLBConfig configures load balancer defaults.
func (*ProviderLBConfig) DeepCopy ¶ added in v0.3.0
func (in *ProviderLBConfig) DeepCopy() *ProviderLBConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderLBConfig.
func (*ProviderLBConfig) DeepCopyInto ¶ added in v0.3.0
func (in *ProviderLBConfig) DeepCopyInto(out *ProviderLBConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderLimits ¶ added in v0.3.0
type ProviderLimits struct {
// MaxClustersPerTeam limits the number of clusters per team.
// +optional
// +kubebuilder:validation:Minimum=1
MaxClustersPerTeam *int32 `json:"maxClustersPerTeam,omitempty"`
// MaxNodesPerTeam limits the total nodes per team.
// +optional
// +kubebuilder:validation:Minimum=1
MaxNodesPerTeam *int32 `json:"maxNodesPerTeam,omitempty"`
}
ProviderLimits defines per-team resource limits on a provider.
func (*ProviderLimits) DeepCopy ¶ added in v0.3.0
func (in *ProviderLimits) DeepCopy() *ProviderLimits
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderLimits.
func (*ProviderLimits) DeepCopyInto ¶ added in v0.3.0
func (in *ProviderLimits) DeepCopyInto(out *ProviderLimits)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderNetworkConfig ¶ added in v0.3.0
type ProviderNetworkConfig struct {
// Mode determines how IP addresses are managed.
// "ipam" uses NetworkPool-based automated allocation.
// "cloud" relies on the cloud provider's native networking.
// +kubebuilder:validation:Enum=ipam;cloud
// +kubebuilder:default="cloud"
// +optional
Mode string `json:"mode,omitempty"`
// PoolRefs references NetworkPools for IPAM allocation, ordered by priority.
// Required when mode is "ipam". Allocator tries first pool, falls back to next if exhausted.
// +optional
PoolRefs []PoolReference `json:"poolRefs,omitempty"`
// Subnet is the network name for VM placement (e.g., "VM Network - VLAN 40").
// +optional
Subnet string `json:"subnet,omitempty"`
// Gateway is the network gateway address.
// +optional
Gateway string `json:"gateway,omitempty"`
// DNSServers are the DNS server addresses.
// +optional
DNSServers []string `json:"dnsServers,omitempty"`
// LoadBalancer configures load balancer IP allocation defaults.
// +optional
LoadBalancer *ProviderLBConfig `json:"loadBalancer,omitempty"`
// QuotaPerTenant defines per-tenant network resource quotas.
// +optional
QuotaPerTenant *NetworkQuota `json:"quotaPerTenant,omitempty"`
}
ProviderNetworkConfig configures IPAM and network settings.
func (*ProviderNetworkConfig) DeepCopy ¶ added in v0.3.0
func (in *ProviderNetworkConfig) DeepCopy() *ProviderNetworkConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderNetworkConfig.
func (*ProviderNetworkConfig) DeepCopyInto ¶ added in v0.3.0
func (in *ProviderNetworkConfig) DeepCopyInto(out *ProviderNetworkConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderReference ¶
type ProviderReference struct {
// Name is the name of the ProviderConfig resource.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Namespace is the namespace of the ProviderConfig resource.
// If not specified, the namespace of the referencing resource is used.
// +optional
Namespace string `json:"namespace,omitempty"`
}
ProviderReference references a ProviderConfig resource.
func (*ProviderReference) DeepCopy ¶
func (in *ProviderReference) DeepCopy() *ProviderReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderReference.
func (*ProviderReference) DeepCopyInto ¶
func (in *ProviderReference) DeepCopyInto(out *ProviderReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProviderType ¶
type ProviderType string
ProviderType defines the supported infrastructure providers. +kubebuilder:validation:Enum=harvester;nutanix;proxmox;azure;aws;gcp
const ( // ProviderTypeHarvester is the Harvester HCI provider. ProviderTypeHarvester ProviderType = "harvester" // ProviderTypeNutanix is the Nutanix AHV provider. ProviderTypeNutanix ProviderType = "nutanix" // ProviderTypeProxmox is the Proxmox VE provider. ProviderTypeProxmox ProviderType = "proxmox" // ProviderTypeAzure is the Microsoft Azure provider. ProviderTypeAzure ProviderType = "azure" // ProviderTypeAWS is the Amazon Web Services provider. ProviderTypeAWS ProviderType = "aws" // ProviderTypeGCP is the Google Cloud Platform provider. ProviderTypeGCP ProviderType = "gcp" )
type ProxmoxOverride ¶
type ProxmoxOverride struct {
// Node is the Proxmox node to deploy VMs on.
// +optional
Node string `json:"node,omitempty"`
// Storage is the Proxmox storage to use.
// +optional
Storage string `json:"storage,omitempty"`
// TemplateID is the VM template ID.
// +optional
TemplateID int `json:"templateID,omitempty"`
}
ProxmoxOverride contains Proxmox-specific settings.
func (*ProxmoxOverride) DeepCopy ¶
func (in *ProxmoxOverride) DeepCopy() *ProxmoxOverride
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxmoxOverride.
func (*ProxmoxOverride) DeepCopyInto ¶
func (in *ProxmoxOverride) DeepCopyInto(out *ProxmoxOverride)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ProxmoxProviderConfig ¶
type ProxmoxProviderConfig struct {
// Endpoint is the Proxmox API URL.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^https?://`
Endpoint string `json:"endpoint"`
// Insecure allows insecure TLS connections.
// +kubebuilder:default=false
// +optional
Insecure bool `json:"insecure,omitempty"`
// Nodes is the list of Proxmox nodes available for VM placement.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
Nodes []string `json:"nodes"`
// Storage is the storage location for VM disks.
// +kubebuilder:validation:Required
Storage string `json:"storage"`
// TemplateID is the VM template ID to clone.
// +optional
TemplateID int32 `json:"templateID,omitempty"`
// VMIDRange defines the range of VM IDs to use.
// +optional
VMIDRange *VMIDRange `json:"vmidRange,omitempty"`
}
ProxmoxProviderConfig contains Proxmox-specific configuration.
func (*ProxmoxProviderConfig) DeepCopy ¶
func (in *ProxmoxProviderConfig) DeepCopy() *ProxmoxProviderConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxmoxProviderConfig.
func (*ProxmoxProviderConfig) DeepCopyInto ¶
func (in *ProxmoxProviderConfig) DeepCopyInto(out *ProxmoxProviderConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ReservedRange ¶ added in v0.3.0
type ReservedRange struct {
// CIDR is the reserved range in CIDR notation.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$`
CIDR string `json:"cidr"`
// Description explains why this range is reserved.
// +optional
Description string `json:"description,omitempty"`
}
ReservedRange defines a range of IPs excluded from allocation.
func (*ReservedRange) DeepCopy ¶ added in v0.3.0
func (in *ReservedRange) DeepCopy() *ReservedRange
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReservedRange.
func (*ReservedRange) DeepCopyInto ¶ added in v0.3.0
func (in *ReservedRange) DeepCopyInto(out *ReservedRange)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceLimits ¶
type ResourceLimits struct {
// MaxClusters is the maximum number of TenantClusters a Team can create.
// +kubebuilder:validation:Minimum=1
// +optional
MaxClusters *int32 `json:"maxClusters,omitempty"`
// MaxWorkersPerCluster is the maximum workers per TenantCluster.
// +kubebuilder:validation:Minimum=1
// +optional
MaxWorkersPerCluster *int32 `json:"maxWorkersPerCluster,omitempty"`
// MaxTotalCPU is the maximum total CPU cores across all clusters.
// +optional
MaxTotalCPU *resource.Quantity `json:"maxTotalCPU,omitempty"`
// MaxTotalMemory is the maximum total memory across all clusters.
// +optional
MaxTotalMemory *resource.Quantity `json:"maxTotalMemory,omitempty"`
// MaxTotalStorage is the maximum total storage across all clusters.
// +optional
MaxTotalStorage *resource.Quantity `json:"maxTotalStorage,omitempty"`
}
ResourceLimits defines resource limits for Teams.
func (*ResourceLimits) DeepCopy ¶
func (in *ResourceLimits) DeepCopy() *ResourceLimits
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceLimits.
func (*ResourceLimits) DeepCopyInto ¶
func (in *ResourceLimits) DeepCopyInto(out *ResourceLimits)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceQuantities ¶ added in v0.5.0
type ResourceQuantities struct {
// CPU resource (e.g., "100m", "1", "2").
// +optional
CPU *resource.Quantity `json:"cpu,omitempty"`
// Memory resource (e.g., "128Mi", "1Gi").
// +optional
Memory *resource.Quantity `json:"memory,omitempty"`
}
ResourceQuantities defines CPU and memory quantities.
func (*ResourceQuantities) DeepCopy ¶ added in v0.5.0
func (in *ResourceQuantities) DeepCopy() *ResourceQuantities
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceQuantities.
func (*ResourceQuantities) DeepCopyInto ¶ added in v0.5.0
func (in *ResourceQuantities) DeepCopyInto(out *ResourceQuantities)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SSHKeyEntry ¶ added in v0.4.0
type SSHKeyEntry struct {
// Name is a user-friendly label for this key (e.g., "macbook-pro", "work-laptop").
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
Name string `json:"name"`
// PublicKey is the SSH public key (e.g., "ssh-ed25519 AAAA... user@host").
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
PublicKey string `json:"publicKey"`
// Fingerprint is the SHA256 fingerprint, computed by the server on upload.
// +optional
Fingerprint string `json:"fingerprint,omitempty"`
// AddedAt is when this key was added.
// +optional
AddedAt *metav1.Time `json:"addedAt,omitempty"`
}
SSHKeyEntry represents a named SSH public key in a user's profile.
func (*SSHKeyEntry) DeepCopy ¶ added in v0.4.0
func (in *SSHKeyEntry) DeepCopy() *SSHKeyEntry
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeyEntry.
func (*SSHKeyEntry) DeepCopyInto ¶ added in v0.4.0
func (in *SSHKeyEntry) DeepCopyInto(out *SSHKeyEntry)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SecretReference ¶
type SecretReference struct {
// Name is the name of the Secret.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Namespace is the namespace of the Secret.
// If not specified, the namespace of the referencing resource is used.
// +optional
Namespace string `json:"namespace,omitempty"`
// Key is the key within the Secret to reference.
// If not specified, the entire Secret data is used.
// +optional
Key string `json:"key,omitempty"`
}
SecretReference references a Secret resource.
func (*SecretReference) DeepCopy ¶
func (in *SecretReference) DeepCopy() *SecretReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretReference.
func (*SecretReference) DeepCopyInto ¶
func (in *SecretReference) DeepCopyInto(out *SecretReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StorageAddonSpec ¶
type StorageAddonSpec struct {
// Type is the storage type
// +kubebuilder:validation:Enum=longhorn;none
// +kubebuilder:default=longhorn
Type string `json:"type,omitempty"`
// Version is the addon version
// +optional
Version string `json:"version,omitempty"`
// ReplicaCount is the default replica count for Longhorn volumes
// For single-node topology, this is automatically set to 1
// +optional
// +kubebuilder:default=3
ReplicaCount *int32 `json:"replicaCount,omitempty"`
}
StorageAddonSpec defines storage configuration
func (*StorageAddonSpec) DeepCopy ¶
func (in *StorageAddonSpec) DeepCopy() *StorageAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageAddonSpec.
func (*StorageAddonSpec) DeepCopyInto ¶
func (in *StorageAddonSpec) DeepCopyInto(out *StorageAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type StorageSpec ¶
type StorageSpec struct {
// Provider is the storage provider.
// +kubebuilder:validation:Enum=longhorn;linstor
// +optional
Provider string `json:"provider,omitempty"`
// Version is the addon version.
// +kubebuilder:validation:Required
Version string `json:"version"`
// Values are Helm values for customization.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
}
StorageSpec configures persistent storage.
func (*StorageSpec) DeepCopy ¶
func (in *StorageSpec) DeepCopy() *StorageSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageSpec.
func (*StorageSpec) DeepCopyInto ¶
func (in *StorageSpec) DeepCopyInto(out *StorageSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TalosConfig ¶ added in v0.2.0
type TalosConfig struct {
// InstallDisk is the disk where Talos will be installed.
// +kubebuilder:default="/dev/vda"
// +optional
InstallDisk string `json:"installDisk,omitempty"`
// InstallerImage is the Talos installer image
// (e.g., factory.talos.dev/installer/<schematic>:v1.9.3).
// +optional
InstallerImage string `json:"installerImage,omitempty"`
// Version is the Talos version.
// +kubebuilder:default="v1.9.3"
// +optional
Version string `json:"version,omitempty"`
}
TalosConfig provides Talos-specific worker node configuration.
func (*TalosConfig) DeepCopy ¶ added in v0.2.0
func (in *TalosConfig) DeepCopy() *TalosConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TalosConfig.
func (*TalosConfig) DeepCopyInto ¶ added in v0.2.0
func (in *TalosConfig) DeepCopyInto(out *TalosConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TalosConfigPatch ¶
type TalosConfigPatch struct {
// Op is the patch operation (add, remove, replace)
// +kubebuilder:validation:Enum=add;remove;replace
Op string `json:"op"`
// Path is the JSON path to patch
Path string `json:"path"`
// Value is the value to set (for add/replace)
// +optional
Value string `json:"value,omitempty"`
}
TalosConfigPatch defines a Talos config patch
func (*TalosConfigPatch) DeepCopy ¶
func (in *TalosConfigPatch) DeepCopy() *TalosConfigPatch
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TalosConfigPatch.
func (*TalosConfigPatch) DeepCopyInto ¶
func (in *TalosConfigPatch) DeepCopyInto(out *TalosConfigPatch)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Team ¶
type Team struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec TeamSpec `json:"spec,omitempty"`
Status TeamStatus `json:"status,omitempty"`
}
Team is the Schema for the teams API. A Team represents a group of users who share access to TenantClusters. Each Team gets its own namespace where TenantClusters are created.
func (*Team) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Team.
func (*Team) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Team) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TeamAccess ¶
type TeamAccess struct {
// Users is a list of users with access to this Team.
// Users are identified by their email address.
// +optional
Users []TeamUser `json:"users,omitempty"`
// Groups is a list of groups with access to this Team.
// Groups are matched against OIDC groups or AD groups.
// +optional
Groups []TeamGroup `json:"groups,omitempty"`
}
TeamAccess defines users and groups that have access to the Team.
func (*TeamAccess) DeepCopy ¶
func (in *TeamAccess) DeepCopy() *TeamAccess
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamAccess.
func (*TeamAccess) DeepCopyInto ¶
func (in *TeamAccess) DeepCopyInto(out *TeamAccess)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TeamGroup ¶
type TeamGroup struct {
// Name is the group identifier (OIDC group, AD group DN, etc.).
// This can be the full DN for AD groups or simple names for OIDC.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Role is the group's role within the Team.
// All members of the group inherit this role.
// +kubebuilder:default="viewer"
// +optional
Role TeamRole `json:"role,omitempty"`
// IdentityProvider is the name of the IdentityProvider CRD this group comes from.
// If specified, only users authenticating through this IdP will be matched.
// If not specified, the group name will be matched against groups from any IdP.
// +optional
IdentityProvider string `json:"identityProvider,omitempty"`
}
TeamGroup represents a group with access to a Team.
func (*TeamGroup) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamGroup.
func (*TeamGroup) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TeamList ¶
type TeamList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Team `json:"items"`
}
TeamList contains a list of Team.
func (*TeamList) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamList.
func (*TeamList) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TeamList) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TeamPhase ¶
type TeamPhase string
TeamPhase represents the current phase of a Team. +kubebuilder:validation:Enum=Pending;Ready;Terminating;Failed
const ( // TeamPhasePending indicates the Team is being set up. TeamPhasePending TeamPhase = "Pending" // TeamPhaseReady indicates the Team is ready for use. TeamPhaseReady TeamPhase = "Ready" // TeamPhaseTerminating indicates the Team is being deleted. TeamPhaseTerminating TeamPhase = "Terminating" // TeamPhaseFailed indicates the Team setup failed. TeamPhaseFailed TeamPhase = "Failed" )
type TeamResourceLimits ¶
type TeamResourceLimits struct {
// MaxClusters is the maximum number of TenantClusters this team can create.
// +optional
// +kubebuilder:validation:Minimum=0
MaxClusters *int32 `json:"maxClusters,omitempty"`
// MaxNodesPerCluster is the maximum worker nodes per cluster.
// +optional
// +kubebuilder:validation:Minimum=0
MaxNodesPerCluster *int32 `json:"maxNodesPerCluster,omitempty"`
// MaxTotalNodes is the maximum total worker nodes across all clusters.
// +optional
// +kubebuilder:validation:Minimum=0
MaxTotalNodes *int32 `json:"maxTotalNodes,omitempty"`
// MaxCPUCores is the maximum total CPU cores across all clusters.
// +optional
MaxCPUCores *resource.Quantity `json:"maxCPUCores,omitempty"`
// MaxMemory is the maximum total memory across all clusters.
// +optional
MaxMemory *resource.Quantity `json:"maxMemory,omitempty"`
// MaxStorage is the maximum total storage across all clusters.
// +optional
MaxStorage *resource.Quantity `json:"maxStorage,omitempty"`
// DefaultNodeCount is the default worker count for new clusters.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=3
DefaultNodeCount *int32 `json:"defaultNodeCount,omitempty"`
// DefaultCPUPerNode is the default CPU cores per worker node.
// +optional
DefaultCPUPerNode *resource.Quantity `json:"defaultCPUPerNode,omitempty"`
// DefaultMemoryPerNode is the default memory per worker node.
// +optional
DefaultMemoryPerNode *resource.Quantity `json:"defaultMemoryPerNode,omitempty"`
// AllowedKubernetesVersions restricts which K8s versions can be used.
// If empty, all supported versions are allowed.
// +optional
AllowedKubernetesVersions []string `json:"allowedKubernetesVersions,omitempty"`
// AllowedProviders restricts which ProviderConfigs can be used.
// If empty, all providers the team has access to are allowed.
// +optional
AllowedProviders []string `json:"allowedProviders,omitempty"`
// AllowedAddons restricts which addons can be installed.
// If empty, all addons are allowed.
// +optional
AllowedAddons []string `json:"allowedAddons,omitempty"`
// DeniedAddons explicitly denies certain addons.
// Takes precedence over AllowedAddons.
// +optional
DeniedAddons []string `json:"deniedAddons,omitempty"`
}
TeamResourceLimits defines resource quotas and restrictions for a Team. This is separate from ResourceLimits in butlerconfig_types.go which defines platform-wide defaults. TeamResourceLimits includes additional fields for feature restrictions that are team-specific.
func (*TeamResourceLimits) DeepCopy ¶
func (in *TeamResourceLimits) DeepCopy() *TeamResourceLimits
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamResourceLimits.
func (*TeamResourceLimits) DeepCopyInto ¶
func (in *TeamResourceLimits) DeepCopyInto(out *TeamResourceLimits)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TeamResourceUsage ¶
type TeamResourceUsage struct {
// Clusters is the number of TenantClusters.
// +optional
Clusters int32 `json:"clusters,omitempty"`
// TotalNodes is the total number of worker nodes.
// +optional
TotalNodes int32 `json:"totalNodes,omitempty"`
// TotalCPU is the total CPU cores allocated.
// +optional
TotalCPU *resource.Quantity `json:"totalCPU,omitempty"`
// TotalMemory is the total memory allocated.
// +optional
TotalMemory *resource.Quantity `json:"totalMemory,omitempty"`
// TotalStorage is the total storage allocated.
// +optional
TotalStorage *resource.Quantity `json:"totalStorage,omitempty"`
// ClusterUtilization is percentage of MaxClusters used.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
ClusterUtilization *int32 `json:"clusterUtilization,omitempty"`
// NodeUtilization is percentage of MaxTotalNodes used.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
NodeUtilization *int32 `json:"nodeUtilization,omitempty"`
// CPUUtilization is percentage of MaxCPUCores used.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
CPUUtilization *int32 `json:"cpuUtilization,omitempty"`
// MemoryUtilization is percentage of MaxMemory used.
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
MemoryUtilization *int32 `json:"memoryUtilization,omitempty"`
}
TeamResourceUsage shows current resource consumption for a Team.
func (*TeamResourceUsage) DeepCopy ¶
func (in *TeamResourceUsage) DeepCopy() *TeamResourceUsage
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamResourceUsage.
func (*TeamResourceUsage) DeepCopyInto ¶
func (in *TeamResourceUsage) DeepCopyInto(out *TeamResourceUsage)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TeamRole ¶
type TeamRole string
TeamRole defines the role a user or group has within a Team. +kubebuilder:validation:Enum=admin;operator;viewer
const ( // TeamRoleAdmin has full access to manage the team and all its resources. // Can: create/delete clusters, manage team members, change settings TeamRoleAdmin TeamRole = "admin" // TeamRoleOperator can create and manage clusters but cannot manage team settings. // Can: create/delete clusters, scale, install addons // Cannot: manage team members, change team settings TeamRoleOperator TeamRole = "operator" // TeamRoleViewer has read-only access to team resources. // Can: view clusters, view kubeconfigs, view logs // Cannot: create/modify/delete anything TeamRoleViewer TeamRole = "viewer" )
type TeamSpec ¶
type TeamSpec struct {
// DisplayName is a human-readable name for the Team.
// +optional
DisplayName string `json:"displayName,omitempty"`
// Description provides additional context about the Team.
// +optional
Description string `json:"description,omitempty"`
// Access defines who can access this Team's resources.
// +optional
Access TeamAccess `json:"access,omitempty"`
// ResourceLimits defines the resource quotas and restrictions for this Team.
// If not specified, defaults from ButlerConfig are used.
// If ButlerConfig has no defaults, no limits are enforced.
// +optional
ResourceLimits *TeamResourceLimits `json:"resourceLimits,omitempty"`
// ProviderConfigRef references a Team-specific ProviderConfig.
// If not specified, the platform default is used.
// +optional
ProviderConfigRef *LocalObjectReference `json:"providerConfigRef,omitempty"`
// ClusterDefaults defines default values for new clusters in this team.
// +optional
ClusterDefaults *ClusterDefaults `json:"clusterDefaults,omitempty"`
}
TeamSpec defines the desired state of Team.
func (*TeamSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamSpec.
func (*TeamSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TeamStatus ¶
type TeamStatus struct {
// Conditions represent the latest available observations of the Team's state.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Phase represents the current phase of the Team.
// +optional
Phase TeamPhase `json:"phase,omitempty"`
// Namespace is the namespace created for this Team.
// +optional
Namespace string `json:"namespace,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// ClusterCount is the number of TenantClusters in this Team.
// +optional
ClusterCount int32 `json:"clusterCount,omitempty"`
// MemberCount is the total number of users with access to this Team.
// +optional
MemberCount int32 `json:"memberCount,omitempty"`
// ResourceUsage shows the current resource usage for this Team.
// +optional
ResourceUsage *TeamResourceUsage `json:"resourceUsage,omitempty"`
// QuotaStatus indicates whether the team is within quota.
// +optional
// +kubebuilder:validation:Enum=OK;Warning;Exceeded
QuotaStatus string `json:"quotaStatus,omitempty"`
// QuotaMessage provides details about quota status.
// +optional
QuotaMessage string `json:"quotaMessage,omitempty"`
}
TeamStatus defines the observed state of Team.
func (*TeamStatus) DeepCopy ¶
func (in *TeamStatus) DeepCopy() *TeamStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamStatus.
func (*TeamStatus) DeepCopyInto ¶
func (in *TeamStatus) DeepCopyInto(out *TeamStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TeamUser ¶
type TeamUser struct {
// Name is the user identifier (email address).
// For internal users, this is the email from User.spec.email.
// For SSO users, this is the email from the OIDC token.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Name string `json:"name"`
// Role is the user's role within the Team.
// +kubebuilder:default="viewer"
// +optional
Role TeamRole `json:"role,omitempty"`
}
TeamUser represents a user with access to a Team.
func (*TeamUser) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeamUser.
func (*TeamUser) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantAddon ¶
type TenantAddon struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec TenantAddonSpec `json:"spec,omitempty"`
Status TenantAddonStatus `json:"status,omitempty"`
}
TenantAddon is the Schema for the tenantaddons API. It represents an addon to be installed in a TenantCluster. Unlike addons defined in TenantCluster.spec.addons (which are monotonic), TenantAddons can be deleted to remove the addon from the cluster.
func (*TenantAddon) DeepCopy ¶
func (in *TenantAddon) DeepCopy() *TenantAddon
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantAddon.
func (*TenantAddon) DeepCopyInto ¶
func (in *TenantAddon) DeepCopyInto(out *TenantAddon)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TenantAddon) DeepCopyObject ¶
func (in *TenantAddon) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TenantAddonList ¶
type TenantAddonList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []TenantAddon `json:"items"`
}
TenantAddonList contains a list of TenantAddon.
func (*TenantAddonList) DeepCopy ¶
func (in *TenantAddonList) DeepCopy() *TenantAddonList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantAddonList.
func (*TenantAddonList) DeepCopyInto ¶
func (in *TenantAddonList) DeepCopyInto(out *TenantAddonList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TenantAddonList) DeepCopyObject ¶
func (in *TenantAddonList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TenantAddonPhase ¶
type TenantAddonPhase string
TenantAddonPhase represents the current phase of a TenantAddon. +kubebuilder:validation:Enum=Pending;Installing;Installed;Upgrading;Degraded;Failed;Deleting
const ( // TenantAddonPhasePending indicates the addon is waiting to be installed. TenantAddonPhasePending TenantAddonPhase = "Pending" // TenantAddonPhaseInstalling indicates the addon is being installed. TenantAddonPhaseInstalling TenantAddonPhase = "Installing" // TenantAddonPhaseInstalled indicates the addon is installed and healthy. TenantAddonPhaseInstalled TenantAddonPhase = "Installed" // TenantAddonPhaseUpgrading indicates the addon is being upgraded. TenantAddonPhaseUpgrading TenantAddonPhase = "Upgrading" // TenantAddonPhaseDegraded indicates the addon is installed but unhealthy. TenantAddonPhaseDegraded TenantAddonPhase = "Degraded" // TenantAddonPhaseFailed indicates addon installation failed. TenantAddonPhaseFailed TenantAddonPhase = "Failed" // TenantAddonPhaseDeleting indicates the addon is being removed. TenantAddonPhaseDeleting TenantAddonPhase = "Deleting" )
type TenantAddonSpec ¶
type TenantAddonSpec struct {
// ClusterRef references the TenantCluster to install this addon into.
// +kubebuilder:validation:Required
ClusterRef LocalObjectReference `json:"clusterRef"`
// Addon specifies a known Butler addon name.
// Use this for built-in addons like cilium, metallb, etc.
// Mutually exclusive with Helm.
// +optional
Addon string `json:"addon,omitempty"`
// Version is the addon version to install.
// +kubebuilder:validation:Required
Version string `json:"version"`
// Helm specifies a custom Helm chart to install.
// Use this for arbitrary Helm charts not built into Butler.
// Mutually exclusive with Addon.
// +optional
Helm *HelmChartSpec `json:"helm,omitempty"`
// Values are Helm values for customization.
// +optional
// +kubebuilder:pruning:PreserveUnknownFields
Values *ExtensionValues `json:"values,omitempty"`
// DependsOn specifies other TenantAddons that must be ready first.
// +optional
DependsOn []LocalObjectReference `json:"dependsOn,omitempty"`
}
TenantAddonSpec defines the desired state of TenantAddon.
func (*TenantAddonSpec) DeepCopy ¶
func (in *TenantAddonSpec) DeepCopy() *TenantAddonSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantAddonSpec.
func (*TenantAddonSpec) DeepCopyInto ¶
func (in *TenantAddonSpec) DeepCopyInto(out *TenantAddonSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantAddonStatus ¶
type TenantAddonStatus struct {
// Conditions represent the latest available observations.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Phase represents the current phase of the addon.
// +optional
Phase TenantAddonPhase `json:"phase,omitempty"`
// InstalledVersion is the currently installed version.
// +optional
InstalledVersion string `json:"installedVersion,omitempty"`
// HelmRelease contains Helm release information.
// +optional
HelmRelease *HelmReleaseStatus `json:"helmRelease,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// LastTransitionTime is when the phase last changed.
// +optional
LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
// Message provides human-readable status information.
// +optional
Message string `json:"message,omitempty"`
}
TenantAddonStatus defines the observed state of TenantAddon.
func (*TenantAddonStatus) DeepCopy ¶
func (in *TenantAddonStatus) DeepCopy() *TenantAddonStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantAddonStatus.
func (*TenantAddonStatus) DeepCopyInto ¶
func (in *TenantAddonStatus) DeepCopyInto(out *TenantAddonStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantAllocationConfig ¶ added in v0.3.0
type TenantAllocationConfig struct {
// Start is the first allocatable IP address.
// +kubebuilder:validation:Required
Start string `json:"start"`
// End is the last allocatable IP address.
// +kubebuilder:validation:Required
End string `json:"end"`
// Defaults defines default allocation sizes per tenant.
// +optional
Defaults TenantAllocationDefaults `json:"defaults,omitempty"`
}
TenantAllocationConfig defines the allocatable sub-range and defaults.
func (*TenantAllocationConfig) DeepCopy ¶ added in v0.3.0
func (in *TenantAllocationConfig) DeepCopy() *TenantAllocationConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantAllocationConfig.
func (*TenantAllocationConfig) DeepCopyInto ¶ added in v0.3.0
func (in *TenantAllocationConfig) DeepCopyInto(out *TenantAllocationConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantAllocationDefaults ¶ added in v0.3.0
type TenantAllocationDefaults struct {
// NodesPerTenant is the default number of node IPs per tenant.
// +kubebuilder:default=5
// +kubebuilder:validation:Minimum=1
// +optional
NodesPerTenant int32 `json:"nodesPerTenant,omitempty"`
// LBPoolPerTenant is the default number of load balancer IPs per tenant.
// +kubebuilder:default=8
// +kubebuilder:validation:Minimum=1
// +optional
LBPoolPerTenant int32 `json:"lbPoolPerTenant,omitempty"`
}
TenantAllocationDefaults defines default allocation sizes per tenant.
func (*TenantAllocationDefaults) DeepCopy ¶ added in v0.3.0
func (in *TenantAllocationDefaults) DeepCopy() *TenantAllocationDefaults
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantAllocationDefaults.
func (*TenantAllocationDefaults) DeepCopyInto ¶ added in v0.3.0
func (in *TenantAllocationDefaults) DeepCopyInto(out *TenantAllocationDefaults)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantCluster ¶
type TenantCluster struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec TenantClusterSpec `json:"spec,omitempty"`
Status TenantClusterStatus `json:"status,omitempty"`
}
TenantCluster is the Schema for the tenantclusters API. It represents a complete Kubernetes cluster managed by Butler.
func (*TenantCluster) DeepCopy ¶
func (in *TenantCluster) DeepCopy() *TenantCluster
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantCluster.
func (*TenantCluster) DeepCopyInto ¶
func (in *TenantCluster) DeepCopyInto(out *TenantCluster)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TenantCluster) DeepCopyObject ¶
func (in *TenantCluster) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TenantClusterList ¶
type TenantClusterList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []TenantCluster `json:"items"`
}
TenantClusterList contains a list of TenantCluster.
func (*TenantClusterList) DeepCopy ¶
func (in *TenantClusterList) DeepCopy() *TenantClusterList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantClusterList.
func (*TenantClusterList) DeepCopyInto ¶
func (in *TenantClusterList) DeepCopyInto(out *TenantClusterList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*TenantClusterList) DeepCopyObject ¶
func (in *TenantClusterList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type TenantClusterPhase ¶
type TenantClusterPhase string
TenantClusterPhase represents the current phase of a TenantCluster. +kubebuilder:validation:Enum=Pending;Provisioning;Installing;Ready;Updating;Deleting;Failed
const ( // TenantClusterPhasePending indicates the cluster is pending creation. TenantClusterPhasePending TenantClusterPhase = "Pending" // TenantClusterPhaseProvisioning indicates infrastructure is being provisioned. TenantClusterPhaseProvisioning TenantClusterPhase = "Provisioning" // TenantClusterPhaseInstalling indicates addons are being installed. TenantClusterPhaseInstalling TenantClusterPhase = "Installing" // TenantClusterPhaseReady indicates the cluster is ready for use. TenantClusterPhaseReady TenantClusterPhase = "Ready" // TenantClusterPhaseUpdating indicates the cluster is being updated. TenantClusterPhaseUpdating TenantClusterPhase = "Updating" // TenantClusterPhaseDeleting indicates the cluster is being deleted. TenantClusterPhaseDeleting TenantClusterPhase = "Deleting" // TenantClusterPhaseFailed indicates a failure occurred. TenantClusterPhaseFailed TenantClusterPhase = "Failed" )
type TenantClusterSpec ¶
type TenantClusterSpec struct {
// KubernetesVersion is the target Kubernetes version.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern=`^v\d+\.\d+\.\d+$`
KubernetesVersion string `json:"kubernetesVersion"`
// TeamRef references the Team this cluster belongs to.
// Required when multi-tenancy mode is Enforced.
// +optional
TeamRef *LocalObjectReference `json:"teamRef,omitempty"`
// ProviderConfigRef references the ProviderConfig for infrastructure.
// If not specified, defaults are used (Team's or platform's).
// Namespace defaults to butler-system if not specified.
// +optional
ProviderConfigRef *ProviderReference `json:"providerConfigRef,omitempty"`
// ControlPlane configures the Steward-hosted control plane.
// +optional
ControlPlane ControlPlaneSpec `json:"controlPlane,omitempty"`
// Workers configures the worker nodes.
// +kubebuilder:validation:Required
Workers WorkersSpec `json:"workers"`
// Networking configures cluster networking.
// +optional
Networking NetworkingSpec `json:"networking,omitempty"`
// ManagementPolicy defines how Butler manages this cluster.
// +optional
ManagementPolicy ManagementPolicySpec `json:"managementPolicy,omitempty"`
// Addons defines the initial addons to install.
// These are installed at cluster creation time.
// Additional addons can be added via TenantAddon resources.
// +optional
Addons AddonsSpec `json:"addons,omitempty"`
// InfrastructureOverride allows overriding provider-specific settings.
// These take precedence over ProviderConfig defaults.
// +optional
InfrastructureOverride *InfrastructureOverride `json:"infrastructureOverride,omitempty"`
// Workspaces configures cloud development environments on this cluster.
// When enabled, users can create Workspace resources that provision pods
// with SSH access in the tenant cluster's "workspaces" namespace.
// +optional
Workspaces *WorkspacesConfig `json:"workspaces,omitempty"`
}
TenantClusterSpec defines the desired state of TenantCluster.
func (*TenantClusterSpec) DeepCopy ¶
func (in *TenantClusterSpec) DeepCopy() *TenantClusterSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantClusterSpec.
func (*TenantClusterSpec) DeepCopyInto ¶
func (in *TenantClusterSpec) DeepCopyInto(out *TenantClusterSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type TenantClusterStatus ¶
type TenantClusterStatus struct {
// Conditions represent the latest available observations.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Phase represents the current phase of the cluster.
// +optional
Phase TenantClusterPhase `json:"phase,omitempty"`
// TenantNamespace is the namespace containing CAPI/Steward resources.
// +optional
TenantNamespace string `json:"tenantNamespace,omitempty"`
// ControlPlaneEndpoint is the API server endpoint.
// +optional
ControlPlaneEndpoint string `json:"controlPlaneEndpoint,omitempty"`
// KubeconfigSecretRef references the Secret containing the kubeconfig.
// +optional
KubeconfigSecretRef *LocalObjectReference `json:"kubeconfigSecretRef,omitempty"`
// ObservedGeneration is the last observed generation.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// LastTransitionTime is when the phase last changed.
// +optional
LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
// ObservedState is the observed state of the cluster.
// +optional
ObservedState *ObservedClusterState `json:"observedState,omitempty"`
// WorkerNodesReady is the count of ready worker nodes
// +optional
WorkerNodesReady int32 `json:"workerNodesReady,omitempty"`
// WorkerNodesDesired is the desired count of worker nodes
// +optional
WorkerNodesDesired int32 `json:"workerNodesDesired,omitempty"`
// IPAllocationRef references the node IP allocation from IPAM.
// +optional
IPAllocationRef *LocalObjectReference `json:"ipAllocationRef,omitempty"`
// LBAllocationRef references the load balancer IP allocation from IPAM.
// +optional
LBAllocationRef *LocalObjectReference `json:"lbAllocationRef,omitempty"`
// ImageSyncRef references the ImageSync resource for this cluster's OS image.
// +optional
ImageSyncRef *LocalObjectReference `json:"imageSyncRef,omitempty"`
}
TenantClusterStatus defines the observed state of TenantCluster.
func (*TenantClusterStatus) DeepCopy ¶
func (in *TenantClusterStatus) DeepCopy() *TenantClusterStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TenantClusterStatus.
func (*TenantClusterStatus) DeepCopyInto ¶
func (in *TenantClusterStatus) DeepCopyInto(out *TenantClusterStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type User ¶
type User struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec UserSpec `json:"spec,omitempty"`
Status UserStatus `json:"status,omitempty"`
}
User represents a Butler user account. Users can authenticate via SSO (OIDC) or with email/password (internal).
SSO User Flow: 1. User clicks "Sign in with Google/Okta/etc" 2. Butler creates User CRD automatically on first login 3. User is matched to Teams by email address
Internal User Flow: 1. Admin creates User with email (no password) 2. Butler generates invite token, returns URL to admin 3. Admin shares invite URL with user (via Slack, email, etc.) 4. User clicks link, sets their own password 5. Password is hashed (bcrypt) and stored in a Secret 6. User status changes from Pending to Active
Platform Admin: Users with spec.isPlatformAdmin=true have full platform access, bypassing team-based RBAC. This should be used sparingly.
func (*User) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new User.
func (*User) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*User) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*User) IsDisabled ¶
IsDisabled returns true if the user is disabled.
func (*User) IsInternal ¶
IsInternal returns true if this is an internal user.
func (*User) IsPlatformAdmin ¶
IsPlatformAdmin returns true if this user has platform admin privileges.
type UserAuthType ¶
type UserAuthType string
UserAuthType defines how a user authenticates. +kubebuilder:validation:Enum=sso;internal
const ( // UserAuthTypeSSO indicates the user authenticates via SSO/OIDC. UserAuthTypeSSO UserAuthType = "sso" // UserAuthTypeInternal indicates the user authenticates with email/password. UserAuthTypeInternal UserAuthType = "internal" )
type UserList ¶
type UserList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []User `json:"items"`
}
UserList contains a list of Users.
func (*UserList) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserList.
func (*UserList) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*UserList) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type UserPhase ¶
type UserPhase string
UserPhase represents the current phase of a user. +kubebuilder:validation:Enum=Pending;Active;Disabled;Locked
const ( // UserPhasePending indicates the user has been invited but hasn't set password. UserPhasePending UserPhase = "Pending" // UserPhaseActive indicates the user can log in. UserPhaseActive UserPhase = "Active" // UserPhaseDisabled indicates the user has been disabled by an admin. UserPhaseDisabled UserPhase = "Disabled" // UserPhaseLocked indicates the user is temporarily locked due to failed attempts. UserPhaseLocked UserPhase = "Locked" )
type UserSpec ¶
type UserSpec struct {
// Email is the user's email address, used for Team membership matching.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Format=email
Email string `json:"email"`
// DisplayName is the user's display name shown in the UI.
// +optional
DisplayName string `json:"displayName,omitempty"`
// Disabled prevents the user from logging in.
// +optional
// +kubebuilder:default=false
Disabled bool `json:"disabled,omitempty"`
// Avatar is an optional URL to the user's avatar image.
// +optional
Avatar string `json:"avatar,omitempty"`
// AuthType indicates how this user authenticates.
// SSO users are created automatically on first login.
// Internal users are created by admins and use email/password.
// +kubebuilder:default="internal"
// +optional
AuthType UserAuthType `json:"authType,omitempty"`
// SSOProvider is the name of the SSO provider (e.g., "Google", "Okta").
// Only set for SSO users.
// +optional
SSOProvider string `json:"ssoProvider,omitempty"`
// SSOSubject is the unique subject identifier from the SSO provider.
// This is the "sub" claim from the OIDC token.
// Only set for SSO users.
// +optional
SSOSubject string `json:"ssoSubject,omitempty"`
// IsPlatformAdmin grants full platform access, bypassing team-based RBAC.
// Platform admins can:
// - Manage all teams, users, clusters, and providers
// - Access all resources regardless of team membership
// - Configure platform-wide settings
// Use sparingly - most users should use team-based access control.
// +optional
// +kubebuilder:default=false
IsPlatformAdmin bool `json:"isPlatformAdmin,omitempty"`
// SSHKeys are the user's saved SSH public keys for workspace access.
// Public keys are not sensitive — storing them in spec avoids Secret sprawl
// and makes them queryable. Matches how GitHub stores public keys.
// +optional
SSHKeys []SSHKeyEntry `json:"sshKeys,omitempty"`
}
UserSpec defines the desired state of a Butler user. Note: Passwords are NEVER stored in spec - users set their own via invite flow.
func (*UserSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserSpec.
func (*UserSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type UserStatus ¶
type UserStatus struct {
// Phase represents the current state of the user.
// +kubebuilder:validation:Enum=Pending;Active;Disabled;Locked
Phase UserPhase `json:"phase,omitempty"`
// PasswordSecretRef references the Secret containing the bcrypt password hash.
// This is automatically created when the user sets their password.
// Only used for internal users.
// +optional
PasswordSecretRef *SecretReference `json:"passwordSecretRef,omitempty"`
// InviteTokenHash is the SHA256 hash of the invite token.
// The raw token is only shown once when the user is created.
// Only used for internal users.
// +optional
InviteTokenHash string `json:"inviteTokenHash,omitempty"`
// InviteExpiresAt is when the invite token expires.
// Only used for internal users.
// +optional
InviteExpiresAt *metav1.Time `json:"inviteExpiresAt,omitempty"`
// InviteSentAt is when the invite was generated.
// Only used for internal users.
// +optional
InviteSentAt *metav1.Time `json:"inviteSentAt,omitempty"`
// PasswordChangedAt is when the password was last set/changed.
// Only used for internal users.
// +optional
PasswordChangedAt *metav1.Time `json:"passwordChangedAt,omitempty"`
// LastLoginTime is when the user last successfully logged in.
// +optional
LastLoginTime *metav1.Time `json:"lastLoginTime,omitempty"`
// LoginCount is the total number of successful logins.
// +optional
LoginCount int64 `json:"loginCount,omitempty"`
// FailedLoginAttempts is the number of consecutive failed login attempts.
// Resets to 0 on successful login.
// Only used for internal users.
// +optional
FailedLoginAttempts int32 `json:"failedLoginAttempts,omitempty"`
// LockedUntil is set when the account is temporarily locked due to failed attempts.
// Only used for internal users.
// +optional
LockedUntil *metav1.Time `json:"lockedUntil,omitempty"`
// Teams lists the teams this user belongs to (resolved from Team CRDs).
// This is informational and updated periodically.
// +optional
Teams []UserTeamMembership `json:"teams,omitempty"`
// Conditions represent the latest available observations.
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
UserStatus defines the observed state of User.
func (*UserStatus) DeepCopy ¶
func (in *UserStatus) DeepCopy() *UserStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserStatus.
func (*UserStatus) DeepCopyInto ¶
func (in *UserStatus) DeepCopyInto(out *UserStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type UserTeamMembership ¶
type UserTeamMembership struct {
// Name is the team name.
Name string `json:"name"`
// Role is the user's role in the team.
Role string `json:"role"`
}
UserTeamMembership represents a user's membership in a team.
func (*UserTeamMembership) DeepCopy ¶
func (in *UserTeamMembership) DeepCopy() *UserTeamMembership
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserTeamMembership.
func (*UserTeamMembership) DeepCopyInto ¶
func (in *UserTeamMembership) DeepCopyInto(out *UserTeamMembership)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type VMIDRange ¶
type VMIDRange struct {
// Start is the first VM ID in the range.
// +kubebuilder:validation:Minimum=100
Start int32 `json:"start"`
// End is the last VM ID in the range.
// +kubebuilder:validation:Minimum=100
End int32 `json:"end"`
}
VMIDRange defines a range of VM IDs.
func (*VMIDRange) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VMIDRange.
func (*VMIDRange) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkerStatus ¶
type WorkerStatus struct {
// Desired is the desired number of workers.
Desired int32 `json:"desired"`
// Ready is the number of ready workers.
Ready int32 `json:"ready"`
// Nodes lists the worker nodes.
// +optional
Nodes []string `json:"nodes,omitempty"`
}
WorkerStatus shows worker node status.
func (*WorkerStatus) DeepCopy ¶
func (in *WorkerStatus) DeepCopy() *WorkerStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkerStatus.
func (*WorkerStatus) DeepCopyInto ¶
func (in *WorkerStatus) DeepCopyInto(out *WorkerStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkersSpec ¶
type WorkersSpec struct {
// Replicas is the desired number of worker nodes.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=1
Replicas int32 `json:"replicas"`
// MachineTemplate defines the VM specification for workers.
// +optional
MachineTemplate MachineTemplateSpec `json:"machineTemplate,omitempty"`
}
WorkersSpec configures worker nodes.
func (*WorkersSpec) DeepCopy ¶
func (in *WorkersSpec) DeepCopy() *WorkersSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkersSpec.
func (*WorkersSpec) DeepCopyInto ¶
func (in *WorkersSpec) DeepCopyInto(out *WorkersSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Workspace ¶ added in v0.4.0
type Workspace struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec WorkspaceSpec `json:"spec,omitempty"`
Status WorkspaceStatus `json:"status,omitempty"`
}
Workspace represents a cloud development environment running inside a tenant cluster. The Workspace CRD lives on the management cluster (in the team namespace), while the actual pod, PVC, and SSH service are created in the tenant cluster's "workspaces" namespace by the workspace controller.
func (*Workspace) DeepCopy ¶ added in v0.4.0
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Workspace.
func (*Workspace) DeepCopyInto ¶ added in v0.4.0
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Workspace) DeepCopyObject ¶ added in v0.4.0
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*Workspace) IsConnected ¶ added in v0.4.0
IsConnected returns true if the SSH service is active.
type WorkspaceEnvSource ¶ added in v0.4.0
type WorkspaceEnvSource struct {
// Kind of the source workload.
// +kubebuilder:validation:Enum=Deployment;StatefulSet
// +kubebuilder:default="Deployment"
Kind string `json:"kind,omitempty"`
// Name of the workload to copy env from.
// +kubebuilder:validation:Required
Name string `json:"name"`
// Namespace of the workload in the tenant cluster. Defaults to "default".
// +kubebuilder:default="default"
// +optional
Namespace string `json:"namespace,omitempty"`
// Container name within the workload. Defaults to first container.
// +optional
Container string `json:"container,omitempty"`
}
WorkspaceEnvSource configures environment variable copying from an existing workload.
func (*WorkspaceEnvSource) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceEnvSource) DeepCopy() *WorkspaceEnvSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceEnvSource.
func (*WorkspaceEnvSource) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceEnvSource) DeepCopyInto(out *WorkspaceEnvSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceList ¶ added in v0.4.0
type WorkspaceList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Workspace `json:"items"`
}
WorkspaceList contains a list of Workspaces.
func (*WorkspaceList) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceList) DeepCopy() *WorkspaceList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceList.
func (*WorkspaceList) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceList) DeepCopyInto(out *WorkspaceList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceList) DeepCopyObject ¶ added in v0.4.0
func (in *WorkspaceList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspacePhase ¶ added in v0.4.0
type WorkspacePhase string
WorkspacePhase represents the current lifecycle phase of a Workspace. +kubebuilder:validation:Enum=Pending;Creating;Running;Starting;Stopped;Failed
const ( // WorkspacePhasePending indicates the workspace is awaiting reconciliation. WorkspacePhasePending WorkspacePhase = "Pending" // WorkspacePhaseCreating indicates tenant resources (PVC, Pod) are being provisioned. WorkspacePhaseCreating WorkspacePhase = "Creating" // WorkspacePhaseRunning indicates the workspace pod is running and SSH server is ready. WorkspacePhaseRunning WorkspacePhase = "Running" // WorkspacePhaseStarting indicates a stopped workspace is resuming. WorkspacePhaseStarting WorkspacePhase = "Starting" // WorkspacePhaseStopped indicates the pod was deleted after inactivity. PVC persists. WorkspacePhaseStopped WorkspacePhase = "Stopped" // WorkspacePhaseFailed indicates a terminal error occurred. WorkspacePhaseFailed WorkspacePhase = "Failed" )
type WorkspaceRepository ¶ added in v0.4.0
type WorkspaceRepository struct {
// URL is the Git repository URL.
// +kubebuilder:validation:Required
URL string `json:"url"`
// Name is the directory name under /workspace/ to clone into.
// If empty, derived from the repository URL (e.g., "butler-api" from
// "https://github.com/butlerdotdev/butler-api").
// +optional
Name string `json:"name,omitempty"`
// Branch to checkout.
// +kubebuilder:default="main"
// +optional
Branch string `json:"branch,omitempty"`
// SecretRef for Git credentials (SSH key or token).
// References a Secret in the team namespace on the management cluster.
// The controller copies it to the tenant cluster's workspaces namespace.
// +optional
SecretRef *LocalObjectReference `json:"secretRef,omitempty"`
}
WorkspaceRepository configures a Git repository to clone into the workspace.
func (*WorkspaceRepository) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceRepository) DeepCopy() *WorkspaceRepository
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceRepository.
func (*WorkspaceRepository) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceRepository) DeepCopyInto(out *WorkspaceRepository)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceResourceQuota ¶ added in v0.4.0
type WorkspaceResourceQuota struct {
// MaxCPU total across all workspaces in this cluster.
// +kubebuilder:default="16"
// +optional
MaxCPU string `json:"maxCPU,omitempty"`
// MaxMemory total across all workspaces in this cluster.
// +kubebuilder:default="32Gi"
// +optional
MaxMemory string `json:"maxMemory,omitempty"`
// MaxStorage total across all workspace PVCs in this cluster.
// +kubebuilder:default="500Gi"
// +optional
MaxStorage string `json:"maxStorage,omitempty"`
}
WorkspaceResourceQuota defines resource limits for the workspaces namespace.
func (*WorkspaceResourceQuota) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceResourceQuota) DeepCopy() *WorkspaceResourceQuota
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceResourceQuota.
func (*WorkspaceResourceQuota) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceResourceQuota) DeepCopyInto(out *WorkspaceResourceQuota)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceResources ¶ added in v0.4.0
type WorkspaceResources struct {
// CPU request and limit for the workspace.
// +kubebuilder:default="2"
// +optional
CPU string `json:"cpu,omitempty"`
// Memory request and limit for the workspace.
// +kubebuilder:default="4Gi"
// +optional
Memory string `json:"memory,omitempty"`
}
WorkspaceResources configures compute resources for the workspace pod.
func (*WorkspaceResources) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceResources) DeepCopy() *WorkspaceResources
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceResources.
func (*WorkspaceResources) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceResources) DeepCopyInto(out *WorkspaceResources)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceSpec ¶ added in v0.4.0
type WorkspaceSpec struct {
// ClusterRef references the TenantCluster this workspace runs in.
// The workspace pod is created in the tenant cluster's "workspaces" namespace.
// +kubebuilder:validation:Required
ClusterRef LocalObjectReference `json:"clusterRef"`
// Owner is the email of the Butler user who owns this workspace.
// Set by the server from the authenticated user's JWT.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
Owner string `json:"owner"`
// Image is the workspace container image.
// +kubebuilder:validation:Required
Image string `json:"image"`
// Repository to clone into the workspace on creation.
// Deprecated: Use Repositories for multi-repo support.
// +optional
Repository *WorkspaceRepository `json:"repository,omitempty"`
// Repositories is a list of Git repositories to clone into the workspace.
// Each repository is cloned as a sibling directory under /workspace/{repo-name}/.
// When multiple repositories are specified, a VS Code .code-workspace file
// is generated automatically.
// +optional
Repositories []WorkspaceRepository `json:"repositories,omitempty"`
// EnvFrom copies environment variables from an existing workload
// running in the tenant cluster.
// +optional
EnvFrom *WorkspaceEnvSource `json:"envFrom,omitempty"`
// Resources for the workspace pod.
// +optional
Resources *WorkspaceResources `json:"resources,omitempty"`
// Dotfiles repo to clone and run install script on first creation.
// +optional
Dotfiles *DotfilesSpec `json:"dotfiles,omitempty"`
// IdleTimeout after which the SSH service is torn down.
// Pod and PVC persist. Only the network path is removed.
// Measured from connect time (no activity tracking).
// +kubebuilder:default="4h"
// +optional
IdleTimeout *metav1.Duration `json:"idleTimeout,omitempty"`
// AutoStopAfter stops the workspace pod after this duration of no SSH connections.
// Measured from last disconnect time. PVC persists.
// Set to 0 to disable auto-stop.
// +kubebuilder:default="8h"
// +optional
AutoStopAfter *metav1.Duration `json:"autoStopAfter,omitempty"`
// StorageSize for the workspace PVC.
// +kubebuilder:default="10Gi"
// +optional
StorageSize *resource.Quantity `json:"storageSize,omitempty"`
// SSHPublicKeys for authorized access. If empty, keys are resolved
// from the owner's User profile (spec.sshKeys).
// +optional
SSHPublicKeys []string `json:"sshPublicKeys,omitempty"`
// EditorConfig holds per-editor configuration (e.g. Neovim config repo).
// +optional
EditorConfig *EditorConfig `json:"editorConfig,omitempty"`
}
WorkspaceSpec defines the desired state of a Workspace.
func (*WorkspaceSpec) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceSpec) DeepCopy() *WorkspaceSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceSpec.
func (*WorkspaceSpec) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceSpec) DeepCopyInto(out *WorkspaceSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceStatus ¶ added in v0.4.0
type WorkspaceStatus struct {
// Conditions represent the latest available observations of the workspace's state.
// +optional
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// Phase of the workspace lifecycle.
// +optional
Phase WorkspacePhase `json:"phase,omitempty"`
// PodName is the name of the workspace pod in the tenant cluster.
// +optional
PodName string `json:"podName,omitempty"`
// PVCName is the name of the workspace PVC in the tenant cluster.
// +optional
PVCName string `json:"pvcName,omitempty"`
// ServiceName is the SSH service name when connected.
// +optional
ServiceName string `json:"serviceName,omitempty"`
// SSHEndpoint is the IP:port for SSH access when connected.
// +optional
SSHEndpoint string `json:"sshEndpoint,omitempty"`
// Connected indicates whether the SSH service is currently active.
// +optional
Connected bool `json:"connected,omitempty"`
// LastActivityTime tracks the last SSH connect time.
// Used for idle timeout calculation.
// +optional
LastActivityTime *metav1.Time `json:"lastActivityTime,omitempty"`
// LastDisconnectTime tracks when the SSH service was last removed.
// Used for auto-stop calculation.
// +optional
LastDisconnectTime *metav1.Time `json:"lastDisconnectTime,omitempty"`
// ObservedGeneration is the last observed generation of the workspace spec.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
WorkspaceStatus defines the observed state of Workspace.
func (*WorkspaceStatus) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceStatus) DeepCopy() *WorkspaceStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceStatus.
func (*WorkspaceStatus) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceStatus) DeepCopyInto(out *WorkspaceStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceTemplate ¶ added in v0.4.0
type WorkspaceTemplate struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec WorkspaceTemplateSpec `json:"spec,omitempty"`
}
WorkspaceTemplate is a pre-configured workspace specification for one-click creation. Templates are data-only resources — no controller reconciliation is needed. Cluster-scoped templates live in butler-system and are visible to all teams. Team-scoped templates live in the team namespace and are visible only to that team.
func (*WorkspaceTemplate) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceTemplate) DeepCopy() *WorkspaceTemplate
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceTemplate.
func (*WorkspaceTemplate) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceTemplate) DeepCopyInto(out *WorkspaceTemplate)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceTemplate) DeepCopyObject ¶ added in v0.4.0
func (in *WorkspaceTemplate) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspaceTemplateBody ¶ added in v0.4.0
type WorkspaceTemplateBody struct {
// Image for the workspace container.
// +kubebuilder:validation:Required
Image string `json:"image"`
// Repository to clone into the workspace.
// Deprecated: Use Repositories for multi-repo support.
// +optional
Repository *WorkspaceRepository `json:"repository,omitempty"`
// Repositories is a list of Git repositories to clone into the workspace.
// Each repository is cloned as a sibling directory under /workspace/{repo-name}/.
// +optional
Repositories []WorkspaceRepository `json:"repositories,omitempty"`
// EnvFrom workload to copy environment variables from.
// +optional
EnvFrom *WorkspaceEnvSource `json:"envFrom,omitempty"`
// Dotfiles repo to clone and install.
// +optional
Dotfiles *DotfilesSpec `json:"dotfiles,omitempty"`
// Resources for the workspace pod.
// +optional
Resources *WorkspaceResources `json:"resources,omitempty"`
// StorageSize for the workspace PVC.
// +optional
StorageSize *resource.Quantity `json:"storageSize,omitempty"`
}
WorkspaceTemplateBody defines the workspace configuration within a template.
func (*WorkspaceTemplateBody) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceTemplateBody) DeepCopy() *WorkspaceTemplateBody
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceTemplateBody.
func (*WorkspaceTemplateBody) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceTemplateBody) DeepCopyInto(out *WorkspaceTemplateBody)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceTemplateCategory ¶ added in v0.4.0
type WorkspaceTemplateCategory string
WorkspaceTemplateCategory groups templates in the UI picker. +kubebuilder:validation:Enum=backend;frontend;data;devops;custom
const ( WorkspaceTemplateCategoryBackend WorkspaceTemplateCategory = "backend" WorkspaceTemplateCategoryFrontend WorkspaceTemplateCategory = "frontend" WorkspaceTemplateCategoryData WorkspaceTemplateCategory = "data" WorkspaceTemplateCategoryDevOps WorkspaceTemplateCategory = "devops" WorkspaceTemplateCategoryCustom WorkspaceTemplateCategory = "custom" )
type WorkspaceTemplateList ¶ added in v0.4.0
type WorkspaceTemplateList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []WorkspaceTemplate `json:"items"`
}
WorkspaceTemplateList contains a list of WorkspaceTemplates.
func (*WorkspaceTemplateList) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceTemplateList) DeepCopy() *WorkspaceTemplateList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceTemplateList.
func (*WorkspaceTemplateList) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceTemplateList) DeepCopyInto(out *WorkspaceTemplateList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceTemplateList) DeepCopyObject ¶ added in v0.4.0
func (in *WorkspaceTemplateList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspaceTemplateScope ¶ added in v0.4.0
type WorkspaceTemplateScope string
WorkspaceTemplateScope determines template visibility. +kubebuilder:validation:Enum=cluster;team
const ( // WorkspaceTemplateScopeCluster makes the template visible to all teams. // Created by platform admins in the butler-system namespace. WorkspaceTemplateScopeCluster WorkspaceTemplateScope = "cluster" // WorkspaceTemplateScopeTeam makes the template visible only to the owning team. WorkspaceTemplateScopeTeam WorkspaceTemplateScope = "team" )
type WorkspaceTemplateSpec ¶ added in v0.4.0
type WorkspaceTemplateSpec struct {
// DisplayName shown in the template picker.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinLength=1
DisplayName string `json:"displayName"`
// Description of what this template provides.
// +optional
Description string `json:"description,omitempty"`
// Icon is a Material UI icon name or URL for the template card.
// +optional
Icon string `json:"icon,omitempty"`
// Category groups templates in the picker UI.
// +kubebuilder:default="custom"
// +optional
Category WorkspaceTemplateCategory `json:"category,omitempty"`
// Scope determines visibility.
// "cluster" templates are visible to all teams (created by platform admins).
// "team" templates are visible only to the team that owns them.
// +kubebuilder:default="team"
// +optional
Scope WorkspaceTemplateScope `json:"scope,omitempty"`
// Template is the workspace spec that gets applied when using this template.
// Owner and ClusterRef are set at creation time by the server.
// +kubebuilder:validation:Required
Template WorkspaceTemplateBody `json:"template"`
}
WorkspaceTemplateSpec defines the desired state of a WorkspaceTemplate.
func (*WorkspaceTemplateSpec) DeepCopy ¶ added in v0.4.0
func (in *WorkspaceTemplateSpec) DeepCopy() *WorkspaceTemplateSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceTemplateSpec.
func (*WorkspaceTemplateSpec) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspaceTemplateSpec) DeepCopyInto(out *WorkspaceTemplateSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspacesConfig ¶ added in v0.4.0
type WorkspacesConfig struct {
// Enabled allows workspace creation on this cluster.
// +kubebuilder:default=false
Enabled bool `json:"enabled"`
// DefaultImage is the default workspace image if user doesn't specify one.
// +kubebuilder:default="ghcr.io/butlerdotdev/workspace-base:latest"
// +optional
DefaultImage string `json:"defaultImage,omitempty"`
// MaxWorkspaces per cluster. 0 means unlimited.
// +kubebuilder:default=20
// +optional
MaxWorkspaces *int32 `json:"maxWorkspaces,omitempty"`
// ResourceQuota for the workspaces namespace in the tenant cluster.
// +optional
ResourceQuota *WorkspaceResourceQuota `json:"resourceQuota,omitempty"`
// AutoDeleteAfter deletes stopped workspaces after this duration.
// Prevents PVC sprawl. 0 means never auto-delete.
// +kubebuilder:default="720h"
// +optional
AutoDeleteAfter *metav1.Duration `json:"autoDeleteAfter,omitempty"`
}
WorkspacesConfig configures the workspace feature for a tenant cluster.
func (*WorkspacesConfig) DeepCopy ¶ added in v0.4.0
func (in *WorkspacesConfig) DeepCopy() *WorkspacesConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspacesConfig.
func (*WorkspacesConfig) DeepCopyInto ¶ added in v0.4.0
func (in *WorkspacesConfig) DeepCopyInto(out *WorkspacesConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
Source Files
¶
- addondefinition_types.go
- butlerconfig_types.go
- clusterbootstrap_types.go
- common_types.go
- gitprovider_types.go
- groupversion_info.go
- identityprovider_types.go
- imagesync_types.go
- ipallocation_types.go
- loadbalancerrequest_types.go
- machinerequest_types.go
- managementaddon_types.go
- networkpool_types.go
- observability_types.go
- providerconfig_types.go
- team_types.go
- tenantaddon_types.go
- tenantcluster_types.go
- user_types.go
- workspace_types.go
- workspacetemplate_types.go
- zz_generated.deepcopy.go