Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ install-gotestsum:

.PHONY: install-boilerplate
install-boilerplate:
@UGET_VERSIONED_BINARIES=false UNCOMPRESSED=true hack/uget.sh https://raw.githubusercontent.com/kubernetes/repo-infra/master/hack/verify_boilerplate.py verify_boilerplate.py $(BOILERPLATE_VERSION) verify_boilerplate.py
@UGET_VERSIONED_BINARIES=false UNCOMPRESSED=true hack/uget.sh https://raw.githubusercontent.com/kubernetes/repo-infra/{VERSION}/hack/verify_boilerplate.py verify_boilerplate.py $(BOILERPLATE_VERSION) verify_boilerplate.py

.PHONY: install-kcp
install-kcp:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func (r *BindableResourcesRequestReconciler) Reconcile(ctx context.Context, req
original := bindableRequest.DeepCopy()

// Run the reconciliation logic
result, err := r.reconciler.reconcile(ctx, req.ClusterName, client, bindableRequest)
result, err := r.reconciler.reconcile(ctx, string(req.ClusterName), client, bindableRequest)
if err != nil {
logger.Error(err, "Failed to reconcile BindableResourcesRequest")
if !reflect.DeepEqual(original.Status, bindableRequest.Status) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,13 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
crhandler "sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
mcbuilder "sigs.k8s.io/multicluster-runtime/pkg/builder"
mchandler "sigs.k8s.io/multicluster-runtime/pkg/handler"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"
mcreconcile "sigs.k8s.io/multicluster-runtime/pkg/reconcile"

kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
Expand Down Expand Up @@ -133,8 +135,8 @@ func (r *ClusterBindingReconciler) SetupWithManager(mgr mcmanager.Manager) error
Complete(r)
}

func mapAPIResourceSchema(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func mapAPIResourceSchema(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
serviceExport, ok := obj.(*kubebindv1alpha2.APIServiceExport)
if !ok {
return nil
Expand Down
8 changes: 5 additions & 3 deletions backend/controllers/serviceexport/serviceexport_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,13 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
crhandler "sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
mcbuilder "sigs.k8s.io/multicluster-runtime/pkg/builder"
mchandler "sigs.k8s.io/multicluster-runtime/pkg/handler"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"
mcreconcile "sigs.k8s.io/multicluster-runtime/pkg/reconcile"

"github.com/kube-bind/kube-bind/pkg/indexers"
Expand Down Expand Up @@ -144,8 +146,8 @@ func (r *APIServiceExportReconciler) Reconcile(ctx context.Context, req mcreconc
}

// getAPIResourceSchemaMapper returns a mapper function that uses the manager to find related APIServiceExports.
func getBoundSchemaMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getBoundSchemaMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
boundSchema := obj.(*kubebindv1alpha2.BoundSchema)
boundSchemaKey := boundSchema.Spec.Names.Plural + "." + boundSchema.Spec.Group
c := cl.GetClient()
Expand Down
8 changes: 5 additions & 3 deletions backend/controllers/serviceexportrbac/rbac_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
crhandler "sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
mcbuilder "sigs.k8s.io/multicluster-runtime/pkg/builder"
mchandler "sigs.k8s.io/multicluster-runtime/pkg/handler"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"
mcreconcile "sigs.k8s.io/multicluster-runtime/pkg/reconcile"

kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
Expand Down Expand Up @@ -186,8 +188,8 @@ func (r *APIServiceExportRBACReconciler) SetupWithManager(mgr mcmanager.Manager)
Complete(r)
}

func mapAPIServiceNamespace(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func mapAPIServiceNamespace(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
serviceNamespace, ok := obj.(*kubebindv1alpha2.APIServiceNamespace)
if !ok {
return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
crhandler "sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
mcbuilder "sigs.k8s.io/multicluster-runtime/pkg/builder"
mchandler "sigs.k8s.io/multicluster-runtime/pkg/handler"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"
mcreconcile "sigs.k8s.io/multicluster-runtime/pkg/reconcile"

"github.com/kube-bind/kube-bind/pkg/indexers"
Expand Down Expand Up @@ -126,8 +128,8 @@ func NewAPIServiceExportRequestReconciler(
}

// getServiceExportRequestMapper creates a mapping function for ServiceExport changes.
func getServiceExportRequestMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getServiceExportRequestMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
serviceExport := obj.(*kubebindv1alpha2.APIServiceExport)
seKey := serviceExport.Namespace + "/" + serviceExport.Name

Expand Down Expand Up @@ -156,8 +158,8 @@ func getServiceExportRequestMapper(clusterName string, cl cluster.Cluster) handl
}

// getBoundSchemaMapper creates a mapping function for BoundSchema changes.
func getBoundSchemaMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getBoundSchemaMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
boundSchema := obj.(*kubebindv1alpha2.BoundSchema)
boundSchemaKey := boundSchema.Spec.Names.Plural + "." + boundSchema.Spec.Group
c := cl.GetClient()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
crhandler "sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
mcbuilder "sigs.k8s.io/multicluster-runtime/pkg/builder"
mchandler "sigs.k8s.io/multicluster-runtime/pkg/handler"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"
mcreconcile "sigs.k8s.io/multicluster-runtime/pkg/reconcile"

"github.com/kube-bind/kube-bind/pkg/indexers"
Expand Down Expand Up @@ -119,8 +121,8 @@ func NewAPIServiceNamespaceReconciler(
}

// getNamespaceMapper creates a mapping function for Namespace changes.
func getNamespaceMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc[client.Object, mcreconcile.Request](func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getNamespaceMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation[client.Object, mcreconcile.Request](func(ctx context.Context, obj client.Object) []mcreconcile.Request {
namespace := obj.(*corev1.Namespace)
nsKey := namespace.Name

Expand Down Expand Up @@ -148,8 +150,8 @@ func getNamespaceMapper(clusterName string, cl cluster.Cluster) handler.TypedEve
}

// createClusterBindingMapper creates a mapping function for ClusterBinding changes.
func getClusterBindingMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc[client.Object, mcreconcile.Request](func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getClusterBindingMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation[client.Object, mcreconcile.Request](func(ctx context.Context, obj client.Object) []mcreconcile.Request {
clusterBinding := obj.(*kubebindv1alpha2.ClusterBinding)
ns := clusterBinding.Namespace

Expand Down Expand Up @@ -178,8 +180,8 @@ func getClusterBindingMapper(clusterName string, cl cluster.Cluster) handler.Typ
}

// getServiceExportMapper creates a mapping function for APIServiceExport changes.
func getServiceExportMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc[client.Object, mcreconcile.Request](func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getServiceExportMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation[client.Object, mcreconcile.Request](func(ctx context.Context, obj client.Object) []mcreconcile.Request {
serviceExport := obj.(*kubebindv1alpha2.APIServiceExport)
ns := serviceExport.Namespace

Expand Down
21 changes: 11 additions & 10 deletions backend/kubernetes/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"

kuberesources "github.com/kube-bind/kube-bind/backend/kubernetes/resources"
kubebindv1alpha2 "github.com/kube-bind/kube-bind/sdk/apis/kubebind/v1alpha2"
Expand Down Expand Up @@ -105,7 +106,7 @@ func (m *Manager) HandleResources(
logger := klog.FromContext(ctx).WithValues("identity", identity)
ctx = klog.NewContext(ctx, logger)

cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -189,7 +190,7 @@ func (m *Manager) CreateAPIServiceExportRequest(
) (*kubebindv1alpha2.APIServiceExportRequest, error) {
logger := klog.FromContext(ctx).WithValues("namespace", namespace, "name", name)

cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, fmt.Errorf("failed to get cluster client: %w", err)
}
Expand Down Expand Up @@ -255,7 +256,7 @@ func (m *Manager) CreateAPIServiceExportRequest(
}

func (m *Manager) ListCustomResourceDefinitions(ctx context.Context, cluster string, selector labels.Selector) (*apiextensionsv1.CustomResourceDefinitionList, error) {
cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand All @@ -271,7 +272,7 @@ func (m *Manager) ListCustomResourceDefinitions(ctx context.Context, cluster str
}

func (m *Manager) ListCollections(ctx context.Context, cluster string) (*kubebindv1alpha2.CollectionList, error) {
cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand All @@ -287,7 +288,7 @@ func (m *Manager) ListCollections(ctx context.Context, cluster string) (*kubebin
}

func (m *Manager) ListTemplates(ctx context.Context, cluster string) (*kubebindv1alpha2.APIServiceExportTemplateList, error) {
cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand All @@ -303,7 +304,7 @@ func (m *Manager) ListTemplates(ctx context.Context, cluster string) (*kubebindv
}

func (m *Manager) GetTemplates(ctx context.Context, cluster, name string) (*kubebindv1alpha2.APIServiceExportTemplate, error) {
cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand All @@ -319,7 +320,7 @@ func (m *Manager) GetTemplates(ctx context.Context, cluster, name string) (*kube
}

func (m *Manager) ListDynamicResources(ctx context.Context, cluster string, gvk schema.GroupVersionKind, selector labels.Selector) (*unstructured.UnstructuredList, error) {
cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -349,7 +350,7 @@ func (m *Manager) ListDynamicResources(ctx context.Context, cluster string, gvk
func (m *Manager) AuthorizeRequest(ctx context.Context, subject string, groups []string, cluster, method, path string) error {
logger := klog.FromContext(ctx).WithValues("subject", subject, "cluster", cluster, "method", method, "path", path, "groups", groups)

cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return err
}
Expand Down Expand Up @@ -411,7 +412,7 @@ type ConsumerStatus struct {
func (m *Manager) GetConsumerStatus(ctx context.Context, identity, cluster string) (*ConsumerStatus, error) {
logger := klog.FromContext(ctx).WithValues("identity", identity)

cl, err := m.manager.GetCluster(ctx, cluster)
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(cluster))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -683,7 +684,7 @@ func (m *Manager) waitForCRD(ctx context.Context, c client.Client, crdName strin
func (m *Manager) SeedDefaultCluster(ctx context.Context) error {
logger := klog.FromContext(ctx)

cl, err := m.manager.GetCluster(ctx, "")
cl, err := m.manager.GetCluster(ctx, multicluster.ClusterName(""))
if err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/cluster"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
crhandler "sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
mcbuilder "sigs.k8s.io/multicluster-runtime/pkg/builder"
mchandler "sigs.k8s.io/multicluster-runtime/pkg/handler"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
"sigs.k8s.io/multicluster-runtime/pkg/multicluster"
mcreconcile "sigs.k8s.io/multicluster-runtime/pkg/reconcile"

"github.com/kube-bind/kube-bind/backend/provider/kcp/controllers/shared"
Expand Down Expand Up @@ -138,8 +140,8 @@ func (r *APIBindingTemplateReconciler) Reconcile(ctx context.Context, req mcreco
// This function has the signature func(clusterName string, cl cluster.Cluster) handler.TypedEventHandler
// because multicluster-runtime's mcbuilder.Watches accepts a "per-cluster event handler factory"
// rather than a plain handler — it calls this factory for each cluster that is engaged.
func getTemplateMapper(clusterName string, cl cluster.Cluster) handler.TypedEventHandler[client.Object, mcreconcile.Request] {
return handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
func getTemplateMapper(clusterName multicluster.ClusterName, cl cluster.Cluster) crhandler.TypedEventHandler[client.Object, mcreconcile.Request] {
return mchandler.TypedEnqueueRequestsFromMapFuncWithClusterPreservation(func(ctx context.Context, obj client.Object) []mcreconcile.Request {
annotations := obj.GetAnnotations()
if annotations == nil {
return nil
Expand Down
5 changes: 3 additions & 2 deletions backend/provider/kcp/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func New(cfg *rest.Config, endpointSliceName string, options provider.Options) (
}

// Get returns the cluster with the given name as a cluster.Cluster.
func (p *Provider) Get(ctx context.Context, clusterName string) (cluster.Cluster, error) {
func (p *Provider) Get(ctx context.Context, clusterName multicluster.ClusterName) (cluster.Cluster, error) {
return p.Provider.Get(ctx, clusterName)
}

Expand All @@ -82,7 +82,7 @@ type awareWrapper struct {
multicluster.Aware
}

func (a *awareWrapper) Engage(ctx context.Context, name string, cluster cluster.Cluster) error {
func (a *awareWrapper) Engage(ctx context.Context, name multicluster.ClusterName, cluster cluster.Cluster) error {
ctx, cancel := context.WithCancel(ctx) //nolint:govet // cancel is called in the error case only.

err := a.Aware.Engage(ctx, name, cluster)
Expand Down Expand Up @@ -127,6 +127,7 @@ func (a *awareWrapper) Engage(ctx context.Context, name string, cluster cluster.
cancel()
return err
}

return nil //nolint:govet // cancel is called in the error case only.
}

Expand Down
Loading
Loading