k8s

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2026 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Overview

Package k8s provides Kubernetes client wrappers for the kube-workspaces API server. It includes specialized clients for workspaces, images, CRDs, core resources (pods, services, PVCs), and a metrics buffer for caching pod resource usage data.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrVMGPUNotStopped = errors.New("Windows GPU changes require a fully stopped VM and no VMI")
)

Functions

func GetClientset

func GetClientset() (kubernetes.Interface, error)

GetClientset returns a Kubernetes clientset for use by the exec handler.

func GetRESTConfig

func GetRESTConfig() (*rest.Config, error)

GetRESTConfig returns a Kubernetes REST config for use by the exec handler.

func NewClient

func NewClient() (*kubernetes.Clientset, error)

NewClient creates a Kubernetes clientset (used by volumes and namespaces services).

func NewDynamicClient

func NewDynamicClient() (dynamic.Interface, error)

NewDynamicClient creates a dynamic Kubernetes client for working with CRDs.

func ValidateCloudImage added in v0.11.0

func ValidateCloudImage(ref string, persistent bool, workspaceTypes []string, profile string) error

ValidateCloudImage leaves OCI references unchanged. URL sources are only meaningful for VM-only catalog images imported into persistent CDI roots.

func WorkspacePVCNames added in v0.11.0

func WorkspacePVCNames(workspace *unstructured.Unstructured) map[string]bool

WorkspacePVCNames distinguishes user-editable PVC mounts from auxiliary mounts such as memory-backed /dev/shm and projected service-account tokens.

Types

type CRDClient

type CRDClient struct {
	// contains filtered or unexported fields
}

CRDClient provides operations on CustomResourceDefinition resources.

func NewCRDClient

func NewCRDClient() (*CRDClient, error)

NewCRDClient creates a new CRDClient using the same config as other clients.

func (*CRDClient) GetCRD

func (c *CRDClient) GetCRD(ctx context.Context, name string) (*unstructured.Unstructured, error)

GetCRD gets a CustomResourceDefinition by name.

func (*CRDClient) ListCRDInstances

func (c *CRDClient) ListCRDInstances(ctx context.Context, group, version, resource, namespace string) (*unstructured.UnstructuredList, error)

ListCRDInstances lists all instances of a CRD identified by group/version/resource. For namespaced CRDs, pass namespace; for cluster-scoped, pass "".

func (*CRDClient) ListCRDs

ListCRDs lists all CustomResourceDefinitions in the cluster.

func (*CRDClient) ListCRDsByGroup

func (c *CRDClient) ListCRDsByGroup(ctx context.Context, group string) (*unstructured.UnstructuredList, error)

ListCRDsByGroup lists CustomResourceDefinitions filtered by spec.group.

type CoreClient

type CoreClient struct {
	// contains filtered or unexported fields
}

CoreClient provides operations on core Kubernetes resources (pods, events).

func NewCoreClient

func NewCoreClient() (*CoreClient, error)

NewCoreClient creates a new CoreClient using in-cluster config or kubeconfig.

func NewCoreClientFor added in v0.7.0

func NewCoreClientFor(clientset kubernetes.Interface) *CoreClient

NewCoreClientFor wraps an injected clientset, for tests and embedded use, mirroring NewWorkspaceClientFor.

func (*CoreClient) AnnotateNamespace

func (c *CoreClient) AnnotateNamespace(ctx context.Context, name, key, value string) error

AnnotateNamespace sets or removes an annotation on a namespace. If value is empty, the annotation is removed.

func (*CoreClient) CreateWorkspaceEvent

func (c *CoreClient) CreateWorkspaceEvent(ctx context.Context, namespace, workspaceName, action, actor, message string) error

CreateWorkspaceEvent creates a Kubernetes Event associated with a Workspace CR.

func (*CoreClient) GetPod

func (c *CoreClient) GetPod(ctx context.Context, namespace, name string) (*corev1.Pod, error)

GetPod returns a pod by name and namespace.

func (*CoreClient) GetPodLogs

func (c *CoreClient) GetPodLogs(ctx context.Context, namespace, name, container string, tailLines int64) (string, error)

GetPodLogs returns the logs of a pod's container as a string.

func (*CoreClient) GetStatefulSet

func (c *CoreClient) GetStatefulSet(ctx context.Context, namespace, name string) (interface{}, error)

