Documentation
¶
Overview ¶
Package v1 contains API types for the workspaces.exalsius.ai API group. +kubebuilder:object:generate=true +groupName=workspaces.exalsius.ai
Index ¶
- Constants
- Variables
- type AccessEndpoint
- type AccessEntry
- type ClusterDeploymentRef
- type ConfigFieldType
- type EventSummary
- type FailureContext
- type FeasibilityStatus
- type GPUVendor
- type InjectionPath
- type PrerequisitePhase
- type PrerequisiteSource
- type PrerequisiteSpec
- type PrerequisiteStatus
- type ResourceInjectionMap
- type ResourceRequirements
- type ResourceTotals
- type RouteProtocol
- type ServiceSetStatusSummary
- type ServiceStateSummary
- type ServiceTemplateRef
- type UserFacingConfigField
- type WorkspaceClass
- type WorkspaceClassList
- type WorkspaceClassSpec
- type WorkspaceClassStatus
- type WorkspaceDeployment
- type WorkspaceDeploymentList
- type WorkspaceDeploymentPhase
- type WorkspaceDeploymentSpec
- type WorkspaceDeploymentStatus
- type WorkspaceResourceSpec
Constants ¶
const ( WorkspaceDeploymentKind = "WorkspaceDeployment" WorkspaceDeploymentFinalizer = "workspaces.exalsius.ai/deployment" )
const ( ConditionReady = "Ready" ConditionClassResolved = "ClassResolved" ConditionPrerequisitesMet = "PrerequisitesMet" ConditionHelmReleaseReady = "HelmReleaseReady" // ConditionClusterDeploymentResolved reports whether the referenced // ClusterDeployment exists. Non-terminal: a missing CD keeps the // workspace Pending and requeues, so it self-heals if the cluster is // still provisioning or applied out of order. ConditionClusterDeploymentResolved = "ClusterDeploymentResolved" // ConditionRoutesReady reports whether all declared access endpoints // have programmed routes. Only set when the WorkspaceClass declares // access endpoints and a routing provider is configured. ConditionRoutesReady = "RoutesReady" // ConditionFeasible reports whether the cluster currently has enough // capacity to deploy the workspace. Set during pre-deploy phases; not // updated once the workspace is Running. ConditionFeasible = "Feasible" // ConditionResourcesInjected surfaces the result of resolving spec.resources // into Helm values. Status=True is the steady state; Status=False signals // that the operator overwrote user-supplied paths in spec.values to align // them with the structured spec.resources channel — i.e., a likely user // configuration error worth surfacing. ConditionResourcesInjected = "ResourcesInjected" )
Condition types for WorkspaceDeployment.
const ( ReasonClassNotFound = "ClassNotFound" ReasonClassResolved = "ClassResolved" ReasonClusterDeploymentResolved = "ClusterDeploymentResolved" ReasonClusterDeploymentNotFound = "ClusterDeploymentNotFound" ReasonPrerequisitesNotReady = "PrerequisitesNotReady" ReasonPrerequisitesMet = "PrerequisitesMet" ReasonInstallingPrerequisites = "InstallingPrerequisites" ReasonHelmReleaseNotReady = "HelmReleaseNotReady" ReasonHelmReleaseDeployed = "HelmReleaseDeployed" ReasonHelmReleaseFailed = "HelmReleaseFailed" ReasonDeploymentReady = "DeploymentReady" ReasonDeletionInProgress = "DeletionInProgress" ReasonInternalError = "InternalError" ReasonSuspended = "Suspended" ReasonInvalidPrerequisite = "InvalidPrerequisite" // ReasonPrerequisiteNamespaceConflict signals that a class explicitly // requested a prerequisite namespace that disagrees with where the shared // singleton already lives (installed by another class's ServiceSet or // provided by the colony). Terminal: an admin resolves it by aligning the // class with the incumbent namespace (ADR-0007). ReasonPrerequisiteNamespaceConflict = "PrerequisiteNamespaceConflict" ReasonResourcesAvailable = "ResourcesAvailable" ReasonInsufficientResources = "InsufficientResources" ReasonFeasibilityUnknown = "FeasibilityUnknown" ReasonResourcesInjected = "ResourcesInjected" ReasonUserPathsOverwritten = "UserPathsOverwritten" ReasonInvalidWorkspaceClass = "InvalidWorkspaceClass" ReasonRoutesReady = "RoutesReady" ReasonRoutingInProgress = "RoutingInProgress" ReasonRoutingError = "RoutingError" // ReasonRoutingInfraNotReady signals that the tenant's routing // infrastructure (regional cluster, gateway, listeners) is missing or // unprogrammed — an admin-fixable condition (remediation: contact_admin). ReasonRoutingInfraNotReady = "RoutingInfraNotReady" // present on the target ClusterDeployment at all (ADR-0002). Terminal: the // user fixes the request (or has the GPU provisioned) and recreates. ReasonGpuOfferingUnavailable = "GpuOfferingUnavailable" // ReasonWaitingForGpuCapacity signals that the requested GPU model exists // on the target cluster but none are free right now (ADR-0002). Transient: // the workspace is held in the Waiting phase and proceeds once capacity // frees. ReasonWaitingForGpuCapacity = "WaitingForGpuCapacity" // ReasonCleanupAbandoned signals that a deletion step depending on a // remote cluster kept failing past remoteCleanupGracePeriod and was given // up on so the WorkspaceDeployment could be deleted. Emitted as a Warning // event: it is the only record that resources may have been left behind. ReasonCleanupAbandoned = "CleanupAbandoned" )
Condition reasons for WorkspaceDeployment.
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "workspaces.exalsius.ai", Version: "v1"} // 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 AccessEndpoint ¶
type AccessEndpoint struct {
// Name is a unique identifier for this endpoint within the class.
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
Name string `json:"name"`
// Protocol is the wire protocol for this endpoint.
Protocol RouteProtocol `json:"protocol"`
// Port is the Service port of the endpoint's Service — the routable
// truth for the routing provider's mirror Service and route backends.
// Usually identical to the container port; where they differ, the
// Service port wins.
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=65535
Port int32 `json:"port"`
// ServiceName overrides the conventional `<release-name>-<endpoint-name>`
// name of the endpoint's child-cluster Service. For charts whose Service
// names don't derive from the release name (fullnameOverride, third-party
// umbrella subcharts like jupyterhub's `proxy-public`). Unambiguous even
// for fixed names because each workspace runs in its own namespace.
// Same convention-plus-override pattern as resourceInjection.
// +optional
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
ServiceName string `json:"serviceName,omitempty"`
// Description is a human-readable summary shown to users.
// +optional
Description string `json:"description,omitempty"`
}
AccessEndpoint declares a network endpoint that the workspace exposes.
func (*AccessEndpoint) DeepCopy ¶
func (in *AccessEndpoint) DeepCopy() *AccessEndpoint
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessEndpoint.
func (*AccessEndpoint) DeepCopyInto ¶
func (in *AccessEndpoint) DeepCopyInto(out *AccessEndpoint)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type AccessEntry ¶
type AccessEntry struct {
// Name is the access endpoint name from the WorkspaceClass.
Name string `json:"name"`
// Protocol is the endpoint's wire protocol.
Protocol RouteProtocol `json:"protocol"`
// URL is where the endpoint is reachable, e.g.
// https://thorsten-nb.dos-lab.ex.ls or ssh://dos-lab.ex.ls:2207.
// Empty while the route is not yet resolvable.
// +optional
URL string `json:"url,omitempty"`
// Ready reports whether the platform side of routing is programmed.
// Application-level health remains the chart's readiness probes.
Ready bool `json:"ready"`
// Message explains why an entry is not ready (e.g. port pool exhausted).
// +optional
Message string `json:"message,omitempty"`
}
AccessEntry describes one externally reachable endpoint of a workspace, resolved by the routing provider. The exalsius API projects these entries into Workspace.access[] unchanged (ADR-0001).
func (*AccessEntry) DeepCopy ¶
func (in *AccessEntry) DeepCopy() *AccessEntry
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessEntry.
func (*AccessEntry) DeepCopyInto ¶
func (in *AccessEntry) DeepCopyInto(out *AccessEntry)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterDeploymentRef ¶
type ClusterDeploymentRef struct {
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=253
Name string `json:"name"`
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=63
Namespace string `json:"namespace"`
}
ClusterDeploymentRef references a k0rdent ClusterDeployment.
func (*ClusterDeploymentRef) DeepCopy ¶
func (in *ClusterDeploymentRef) DeepCopy() *ClusterDeploymentRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDeploymentRef.
func (*ClusterDeploymentRef) DeepCopyInto ¶
func (in *ClusterDeploymentRef) DeepCopyInto(out *ClusterDeploymentRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ConfigFieldType ¶
type ConfigFieldType string
ConfigFieldType identifies the input type for a user-facing config field. +kubebuilder:validation:Enum=string;int;bool;secret;publicKey
const ( ConfigFieldTypeString ConfigFieldType = "string" ConfigFieldTypeInt ConfigFieldType = "int" ConfigFieldTypeBool ConfigFieldType = "bool" ConfigFieldTypeSecret ConfigFieldType = "secret" ConfigFieldTypePublicKey ConfigFieldType = "publicKey" )
type EventSummary ¶
type EventSummary struct {
// LastSeen is when the event last occurred.
// +optional
LastSeen metav1.Time `json:"lastSeen,omitempty"`
// Type is Normal or Warning.
// +optional
Type string `json:"type,omitempty"`
Reason string `json:"reason"`
// +optional
Message string `json:"message,omitempty"`
}
EventSummary is a compact view of a Kubernetes event.
func (*EventSummary) DeepCopy ¶
func (in *EventSummary) DeepCopy() *EventSummary
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EventSummary.
func (*EventSummary) DeepCopyInto ¶
func (in *EventSummary) DeepCopyInto(out *EventSummary)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FailureContext ¶
type FailureContext struct {
// PhaseWhenFailed is the phase the workspace was in when it failed
// (e.g. Deploying, InstallingPrerequisites).
// +optional
PhaseWhenFailed WorkspaceDeploymentPhase `json:"phaseWhenFailed,omitempty"`
// Reason is the machine-readable failure reason, mirroring the failing
// condition's reason (e.g. HelmReleaseFailed, PrerequisitesNotReady,
// RoutingInfraNotReady).
// +optional
Reason string `json:"reason,omitempty"`
// ServiceSetStatus snapshots the workspace ServiceSet's reported
// service states at failure time.
// +optional
ServiceSetStatus *ServiceSetStatusSummary `json:"serviceSetStatus,omitempty"`
// RecentEvents lists the most recent Kubernetes events recorded for
// this WorkspaceDeployment, newest first.
// +optional
RecentEvents []EventSummary `json:"recentEvents,omitempty"`
}
FailureContext bundles operator-side context captured when the workspace transitioned to Failed. The exalsius API projects it into the error envelope's `details` so agents can pattern-match common failures without querying operator internals. Pod status from the child cluster is a planned (v1.1) addition; the shape accommodates new fields non-breaking.
func (*FailureContext) DeepCopy ¶
func (in *FailureContext) DeepCopy() *FailureContext
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FailureContext.
func (*FailureContext) DeepCopyInto ¶
func (in *FailureContext) DeepCopyInto(out *FailureContext)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FeasibilityStatus ¶
type FeasibilityStatus struct {
// Fits is true when the demanded resources can be satisfied.
Fits bool `json:"fits"`
// EvaluatedAt is when this feasibility verdict was computed.
EvaluatedAt metav1.Time `json:"evaluatedAt"`
// Demanded is the total resource demand that was checked
// (Replicas × PerReplica from the merged class+deployment spec).
Demanded ResourceTotals `json:"demanded"`
// Available is the cluster-wide free capacity at evaluation time.
Available ResourceTotals `json:"available"`
// Missing describes what's lacking when Fits=false. Nil when Fits=true.
// +optional
Missing *ResourceTotals `json:"missing,omitempty"`
// Message is a human-readable summary.
// +optional
Message string `json:"message,omitempty"`
}
FeasibilityStatus reports whether the cluster has enough free capacity to satisfy this workspace's resource demand. Computed by the operator during pre-deploy phases against live cluster state. Not updated once the workspace is Running.
func (*FeasibilityStatus) DeepCopy ¶
func (in *FeasibilityStatus) DeepCopy() *FeasibilityStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeasibilityStatus.
func (*FeasibilityStatus) DeepCopyInto ¶
func (in *FeasibilityStatus) DeepCopyInto(out *FeasibilityStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GPUVendor ¶
type GPUVendor string
GPUVendor enumerates supported GPU vendors. +kubebuilder:validation:Enum=NVIDIA;AMD
type InjectionPath ¶
type InjectionPath string
InjectionPath is a JSONPath-lite path into the chart's Helm values tree. Dot-separated, with quoted bracket segments for keys containing dots or other special characters (e.g. 'jupyterhub.singleuser.extraResource.limits["nvidia.com/gpu"]'). +kubebuilder:validation:MinLength=1 +kubebuilder:validation:MaxLength=1024
type PrerequisitePhase ¶
type PrerequisitePhase string
PrerequisitePhase reports the install state of a single prerequisite. +kubebuilder:validation:Enum=Pending;Installing;Satisfied;Failed
const ( PrerequisitePhasePending PrerequisitePhase = "Pending" PrerequisitePhaseInstalling PrerequisitePhase = "Installing" PrerequisitePhaseSatisfied PrerequisitePhase = "Satisfied" PrerequisitePhaseFailed PrerequisitePhase = "Failed" )
type PrerequisiteSource ¶
type PrerequisiteSource string
PrerequisiteSource identifies who is providing a prerequisite. +kubebuilder:validation:Enum=workspace;colony
const ( // PrerequisiteSourceWorkspace means the workspace controller installed // the prerequisite via a wsprereq-* ServiceSet. PrerequisiteSourceWorkspace PrerequisiteSource = "workspace" // PrerequisiteSourceColony means the prerequisite is satisfied by a // service entry on the ClusterDeployment (managed by the colony controller). PrerequisiteSourceColony PrerequisiteSource = "colony" )
type PrerequisiteSpec ¶
type PrerequisiteSpec struct {
// ServiceTemplate references the prerequisite ServiceTemplate.
ServiceTemplate ServiceTemplateRef `json:"serviceTemplate"`
// Namespace is the target namespace on the child cluster for this shared
// prerequisite install. A prerequisite is a per-cluster singleton, so this
// namespace is a cluster-global property even though it is authored per
// class. When unset, the install lands in "default" and the class accepts
// whatever namespace another provider (a colony service or another class's
// install) already placed the prerequisite in; when set explicitly, the
// namespace must match wherever the singleton actually lives or the
// WorkspaceDeployment fails with a namespace conflict (ADR-0007).
// +optional
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
// +kubebuilder:validation:MaxLength=63
Namespace string `json:"namespace,omitempty"`
// Values are optional Helm value overrides applied when installing this
// prerequisite. When nil, chart defaults are used.
// +optional
Values *apiextensionsv1.JSON `json:"values,omitempty"`
}
PrerequisiteSpec declares a ServiceTemplate dependency with optional Helm value overrides applied when the operator auto-installs the prerequisite onto the target cluster.
func (*PrerequisiteSpec) DeepCopy ¶
func (in *PrerequisiteSpec) DeepCopy() *PrerequisiteSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrerequisiteSpec.
func (*PrerequisiteSpec) DeepCopyInto ¶
func (in *PrerequisiteSpec) DeepCopyInto(out *PrerequisiteSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PrerequisiteStatus ¶
type PrerequisiteStatus struct {
// Name is the ServiceTemplate name from WorkspaceClass.spec.prerequisites.
Name string `json:"name"`
// Phase is the current state of this prerequisite.
Phase PrerequisitePhase `json:"phase"`
// Source identifies who is providing the prerequisite.
// +optional
Source PrerequisiteSource `json:"source,omitempty"`
// Namespace is where the shared prerequisite install actually resides on
// the child cluster: the incumbent's namespace when one exists, otherwise
// the namespace this class would install into.
// +optional
Namespace string `json:"namespace,omitempty"`
// Message is a human-readable detail (e.g., the underlying failure reason).
// +optional
Message string `json:"message,omitempty"`
}
PrerequisiteStatus reports the per-prerequisite install state.
func (*PrerequisiteStatus) DeepCopy ¶
func (in *PrerequisiteStatus) DeepCopy() *PrerequisiteStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PrerequisiteStatus.
func (*PrerequisiteStatus) DeepCopyInto ¶
func (in *PrerequisiteStatus) DeepCopyInto(out *PrerequisiteStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceInjectionMap ¶
type ResourceInjectionMap struct {
// Replicas lists Helm value paths receiving the resolved replica count (int).
// +optional
// +listType=set
Replicas []InjectionPath `json:"replicas,omitempty"`
// CPU lists Helm value paths receiving the resolved per-replica CPU (string).
// +optional
// +listType=set
CPU []InjectionPath `json:"cpu,omitempty"`
// Memory lists Helm value paths receiving the resolved per-replica memory (string).
// +optional
// +listType=set
Memory []InjectionPath `json:"memory,omitempty"`
// Storage lists Helm value paths receiving the resolved per-replica storage (string).
// +optional
// +listType=set
Storage []InjectionPath `json:"storage,omitempty"`
// GPUCount lists Helm value paths receiving the resolved per-replica GPU count (int).
// +optional
// +listType=set
GPUCount []InjectionPath `json:"gpuCount,omitempty"`
// GPUVendor lists Helm value paths receiving the resolved GPU vendor (string).
// +optional
// +listType=set
GPUVendor []InjectionPath `json:"gpuVendor,omitempty"`
// GPUType lists Helm value paths receiving the resolved GPU type (string).
// +optional
// +listType=set
GPUType []InjectionPath `json:"gpuType,omitempty"`
}
ResourceInjectionMap declares additional Helm value paths in spec.values that should receive the resolved per-replica resource fields at deploy time. Each list contains JSONPath-lite paths that get the corresponding value. All fields are optional; nil-resolved fields are skipped silently.
func (*ResourceInjectionMap) DeepCopy ¶
func (in *ResourceInjectionMap) DeepCopy() *ResourceInjectionMap
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceInjectionMap.
func (*ResourceInjectionMap) DeepCopyInto ¶
func (in *ResourceInjectionMap) DeepCopyInto(out *ResourceInjectionMap)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceRequirements ¶
type ResourceRequirements struct {
// CPU is the number of CPU cores requested (e.g. "4", "500m").
// +optional
CPU *resource.Quantity `json:"cpu,omitempty"`
// Memory is the amount of memory requested (e.g. "16Gi").
// +optional
Memory *resource.Quantity `json:"memory,omitempty"`
// Storage is the amount of persistent storage requested (e.g. "100Gi").
// +optional
Storage *resource.Quantity `json:"storage,omitempty"`
// GPUCount is the number of GPUs requested per replica.
// +optional
// +kubebuilder:validation:Minimum=0
GPUCount *int32 `json:"gpuCount,omitempty"`
// GPUVendor constrains the GPU vendor (NVIDIA or AMD). Set on a
// WorkspaceClass to express chart-level vendor compatibility (e.g. CUDA
// vs ROCm); inheritable into a WorkspaceDeployment that doesn't override it.
// +optional
GPUVendor *GPUVendor `json:"gpuVendor,omitempty"`
// GPUType is a deployment-time preference for a specific GPU model
// (e.g. "H100", "A100", "L40"). When unset on a WorkspaceDeployment,
// feasibility matches GPUs of any model. Cannot be set on a
// WorkspaceClass — type is a per-deployment cluster-dependent choice.
// +optional
GPUType *string `json:"gpuType,omitempty"`
// GPUNodeSelector is a raw, exact-match node-label selector for targeting a
// GPU directly (e.g. a GFD/AMD label like {"nvidia.com/gpu.product":
// "NVIDIA-H100-80GB-HBM3"}). It is the power-user/exact escape hatch
// alongside gpuType: both compile to one GPU Selector that the operator
// gate validates and the chart applies, so a request that passes the gate
// is always placeable (ADR-0002). Usable even on clusters that lack the
// canonical exalsius.ai/gpu-model label. Like gpuType, it is a
// per-deployment cluster-dependent choice and cannot be set on a class.
// +optional
GPUNodeSelector map[string]string `json:"gpuNodeSelector,omitempty"`
}
ResourceRequirements specifies compute resource requirements for a single replica.
func (*ResourceRequirements) DeepCopy ¶
func (in *ResourceRequirements) DeepCopy() *ResourceRequirements
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceRequirements.
func (*ResourceRequirements) DeepCopyInto ¶
func (in *ResourceRequirements) DeepCopyInto(out *ResourceRequirements)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResourceTotals ¶
type ResourceTotals struct {
// CPU in cores (decimal-encoded resource.Quantity).
// +optional
CPU *resource.Quantity `json:"cpu,omitempty"`
// Memory in bytes.
// +optional
Memory *resource.Quantity `json:"memory,omitempty"`
// Storage in bytes.
// +optional
Storage *resource.Quantity `json:"storage,omitempty"`
// GPUCount is the total number of GPUs.
// +optional
GPUCount *int32 `json:"gpuCount,omitempty"`
// GPUVendor identifies the vendor that was matched (when feasibility
// considered vendor as a constraint). Empty when wildcard.
// +optional
GPUVendor *GPUVendor `json:"gpuVendor,omitempty"`
// GPUType identifies the GPU model that was matched. Empty when wildcard.
// +optional
GPUType *string `json:"gpuType,omitempty"`
}
ResourceTotals summarises a cluster-total resource view used for feasibility reporting.
func (*ResourceTotals) DeepCopy ¶
func (in *ResourceTotals) DeepCopy() *ResourceTotals
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceTotals.
func (*ResourceTotals) DeepCopyInto ¶
func (in *ResourceTotals) DeepCopyInto(out *ResourceTotals)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type RouteProtocol ¶
type RouteProtocol string
RouteProtocol is the wire protocol for an access endpoint. +kubebuilder:validation:Enum=HTTP;TCP;SSH
const ( RouteProtocolHTTP RouteProtocol = "HTTP" RouteProtocolTCP RouteProtocol = "TCP" RouteProtocolSSH RouteProtocol = "SSH" )
type ServiceSetStatusSummary ¶
type ServiceSetStatusSummary struct {
// Name of the ServiceSet.
Name string `json:"name"`
// Deployed mirrors ServiceSet.status.deployed.
// +optional
Deployed bool `json:"deployed,omitempty"`
// Services lists the per-service states.
// +optional
Services []ServiceStateSummary `json:"services,omitempty"`
}
ServiceSetStatusSummary is a compact snapshot of a k0rdent ServiceSet status for failure forensics.
func (*ServiceSetStatusSummary) DeepCopy ¶
func (in *ServiceSetStatusSummary) DeepCopy() *ServiceSetStatusSummary
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceSetStatusSummary.
func (*ServiceSetStatusSummary) DeepCopyInto ¶
func (in *ServiceSetStatusSummary) DeepCopyInto(out *ServiceSetStatusSummary)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ServiceStateSummary ¶
type ServiceStateSummary struct {
Name string `json:"name"`
// State is the k0rdent service state (e.g. Deployed, Failed).
// +optional
State string `json:"state,omitempty"`
// FailureMessage carries the underlying failure detail (e.g. the Helm
// error).
// +optional
FailureMessage string `json:"failureMessage,omitempty"`
}
ServiceStateSummary is one service entry's state inside a ServiceSet.
func (*ServiceStateSummary) DeepCopy ¶
func (in *ServiceStateSummary) DeepCopy() *ServiceStateSummary
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceStateSummary.
func (*ServiceStateSummary) DeepCopyInto ¶
func (in *ServiceStateSummary) DeepCopyInto(out *ServiceStateSummary)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ServiceTemplateRef ¶
type ServiceTemplateRef struct {
// Name is the name of the ServiceTemplate CR.
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=253
Name string `json:"name"`
// Namespace of the ServiceTemplate. When unspecified, the system namespace is implied.
// +optional
Namespace string `json:"namespace,omitempty"`
// VersionConstraint is an optional SemVer constraint (e.g. ">=1.2.0").
// +optional
VersionConstraint string `json:"versionConstraint,omitempty"`
}
ServiceTemplateRef references a k0rdent ServiceTemplate CR.
func (*ServiceTemplateRef) DeepCopy ¶
func (in *ServiceTemplateRef) DeepCopy() *ServiceTemplateRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceTemplateRef.
func (*ServiceTemplateRef) DeepCopyInto ¶
func (in *ServiceTemplateRef) DeepCopyInto(out *ServiceTemplateRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type UserFacingConfigField ¶
type UserFacingConfigField struct {
// HelmValuePath is a dot-delimited path into values.yaml (e.g. "jupyter.password").
// +kubebuilder:validation:MinLength=1
HelmValuePath string `json:"helmValuePath"`
// DisplayName is the label shown to the user in the CLI prompt.
// +kubebuilder:validation:MinLength=1
DisplayName string `json:"displayName"`
// Description provides additional context shown as help text.
// +optional
Description string `json:"description,omitempty"`
// Type is the input type for validation and display.
// +kubebuilder:default=string
Type ConfigFieldType `json:"type,omitempty"`
// Required indicates the user must provide a value.
// +optional
Required bool `json:"required,omitempty"`
// Default is the default value shown in the prompt.
// +optional
Default *apiextensionsv1.JSON `json:"default,omitempty"`
// Options constrains the input to a closed set of allowed values.
// +optional
Options []string `json:"options,omitempty"`
}
UserFacingConfigField annotates a single Helm value path that the CLI should prompt users for during workspace creation.
func (*UserFacingConfigField) DeepCopy ¶
func (in *UserFacingConfigField) DeepCopy() *UserFacingConfigField
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserFacingConfigField.
func (*UserFacingConfigField) DeepCopyInto ¶
func (in *UserFacingConfigField) DeepCopyInto(out *UserFacingConfigField)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceClass ¶
type WorkspaceClass struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec WorkspaceClassSpec `json:"spec"`
Status WorkspaceClassStatus `json:"status,omitempty"`
}
WorkspaceClass is a cluster-scoped catalog entry that defines a workspace type. Users reference it by name when creating a WorkspaceDeployment.
func (*WorkspaceClass) DeepCopy ¶
func (in *WorkspaceClass) DeepCopy() *WorkspaceClass
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceClass.
func (*WorkspaceClass) DeepCopyInto ¶
func (in *WorkspaceClass) DeepCopyInto(out *WorkspaceClass)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceClass) DeepCopyObject ¶
func (in *WorkspaceClass) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspaceClassList ¶
type WorkspaceClassList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []WorkspaceClass `json:"items"`
}
WorkspaceClassList contains a list of WorkspaceClass.
func (*WorkspaceClassList) DeepCopy ¶
func (in *WorkspaceClassList) DeepCopy() *WorkspaceClassList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceClassList.
func (*WorkspaceClassList) DeepCopyInto ¶
func (in *WorkspaceClassList) DeepCopyInto(out *WorkspaceClassList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceClassList) DeepCopyObject ¶
func (in *WorkspaceClassList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspaceClassSpec ¶
type WorkspaceClassSpec struct {
// DisplayName is the human-readable name shown in the workspace catalog.
// +kubebuilder:validation:MinLength=1
DisplayName string `json:"displayName"`
// Description provides a user-facing summary of what this workspace type offers.
// +optional
Description string `json:"description,omitempty"`
// ServiceTemplate references the k0rdent ServiceTemplate CR that wraps the
// Helm chart for this workspace type.
ServiceTemplate ServiceTemplateRef `json:"serviceTemplate"`
// DefaultResources are applied when a WorkspaceDeployment does not override them.
DefaultResources WorkspaceResourceSpec `json:"defaultResources"`
// Prerequisites lists additional ServiceTemplates that must be healthy on the
// target cluster before the workspace can be deployed.
// +optional
Prerequisites []PrerequisiteSpec `json:"prerequisites,omitempty"`
// AccessEndpoints declares the network endpoints this workspace type exposes.
// +optional
// +listType=map
// +listMapKey=name
AccessEndpoints []AccessEndpoint `json:"accessEndpoints,omitempty"`
// UserFacingConfig lists Helm value paths that the CLI should prompt for.
// +optional
// +listType=map
// +listMapKey=helmValuePath
UserFacingConfig []UserFacingConfigField `json:"userFacingConfig,omitempty"`
// DeployTimeout is the maximum time to wait for the workspace Helm release
// to become ready. Useful for workspaces with large images that take long to pull.
// Defaults to 15 minutes if not set.
// +optional
DeployTimeout *metav1.Duration `json:"deployTimeout,omitempty"`
// PrerequisiteDeployTimeout overrides DeployTimeout for prerequisite Helm
// releases. Useful when prerequisite operators take noticeably longer or
// shorter to install than the workspace itself. Defaults to DeployTimeout
// when nil.
// +optional
PrerequisiteDeployTimeout *metav1.Duration `json:"prerequisiteDeployTimeout,omitempty"`
// DefaultValues provides base Helm values that are always applied.
// +optional
DefaultValues *apiextensionsv1.JSON `json:"defaultValues,omitempty"`
// ResourceInjection optionally maps resolved per-replica resource fields
// to additional Helm value paths in spec.values. The standard
// `_exalsius.resources` path is always populated automatically — this
// field adds chart-specific paths, typically subchart paths in
// umbrella charts. Paths use JSONPath-lite syntax: dot-separated, with
// quoted bracket segments for keys containing dots or other special
// characters (e.g. 'jupyterhub.singleuser.extraResource.limits["nvidia.com/gpu"]').
// User-supplied spec.values at the same paths are overwritten by the
// operator (a ResourcesInjected condition surfaces the override).
// +optional
ResourceInjection *ResourceInjectionMap `json:"resourceInjection,omitempty"`
}
WorkspaceClassSpec defines the catalog entry for a workspace type.
+kubebuilder:validation:XValidation:rule="!has(self.defaultResources.perReplica.gpuType)",message="gpuType cannot be set on a WorkspaceClass — it is a per-deployment cluster-dependent choice" +kubebuilder:validation:XValidation:rule="!has(self.defaultResources.perReplica.gpuNodeSelector)",message="gpuNodeSelector cannot be set on a WorkspaceClass — it is a per-deployment cluster-dependent choice"
func (*WorkspaceClassSpec) DeepCopy ¶
func (in *WorkspaceClassSpec) DeepCopy() *WorkspaceClassSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceClassSpec.
func (*WorkspaceClassSpec) DeepCopyInto ¶
func (in *WorkspaceClassSpec) DeepCopyInto(out *WorkspaceClassSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceClassStatus ¶
type WorkspaceClassStatus struct {
// Conditions represent the latest observations.
// +patchMergeKey=type
// +patchStrategy=merge
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// ObservedGeneration is the .metadata.generation that was last reconciled.
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// Valid indicates whether the referenced ServiceTemplate is available and
// itself reports valid=true.
Valid bool `json:"valid"`
// ValidationError describes why the WorkspaceClass is not valid.
// Empty when Valid is true.
ValidationError string `json:"validationError,omitempty"`
}
WorkspaceClassStatus reports the observed state of a WorkspaceClass.
func (*WorkspaceClassStatus) DeepCopy ¶
func (in *WorkspaceClassStatus) DeepCopy() *WorkspaceClassStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceClassStatus.
func (*WorkspaceClassStatus) DeepCopyInto ¶
func (in *WorkspaceClassStatus) DeepCopyInto(out *WorkspaceClassStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceDeployment ¶
type WorkspaceDeployment struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec WorkspaceDeploymentSpec `json:"spec"`
Status WorkspaceDeploymentStatus `json:"status,omitempty"`
}
WorkspaceDeployment represents user intent to deploy a workspace instance onto a child cluster.
func (*WorkspaceDeployment) DeepCopy ¶
func (in *WorkspaceDeployment) DeepCopy() *WorkspaceDeployment
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceDeployment.
func (*WorkspaceDeployment) DeepCopyInto ¶
func (in *WorkspaceDeployment) DeepCopyInto(out *WorkspaceDeployment)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceDeployment) DeepCopyObject ¶
func (in *WorkspaceDeployment) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspaceDeploymentList ¶
type WorkspaceDeploymentList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []WorkspaceDeployment `json:"items"`
}
WorkspaceDeploymentList contains a list of WorkspaceDeployment.
func (*WorkspaceDeploymentList) DeepCopy ¶
func (in *WorkspaceDeploymentList) DeepCopy() *WorkspaceDeploymentList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceDeploymentList.
func (*WorkspaceDeploymentList) DeepCopyInto ¶
func (in *WorkspaceDeploymentList) DeepCopyInto(out *WorkspaceDeploymentList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*WorkspaceDeploymentList) DeepCopyObject ¶
func (in *WorkspaceDeploymentList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type WorkspaceDeploymentPhase ¶
type WorkspaceDeploymentPhase string
WorkspaceDeploymentPhase represents the lifecycle state of a deployment. +kubebuilder:validation:Enum=Pending;InstallingPrerequisites;Waiting;Deploying;Running;Failed;Deleting
const ( WorkspaceDeploymentPhasePending WorkspaceDeploymentPhase = "Pending" WorkspaceDeploymentPhaseInstallingPrerequisites WorkspaceDeploymentPhase = "InstallingPrerequisites" // WorkspaceDeploymentPhaseWaiting means the requested GPU Offering exists // on the target cluster but none are free right now; the workspace is held // (no Helm release created) and retried until capacity frees (ADR-0002). // Transient and self-resolving — distinct from the terminal Failed. WorkspaceDeploymentPhaseWaiting WorkspaceDeploymentPhase = "Waiting" WorkspaceDeploymentPhaseDeploying WorkspaceDeploymentPhase = "Deploying" WorkspaceDeploymentPhaseRunning WorkspaceDeploymentPhase = "Running" WorkspaceDeploymentPhaseFailed WorkspaceDeploymentPhase = "Failed" WorkspaceDeploymentPhaseDeleting WorkspaceDeploymentPhase = "Deleting" )
type WorkspaceDeploymentSpec ¶
type WorkspaceDeploymentSpec struct {
// WorkspaceClassRef is the name of the cluster-scoped WorkspaceClass.
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=253
WorkspaceClassRef string `json:"workspaceClassRef"`
// ClusterDeploymentRef identifies the target child cluster.
ClusterDeploymentRef ClusterDeploymentRef `json:"clusterDeploymentRef"`
// Resources overrides the default resources from the WorkspaceClass.
// +optional
Resources *WorkspaceResourceSpec `json:"resources,omitempty"`
// Values provides user-specified Helm values merged on top of class defaults.
// +optional
Values *apiextensionsv1.JSON `json:"values,omitempty"`
// Suspend, when true, causes the operator to skip reconciliation.
// +optional
Suspend bool `json:"suspend,omitempty"`
}
WorkspaceDeploymentSpec defines user intent to deploy a workspace instance.
func (*WorkspaceDeploymentSpec) DeepCopy ¶
func (in *WorkspaceDeploymentSpec) DeepCopy() *WorkspaceDeploymentSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceDeploymentSpec.
func (*WorkspaceDeploymentSpec) DeepCopyInto ¶
func (in *WorkspaceDeploymentSpec) DeepCopyInto(out *WorkspaceDeploymentSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceDeploymentStatus ¶
type WorkspaceDeploymentStatus struct {
// Phase is a human-readable summary of the deployment lifecycle.
// +optional
Phase WorkspaceDeploymentPhase `json:"phase,omitempty"`
// Conditions represent the latest observations.
// +patchMergeKey=type
// +patchStrategy=merge
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
// ObservedGeneration is the .metadata.generation that was last reconciled.
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// ServiceEntryName is the name of the service entry added to the ClusterDeployment.
// +optional
ServiceEntryName string `json:"serviceEntryName,omitempty"`
// ResolvedResources captures the effective resources after merging.
// +optional
ResolvedResources *WorkspaceResourceSpec `json:"resolvedResources,omitempty"`
// Prerequisites reports the per-prerequisite install state. Only populated
// when the resolved WorkspaceClass declares prerequisites.
// +optional
// +listType=map
// +listMapKey=name
Prerequisites []PrerequisiteStatus `json:"prerequisites,omitempty"`
// Feasibility reports whether the cluster has enough free capacity to
// deploy this workspace. Refreshed on every reconcile while the
// workspace is being deployed; not updated once the workspace is Running.
// +optional
Feasibility *FeasibilityStatus `json:"feasibility,omitempty"`
// Access lists the externally reachable endpoints of this workspace,
// resolved by the routing provider once the workspace is Running.
// +optional
// +listType=map
// +listMapKey=name
Access []AccessEntry `json:"access,omitempty"`
// FailureContext bundles operator-side failure forensics, populated on
// every transition into Failed and cleared when the workspace recovers.
// +optional
FailureContext *FailureContext `json:"failureContext,omitempty"`
// Message is a human-readable error or status detail.
// +optional
Message string `json:"message,omitempty"`
}
WorkspaceDeploymentStatus defines the observed state of WorkspaceDeployment.
func (*WorkspaceDeploymentStatus) DeepCopy ¶
func (in *WorkspaceDeploymentStatus) DeepCopy() *WorkspaceDeploymentStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceDeploymentStatus.
func (*WorkspaceDeploymentStatus) DeepCopyInto ¶
func (in *WorkspaceDeploymentStatus) DeepCopyInto(out *WorkspaceDeploymentStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type WorkspaceResourceSpec ¶
type WorkspaceResourceSpec struct {
// Replicas is the number of pod-shaped instances the workspace deploys.
// Defaults to 1.
// +optional
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=1
Replicas *int32 `json:"replicas,omitempty"`
// PerReplica specifies resources requested per replica.
PerReplica ResourceRequirements `json:"perReplica"`
}
WorkspaceResourceSpec defines the compute resources for a workspace. A workspace deploys Replicas pod-shaped instances, each with PerReplica resources. Whether replicas are spread across Kubernetes nodes or co-located is decided by the chart's affinity rules and the K8s scheduler; this spec only describes total demand (Replicas × PerReplica).
func (*WorkspaceResourceSpec) DeepCopy ¶
func (in *WorkspaceResourceSpec) DeepCopy() *WorkspaceResourceSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceResourceSpec.
func (*WorkspaceResourceSpec) DeepCopyInto ¶
func (in *WorkspaceResourceSpec) DeepCopyInto(out *WorkspaceResourceSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.