@@ -30,6 +30,7 @@ import (
3030
3131 "maps"
3232
33+ "github.com/fsnotify/fsnotify"
3334 "github.com/prometheus/client_golang/prometheus"
3435 "github.com/prometheus/client_golang/prometheus/promhttp"
3536 "golang.org/x/net/context"
@@ -55,7 +56,7 @@ import (
5556 _ "sigs.k8s.io/node-feature-discovery/source/custom"
5657 _ "sigs.k8s.io/node-feature-discovery/source/fake"
5758 _ "sigs.k8s.io/node-feature-discovery/source/kernel"
58- _ "sigs.k8s.io/node-feature-discovery/source/local"
59+ "sigs.k8s.io/node-feature-discovery/source/local"
5960 _ "sigs.k8s.io/node-feature-discovery/source/memory"
6061 _ "sigs.k8s.io/node-feature-discovery/source/network"
6162 _ "sigs.k8s.io/node-feature-discovery/source/pci"
@@ -121,6 +122,7 @@ type nfdWorker struct {
121122 k8sClient k8sclient.Interface
122123 nfdClient nfdclient.Interface
123124 stop chan struct {} // channel for signaling stop
125+ fsWatcher * fsnotify.Watcher
124126 featureSources []source.FeatureSource
125127 labelSources []source.LabelSource
126128 ownerReference []metav1.OwnerReference
@@ -304,6 +306,13 @@ func (w *nfdWorker) Run() error {
304306 labelTrigger .Reset (w .config .Core .SleepInterval .Duration )
305307 defer labelTrigger .Stop ()
306308
309+ if s := source .GetFeatureSource ("local" ); s != nil {
310+ w .fsWatcher = local .FSWatcher
311+ if w .fsWatcher != nil {
312+ defer w .fsWatcher .Close ()
313+ }
314+ }
315+
307316 httpMux := http .NewServeMux ()
308317
309318 // Register to metrics server
@@ -341,6 +350,16 @@ func (w *nfdWorker) Run() error {
341350 return err
342351 }
343352
353+ case event := <- w .fsWatcher .Events :
354+ if event .Op & fsnotify .Create == fsnotify .Create || event .Op & fsnotify .Write == fsnotify .Write || event .Op & fsnotify .Remove == fsnotify .Remove || event .Op & fsnotify .Rename == fsnotify .Rename || event .Op & fsnotify .Chmod == fsnotify .Chmod {
355+ err = w .runFeatureDiscovery ()
356+ if err != nil {
357+ return err
358+ }
359+ }
360+ case err := <- w .fsWatcher .Errors :
361+ klog .ErrorS (err , "failed to to watch features.d changes" )
362+ return err
344363 case <- w .stop :
345364 klog .InfoS ("shutting down nfd-worker" )
346365 return nil
0 commit comments