GetStatefulSet returns a StatefulSet by name and namespace.

func (*CoreClient) ListEvents

func (c *CoreClient) ListEvents(ctx context.Context, namespace, fieldSelector string) (*corev1.EventList, error)

ListEvents returns events for a specific object (by field selector).

func (*CoreClient) ListNamespaceEvents

func (c *CoreClient) ListNamespaceEvents(ctx context.Context, namespace string) (*corev1.EventList, error)

ListNamespaceEvents returns all events in a namespace, optionally filtered.

func (*CoreClient) ListNamespaces

func (c *CoreClient) ListNamespaces(ctx context.Context) (*corev1.NamespaceList, error)

ListNamespaces returns all namespaces in the cluster.

func (*CoreClient) ListPods

func (c *CoreClient) ListPods(ctx context.Context, namespace, labelSelector string) (*corev1.PodList, error)

ListPods returns pods matching label selector in a namespace.

func (*CoreClient) ListWorkspaceEvents

func (c *CoreClient) ListWorkspaceEvents(ctx context.Context, namespace, workspaceName string) (*corev1.EventList, error)

ListWorkspaceEvents returns events related to a specific workspace.

type Image

type Image struct {
	SourceRepository       string
	SourceRepositoryURL    string
	SourceRepositoryRef    string
	SourceRepositoryCommit string
	SourceRepositoryPath   string
	Name                   string
	DisplayName            string
	Description            string
	Category               string
	Tags                   []string
	Image                  string
	DefaultPort            int32
	DefaultPath            string
	Icon                   string
	DefaultArgs            []string
	DefaultEnv             []ImageEnvVar
	DefaultCredentials     *ImageCredentials
	Privileged             bool
	HomepageURL            string
	SourceURL              string
	ImageHomepageURL       string
	DefaultUser            string
	DefaultPassword        string
	DefaultCloudInit       bool
	DefaultUserData        string
	DefaultHomedir         string
	DefaultShell           string
	Links                  []ImageLink
	ProxyConfig            *ImageProxyConfig
	DefaultUID             *int64
	DefaultSharedMemory    bool
	DefaultInitContainers  []ImageInitContainer
	AdditionalPorts        []ImagePort
	// DefaultImagePullPolicy is the pull policy applied to workspace containers
	// created from this image. Empty leaves the container field unset so
	// Kubernetes applies its own default.
	DefaultImagePullPolicy string
	// WorkspaceTypes lists the workspace types this image supports
	// (container, vm, scratch). Empty means container-only.
	WorkspaceTypes []string
	// RemoteDesktop configuration for this image (Tier 1 transport).
	RemoteDesktop          *ImageRemoteDesktop
	VMProfile              string
	PersistentRootDisk     bool
	PersistentRootDiskSize string
	MemoryLimit            string
	MemoryRequest          string
}

Image represents a parsed Image CR.

type ImageClient

type ImageClient struct {
	// contains filtered or unexported fields
}

ImageClient provides operations on Image custom resources.

func NewImageClient

func NewImageClient() (*ImageClient, error)

NewImageClient creates a new ImageClient.

func NewImageClientFor added in v0.7.0

func NewImageClientFor(client dynamic.Interface) *ImageClient

func (*ImageClient) CreateImage

func (c *ImageClient) CreateImage(ctx context.Context, name string, spec map[string]interface{}) (*unstructured.Unstructured, error)

CreateImage creates a new Image CR.

func (*ImageClient) DeleteImage

func (c *ImageClient) DeleteImage(ctx context.Context, name string) error

DeleteImage deletes an Image CR.

func (*ImageClient) GetImage

func (c *ImageClient) GetImage(ctx context.Context, name string) (*Image, error)

GetImage gets an Image CR by name.

func (*ImageClient) GetImageByRef

func (c *ImageClient) GetImageByRef(ctx context.Context, imageRef string) (*Image, error)

GetImageByRef finds an Image CR whose spec.image matches the given reference.

func (*ImageClient) GetImageRaw

func (c *ImageClient) GetImageRaw(ctx context.Context, name string) (*unstructured.Unstructured, error)

GetImageRaw returns the raw unstructured Image CR object.

func (*ImageClient) ListImages

func (c *ImageClient) ListImages(ctx context.Context) ([]Image, error)

