Skip to content

Commit 12ffec9

Browse files
committed
Add metadata to ClusterBinding for better UX/UI
Signed-off-by: Mangirdas Judeikis <mangirdas@judeikis.lt> On-behalf-of: @SAP mangirdas.judeikis@sap.com
1 parent 3080410 commit 12ffec9

11 files changed

Lines changed: 62 additions & 16 deletions

File tree

backend/controllers/bindableresourcesrequest/bindableresourcesrequest_controller.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,14 @@ func (r *reconciler) reconcile(ctx context.Context, clusterName string, cl clien
250250
}
251251
}
252252

253+
// Default the pretty name to the request name if not provided.
254+
clusterPrettyName := req.Spec.ClusterIdentity.PrettyName
255+
if clusterPrettyName == "" {
256+
clusterPrettyName = req.Name
257+
}
258+
253259
// Handle resources and get kubeconfig
254-
result, err := r.kubeManager.HandleResources(ctx, req.Spec.Author, req.Spec.ClusterIdentity.Identity, clusterName)
260+
result, err := r.kubeManager.HandleResources(ctx, req.Spec.Author, req.Spec.ClusterIdentity.Identity, clusterName, clusterPrettyName)
255261
if err != nil {
256262
meta.SetStatusCondition(&req.Status.Conditions, metav1.Condition{
257263
Type: string(kubebindv1alpha2.BindableResourcesRequestConditionReady),

backend/http/handler.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,12 @@ func (h *handler) handleBind(w http.ResponseWriter, r *http.Request) {
433433
consumerID = identity
434434
}
435435

436-
handleResult, err := h.kubeManager.HandleResources(r.Context(), state.Token.Subject, consumerID, params.ClusterID)
436+
clusterPrettyName := bindRequest.Spec.ClusterIdentity.PrettyName
437+
if clusterPrettyName == "" {
438+
clusterPrettyName = bindRequest.Name
439+
}
440+
441+
handleResult, err := h.kubeManager.HandleResources(r.Context(), state.Token.Subject, consumerID, params.ClusterID, clusterPrettyName)
437442
if err != nil {
438443
logger.Error(err, "failed to handle resources")
439444
statusCode, code, details := mapErrorToCode(err)
@@ -599,7 +604,7 @@ func (h *handler) handleApplyBinding(w http.ResponseWriter, r *http.Request) {
599604
}
600605

601606
// Get the provider kubeconfig for this user's namespace
602-
handleResult, err := h.kubeManager.HandleResources(r.Context(), state.Token.Subject, identity, params.ClusterID)
607+
handleResult, err := h.kubeManager.HandleResources(r.Context(), state.Token.Subject, identity, params.ClusterID, req.BindingName)
603608
if err != nil {
604609
logger.Error(err, "failed to handle resources for apply-binding")
605610
statusCode, code, details := mapErrorToCode(err)

backend/kubernetes/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ type HandleResourcesResult struct {
107107

108108
func (m *Manager) HandleResources(
109109
ctx context.Context,
110-
author, identity, cluster string,
110+
author, identity, cluster, clusterPrettyName string,
111111
) (*HandleResourcesResult, error) {
112112
logger := klog.FromContext(ctx).WithValues("identity", identity)
113113
ctx = klog.NewContext(ctx, logger)
@@ -148,7 +148,7 @@ func (m *Manager) HandleResources(
148148
err = c.Get(ctx, types.NamespacedName{Namespace: ns, Name: kuberesources.ClusterBindingName}, &cb)
149149
switch {
150150
case errors.IsNotFound(err):
151-
if err := kuberesources.CreateClusterBinding(ctx, c, ns, "kubeconfig", m.providerPrettyName); err != nil {
151+
if err := kuberesources.CreateClusterBinding(ctx, c, ns, "kubeconfig", m.providerPrettyName, identity, author, clusterPrettyName); err != nil {
152152
return nil, err
153153
}
154154
case err != nil:

backend/kubernetes/resources/cluster_binding.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,25 @@ import (
2626
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
2727
)
2828

29-
func CreateClusterBinding(ctx context.Context, client client.Client, ns, secretName, providerPrettyName string) error {
29+
func CreateClusterBinding(ctx context.Context, client client.Client, ns, secretName, providerPrettyName, identity, author, clusterPrettyName string) error {
3030
logger := klog.FromContext(ctx)
3131

32+
annotations := map[string]string{}
33+
if identity != "" {
34+
annotations[IdentityAnnotationKey] = identity
35+
}
36+
if author != "" {
37+
annotations[AuthorAnnotationKey] = author
38+
}
39+
if clusterPrettyName != "" {
40+
annotations[PrettyNameAnnotationKey] = clusterPrettyName
41+
}
42+
3243
clusterBinding := &kubebindv1alpha2.ClusterBinding{
3344
ObjectMeta: metav1.ObjectMeta{
34-
Name: ClusterBindingName,
35-
Namespace: ns,
45+
Name: ClusterBindingName,
46+
Namespace: ns,
47+
Annotations: annotations,
3648
},
3749
Spec: kubebindv1alpha2.ClusterBindingSpec{
3850
ProviderPrettyName: providerPrettyName,

backend/kubernetes/resources/namespace.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
const (
3434
IdentityAnnotationKey = "backend.kube-bind.io/identity"
3535
AuthorAnnotationKey = "backend.kube-bind.io/author"
36+
PrettyNameAnnotationKey = "backend.kube-bind.io/cluster-pretty-name"
3637
legacyIdentityAnnotationKey = "example-backend.kube-bind.io/identity"
3738
)
3839

backend/options/options.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,15 @@ func (options *Options) AddFlags(fs *pflag.FlagSet) {
203203
}
204204

205205
func (options *Options) Complete() (*CompletedOptions, error) {
206-
if !options.FrontendDisabled {
207-
// Serve must complete first as OIDC may depend on it
208-
// to reuse the listener.
209-
if err := options.Serve.Complete(); err != nil {
210-
return nil, err
211-
}
206+
// Serve must complete first as OIDC may depend on it
207+
// to reuse the listener. The web server is always started
208+
// (at minimum for the healthz endpoint), so the listener
209+
// is required even when the frontend is disabled.
210+
if err := options.Serve.Complete(); err != nil {
211+
return nil, err
212+
}
212213

214+
if !options.FrontendDisabled {
213215
if err := options.OIDC.Complete(options.Serve.Listener); err != nil {
214216
return nil, err
215217
}

contrib/kcp/deploy/resources/apiexport-kube-bind.io.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ spec:
8686
crd: {}
8787
- group: kube-bind.io
8888
name: bindableresourcesrequests
89-
schema: v260225-974c2a97.bindableresourcesrequests.kube-bind.io
89+
schema: v260507-3080410e.bindableresourcesrequests.kube-bind.io
9090
storage:
9191
crd: {}
9292
- group: kube-bind.io

contrib/kcp/deploy/resources/apiresourceschema-bindableresourcesrequests.kube-bind.io.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: apis.kcp.io/v1alpha1
22
kind: APIResourceSchema
33
metadata:
4-
name: v260225-974c2a97.bindableresourcesrequests.kube-bind.io
4+
name: v260507-3080410e.bindableresourcesrequests.kube-bind.io
55
spec:
66
group: kube-bind.io
77
names:
@@ -67,6 +67,11 @@ spec:
6767
identity:
6868
description: Identity is the unique identifier of the cluster.
6969
type: string
70+
prettyName:
71+
description: |-
72+
PrettyName is a human-readable name for the cluster, used for display
73+
purposes. If not provided, the controller defaults it to the request name.
74+
type: string
7075
type: object
7176
kubeconfigSecretRef:
7277
description: |-

deploy/charts/backend/crds/kube-bind.io_bindableresourcesrequests.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ spec:
7171
identity:
7272
description: Identity is the unique identifier of the cluster.
7373
type: string
74+
prettyName:
75+
description: |-
76+
PrettyName is a human-readable name for the cluster, used for display
77+
purposes. If not provided, the controller defaults it to the request name.
78+
type: string
7479
type: object
7580
kubeconfigSecretRef:
7681
description: |-

deploy/crd/kube-bind.io_bindableresourcesrequests.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ spec:
7171
identity:
7272
description: Identity is the unique identifier of the cluster.
7373
type: string
74+
prettyName:
75+
description: |-
76+
PrettyName is a human-readable name for the cluster, used for display
77+
purposes. If not provided, the controller defaults it to the request name.
78+
type: string
7479
type: object
7580
kubeconfigSecretRef:
7681
description: |-

0 commit comments

Comments
 (0)