@@ -9,14 +9,13 @@ import (
99 "io/fs"
1010
1111 "github.com/openmfp/crd-gql-gateway/listener/apischema"
12+ "github.com/openmfp/crd-gql-gateway/listener/clusterpath"
1213 "github.com/openmfp/crd-gql-gateway/listener/discoveryclient"
1314 "github.com/openmfp/crd-gql-gateway/listener/workspacefile"
1415
1516 kcpapis "github.com/kcp-dev/kcp/sdk/apis/apis/v1alpha1"
16- kcptenancy "github.com/kcp-dev/kcp/sdk/apis/tenancy/v1alpha1"
1717
1818 ctrl "sigs.k8s.io/controller-runtime"
19- "sigs.k8s.io/controller-runtime/pkg/handler"
2019 "sigs.k8s.io/controller-runtime/pkg/log"
2120)
2221
@@ -25,47 +24,56 @@ type APIBindingReconciler struct {
2524 io workspacefile.IOHandler
2625 df discoveryclient.Factory
2726 sc apischema.Resolver
27+ pr * clusterpath.Resolver
2828}
2929
3030func NewAPIBindingReconciler (
3131 io workspacefile.IOHandler ,
3232 df discoveryclient.Factory ,
3333 sc apischema.Resolver ,
34+ pr * clusterpath.Resolver ,
3435) * APIBindingReconciler {
3536 return & APIBindingReconciler {
3637 io : io ,
3738 df : df ,
3839 sc : sc ,
40+ pr : pr ,
3941 }
4042}
4143
4244// +kubebuilder:rbac:groups=apis.kcp.io,resources=apibindings,verbs=get;list;watch
4345// +kubebuilder:rbac:groups=apis.kcp.io,resources=apibindings/status,verbs=get
44- // +kubebuilder:rbac:groups=tenancy.kcp.io,resources=workspaces,verbs=get;list;watch
45- // +kubebuilder:rbac:groups=tenancy.kcp.io,resources=workspaces/status,verbs=get
4646func (r * APIBindingReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
4747
48+ // ignore system workspaces (e.g. system:shard)
4849 if strings .HasPrefix (req .ClusterName , "system" ) {
4950 return ctrl.Result {}, nil
5051 }
5152
52- logger := log .FromContext (ctx ).WithValues ("cluster" , req .ClusterName )
53+ logger := log .FromContext (ctx )
54+ clusterPath , err := r .pr .ResolverFunc (req .ClusterName , r .pr .Config , r .pr .Scheme )
55+ if err != nil {
56+ logger .Error (err , "failed to get cluster path" , "cluster" , req .ClusterName )
57+ return ctrl.Result {}, err
58+ }
59+
60+ logger = logger .WithValues ("cluster" , clusterPath )
5361 logger .Info ("starting reconciliation..." )
5462
55- dc , err := r .df .ClientForCluster (req . ClusterName )
63+ dc , err := r .df .ClientForCluster (clusterPath )
5664 if err != nil {
5765 logger .Error (err , "failed to create discovery client for cluster" )
5866 return ctrl.Result {}, err
5967 }
6068
61- savedJSON , err := r .io .Read (req . ClusterName )
69+ savedJSON , err := r .io .Read (clusterPath )
6270 if errors .Is (err , fs .ErrNotExist ) {
6371 actualJSON , err1 := r .sc .Resolve (dc )
6472 if err1 != nil {
6573 logger .Error (err1 , "failed to resolve server JSON schema" )
6674 return ctrl.Result {}, err1
6775 }
68- if err = r .io .Write (actualJSON , req . ClusterName ); err != nil {
76+ if err : = r .io .Write (actualJSON , clusterPath ); err != nil {
6977 logger .Error (err , "failed to write JSON to filesystem" )
7078 return ctrl.Result {}, err
7179 }
@@ -83,8 +91,7 @@ func (r *APIBindingReconciler) Reconcile(ctx context.Context, req ctrl.Request)
8391 return ctrl.Result {}, err
8492 }
8593 if ! bytes .Equal (actualJSON , savedJSON ) {
86- err = r .io .Write (actualJSON , req .ClusterName )
87- if err != nil {
94+ if err := r .io .Write (actualJSON , clusterPath ); err != nil {
8895 logger .Error (err , "failed to write JSON to filesystem" )
8996 return ctrl.Result {}, err
9097 }
@@ -97,8 +104,6 @@ func (r *APIBindingReconciler) Reconcile(ctx context.Context, req ctrl.Request)
97104func (r * APIBindingReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
98105 return ctrl .NewControllerManagedBy (mgr ).
99106 For (& kcpapis.APIBinding {}).
100- Watches (& kcptenancy.Workspace {},
101- handler .EnqueueRequestsFromMapFunc (clusterNameFromWorkspace )).
102107 Named ("apibinding" ).
103108 Complete (r )
104109}
0 commit comments