Skip to content

Commit 26a28fa

Browse files
committed
Add DeviceClass watch to DRA reconciler
Watch DeviceClass resources so the controller reacts to external drift (e.g. manual deletion). Uses filter.HasLabel predicate to only process KMM-managed DeviceClasses. Also adds list, watch, and deletecollection RBAC verbs for the deviceclasses resource.
1 parent 6028ad1 commit 26a28fa

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

config/rbac/role.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,16 @@ rules:
117117
- nodemodulesconfigs/status
118118
verbs:
119119
- patch
120+
- apiGroups:
121+
- resource.k8s.io
122+
resources:
123+
- deviceclasses
124+
verbs:
125+
- create
126+
- delete
127+
- deletecollection
128+
- get
129+
- list
130+
- patch
131+
- update
132+
- watch

internal/controllers/dra_reconciler.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
6773
func (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+
77100
func (r *DRAReconciler) Reconcile(ctx context.Context, mod *kmmv1beta1.Module) (ctrl.Result, error) {
78101
res := ctrl.Result{}
79102

0 commit comments

Comments
 (0)