ListImages lists all Image CRs (cluster-scoped).

func (*ImageClient) UpdateImage

func (c *ImageClient) UpdateImage(ctx context.Context, name string, spec map[string]interface{}) (*unstructured.Unstructured, error)

UpdateImage updates an existing Image CR.

type ImageCredentials

type ImageCredentials struct {
	Username string
	Password string
}

ImageCredentials represents default login credentials for a workspace image.

type ImageEnvVar

type ImageEnvVar struct {
	Name  string
	Value string
}

ImageEnvVar is an environment variable with optional placeholder support.

type ImageInitContainer

type ImageInitContainer struct {
	Name         string
	Image        string
	Command      []string
	Args         []string
	Env          []ImageEnvVar
	VolumeMounts []ImageVolumeMount
}

ImageInitContainer represents a simplified init container spec for Image CR defaults.

type ImageLink struct {
	Title string
	URL   string
}

ImageLink represents a named URL link for an image.

type ImagePort

type ImagePort struct {
	Name     string
	Port     int32
	Protocol string
}

ImagePort represents an additional container port to expose.

type ImageProxyConfig

type ImageProxyConfig struct {
	NeedsNoOpSW              bool
	WebSocketPaths           []string
	RewriteHostAbsolutePaths bool
	CustomRequestHeaders     map[string]string
	InjectBaseTag            bool
	TLSInsecure              bool
	PreservePathPrefix       bool
	AudioPort                int32
}

ImageProxyConfig describes proxy behavior for an image.

type ImageRemoteDesktop added in v0.5.0

type ImageRemoteDesktop struct {
	Protocol string
	Port     int32
	Path     string
}

ImageRemoteDesktop describes an in-guest remote desktop agent.

type ImageRepositoryClient added in v0.11.0

type ImageRepositoryClient struct {
	// contains filtered or unexported fields
}

ImageRepositoryClient provides operations on ImageRepository custom resources.

func NewImageRepositoryClient added in v0.11.0

func NewImageRepositoryClient() (*ImageRepositoryClient, error)

NewImageRepositoryClient creates a new ImageRepositoryClient.

func NewImageRepositoryClientFor added in v0.11.0

func NewImageRepositoryClientFor(client dynamic.Interface) *ImageRepositoryClient

func (*ImageRepositoryClient) CreateImageRepository added in v0.11.0

CreateImageRepository creates a new ImageRepository CR.

func (*ImageRepositoryClient) DeleteImageRepository added in v0.11.0

func (c *ImageRepositoryClient) DeleteImageRepository(ctx context.Context, name string) error

DeleteImageRepository deletes an ImageRepository CR.

func (*ImageRepositoryClient) GetImageRepositoryRaw added in v0.11.0

func (c *ImageRepositoryClient) GetImageRepositoryRaw(ctx context.Context, name string) (*unstructured.Unstructured, error)

GetImageRepositoryRaw returns the raw unstructured ImageRepository CR object.

func (*ImageRepositoryClient) ListImageRepositories added in v0.11.0

func (c *ImageRepositoryClient) ListImageRepositories(ctx context.Context) (*unstructured.UnstructuredList, error)

ListImageRepositories lists all ImageRepository CRs (cluster-scoped).

func (*ImageRepositoryClient) PatchImageRepository added in v0.11.0

func (c *ImageRepositoryClient) PatchImageRepository(ctx context.Context, name string, pt types.PatchType, data []byte) (*unstructured.Unstructured, error)

PatchImageRepository patches an ImageRepository CR.

func (*ImageRepositoryClient) UpdateImageRepository added in v0.11.0

UpdateImageRepository updates an existing ImageRepository CR.

type ImageVolumeMount

type ImageVolumeMount struct {
	Name      string
	MountPath string
}

ImageVolumeMount represents a volume mount for an init container.

type MetricPoint

type MetricPoint struct {
	Timestamp     time.Time `json:"timestamp"`
	CPUMillicores int64     `json:"cpu_mc"`
	MemoryBytes   int64     `json:"memory_bytes"`
}

type MetricsBuffer

type MetricsBuffer struct {
	// contains filtered or unexported fields
}

func NewMetricsBuffer

func NewMetricsBuffer(client *MetricsClient, interval, maxAge time.Duration) *MetricsBuffer

func (*MetricsBuffer) Client

