Skip to content

Commit

Permalink
POC mounts promotion
Browse files Browse the repository at this point in the history
  • Loading branch information
mjudeikis committed Feb 2, 2025
1 parent 4c2d106 commit 61766c5
Show file tree
Hide file tree
Showing 18 changed files with 356 additions and 35 deletions.
51 changes: 51 additions & 0 deletions config/crds/tenancy.kcp.io_workspaces.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,55 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: object
mount:
description: |-
Mount is a reference to a mount that is used to mount the workspace.
If specified, logicalcluster will not be created and the workspace will be mounted
using reference mount object.
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: |-
If referring to a piece of an object instead of an entire object, this string
should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within a pod, this would take on a value like:
"spec.containers{name}" (where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]" (container with
index 2 in this pod). This syntax is chosen only to have some well-defined way of
referencing a part of an object.
type: string
kind:
description: |-
Kind of the referent.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
name:
description: |-
Name of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
type: string
namespace:
description: |-
Namespace of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
type: string
resourceVersion:
description: |-
Specific resourceVersion to which this reference is made, if any.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
type: string
uid:
description: |-
UID of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
type: string
type: object
x-kubernetes-map-type: atomic
x-kubernetes-validations:
- message: mount is immutable
rule: self == oldSelf
type:
description: |-
type defines properties of the workspace both on creation (e.g. initial
Expand Down Expand Up @@ -184,6 +233,8 @@ spec:
rule: '!has(oldSelf.URL) || has(self.URL)'
- message: cluster cannot be unset
rule: '!has(oldSelf.cluster) || has(self.cluster)'
- message: spec.mount and spec.type cannot both be set
rule: '!(has(self.mount) && has(self.type))'
status:
default: {}
description: WorkspaceStatus communicates the observed state of the Workspace.
Expand Down
2 changes: 1 addition & 1 deletion config/root-phase0/apiexport-tenancy.kcp.io.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ metadata:
spec:
latestResourceSchemas:
- v240903-d6797056a.workspacetypes.tenancy.kcp.io
- v241020-fce06d31d.workspaces.tenancy.kcp.io
- v250202-4c2d1061d.workspaces.tenancy.kcp.io
maximalPermissionPolicy:
local: {}
status: {}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: apis.kcp.io/v1alpha1
kind: APIResourceSchema
metadata:
creationTimestamp: null
name: v241020-fce06d31d.workspaces.tenancy.kcp.io
name: v250202-4c2d1061d.workspaces.tenancy.kcp.io
spec:
group: tenancy.kcp.io
names:
Expand Down Expand Up @@ -145,6 +145,55 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: object
mount:
description: |-
Mount is a reference to a mount that is used to mount the workspace.
If specified, logicalcluster will not be created and the workspace will be mounted
using reference mount object.
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: |-
If referring to a piece of an object instead of an entire object, this string
should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within a pod, this would take on a value like:
"spec.containers{name}" (where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]" (container with
index 2 in this pod). This syntax is chosen only to have some well-defined way of
referencing a part of an object.
type: string
kind:
description: |-
Kind of the referent.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
name:
description: |-
Name of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
type: string
namespace:
description: |-
Namespace of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
type: string
resourceVersion:
description: |-
Specific resourceVersion to which this reference is made, if any.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
type: string
uid:
description: |-
UID of the referent.
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
type: string
type: object
x-kubernetes-map-type: atomic
x-kubernetes-validations:
- message: mount is immutable
rule: self == oldSelf
type:
description: |-
type defines properties of the workspace both on creation (e.g. initial
Expand Down Expand Up @@ -182,6 +231,8 @@ spec:
rule: '!has(oldSelf.URL) || has(self.URL)'
- message: cluster cannot be unset
rule: '!has(oldSelf.cluster) || has(self.cluster)'
- message: spec.mount and spec.type cannot both be set
rule: '!(has(self.mount) && has(self.type))'
status:
default: {}
description: WorkspaceStatus communicates the observed state of the Workspace.
Expand Down
144 changes: 144 additions & 0 deletions mounts/crd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.1
name: kubeclusters.contrib.kcp.io
spec:
group: contrib.kcp.io
names:
kind: KubeCluster
listKind: KubeClusterList
plural: kubeclusters
singular: kubecluster
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=="KubeClusterReady")].status
name: Ready
type: string
- jsonPath: .status.phase
name: Phase
type: string
name: v1alpha1
schema:
openAPIV3Schema:
description: KubeCluster describes the current KubeCluster proxy object.
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: KubeClusterSpec is the specification of the Kube cluster
proxy resource.
properties:
workspaceURL:
description: workspaceURL is the address under which the workspace
can be found.
type: string
type: object
status:
description: KubeClusterStatus communicates the observed state of the
Kube cluster proxy.
properties:
URL:
description: |-
url is the address under which the Kubernetes-cluster-like endpoint
can be found. This URL can be used to access the cluster with standard Kubernetes
client libraries and command line tools via proxy.
type: string
conditions:
description: Current processing state of the Cluster proxy.
items:
description: Condition defines an observation of a object operational
state.
properties:
lastTransitionTime:
description: |-
Last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when
the API field changed is acceptable.
format: date-time
type: string
message:
description: |-
A human readable message indicating details about the transition.
This field may be empty.
type: string
reason:
description: |-
The reason for the condition's last transition in CamelCase.
The specific API may choose whether or not this field is considered a guaranteed API.
This field may not be empty.
type: string
severity:
description: |-
Severity provides an explicit classification of Reason code, so the users or machines can immediately
understand the current situation and act accordingly.
The Severity field MUST be set only when Status=False.
type: string
status:
description: Status of the condition, one of True, False, Unknown.
type: string
type:
description: |-
Type of condition in CamelCase or in foo.example.com/CamelCase.
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
can be useful (see .node.status.conditions), the ability to deconflict is important.
type: string
required:
- lastTransitionTime
- status
- type
type: object
type: array
lastProxyHeartbeatTime:
description: A timestamp indicating when the proxy last reported status.
format: date-time
type: string
phase:
default: Initializing
description: Phase of the cluster proxy (Initializing, Ready).
enum:
- Initializing
- Connecting
- Ready
- Unknown
type: string
tunnelWorkspaces:
description: |-
TunnelWorkspaces contains all URLs (one per shard) that is being used
by the proxy to connect to the tunnel for a given shard.
items:
properties:
url:
description: |-
url is the URL the Proxy should use to connect
to the Proxy tunnel for a given shard.
minLength: 1
type: string
required:
- url
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}
6 changes: 6 additions & 0 deletions mounts/mount.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
apiVersion: contrib.kcp.io/v1alpha1
kind: KubeCluster
metadata:
name: proxy-cluster
spec:
9 changes: 9 additions & 0 deletions mounts/ws.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: tenancy.kcp.io/v1alpha1
kind: Workspace
metadata:
name: mount
spec:
mount:
name: proxy-cluster
kind: KubeCluster
apiVersion: contrib.kcp.io/v1alpha1
Loading

0 comments on commit 61766c5

Please sign in to comment.