1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-31 04:04:51 +00:00
This commit is contained in:
Oleg Zhurakivskyy 2025-03-28 13:57:12 +02:00 committed by GitHub
commit 0f70cbdf34
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 96 additions and 30 deletions

View file

@ -93,6 +93,8 @@ func parseArgs(flags *flag.FlagSet, osArgs ...string) *worker.Args {
args.Overrides.LabelSources = overrides.LabelSources
case "no-owner-refs":
args.Overrides.NoOwnerRefs = overrides.NoOwnerRefs
case "owner-ref-node":
args.Overrides.OwnerRefNode = overrides.OwnerRefNode
}
})
@ -125,6 +127,8 @@ func initFlags(flagset *flag.FlagSet) (*worker.Args, *worker.ConfigOverrideArgs)
"Do not publish discovered features, disable connection to nfd-master and don't create NodeFeature object.")
overrides.NoOwnerRefs = flagset.Bool("no-owner-refs", false,
"Do not set owner references for NodeFeature object.")
overrides.OwnerRefNode = flagset.Bool("owner-ref-node", false,
"Set the owner reference for NodeFeature object to Node.")
flagset.Var(overrides.FeatureSources, "feature-sources",
"Comma separated list of feature sources. Special value 'all' enables all sources. "+
"Prefix the source name with '-' to disable it.")

View file

@ -179,6 +179,23 @@ Example:
nfd-worker -no-owner-refs
```
### -owner-ref-node
The `-owner-ref-node` flag sets the owner references
of the NodeFeature object to Node.
> **NOTE:** This flag takes precedence over the
> [`core.OwnerRefNode`](worker-configuration-reference.md#coreownerrefnode)
> configuration file option.
Default: *false*
Example:
```bash
nfd-worker -owner-ref-node
```
### -oneshot
The `-oneshot` flag causes nfd-worker to exit after one pass of feature

View file

@ -167,6 +167,24 @@ core:
noOwnerRefs: true
```
### core.ownerRefNode
Setting `core.ownerRefNode` to `true` sets the owner reference
of the NodeFeature object to Node for nfd-worker.
> **NOTE:** Overridden by the
> [`-owner-ref-node`](worker-commandline-reference.md#-owner-ref-node)
> command line flag (if specified).
Default: `false`
Example:
```yaml
core:
ownerRefNode: true
```
### core.klog
The following options specify the logger configuration.

View file

@ -81,6 +81,7 @@ type coreConfig struct {
LabelWhiteList utils.RegexpVal
NoPublish bool
NoOwnerRefs bool
OwnerRefNode bool
FeatureSources []string
Sources *[]string
LabelSources []string
@ -94,13 +95,14 @@ type Labels map[string]string
// Args are the command line arguments of NfdWorker.
type Args struct {
ConfigFile string
Klog map[string]*utils.KlogFlagVal
Kubeconfig string
Oneshot bool
Options string
Port int
NoOwnerRefs bool
ConfigFile string
Klog map[string]*utils.KlogFlagVal
Kubeconfig string
Oneshot bool
Options string
Port int
NoOwnerRefs bool
OwnerRefNode bool
Overrides ConfigOverrideArgs
}
@ -109,6 +111,7 @@ type Args struct {
type ConfigOverrideArgs struct {
NoPublish *bool
NoOwnerRefs *bool
OwnerRefNode *bool
FeatureSources *utils.StringSliceVal
LabelSources *utils.StringSliceVal
}
@ -253,33 +256,54 @@ func (w *nfdWorker) setOwnerReference() error {
ownerReference := []metav1.OwnerReference{}
if !w.config.Core.NoOwnerRefs {
// Get pod owner reference
podName := os.Getenv("POD_NAME")
// Add pod owner reference if it exists
if podName != "" {
if selfPod, err := w.k8sClient.CoreV1().Pods(w.kubernetesNamespace).Get(context.TODO(), podName, metav1.GetOptions{}); err != nil {
klog.ErrorS(err, "failed to get self pod, cannot inherit ownerReference for NodeFeature")
return err
} else {
for _, owner := range selfPod.OwnerReferences {
owner.BlockOwnerDeletion = ptr.To(false)
ownerReference = append(ownerReference, owner)
if w.config.Core.OwnerRefNode {
// Get node owner reference
nodeName := os.Getenv("NODE_NAME")
if nodeName != "" {
if selfNode, err := w.k8sClient.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{}); err != nil {
klog.ErrorS(err, "failed to get self node, cannot inherit ownerReference for NodeFeature")
return err
} else {
ownerReference = append(ownerReference, metav1.OwnerReference{
APIVersion: "v1",
Kind: "Node",
Name: nodeName,
UID: selfNode.UID,
})
}
} else {
klog.InfoS("Cannot set NodeFeature owner reference to Node, NODE_NAME not specified")
}
podUID := os.Getenv("POD_UID")
if podUID != "" {
ownerReference = append(ownerReference, metav1.OwnerReference{
APIVersion: "v1",
Kind: "Pod",
Name: podName,
UID: types.UID(podUID),
})
} else {
klog.InfoS("Cannot append POD ownerReference to NodeFeature, POD_UID not specified")
}
} else {
klog.InfoS("Cannot set NodeFeature owner references, POD_NAME not specified")
// Get pod owner reference
podName := os.Getenv("POD_NAME")
// Add pod owner reference if it exists
if podName != "" {
if selfPod, err := w.k8sClient.CoreV1().Pods(w.kubernetesNamespace).Get(context.TODO(), podName, metav1.GetOptions{}); err != nil {
klog.ErrorS(err, "failed to get self pod, cannot inherit ownerReference for NodeFeature")
return err
} else {
for _, owner := range selfPod.OwnerReferences {
owner.BlockOwnerDeletion = ptr.To(false)
ownerReference = append(ownerReference, owner)
}
}
podUID := os.Getenv("POD_UID")
if podUID != "" {
ownerReference = append(ownerReference, metav1.OwnerReference{
APIVersion: "v1",
Kind: "Pod",
Name: podName,
UID: types.UID(podUID),
})
} else {
klog.InfoS("Cannot append POD ownerReference to NodeFeature, POD_UID not specified")
}
} else {
klog.InfoS("Cannot set NodeFeature owner references, POD_NAME not specified")
}
}
}
@ -505,6 +529,9 @@ func (w *nfdWorker) configure(filepath string, overrides string) error {
if w.args.Overrides.NoOwnerRefs != nil {
c.Core.NoOwnerRefs = *w.args.Overrides.NoOwnerRefs
}
if w.args.Overrides.OwnerRefNode != nil {
c.Core.OwnerRefNode = *w.args.Overrides.OwnerRefNode
}
if w.args.Overrides.FeatureSources != nil {
c.Core.FeatureSources = *w.args.Overrides.FeatureSources
}