@@ -16,6 +16,7 @@ import (
1616 "k8s.io/apimachinery/pkg/api/meta"
1717 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1818 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
19+ "k8s.io/apimachinery/pkg/labels"
1920 "k8s.io/apimachinery/pkg/runtime"
2021 "k8s.io/apimachinery/pkg/types"
2122 metav1apply "k8s.io/client-go/applyconfigurations/meta/v1"
@@ -540,6 +541,32 @@ func (r *ImagePrefetchReconciler) SetupWithManager(mgr ctrl.Manager) error {
540541
541542 var requests []ctrl.Request
542543 for _ , imgPrefetch := range imagePrefetchList .Items {
544+ if imgPrefetch .Spec .AllNodes {
545+ if util .IsLabelSelectorEmpty (& imgPrefetch .Spec .NodeSelector ) {
546+ requests = append (requests , ctrl.Request {
547+ NamespacedName : types.NamespacedName {
548+ Namespace : imgPrefetch .Namespace ,
549+ Name : imgPrefetch .Name ,
550+ },
551+ })
552+ continue
553+ }
554+
555+ selector , err := metav1 .LabelSelectorAsSelector (& imgPrefetch .Spec .NodeSelector )
556+ if err != nil {
557+ return nil
558+ }
559+ if selector .Matches (labels .Set (node .Labels )) {
560+ requests = append (requests , ctrl.Request {
561+ NamespacedName : types.NamespacedName {
562+ Namespace : imgPrefetch .Namespace ,
563+ Name : imgPrefetch .Name ,
564+ },
565+ })
566+ }
567+ continue
568+ }
569+
543570 if slices .Contains (imgPrefetch .Status .SelectedNodes , node .Name ) {
544571 requests = append (requests , ctrl.Request {
545572 NamespacedName : types.NamespacedName {
@@ -560,6 +587,9 @@ func (r *ImagePrefetchReconciler) SetupWithManager(mgr ctrl.Manager) error {
560587 nodeImageSetHandler ,
561588 builder .WithPredicates (
562589 predicate.Funcs {
590+ CreateFunc : func (e event.CreateEvent ) bool {
591+ return false
592+ },
563593 UpdateFunc : func (e event.UpdateEvent ) bool {
564594 return true
565595 },
@@ -577,6 +607,20 @@ func (r *ImagePrefetchReconciler) SetupWithManager(mgr ctrl.Manager) error {
577607 CreateFunc : func (e event.CreateEvent ) bool {
578608 return true
579609 },
610+ UpdateFunc : func (e event.UpdateEvent ) bool {
611+ oldNode := e .ObjectOld .(* corev1.Node )
612+ newNode := e .ObjectNew .(* corev1.Node )
613+ // change node status from not ready to ready
614+ if ! util .IsNodeReady (oldNode ) && util .IsNodeReady (newNode ) {
615+ return true
616+ }
617+ // change node status from ready to not ready
618+ if util .IsNodeReady (oldNode ) && ! util .IsNodeReady (newNode ) {
619+ return true
620+ }
621+
622+ return false
623+ },
580624 DeleteFunc : func (e event.DeleteEvent ) bool {
581625 return true
582626 },
0 commit comments