func (b *MetricsBuffer) Client() *MetricsClient

func (*MetricsBuffer) EnsurePod

func (b *MetricsBuffer) EnsurePod(ctx context.Context, namespace, name string, container string)

func (*MetricsBuffer) GetMetrics

func (b *MetricsBuffer) GetMetrics(namespace, name string, window time.Duration) ([]MetricPoint, string)

func (*MetricsBuffer) Run

func (b *MetricsBuffer) Run(ctx context.Context)

func (*MetricsBuffer) Stop

func (b *MetricsBuffer) Stop()

type MetricsClient

type MetricsClient struct {
	// contains filtered or unexported fields
}

func NewMetricsClient

func NewMetricsClient() (*MetricsClient, error)

func (*MetricsClient) GetPodMetrics

func (c *MetricsClient) GetPodMetrics(ctx context.Context, namespace, name string) (*metricsv1beta1.PodMetrics, error)

func (*MetricsClient) GetPodMetricsSnapshot

func (c *MetricsClient) GetPodMetricsSnapshot(ctx context.Context, namespace, name string) (*MetricsSnapshot, error)

func (*MetricsClient) IsAvailable

func (c *MetricsClient) IsAvailable(ctx context.Context) bool

type MetricsSnapshot

type MetricsSnapshot struct {
	CPUMillicores int64
	MemoryBytes   int64
}

type PodDefault

type PodDefault struct {
	Name               string
	Namespace          string
	Desc               string
	Selector           *metav1.LabelSelector
	Env                []PodDefaultEnvVar
	VolumeMounts       []PodDefaultVolumeMount
	Volumes            []map[string]interface{}
	ServiceAccountName string
	Annotations        map[string]string
	Labels             map[string]string
}

PodDefault represents a parsed PodDefault CR.

type PodDefaultClient

type PodDefaultClient struct {
	// contains filtered or unexported fields
}

PodDefaultClient provides operations on PodDefault custom resources.

func NewPodDefaultClient

func NewPodDefaultClient() (*PodDefaultClient, error)

NewPodDefaultClient creates a new PodDefaultClient.

func (*PodDefaultClient) GetMatchingPodDefaults

func (c *PodDefaultClient) GetMatchingPodDefaults(ctx context.Context, namespace string, workspaceLabels map[string]string) ([]PodDefault, error)

GetMatchingPodDefaults returns PodDefaults in the given namespace whose selector matches the provided workspace labels. PodDefaults with no selector match all workspaces.

func (*PodDefaultClient) ListPodDefaults

func (c *PodDefaultClient) ListPodDefaults(ctx context.Context, namespace string) ([]PodDefault, error)

ListPodDefaults lists all PodDefault CRs in a namespace.

type PodDefaultEnvVar

type PodDefaultEnvVar struct {
	Name  string
	Value string
}

PodDefaultEnvVar is an environment variable to inject.

type PodDefaultVolumeMount

type PodDefaultVolumeMount struct {
	Name      string
	MountPath string
	ReadOnly  bool
}

PodDefaultVolumeMount is a volume mount to inject.

type SSHKeyClient added in v0.4.0

type SSHKeyClient struct {
	// contains filtered or unexported fields
}

SSHKeyClient provides operations on SshKey custom resources (users' SSH public keys stored in their personal namespace).

func NewSSHKeyClient added in v0.4.0

func NewSSHKeyClient() (*SSHKeyClient, error)

NewSSHKeyClient creates a new SSHKeyClient.

func (*SSHKeyClient) CreateSSHKey added in v0.4.0

CreateSSHKey creates a new SshKey CR.

func (*SSHKeyClient) DeleteSSHKey added in v0.4.0

func (c *SSHKeyClient) DeleteSSHKey(ctx context.Context, namespace, name string) error

DeleteSSHKey deletes an SshKey CR.

func (*SSHKeyClient) GetSSHKey added in v0.4.0

func (c *SSHKeyClient) GetSSHKey(ctx context.Context, namespace, name string) (*unstructured.Unstructured, error)

GetSSHKey gets an SshKey CR by name.

func (*SSHKeyClient) ListSSHKeys added in v0.4.0

func (c *SSHKeyClient) ListSSHKeys(ctx context.Context, namespace string) (*unstructured.UnstructuredList, error)

ListSSHKeys lists all SshKey CRs in a namespace.

type VMConsoleAvailability added in v0.11.0

type VMConsoleAvailability struct {
	Available        bool `json:"available"`
	DisplayAvailable bool `json:"displayAvailable"`
}

VMConsoleAvailability describes launched console devices, independently of Workspace readiness or guest provisioning. It does not reserve either seat.

type VMGPUProfile added in v0.11.0

type VMGPUProfile struct {
	ID                 string            `json:"id"`
	DisplayName        string            `json:"displayName"`
	ResourceName       string            `json:"resourceName"`
	Kind               string            `json:"kind"`
	Count              int32             `json:"count"`
	NodeSelector       map[string]string `json:"nodeSelector"`
	GuestDriverVersion string            `json:"guestDriverVersion"`
	Experimental       bool              `json:"experimental"`
}

VMGPUProfile mirrors the controller's operator contract without scheme imports. This is requested configuration, not observed guest driver/encoder readiness.

func (*VMGPUProfile) Validate added in v0.11.0

func (p *VMGPUProfile) Validate() error

type WorkspaceClient

type WorkspaceClient struct {
	// contains filtered or unexported fields
}

WorkspaceClient provides operations on Workspace custom resources.

func NewWorkspaceClient

func NewWorkspaceClient() (*WorkspaceClient, error)

NewWorkspaceClient creates a new WorkspaceClient.

func NewWorkspaceClientFor added in v0.6.0

func NewWorkspaceClientFor(dynamic dynamic.Interface) *WorkspaceClient

NewWorkspaceClientFor wraps an injected dynamic client, for tests and embedded use.

func (*WorkspaceClient) CreateWorkspace

func (c *WorkspaceClient) CreateWorkspace(ctx context.Context, workspace *unstructured.Unstructured) (*unstructured.Unstructured, error)

CreateWorkspace creates a new workspace CR.

func (*WorkspaceClient) DeleteWorkspace

func (c *WorkspaceClient) DeleteWorkspace(ctx context.Context, namespace, name string) error

DeleteWorkspace deletes a workspace CR.

func (*WorkspaceClient) GetInitialCredentialSecret added in v0.7.0

func (c *WorkspaceClient) GetInitialCredentialSecret(ctx context.Context, namespace, name string) (*corev1.Secret, error)

func (*WorkspaceClient) GetWorkspace

func (c *WorkspaceClient) GetWorkspace(ctx context.Context, namespace, name string) (*unstructured.Unstructured, error)

GetWorkspace gets a workspace CR by name.

func (*WorkspaceClient) ListWorkspaces

func (c *WorkspaceClient) ListWorkspaces(ctx context.Context, namespace string) (*unstructured.UnstructuredList, error)

ListWorkspaces lists all workspace CRs in a namespace.

func (*WorkspaceClient) RequireStoppedWindowsVM added in v0.11.0

func (c *WorkspaceClient) RequireStoppedWindowsVM(ctx context.Context, workspace *unstructured.Unstructured) error

func (*WorkspaceClient) ResolveVMGPUProfile added in v0.11.0

func (c *WorkspaceClient) ResolveVMGPUProfile(ctx context.Context, id string, selector map[string]string) (*VMGPUProfile, error)

func (*WorkspaceClient) UpdateWorkspace

func (c *WorkspaceClient) UpdateWorkspace(ctx context.Context, workspace *unstructured.Unstructured) (*unstructured.Unstructured, error)

UpdateWorkspace updates an existing workspace CR.

func (*WorkspaceClient) VMConsoleAvailability added in v0.11.0

func (c *WorkspaceClient) VMConsoleAvailability(ctx context.Context, namespace, name string) (VMConsoleAvailability, error)

func (*WorkspaceClient) VMGPUProfiles added in v0.11.0

func (c *WorkspaceClient) VMGPUProfiles(ctx context.Context) ([]VMGPUProfile, error)

func (*WorkspaceClient) WatchWorkspaces added in v0.6.0

func (c *WorkspaceClient) WatchWorkspaces(ctx context.Context, namespace string, opts metav1.ListOptions) (watch.Interface, error)

WatchWorkspaces opens a change stream over workspace CRs in a namespace. An empty namespace watches all namespaces (the `?namespace=_all` case). The caller must Stop the returned watcher; it also ends with ctx.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL