@@ -23,6 +23,7 @@ import (
2323
2424 kmmv1beta1 "github.com/kubernetes-sigs/kernel-module-management/api/v1beta1"
2525 "github.com/kubernetes-sigs/kernel-module-management/internal/constants"
26+ "github.com/kubernetes-sigs/kernel-module-management/internal/filter"
2627 "github.com/kubernetes-sigs/kernel-module-management/internal/node"
2728 "github.com/kubernetes-sigs/kernel-module-management/internal/utils"
2829 appsv1 "k8s.io/api/apps/v1"
@@ -31,9 +32,12 @@ import (
3132 apierrors "k8s.io/apimachinery/pkg/api/errors"
3233 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3334 "k8s.io/apimachinery/pkg/runtime"
35+ "k8s.io/apimachinery/pkg/types"
3436 ctrl "sigs.k8s.io/controller-runtime"
37+ "sigs.k8s.io/controller-runtime/pkg/builder"
3538 "sigs.k8s.io/controller-runtime/pkg/client"
3639 "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
40+ "sigs.k8s.io/controller-runtime/pkg/handler"
3741 "sigs.k8s.io/controller-runtime/pkg/log"
3842 "sigs.k8s.io/controller-runtime/pkg/reconcile"
3943)
@@ -64,16 +68,35 @@ func NewDRAReconciler(
6468 }
6569}
6670
71+ //+kubebuilder:rbac:groups=resource.k8s.io,resources=deviceclasses,verbs=get;list;watch;create;update;patch;delete;deletecollection
72+
6773func (r * DRAReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
6874 return ctrl .NewControllerManagedBy (mgr ).
6975 For (& kmmv1beta1.Module {}).
7076 Owns (& appsv1.DaemonSet {}).
77+ Watches (
78+ & resourcev1.DeviceClass {},
79+ handler .EnqueueRequestsFromMapFunc (deviceClassToModuleReconcileRequest ),
80+ builder .WithPredicates (filter .HasLabel (constants .ModuleNameLabel )),
81+ ).
7182 Named (DRAReconcilerName ).
7283 Complete (
7384 reconcile .AsReconciler [* kmmv1beta1.Module ](r .client , r ),
7485 )
7586}
7687
88+ func deviceClassToModuleReconcileRequest (_ context.Context , obj client.Object ) []reconcile.Request {
89+ labels := obj .GetLabels ()
90+ modName := labels [constants .ModuleNameLabel ]
91+ modNs := labels [constants .ModuleNamespaceLabel ]
92+ if modName == "" || modNs == "" {
93+ return nil
94+ }
95+ return []reconcile.Request {
96+ {NamespacedName : types.NamespacedName {Name : modName , Namespace : modNs }},
97+ }
98+ }
99+
77100func (r * DRAReconciler ) Reconcile (ctx context.Context , mod * kmmv1beta1.Module ) (ctrl.Result , error ) {
78101 res := ctrl.Result {}
79102
0 commit comments