Skip to content

Commit a8be41d

Browse files
committed
feat(identity): register status.userUID as valid field selector
Add field label conversion functions for UserIdentity and Session resources to enable status.userUID as a supported field selector. This allows the API server to validate field selector queries before passing them to the backend provider. Changes: - Add UserIdentityFieldLabelConversionFunc for UserIdentity resources - Add SessionFieldLabelConversionFunc for Session resources - Register both conversion functions in addKnownTypes - Support field selectors: metadata.name, metadata.namespace, status.userUID This fixes the error: "status.userUID" is not a known field selector: only "metadata.name", "metadata.namespace" Now staff users can successfully query: kubectl get useridentities --field-selector=status.userUID=<user-id> Related: PR feedback on field selector validation
1 parent bdb3aae commit a8be41d

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

pkg/apis/identity/v1alpha1/register.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package v1alpha1
22

33
import (
4+
"fmt"
5+
46
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
57
"k8s.io/apimachinery/pkg/runtime"
68
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -35,5 +37,60 @@ func addKnownTypes(scheme *runtime.Scheme) error {
3537
&UserIdentityList{},
3638
)
3739
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
40+
41+
// Register field label conversions for UserIdentity
42+
// This enables field selectors like status.userUID=<user-id> for staff users
43+
userIdentityGVK := SchemeGroupVersion.WithKind("UserIdentity")
44+
if err := scheme.AddFieldLabelConversionFunc(userIdentityGVK,
45+
UserIdentityFieldLabelConversionFunc); err != nil {
46+
return err
47+
}
48+
49+
// Register field label conversions for Session
50+
// This enables field selectors like status.userUID=<user-id> for staff users
51+
sessionGVK := SchemeGroupVersion.WithKind("Session")
52+
if err := scheme.AddFieldLabelConversionFunc(sessionGVK,
53+
SessionFieldLabelConversionFunc); err != nil {
54+
return err
55+
}
56+
3857
return nil
3958
}
59+
60+
// UserIdentityFieldLabelConversionFunc converts field selectors for UserIdentity resources.
61+
// This allows staff users to filter user identities by fields beyond the default metadata.name.
62+
func UserIdentityFieldLabelConversionFunc(label, value string) (string, string, error) {
63+
switch label {
64+
// Metadata fields (default Kubernetes fields)
65+
case "metadata.name",
66+
"metadata.namespace":
67+
return label, value, nil
68+
69+
// Status fields (custom field selector for staff users)
70+
case "status.userUID":
71+
return label, value, nil
72+
73+
default:
74+
return "", "", fmt.Errorf("%q is not a known field selector: only %q are supported",
75+
label, []string{"metadata.name", "metadata.namespace", "status.userUID"})
76+
}
77+
}
78+
79+
// SessionFieldLabelConversionFunc converts field selectors for Session resources.
80+
// This allows staff users to filter sessions by fields beyond the default metadata.name.
81+
func SessionFieldLabelConversionFunc(label, value string) (string, string, error) {
82+
switch label {
83+
// Metadata fields (default Kubernetes fields)
84+
case "metadata.name",
85+
"metadata.namespace":
86+
return label, value, nil
87+
88+
// Status fields (custom field selector for staff users)
89+
case "status.userUID":
90+
return label, value, nil
91+
92+
default:
93+
return "", "", fmt.Errorf("%q is not a known field selector: only %q are supported",
94+
label, []string{"metadata.name", "metadata.namespace", "status.userUID"})
95+
}
96+
}

0 commit comments

Comments
 (0)