@@ -30,6 +30,7 @@ import (
30
30
31
31
"maps"
32
32
33
+ "github.com/fsnotify/fsnotify"
33
34
"github.com/prometheus/client_golang/prometheus"
34
35
"github.com/prometheus/client_golang/prometheus/promhttp"
35
36
"golang.org/x/net/context"
@@ -55,7 +56,7 @@ import (
55
56
_ "sigs.k8s.io/node-feature-discovery/source/custom"
56
57
_ "sigs.k8s.io/node-feature-discovery/source/fake"
57
58
_ "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"
59
60
_ "sigs.k8s.io/node-feature-discovery/source/memory"
60
61
_ "sigs.k8s.io/node-feature-discovery/source/network"
61
62
_ "sigs.k8s.io/node-feature-discovery/source/pci"
@@ -121,6 +122,7 @@ type nfdWorker struct {
121
122
k8sClient k8sclient.Interface
122
123
nfdClient nfdclient.Interface
123
124
stop chan struct {} // channel for signaling stop
125
+ fsWatcher * fsnotify.Watcher
124
126
featureSources []source.FeatureSource
125
127
labelSources []source.LabelSource
126
128
ownerReference []metav1.OwnerReference
@@ -304,6 +306,13 @@ func (w *nfdWorker) Run() error {
304
306
labelTrigger .Reset (w .config .Core .SleepInterval .Duration )
305
307
defer labelTrigger .Stop ()
306
308
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
+
307
316
httpMux := http .NewServeMux ()
308
317
309
318
// Register to metrics server
@@ -341,6 +350,16 @@ func (w *nfdWorker) Run() error {
341
350
return err
342
351
}
343
352
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
344
363
case <- w .stop :
345
364
klog .InfoS ("shutting down nfd-worker" )
346
365
return nil
0 commit comments