1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-16 21:38:23 +00:00

source/local: allow full control of label name

Make it possible for the hooks to fully define the label name to be used
(i.e. without the '<hook name>-' prefix) by prefixing the printed
feature names with a slash ('/'). This makes it possible to e.g.
override labels create by other sources.

For example having the following output from a hook:
/override_source-override_bool
/override_source-override_value=my value

will translate into the following feature labels:
feature.node.kubernetes.io/override_source-override_bool = true
feature.node.kubernetes.io/override_source-override_value = my value
This commit is contained in:
Markus Lehtonen 2018-11-26 14:18:05 +02:00
parent 4b066ed815
commit 5af04ca3f6
2 changed files with 24 additions and 10 deletions

View file

@ -193,30 +193,38 @@ available inside the Docker image so Volumes and VolumeMounts must be used if
standard NFD images are used. standard NFD images are used.
The hook files must be executable. When executed, the hooks are supposed to The hook files must be executable. When executed, the hooks are supposed to
print all discovered features in `stdout`, one feature per line. Hook can print all discovered features in `stdout`, one feature per line. Hooks can
advertise both binary and non-binary labels, using either `<feature name>` or advertise both binary and non-binary labels, using either `<name>` or
`<feature name>=<feature value>` output format. Unlike other feature sources, `<name>=<value>` output format.
the source name (i.e. `local`) is not used as a prefix. The hook name is used
as the prefix, instead. The full name of node label name will conform to the Unlike the other feature sources, the name of the hook, instead of the name of
following convention: the feature source (that would be `local` in this case), is used as a prefix in
`feature.node.kubernetes.io/<hook name>-<feature name>`. the label name, normally. However, if the `<name>` printed by the hook starts
The value of the label is either `true` (for binary labels) or `<feature name>` with a slash (`/`) it is used as the label name as is, without any additional
prefix. This makes it possible for the hooks to fully control the feature
label names, e.g. for overriding labels created by other feature sources.
The value of the label is either `true` (for binary labels) or `<value>`
(for non-binary labels). (for non-binary labels).
`stderr` output of the hooks is propagated to NFD log so it can be used for `stderr` output of the hooks is propagated to NFD log so it can be used for
debugging and logging. debugging and logging.
**An example:** **An example:**<br/>
User has a shell script User has a shell script
`/etc/kubernetes/node-feature-discovery/source.d/my-source` which has the `/etc/kubernetes/node-feature-discovery/source.d/my-source` which has the
following `stdout` output: following `stdout` output:
``` ```
MY_FEATURE_1 MY_FEATURE_1
MY_FEATURE_2=myvalue MY_FEATURE_2=myvalue
/override_source-OVERRIDE_BOOL
/override_source-OVERRIDE_VALUE=123
``` ```
which, in turn, will translate into the following node labels: which, in turn, will translate into the following node labels:
``` ```
feature.node.kubernetes.io/my-source-MY_FEATURE_1=true feature.node.kubernetes.io/my-source-MY_FEATURE_1=true
feature.node.kubernetes.io/my-source-MY_FEATURE_2=myvalue feature.node.kubernetes.io/my-source-MY_FEATURE_2=myvalue
feature.node.kubernetes.io/override_source-OVERRIDE_BOOL=true
feature.node.kubernetes.io/override_source-OVERRIDE_VALUE=123
``` ```
**NOTE!** NFD will blindly run any executables placed/mounted in the hooks **NOTE!** NFD will blindly run any executables placed/mounted in the hooks

View file

@ -60,7 +60,13 @@ func (s Source) Discover() (source.Features, error) {
continue continue
} }
for feature, value := range hookFeatures { for feature, value := range hookFeatures {
features[hook+"-"+feature] = value if feature[0] == '/' {
// Use feature name as the label as is if it is prefixed with a slash
features[feature[1:]] = value
} else {
// Normally, use hook name as label prefix
features[hook+"-"+feature] = value
}
} }
} }