Skip to content

Commit e555bef

Browse files
committed
make intiator and terminator workspace URLs distinguishable
Signed-off-by: olalekan odukoya <[email protected]>
1 parent ed46a47 commit e555bef

File tree

8 files changed

+119
-23
lines changed

8 files changed

+119
-23
lines changed

config/crds/tenancy.kcp.io_workspacetypes.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,14 @@ spec:
316316
URLs.
317317
items:
318318
properties:
319+
type:
320+
description: |-
321+
type indicates whether this virtual workspace URL is for initializing
322+
or terminating workspaces.
323+
enum:
324+
- initializing
325+
- terminating
326+
type: string
319327
url:
320328
description: url is a WorkspaceType initialization virtual workspace
321329
URL.

config/root-phase0/apiexport-tenancy.kcp.io.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ spec:
1919
crd: {}
2020
- group: tenancy.kcp.io
2121
name: workspacetypes
22-
schema: v251015-1d163d0e5.workspacetypes.tenancy.kcp.io
22+
schema: v251108-ed46a476c.workspacetypes.tenancy.kcp.io
2323
storage:
2424
crd: {}
2525
status: {}

config/root-phase0/apiresourceschema-workspacetypes.tenancy.kcp.io.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: apis.kcp.io/v1alpha1
22
kind: APIResourceSchema
33
metadata:
44
creationTimestamp: null
5-
name: v251015-1d163d0e5.workspacetypes.tenancy.kcp.io
5+
name: v251108-ed46a476c.workspacetypes.tenancy.kcp.io
66
spec:
77
group: tenancy.kcp.io
88
names:
@@ -313,6 +313,14 @@ spec:
313313
URLs.
314314
items:
315315
properties:
316+
type:
317+
description: |-
318+
type indicates whether this virtual workspace URL is for initializing
319+
or terminating workspaces.
320+
enum:
321+
- initializing
322+
- terminating
323+
type: string
316324
url:
317325
description: url is a WorkspaceType initialization virtual workspace
318326
URL.

pkg/openapi/zz_generated.openapi.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/reconciler/tenancy/workspacetype/workspacetype_controller_reconcile.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"net/url"
2323
"path"
2424

25-
"k8s.io/apimachinery/pkg/util/sets"
2625
"k8s.io/klog/v2"
2726

2827
"github.com/kcp-dev/sdk/apis/tenancy/initialization"
@@ -63,7 +62,7 @@ func (c *controller) updateVirtualWorkspaceURLs(ctx context.Context, wt *tenancy
6362
return fmt.Errorf("error listing Shards: %w", err)
6463
}
6564

66-
desiredURLs := sets.New[string]()
65+
desiredURLs := make(map[string]tenancyv1alpha1.VirtualWorkspaceType)
6766
for _, shard := range shards {
6867
if shard.Spec.VirtualWorkspaceURL == "" {
6968
continue
@@ -85,24 +84,25 @@ func (c *controller) updateVirtualWorkspaceURLs(ctx context.Context, wt *tenancy
8584
string(initialization.InitializerForType(wt)),
8685
)
8786

88-
desiredURLs.Insert(u.String())
87+
desiredURLs[u.String()] = tenancyv1alpha1.VirtualWorkspaceTypeInitializing
8988

90-
// add finalizing workspace URLs
89+
// add terminating workspace URLs
9190
u.Path = path.Join(
9291
base,
9392
virtualworkspacesoptions.DefaultRootPathPrefix,
9493
terminatingworkspaces.VirtualWorkspaceName,
9594
string(termination.TerminatorForType(wt)),
9695
)
9796

98-
desiredURLs.Insert(u.String())
97+
desiredURLs[u.String()] = tenancyv1alpha1.VirtualWorkspaceTypeTerminating
9998
}
10099

101100
wt.Status.VirtualWorkspaces = nil
102101

103-
for _, u := range sets.List(desiredURLs) {
102+
for url, typ := range desiredURLs {
104103
wt.Status.VirtualWorkspaces = append(wt.Status.VirtualWorkspaces, tenancyv1alpha1.VirtualWorkspace{
105-
URL: u,
104+
URL: url,
105+
Type: typ,
106106
})
107107
}
108108

pkg/reconciler/tenancy/workspacetype/workspacetype_controller_reconcile_test.go

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,30 @@ func TestReconcile(t *testing.T) {
137137
},
138138
Status: tenancyv1alpha1.WorkspaceTypeStatus{
139139
VirtualWorkspaces: []tenancyv1alpha1.VirtualWorkspace{
140-
{URL: "https://item.com/services/initializingworkspaces/root:org:team:ws:sometype"},
141-
{URL: "https://item.com/services/terminatingworkspaces/root:org:team:ws:sometype"},
142-
{URL: "https://something.com/services/initializingworkspaces/root:org:team:ws:sometype"},
143-
{URL: "https://something.com/services/terminatingworkspaces/root:org:team:ws:sometype"},
144-
{URL: "https://whatever.com/services/initializingworkspaces/root:org:team:ws:sometype"},
145-
{URL: "https://whatever.com/services/terminatingworkspaces/root:org:team:ws:sometype"},
140+
{
141+
URL: "https://item.com/services/initializingworkspaces/root:org:team:ws:sometype",
142+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
143+
},
144+
{
145+
URL: "https://item.com/services/terminatingworkspaces/root:org:team:ws:sometype",
146+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
147+
},
148+
{
149+
URL: "https://something.com/services/initializingworkspaces/root:org:team:ws:sometype",
150+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
151+
},
152+
{
153+
URL: "https://something.com/services/terminatingworkspaces/root:org:team:ws:sometype",
154+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
155+
},
156+
{
157+
URL: "https://whatever.com/services/initializingworkspaces/root:org:team:ws:sometype",
158+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
159+
},
160+
{
161+
URL: "https://whatever.com/services/terminatingworkspaces/root:org:team:ws:sometype",
162+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
163+
},
146164
},
147165
Conditions: conditionsv1alpha1.Conditions{
148166
{
@@ -173,7 +191,10 @@ func TestReconcile(t *testing.T) {
173191
},
174192
Status: tenancyv1alpha1.WorkspaceTypeStatus{
175193
VirtualWorkspaces: []tenancyv1alpha1.VirtualWorkspace{
176-
{URL: "https://item.com/services/initializingworkspaces/root:org:team:ws:sometype"},
194+
{
195+
URL: "https://item.com/services/initializingworkspaces/root:org:team:ws:sometype",
196+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
197+
},
177198
},
178199
Conditions: conditionsv1alpha1.Conditions{
179200
{
@@ -196,12 +217,34 @@ func TestReconcile(t *testing.T) {
196217
},
197218
Status: tenancyv1alpha1.WorkspaceTypeStatus{
198219
VirtualWorkspaces: []tenancyv1alpha1.VirtualWorkspace{
199-
{URL: "https://item.com/services/initializingworkspaces/root:org:team:ws:sometype"},
200-
{URL: "https://item.com/services/terminatingworkspaces/root:org:team:ws:sometype"},
201-
{URL: "https://something.com/services/initializingworkspaces/root:org:team:ws:sometype"},
202-
{URL: "https://something.com/services/terminatingworkspaces/root:org:team:ws:sometype"},
203-
{URL: "https://whatever.com/services/initializingworkspaces/root:org:team:ws:sometype"},
204-
{URL: "https://whatever.com/services/terminatingworkspaces/root:org:team:ws:sometype"},
220+
{
221+
URL: "https://item.com/services/initializingworkspaces/root:org:team:ws:sometype",
222+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
223+
},
224+
{
225+
URL: "https://item.com/services/terminatingworkspaces/root:org:team:ws:sometype",
226+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
227+
},
228+
{
229+
URL: "https://item.com/services/terminatingworkspaces/root:org:team:ws:sometype",
230+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
231+
},
232+
{
233+
URL: "https://something.com/services/initializingworkspaces/root:org:team:ws:sometype",
234+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
235+
},
236+
{
237+
URL: "https://something.com/services/terminatingworkspaces/root:org:team:ws:sometype",
238+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
239+
},
240+
{
241+
URL: "https://whatever.com/services/initializingworkspaces/root:org:team:ws:sometype",
242+
Type: tenancyv1alpha1.VirtualWorkspaceTypeInitializing,
243+
},
244+
{
245+
URL: "https://whatever.com/services/terminatingworkspaces/root:org:team:ws:sometype",
246+
Type: tenancyv1alpha1.VirtualWorkspaceTypeTerminating,
247+
},
205248
},
206249
Conditions: conditionsv1alpha1.Conditions{
207250
{

staging/src/github.com/kcp-dev/sdk/apis/tenancy/v1alpha1/types_workspacetype.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,25 @@ type VirtualWorkspace struct {
244244
// +kubebuilder:format:URL
245245
// +required
246246
URL string `json:"url"`
247+
248+
// type indicates whether this virtual workspace URL is for initializing
249+
// or terminating workspaces.
250+
//
251+
// +optional
252+
// +kubebuilder:validation:Enum=initializing;terminating
253+
Type VirtualWorkspaceType `json:"type,omitempty"`
247254
}
248255

256+
// VirtualWorkspaceType indicates the type of virtual workspace.
257+
type VirtualWorkspaceType string
258+
259+
const (
260+
// VirtualWorkspaceTypeInitializing indicates this is an initializing workspace URL.
261+
VirtualWorkspaceTypeInitializing VirtualWorkspaceType = "initializing"
262+
// VirtualWorkspaceTypeTerminating indicates this is a terminating workspace URL.
263+
VirtualWorkspaceTypeTerminating VirtualWorkspaceType = "terminating"
264+
)
265+
249266
func (in *WorkspaceType) GetConditions() conditionsv1alpha1.Conditions {
250267
return in.Status.Conditions
251268
}

staging/src/github.com/kcp-dev/sdk/client/applyconfiguration/tenancy/v1alpha1/virtualworkspace.go

Lines changed: 14 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)