Skip to content

Commit caaac59

Browse files
authored
Merge pull request #1860 from ozhuraki/no-owner-refs
nfd-worker: Add an option to disable setting the owner references
2 parents 68e1108 + 20ef877 commit caaac59

File tree

7 files changed

+93
-34
lines changed

7 files changed

+93
-34
lines changed

cmd/nfd-worker/main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ func parseArgs(flags *flag.FlagSet, osArgs ...string) *worker.Args {
9494
args.Overrides.FeatureSources = overrides.FeatureSources
9595
case "label-sources":
9696
args.Overrides.LabelSources = overrides.LabelSources
97+
case "no-owner-refs":
98+
args.Overrides.NoOwnerRefs = overrides.NoOwnerRefs
9799
}
98100
})
99101

@@ -126,6 +128,8 @@ func initFlags(flagset *flag.FlagSet) (*worker.Args, *worker.ConfigOverrideArgs)
126128
}
127129
overrides.NoPublish = flagset.Bool("no-publish", false,
128130
"Do not publish discovered features, disable connection to nfd-master and don't create NodeFeature object.")
131+
overrides.NoOwnerRefs = flagset.Bool("no-owner-refs", false,
132+
"Do not set owner references for NodeFeature object.")
129133
flagset.Var(overrides.FeatureSources, "feature-sources",
130134
"Comma separated list of feature sources. Special value 'all' enables all sources. "+
131135
"Prefix the source name with '-' to disable it.")

cmd/nfd-worker/main_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@ func TestParseArgs(t *testing.T) {
4343
Convey("When all override args are specified", func() {
4444
args := parseArgs(flags,
4545
"-no-publish",
46+
"-no-owner-refs",
4647
"-feature-sources=cpu",
4748
"-label-sources=fake1,fake2,fake3")
4849

4950
Convey("args.sources is set to appropriate values", func() {
5051
So(args.Oneshot, ShouldBeFalse)
5152
So(*args.Overrides.NoPublish, ShouldBeTrue)
53+
So(*args.Overrides.NoOwnerRefs, ShouldBeTrue)
5254
So(*args.Overrides.FeatureSources, ShouldResemble, utils.StringSliceVal{"cpu"})
5355
So(*args.Overrides.LabelSources, ShouldResemble, utils.StringSliceVal{"fake1", "fake2", "fake3"})
5456
})

deployment/components/worker-config/nfd-worker.conf.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#core:
22
# labelWhiteList:
33
# noPublish: false
4+
# noOwnerRefs: false
45
# sleepInterval: 60s
56
# featureSources: [all]
67
# labelSources: [all]

deployment/helm/node-feature-discovery/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ worker:
182182
#core:
183183
# labelWhiteList:
184184
# noPublish: false
185+
# noOwnerRefs: false
185186
# sleepInterval: 60s
186187
# featureSources: [all]
187188
# labelSources: [all]

docs/reference/worker-commandline-reference.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,23 @@ Example:
162162
nfd-worker -no-publish
163163
```
164164

165+
### -no-owner-refs
166+
167+
The `-no-owner-refs` flag disables setting the owner references to Pod
168+
of the NodeFeature object.
169+
170+
> **NOTE:** This flag takes precedence over the
171+
> [`core.noOwnerRefs`](worker-configuration-reference.md#corenoownerrefs)
172+
> configuration file option.
173+
174+
Default: *false*
175+
176+
Example:
177+
178+
```bash
179+
nfd-worker -no-owner-refs
180+
```
181+
165182
### -oneshot
166183

167184
The `-oneshot` flag causes nfd-worker to exit after one pass of feature

docs/reference/worker-configuration-reference.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,24 @@ core:
149149
noPublish: true
150150
```
151151

152+
### core.noOwnerRefs
153+
154+
Setting `core.noOwnerRefs` to `true` disables setting the owner references
155+
of the NodeFeature object created by the nfd-worker.
156+
157+
> **NOTE:** Overridden by the
158+
> [`-no-owner-refs`](worker-commandline-reference.md#-no-owner-refs)
159+
> command line flag (if specified).
160+
161+
Default: `false`
162+
163+
Example:
164+
165+
```yaml
166+
core:
167+
noOwnerRefs: true
168+
```
169+
152170
### core.klog
153171

154172
The following options specify the logger configuration.

pkg/nfd-worker/nfd-worker.go

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ type coreConfig struct {
7878
Klog klogutils.KlogConfigOpts
7979
LabelWhiteList utils.RegexpVal
8080
NoPublish bool
81+
NoOwnerRefs bool
8182
FeatureSources []string
8283
Sources *[]string
8384
LabelSources []string
@@ -98,14 +99,15 @@ type Args struct {
9899
Options string
99100
MetricsPort int
100101
GrpcHealthPort int
102+
NoOwnerRefs bool
101103

102104
Overrides ConfigOverrideArgs
103105
}
104106

105107
// ConfigOverrideArgs are args that override config file options
106108
type ConfigOverrideArgs struct {
107-
NoPublish *bool
108-
109+
NoPublish *bool
110+
NoOwnerRefs *bool
109111
FeatureSources *utils.StringSliceVal
110112
LabelSources *utils.StringSliceVal
111113
}
@@ -265,7 +267,44 @@ func (w *nfdWorker) runFeatureDiscovery() error {
265267
return nil
266268
}
267269

268-
// Run NfdWorker client. Returns if a fatal error is encountered, or, after
270+
// Set owner ref
271+
func (w *nfdWorker) setOwnerReference() error {
272+
ownerReference := []metav1.OwnerReference{}
273+
274+
if !w.config.Core.NoOwnerRefs {
275+
// Get pod owner reference
276+
podName := os.Getenv("POD_NAME")
277+
// Add pod owner reference if it exists
278+
if podName != "" {
279+
if selfPod, err := w.k8sClient.CoreV1().Pods(w.kubernetesNamespace).Get(context.TODO(), podName, metav1.GetOptions{}); err != nil {
280+
klog.ErrorS(err, "failed to get self pod, cannot inherit ownerReference for NodeFeature")
281+
return err
282+
} else {
283+
ownerReference = append(ownerReference, selfPod.OwnerReferences...)
284+
}
285+
286+
podUID := os.Getenv("POD_UID")
287+
if podUID != "" {
288+
ownerReference = append(ownerReference, metav1.OwnerReference{
289+
APIVersion: "v1",
290+
Kind: "Pod",
291+
Name: podName,
292+
UID: types.UID(podUID),
293+
})
294+
} else {
295+
klog.InfoS("Cannot append POD ownerReference to NodeFeature, POD_UID not specified")
296+
}
297+
} else {
298+
klog.InfoS("Cannot set NodeFeature owner references, POD_NAME not specified")
299+
}
300+
}
301+
302+
w.ownerReference = ownerReference
303+
304+
return nil
305+
}
306+
307+
// Run NfdWorker client. Returns an error if a fatal error is encountered, or, after
269308
// one request if OneShot is set to 'true' in the worker args.
270309
func (w *nfdWorker) Run() error {
271310
klog.InfoS("Node Feature Discovery Worker", "version", version.Get(), "nodeName", utils.NodeName(), "namespace", w.kubernetesNamespace)
@@ -281,37 +320,6 @@ func (w *nfdWorker) Run() error {
281320
labelTrigger.Reset(w.config.Core.SleepInterval.Duration)
282321
defer labelTrigger.Stop()
283322

284-
// Create owner ref
285-
ownerReference := []metav1.OwnerReference{}
286-
// Get pod owner reference
287-
podName := os.Getenv("POD_NAME")
288-
289-
// Add pod owner reference if it exists
290-
if podName != "" {
291-
if selfPod, err := w.k8sClient.CoreV1().Pods(w.kubernetesNamespace).Get(context.TODO(), podName, metav1.GetOptions{}); err != nil {
292-
klog.ErrorS(err, "failed to get self pod, cannot inherit ownerReference for NodeFeature")
293-
return err
294-
} else {
295-
ownerReference = append(ownerReference, selfPod.OwnerReferences...)
296-
}
297-
298-
podUID := os.Getenv("POD_UID")
299-
if podUID != "" {
300-
ownerReference = append(ownerReference, metav1.OwnerReference{
301-
APIVersion: "v1",
302-
Kind: "Pod",
303-
Name: podName,
304-
UID: types.UID(podUID),
305-
})
306-
} else {
307-
klog.InfoS("Cannot append POD ownerReference to NodeFeature, POD_UID not specified")
308-
}
309-
} else {
310-
klog.InfoS("Cannot set NodeFeature owner references, POD_NAME not specified")
311-
}
312-
313-
w.ownerReference = ownerReference
314-
315323
// Register to metrics server
316324
if w.args.MetricsPort > 0 {
317325
m := utils.CreateMetricsServer(w.args.MetricsPort,
@@ -466,6 +474,11 @@ func (w *nfdWorker) configureCore(c coreConfig) error {
466474
klogV.InfoS("enabled label sources", "labelSources", n)
467475
}
468476

477+
err = w.setOwnerReference()
478+
if err != nil {
479+
return err
480+
}
481+
469482
return nil
470483
}
471484

@@ -511,6 +524,9 @@ func (w *nfdWorker) configure(filepath string, overrides string) error {
511524
if w.args.Overrides.NoPublish != nil {
512525
c.Core.NoPublish = *w.args.Overrides.NoPublish
513526
}
527+
if w.args.Overrides.NoOwnerRefs != nil {
528+
c.Core.NoOwnerRefs = *w.args.Overrides.NoOwnerRefs
529+
}
514530
if w.args.Overrides.FeatureSources != nil {
515531
c.Core.FeatureSources = *w.args.Overrides.FeatureSources
516532
}

0 commit comments

Comments
 (0)