#core: # labelWhiteList: # noPublish: false # sleepInterval: 60s # featureSources: [all] # labelSources: [all] # klog: # addDirHeader: false # alsologtostderr: false # logBacktraceAt: # logtostderr: true # skipHeaders: false # stderrthreshold: 2 # v: 0 # vmodule: ## NOTE: the following options are not dynamically run-time configurable ## and require a nfd-worker restart to take effect after being changed # logDir: # logFile: # logFileMaxSize: 1800 # skipLogHeaders: false #sources: # cpu: # cpuid: ## NOTE: whitelist has priority over blacklist # attributeBlacklist: # - "AVX10" # - "BMI1" # - "BMI2" # - "CLMUL" # - "CMOV" # - "CX16" # - "ERMS" # - "F16C" # - "HTT" # - "LZCNT" # - "MMX" # - "MMXEXT" # - "NX" # - "POPCNT" # - "RDRAND" # - "RDSEED" # - "RDTSCP" # - "SGX" # - "SSE" # - "SSE2" # - "SSE3" # - "SSE4" # - "SSE42" # - "SSSE3" # - "TDX_GUEST" # attributeWhitelist: # kernel: # kconfigFile: "/path/to/kconfig" # configOpts: # - "NO_HZ" # - "X86" # - "DMI" # pci: # deviceClassWhitelist: # - "0200" # - "03" # - "12" # deviceLabelFields: # - "class" # - "vendor" # - "device" # - "subsystem_vendor" # - "subsystem_device" # usb: # deviceClassWhitelist: # - "0e" # - "ef" # - "fe" # - "ff" # deviceLabelFields: # - "class" # - "vendor" # - "device" # custom: # # The following feature demonstrates the capabilities of the matchFeatures # - name: "my custom rule" # labels: # "vendor.io/my-ng-feature": "true" # # matchFeatures implements a logical AND over all matcher terms in the # # list (i.e. all of the terms, or per-feature matchers, must match) # matchFeatures: # - feature: cpu.cpuid # matchExpressions: # AVX512F: {op: Exists} # - feature: cpu.cstate # matchExpressions: # enabled: {op: IsTrue} # - feature: cpu.pstate # matchExpressions: # no_turbo: {op: IsFalse} # scaling_governor: {op: In, value: ["performance"]} # - feature: cpu.rdt # matchExpressions: # RDTL3CA: {op: Exists} # - feature: cpu.sst # matchExpressions: # bf.enabled: {op: IsTrue} # - feature: cpu.topology # matchExpressions: # hardware_multithreading: {op: IsFalse} # # - feature: kernel.config # matchExpressions: # X86: {op: Exists} # LSM: {op: InRegexp, value: ["apparmor"]} # - feature: kernel.loadedmodule # matchExpressions: # e1000e: {op: Exists} # - feature: kernel.selinux # matchExpressions: # enabled: {op: IsFalse} # - feature: kernel.version # matchExpressions: # major: {op: In, value: ["5"]} # minor: {op: Gt, value: ["10"]} # # - feature: storage.block # matchExpressions: # rotational: {op: In, value: ["0"]} # dax: {op: In, value: ["0"]} # # - feature: network.device # matchExpressions: # operstate: {op: In, value: ["up"]} # speed: {op: Gt, value: ["100"]} # # - feature: memory.numa # matchExpressions: # node_count: {op: Gt, value: ["2"]} # - feature: memory.nv # matchExpressions: # devtype: {op: In, value: ["nd_dax"]} # mode: {op: In, value: ["memory"]} # # - feature: system.osrelease # matchExpressions: # ID: {op: In, value: ["fedora", "centos"]} # - feature: system.name # matchExpressions: # nodename: {op: InRegexp, value: ["^worker-X"]} # # - feature: local.label # matchExpressions: # custom-feature-knob: {op: Gt, value: ["100"]} # # # The following feature demonstrates the capabilities of the matchAny # - name: "my matchAny rule" # labels: # "vendor.io/my-ng-feature-2": "my-value" # # matchAny implements a logical IF over all elements (sub-matchers) in # # the list (i.e. at least one feature matcher must match) # matchAny: # - matchFeatures: # - feature: kernel.loadedmodule # matchExpressions: # driver-module-X: {op: Exists} # - feature: pci.device # matchExpressions: # vendor: {op: In, value: ["8086"]} # class: {op: In, value: ["0200"]} # - matchFeatures: # - feature: kernel.loadedmodule # matchExpressions: # driver-module-Y: {op: Exists} # - feature: usb.device # matchExpressions: # vendor: {op: In, value: ["8086"]} # class: {op: In, value: ["02"]} # # - name: "avx wildcard rule" # labels: # "my-avx-feature": "true" # matchFeatures: # - feature: cpu.cpuid # matchName: {op: InRegexp, value: ["^AVX512"]} # # # The following features demonstreate label templating capabilities # - name: "my template rule" # labelsTemplate: | # {{ range .system.osrelease }}vendor.io/my-system-feature.{{ .Name }}={{ .Value }} # {{ end }} # matchFeatures: # - feature: system.osrelease # matchExpressions: # ID: {op: InRegexp, value: ["^open.*"]} # VERSION_ID.major: {op: In, value: ["13", "15"]} # # - name: "my template rule 2" # labelsTemplate: | # {{ range .pci.device }}vendor.io/my-pci-device.{{ .class }}-{{ .device }}=with-cpuid # {{ end }} # matchFeatures: # - feature: pci.device # matchExpressions: # class: {op: InRegexp, value: ["^06"]} # vendor: ["8086"] # - feature: cpu.cpuid # matchExpressions: # AVX: {op: Exists} # # # The following examples demonstrate vars field and back-referencing # # previous labels and vars # - name: "my dummy kernel rule" # labels: # "vendor.io/my.kernel.feature": "true" # matchFeatures: # - feature: kernel.version # matchExpressions: # major: {op: Gt, value: ["2"]} # # - name: "my dummy rule with no labels" # vars: # "my.dummy.var": "1" # matchFeatures: # - feature: cpu.cpuid # matchExpressions: {} # # - name: "my rule using backrefs" # labels: # "vendor.io/my.backref.feature": "true" # matchFeatures: # - feature: rule.matched # matchExpressions: # vendor.io/my.kernel.feature: {op: IsTrue} # my.dummy.var: {op: Gt, value: ["0"]} # # - name: "kconfig template rule" # labelsTemplate: | # {{ range .kernel.config }}kconfig-{{ .Name }}={{ .Value }} # {{ end }} # matchFeatures: # - feature: kernel.config # matchName: {op: In, value: ["SWAP", "X86", "ARM"]}