mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2025-03-31 04:04:51 +00:00
nfd-worker: Add support to configure the ownerReference to Node
Signed-off-by: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
This commit is contained in:
parent
4f24a38ad4
commit
4341f8dbd0
4 changed files with 96 additions and 30 deletions
|
@ -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.")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -79,6 +79,7 @@ type coreConfig struct {
|
|||
LabelWhiteList utils.RegexpVal
|
||||
NoPublish bool
|
||||
NoOwnerRefs bool
|
||||
OwnerRefNode bool
|
||||
FeatureSources []string
|
||||
Sources *[]string
|
||||
LabelSources []string
|
||||
|
@ -92,13 +93,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
|
||||
}
|
||||
|
@ -107,6 +109,7 @@ type Args struct {
|
|||
type ConfigOverrideArgs struct {
|
||||
NoPublish *bool
|
||||
NoOwnerRefs *bool
|
||||
OwnerRefNode *bool
|
||||
FeatureSources *utils.StringSliceVal
|
||||
LabelSources *utils.StringSliceVal
|
||||
}
|
||||
|
@ -251,33 +254,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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -503,6 +527,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
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue