Skip to content

Commit 48f0f07

Browse files
authored
Merge pull request #784 from NVIDIA/bump-k8s-controller-runtime-deps
bump k8s.io and controller-runtime dependencies
2 parents eb745f2 + 4870d7c commit 48f0f07

File tree

409 files changed

+42145
-11603
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

409 files changed

+42145
-11603
lines changed

bundle/manifests/nvidia.com_nvidiadrivers.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,13 @@ spec:
357357
items:
358358
type: string
359359
type: array
360+
x-kubernetes-list-type: atomic
360361
required:
361362
- key
362363
- operator
363364
type: object
364365
type: array
366+
x-kubernetes-list-type: atomic
365367
matchFields:
366368
description: A list of node selector requirements by
367369
node's fields.
@@ -389,11 +391,13 @@ spec:
389391
items:
390392
type: string
391393
type: array
394+
x-kubernetes-list-type: atomic
392395
required:
393396
- key
394397
- operator
395398
type: object
396399
type: array
400+
x-kubernetes-list-type: atomic
397401
type: object
398402
x-kubernetes-map-type: atomic
399403
weight:
@@ -406,6 +410,7 @@ spec:
406410
- weight
407411
type: object
408412
type: array
413+
x-kubernetes-list-type: atomic
409414
requiredDuringSchedulingIgnoredDuringExecution:
410415
description: |-
411416
If the affinity requirements specified by this field are not met at
@@ -450,11 +455,13 @@ spec:
450455
items:
451456
type: string
452457
type: array
458+
x-kubernetes-list-type: atomic
453459
required:
454460
- key
455461
- operator
456462
type: object
457463
type: array
464+
x-kubernetes-list-type: atomic
458465
matchFields:
459466
description: A list of node selector requirements by
460467
node's fields.
@@ -482,14 +489,17 @@ spec:
482489
items:
483490
type: string
484491
type: array
492+
x-kubernetes-list-type: atomic
485493
required:
486494
- key
487495
- operator
488496
type: object
489497
type: array
498+
x-kubernetes-list-type: atomic
490499
type: object
491500
x-kubernetes-map-type: atomic
492501
type: array
502+
x-kubernetes-list-type: atomic
493503
required:
494504
- nodeSelectorTerms
495505
type: object

config/crd/bases/nvidia.com_nvidiadrivers.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,13 @@ spec:
357357
items:
358358
type: string
359359
type: array
360+
x-kubernetes-list-type: atomic
360361
required:
361362
- key
362363
- operator
363364
type: object
364365
type: array
366+
x-kubernetes-list-type: atomic
365367
matchFields:
366368
description: A list of node selector requirements by
367369
node's fields.
@@ -389,11 +391,13 @@ spec:
389391
items:
390392
type: string
391393
type: array
394+
x-kubernetes-list-type: atomic
392395
required:
393396
- key
394397
- operator
395398
type: object
396399
type: array
400+
x-kubernetes-list-type: atomic
397401
type: object
398402
x-kubernetes-map-type: atomic
399403
weight:
@@ -406,6 +410,7 @@ spec:
406410
- weight
407411
type: object
408412
type: array
413+
x-kubernetes-list-type: atomic
409414
requiredDuringSchedulingIgnoredDuringExecution:
410415
description: |-
411416
If the affinity requirements specified by this field are not met at
@@ -450,11 +455,13 @@ spec:
450455
items:
451456
type: string
452457
type: array
458+
x-kubernetes-list-type: atomic
453459
required:
454460
- key
455461
- operator
456462
type: object
457463
type: array
464+
x-kubernetes-list-type: atomic
458465
matchFields:
459466
description: A list of node selector requirements by
460467
node's fields.
@@ -482,14 +489,17 @@ spec:
482489
items:
483490
type: string
484491
type: array
492+
x-kubernetes-list-type: atomic
485493
required:
486494
- key
487495
- operator
488496
type: object
489497
type: array
498+
x-kubernetes-list-type: atomic
490499
type: object
491500
x-kubernetes-map-type: atomic
492501
type: array
502+
x-kubernetes-list-type: atomic
493503
required:
494504
- nodeSelectorTerms
495505
type: object

