github.com/cilium/cilium@v1.16.2/operator/pkg/gateway-api/gatewayclass.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package gateway_api
     5  
     6  import (
     7  	"k8s.io/apimachinery/pkg/runtime"
     8  	ctrl "sigs.k8s.io/controller-runtime"
     9  	"sigs.k8s.io/controller-runtime/pkg/builder"
    10  	"sigs.k8s.io/controller-runtime/pkg/client"
    11  	"sigs.k8s.io/controller-runtime/pkg/predicate"
    12  	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
    13  )
    14  
    15  // gatewayClassReconciler reconciles a GatewayClass object
    16  type gatewayClassReconciler struct {
    17  	client.Client
    18  	Scheme *runtime.Scheme
    19  }
    20  
    21  func newGatewayClassReconciler(mgr ctrl.Manager) *gatewayClassReconciler {
    22  	return &gatewayClassReconciler{
    23  		Client: mgr.GetClient(),
    24  		Scheme: mgr.GetScheme(),
    25  	}
    26  }
    27  
    28  // SetupWithManager sets up the controller with the Manager.
    29  func (r *gatewayClassReconciler) SetupWithManager(mgr ctrl.Manager) error {
    30  	return ctrl.NewControllerManagedBy(mgr).
    31  		For(&gatewayv1.GatewayClass{},
    32  			builder.WithPredicates(predicate.NewPredicateFuncs(matchesControllerName(controllerName)))).
    33  		Complete(r)
    34  }
    35  
    36  func matchesControllerName(controllerName string) func(object client.Object) bool {
    37  	return func(object client.Object) bool {
    38  		gwc, ok := object.(*gatewayv1.GatewayClass)
    39  		if !ok {
    40  			return false
    41  		}
    42  		return string(gwc.Spec.ControllerName) == controllerName
    43  	}
    44  }