Skip to content

Commit 2af8954

Browse files
committed
Register DRA reconciler with manager
Wire the DRA reconciler into the operator manager: - Add resourcev1.AddToScheme to register the DRA resource API - Construct and register DRAReconciler via SetupWithManager - Add RBAC annotation for resource.k8s.io/deviceclasses - Add DRA module count to the existing metrics sweep - Regenerate RBAC manifests and metrics mock
1 parent 6028ad1 commit 2af8954

4 files changed

Lines changed: 41 additions & 1 deletion

File tree

cmd/manager/main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
4343
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
4444
"github.com/kubernetes-sigs/kernel-module-management/internal/nmc"
45+
resourcev1 "k8s.io/api/resource/v1"
4546
"k8s.io/apimachinery/pkg/runtime"
4647
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
4748
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -62,6 +63,7 @@ func init() {
6263
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
6364
utilruntime.Must(v1beta1.AddToScheme(scheme))
6465
utilruntime.Must(v1beta2.AddToScheme(scheme))
66+
utilruntime.Must(resourcev1.AddToScheme(scheme))
6567
//+kubebuilder:scaffold:scheme
6668
}
6769

@@ -168,6 +170,10 @@ func main() {
168170
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.DevicePluginPodReconcilerName)
169171
}
170172

173+
if err = controllers.NewDRAReconciler(client, nodeAPI, scheme).SetupWithManager(mgr); err != nil {
174+
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.DRAReconcilerName)
175+
}
176+
171177
if err = controllers.NewNodeLabelModuleVersionReconciler(client).SetupWithManager(mgr); err != nil {
172178
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.NodeLabelModuleVersionReconcilerName)
173179
}

config/rbac/role.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ rules:
4242
verbs:
4343
- create
4444
- delete
45+
- deletecollection
4546
- get
4647
- list
4748
- patch
@@ -117,3 +118,16 @@ rules:
117118
- nodemodulesconfigs/status
118119
verbs:
119120
- patch
121+
- apiGroups:
122+
- resource.k8s.io
123+
resources:
124+
- deviceclasses
125+
verbs:
126+
- create
127+
- delete
128+
- deletecollection
129+
- get
130+
- list
131+
- patch
132+
- update
133+
- watch

internal/controllers/dra_reconciler.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@ import (
3131
apierrors "k8s.io/apimachinery/pkg/api/errors"
3232
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3333
"k8s.io/apimachinery/pkg/runtime"
34+
"k8s.io/apimachinery/pkg/types"
3435
ctrl "sigs.k8s.io/controller-runtime"
36+
"sigs.k8s.io/controller-runtime/pkg/builder"
3537
"sigs.k8s.io/controller-runtime/pkg/client"
3638
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
39+
"sigs.k8s.io/controller-runtime/pkg/handler"
3740
"sigs.k8s.io/controller-runtime/pkg/log"
41+
"sigs.k8s.io/controller-runtime/pkg/predicate"
3842
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3943
)
4044

@@ -68,6 +72,21 @@ func (r *DRAReconciler) SetupWithManager(mgr ctrl.Manager) error {
6872
return ctrl.NewControllerManagedBy(mgr).
6973
For(&kmmv1beta1.Module{}).
7074
Owns(&appsv1.DaemonSet{}).
75+
Watches(&resourcev1.DeviceClass{}, handler.EnqueueRequestsFromMapFunc(
76+
func(_ context.Context, obj client.Object) []reconcile.Request {
77+
modName := obj.GetLabels()[constants.ModuleNameLabel]
78+
modNs := obj.GetLabels()[constants.ModuleNamespaceLabel]
79+
if modName == "" || modNs == "" {
80+
return nil
81+
}
82+
return []reconcile.Request{
83+
{NamespacedName: types.NamespacedName{Name: modName, Namespace: modNs}},
84+
}
85+
},
86+
), builder.WithPredicates(predicate.NewPredicateFuncs(func(obj client.Object) bool {
87+
labels := obj.GetLabels()
88+
return labels[constants.ModuleNameLabel] != "" && labels[constants.ModuleNamespaceLabel] != ""
89+
}))).
7190
Named(DRAReconcilerName).
7291
Complete(
7392
reconcile.AsReconciler[*kmmv1beta1.Module](r.client, r),

internal/controllers/module_reconciler.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3333
)
3434

35-
//+kubebuilder:rbac:groups=apps,resources=daemonsets,verbs=create;delete;get;list;patch;watch
35+
//+kubebuilder:rbac:groups=apps,resources=daemonsets,verbs=create;delete;deletecollection;get;list;patch;watch
3636
//+kubebuilder:rbac:groups=cluster.open-cluster-management.io,resources=clusterclaims,resourceNames=kernel-versions.kmm.node.kubernetes.io,verbs=delete;patch;update
3737
//+kubebuilder:rbac:groups=cluster.open-cluster-management.io,resources=clusterclaims,verbs=create;get;list;watch
3838
//+kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch
@@ -51,6 +51,7 @@ import (
5151
//+kubebuilder:rbac:groups=kmm.sigs.x-k8s.io,resources=nodemodulesconfigs/status,verbs=patch
5252
//+kubebuilder:rbac:groups=kmm.sigs.x-k8s.io,resources=preflightvalidations,verbs=get;list;watch;create;update;patch;delete
5353
//+kubebuilder:rbac:groups=kmm.sigs.x-k8s.io,resources=preflightvalidations/status,verbs=get;update;patch
54+
//+kubebuilder:rbac:groups=resource.k8s.io,resources=deviceclasses,verbs=get;list;watch;create;update;patch;delete;deletecollection
5455

5556
const (
5657
ModuleReconcilerName = "ModuleReconciler"

0 commit comments

Comments
 (0)