controllers/clusterpolicy_controller.go

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,10 @@ func updateCRState(ctx context.Context, r *ClusterPolicyReconciler, namespacedNa
253253
}
254254
}
255255

256-
func addWatchNewGPUNode(ctx context.Context, r *ClusterPolicyReconciler, c controller.Controller, mgr ctrl.Manager) error {
256+
func addWatchNewGPUNode(r *ClusterPolicyReconciler, c controller.Controller, mgr ctrl.Manager) error {
257257
// Define a mapping from the Node object in the event to one or more
258258
// ClusterPolicy objects to Reconcile
259-
mapFn := func(ctx context.Context, a client.Object) []reconcile.Request {
259+
mapFn := func(ctx context.Context, n *corev1.Node) []reconcile.Request {
260260
// find all the ClusterPolicy to trigger their reconciliation
261261
opts := []client.ListOption{} // Namespace = "" to list across all namespaces.
262262
list := &gpuv1.ClusterPolicyList{}
@@ -280,13 +280,13 @@ func addWatchNewGPUNode(ctx context.Context, r *ClusterPolicyReconciler, c contr
280280
return cpToRec
281281
}
282282

283-
p := predicate.Funcs{
284-
CreateFunc: func(e event.CreateEvent) bool {
283+
p := predicate.TypedFuncs[*corev1.Node]{
284+
CreateFunc: func(e event.TypedCreateEvent[*corev1.Node]) bool {
285285
labels := e.Object.GetLabels()
286286

287287
return hasGPULabels(labels)
288288
},
289-
UpdateFunc: func(e event.UpdateEvent) bool {
289+
UpdateFunc: func(e event.TypedUpdateEvent[*corev1.Node]) bool {
290290
newLabels := e.ObjectNew.GetLabels()
291291
oldLabels := e.ObjectOld.GetLabels()
292292
nodeName := e.ObjectNew.GetName()
@@ -324,7 +324,7 @@ func addWatchNewGPUNode(ctx context.Context, r *ClusterPolicyReconciler, c contr
324324
}
325325
return needsUpdate
326326
},
327-
DeleteFunc: func(e event.DeleteEvent) bool {
327+
DeleteFunc: func(e event.TypedDeleteEvent[*corev1.Node]) bool {
328328
// if an RHCOS GPU node is deleted, trigger a
329329
// reconciliation to ensure that there is no dangling
330330
// OpenShift Driver-Toolkit (RHCOS version-specific)
@@ -341,9 +341,12 @@ func addWatchNewGPUNode(ctx context.Context, r *ClusterPolicyReconciler, c contr
341341
}
342342

343343
err := c.Watch(
344-
source.Kind(mgr.GetCache(), &corev1.Node{}),
345-
handler.EnqueueRequestsFromMapFunc(mapFn),
346-
p)
344+
source.Kind(mgr.GetCache(),
345+
&corev1.Node{},
346+
handler.TypedEnqueueRequestsFromMapFunc[*corev1.Node](mapFn),
347+
p,
348+
),
349+
)
347350

348351
return err
349352
}
@@ -360,20 +363,32 @@ func (r *ClusterPolicyReconciler) SetupWithManager(ctx context.Context, mgr ctrl
360363
r.conditionUpdater = conditions.NewClusterPolicyUpdater(mgr.GetClient())
361364

362365
// Watch for changes to primary resource ClusterPolicy
363-
err = c.Watch(source.Kind(mgr.GetCache(), &gpuv1.ClusterPolicy{}), &handler.EnqueueRequestForObject{}, predicate.GenerationChangedPredicate{})
366+
err = c.Watch(source.Kind(
367+
mgr.GetCache(),
368+
&gpuv1.ClusterPolicy{},
369+
&handler.TypedEnqueueRequestForObject[*gpuv1.ClusterPolicy]{},
370+
predicate.TypedGenerationChangedPredicate[*gpuv1.ClusterPolicy]{},
371+
),
372+
)
364373
if err != nil {
365374
return err
366375
}
367376

368377
// Watch for changes to Node labels and requeue the owner ClusterPolicy
369-
err = addWatchNewGPUNode(ctx, r, c, mgr)
378+
err = addWatchNewGPUNode(r, c, mgr)
370379
if err != nil {
371380
return err
372381
}
373382

374383
// TODO(user): Modify this to be the types you create that are owned by the primary resource
375384
// Watch for changes to secondary resource Daemonsets and requeue the owner ClusterPolicy
376-
err = c.Watch(source.Kind(mgr.GetCache(), &appsv1.DaemonSet{}), handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &gpuv1.ClusterPolicy{}, handler.OnlyControllerOwner()))
385+
err = c.Watch(
386+
source.Kind(mgr.GetCache(),
387+
&appsv1.DaemonSet{},
388+
handler.TypedEnqueueRequestForOwner[*appsv1.DaemonSet](mgr.GetScheme(), mgr.GetRESTMapper(), &gpuv1.ClusterPolicy{},
389+
handler.OnlyControllerOwner()),
390+
),
391+
)
377392
if err != nil {
378393
return err
379394
}

controllers/nvidiadriver_controller.go

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -263,14 +263,47 @@ func (r *NVIDIADriverReconciler) SetupWithManager(ctx context.Context, mgr ctrl.
263263
}
264264

265265
// Watch for changes to the primary resource NVIDIaDriver
266-
err = c.Watch(source.Kind(mgr.GetCache(), &nvidiav1alpha1.NVIDIADriver{}), &handler.EnqueueRequestForObject{}, predicate.GenerationChangedPredicate{})
266+
err = c.Watch(source.Kind(
267+
mgr.GetCache(),
268+
&nvidiav1alpha1.NVIDIADriver{},
269+
&handler.TypedEnqueueRequestForObject[*nvidiav1alpha1.NVIDIADriver]{},
270+
predicate.TypedGenerationChangedPredicate[*nvidiav1alpha1.NVIDIADriver]{},
271+
),
272+
)
267273
if err != nil {
268274
return err
269275
}
270276

271277
// Watch for changes to ClusterPolicy. Whenever an event is generated for ClusterPolicy, enqueue
272278
// a reconcile request for all NVIDIADriver instances.
273-
mapFn := func(ctx context.Context, a client.Object) []reconcile.Request {
279+
mapFn := func(ctx context.Context, cp *gpuv1.ClusterPolicy) []reconcile.Request {
280+
logger := log.FromContext(ctx)
281+
opts := []client.ListOption{}
282+
list := &nvidiav1alpha1.NVIDIADriverList{}
283+
284+
err := mgr.GetClient().List(ctx, list, opts...)
285+
if err != nil {
286+
logger.Error(err, "Unable to list NVIDIADriver resources")
287+
return []reconcile.Request{}
288+
}
289+
290+
reconcileRequests := []reconcile.Request{}
291+
for _, nvidiaDriver := range list.Items {
292+
reconcileRequests = append(reconcileRequests,
293+
reconcile.Request{
294+
NamespacedName: types.NamespacedName{
295+
Name: nvidiaDriver.ObjectMeta.GetName(),
296+
Namespace: nvidiaDriver.ObjectMeta.GetNamespace(),
297+
},
298+
})
299+
}
300+
301+
return reconcileRequests
302+
}
303+
304+
// Watch for changes to the Nodes. Whenever an event is generated for ClusterPolicy, enqueue
305+
// a reconcile request for all NVIDIADriver instances.
306+
nodeMapFn := func(ctx context.Context, cp *corev1.Node) []reconcile.Request {
274307
logger := log.FromContext(ctx)
275308
opts := []client.ListOption{}
276309
list := &nvidiav1alpha1.NVIDIADriverList{}
@@ -296,20 +329,23 @@ func (r *NVIDIADriverReconciler) SetupWithManager(ctx context.Context, mgr ctrl.
296329
}
297330

298331
err = c.Watch(
299-
source.Kind(mgr.GetCache(), &gpuv1.ClusterPolicy{}),
300-
handler.EnqueueRequestsFromMapFunc(mapFn),
301-
predicate.GenerationChangedPredicate{},
332+
source.Kind(
333+
mgr.GetCache(),
334+
&gpuv1.ClusterPolicy{},
335+
handler.TypedEnqueueRequestsFromMapFunc[*gpuv1.ClusterPolicy](mapFn),
336+
predicate.TypedGenerationChangedPredicate[*gpuv1.ClusterPolicy]{},
337+
),
302338
)
303339
if err != nil {
304340
return err
305341
}
306342

307-
nodePredicate := predicate.Funcs{
308-
CreateFunc: func(e event.CreateEvent) bool {
343+
nodePredicate := predicate.TypedFuncs[*corev1.Node]{
344+
CreateFunc: func(e event.TypedCreateEvent[*corev1.Node]) bool {
309345
labels := e.Object.GetLabels()
310346
return hasGPULabels(labels)
311347
},
312-
UpdateFunc: func(e event.UpdateEvent) bool {
348+
UpdateFunc: func(e event.TypedUpdateEvent[*corev1.Node]) bool {
313349
logger := log.FromContext(ctx)
314350
newLabels := e.ObjectNew.GetLabels()
315351
oldLabels := e.ObjectOld.GetLabels()
@@ -324,38 +360,29 @@ func (r *NVIDIADriverReconciler) SetupWithManager(ctx context.Context, mgr ctrl.
324360
}
325361
return needsUpdate
326362
},
327-
DeleteFunc: func(e event.DeleteEvent) bool {
363+
DeleteFunc: func(e event.TypedDeleteEvent[*corev1.Node]) bool {
328364
labels := e.Object.GetLabels()
329365
return hasGPULabels(labels)
330366
},
331367
}
332368

333369
// Watch for changes to node labels
334370
err = c.Watch(
335-
source.Kind(mgr.GetCache(), &corev1.Node{}),
336-
handler.EnqueueRequestsFromMapFunc(mapFn),
337-
nodePredicate,
371+
source.Kind(mgr.GetCache(),
372+
&corev1.Node{},
373+
handler.TypedEnqueueRequestsFromMapFunc[*corev1.Node](nodeMapFn),
374+
nodePredicate,
375+
),
338376
)
339377
if err != nil {
340378
return err
341379
}
342380

343381
// Watch for changes to secondary resources which each state manager manages
344382
watchSources := stateManager.GetWatchSources(mgr)
345-
nvDriverPredicate, err := predicate.LabelSelectorPredicate(metav1.LabelSelector{MatchLabels: map[string]string{AppComponentLabelKey: AppComponentLabelValue}})
346-
if err != nil {
347-
return fmt.Errorf("failed to create labelSelector predicate: %w", err)
348-
}
349383
for _, watchSource := range watchSources {
350384
err = c.Watch(
351385
watchSource,
352-
handler.EnqueueRequestForOwner(
353-
mgr.GetScheme(),
354-
mgr.GetRESTMapper(),
355-
&nvidiav1alpha1.NVIDIADriver{},
356-
handler.OnlyControllerOwner(),
357-
),
358-
nvDriverPredicate,
359386
)
360387
if err != nil {
361388
return fmt.Errorf("error setting up Watch for source type %v: %w", watchSource, err)

0 commit comments

Comments
 (0)