1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-28 10:47:23 +00:00
node-feature-discovery/pkg
Markus Lehtonen 79ed747be8 nfd-master: handle multiple NodeFeature objects
Implement handling of multiple NodeFeature objects by merging all
objects (targeting a certain node) into one before processing the data.
This patch implements MergeInto() methods for all required data types.

With support for multiple NodeFeature objects per node, The "nfd api
workflow" can be easily demonstrated and tested from the command line.
Creating the folloiwing object (assuming node-n exists in the cluster):

    apiVersion: nfd.k8s-sigs.io/v1alpha1
    kind: NodeFeature
    metadata:
      labels:
        nfd.node.kubernetes.io/node-name: node-n
      name: my-features-for-node-n
    spec:
      # Features for NodeFeatureRule matching
      features:
        flags:
          vendor.domain-a:
            elements:
              feature-x: {}
        attributes:
          vendor.domain-b:
            elements:
              feature-y: "foo"
              feature-z: "123"
        instances:
          vendor.domain-c:
            elements:
            - attributes:
                name: "elem-1"
                vendor: "acme"
            - attributes:
                name: "elem-2"
                vendor: "acme"
      # Labels to be created
      labels:
        vendor-feature.enabled: "true"
        vendor-setting.value: "100"

will create two feature labes:

    feature.node.kubernetes.io/vendor-feature.enabled: "true"
    feature.node.kubernetes.io/vendor-setting.value: "100"

In addition it will advertise hidden/raw features that can be used for
custom rules in NodeFeatureRule objects. Now, creating a NodeFeatureRule
object:

    apiVersion: nfd.k8s-sigs.io/v1alpha1
    kind: NodeFeatureRule
    metadata:
      name: my-rule
    spec:
      rules:
        - name: "my feature rule"
          labels:
            "my-feature": "true"
          matchFeatures:
            - feature: vendor.domain-a
              matchExpressions:
                feature-x: {op: Exists}
            - feature: vendor.domain-c
              matchExpressions:
                vendor: {op: In, value: ["acme"]}

will match the features in the NodeFeature object above and cause one
more label to be created:

    feature.node.kubernetes.io/my-feature: "true"
2022-12-14 15:44:52 +02:00
..
apihelper apis/nfd: update auto-generated code 2022-10-18 18:41:53 +03:00
apis/nfd/v1alpha1 nfd-master: handle multiple NodeFeature objects 2022-12-14 15:44:52 +02:00
cpuid pkg/cpuid: lint fixes 2020-05-20 21:48:06 +03:00
generated apis/nfd: update auto-generated code 2022-12-14 07:31:28 +02:00
labeler apis/nfd: update auto-generated code 2022-10-18 18:41:53 +03:00
nfd-client nfd-worker: support creating NodeFeatures object 2022-12-14 07:31:28 +02:00
nfd-master nfd-master: handle multiple NodeFeature objects 2022-12-14 15:44:52 +02:00
podres topologyupdater: Bootstrap nfd-topology-updater in NFD 2021-09-21 10:47:39 +01:00
resourcemonitor update test functions according to upstream deprecated/removed methods 2022-12-13 12:12:50 +02:00
topologypolicy topologyupdater: Bootstrap nfd-topology-updater in NFD 2021-09-21 10:47:39 +01:00
utils nfd-worker: detect the namespace it is running in 2022-12-08 10:34:52 +02:00
version version: allow undefined version 2020-03-20 07:21:43 +02:00