mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2025-03-10 18:57:59 +00:00
Extend the format of feature matcher terms (the elements of the arrayspecified under under matchFeatures field) with new matchName field. The value of this field is an expression that is evaluated against the names of feature elements instead of their values (values are matched with the matchExpressions field, instead). The matchName field is useful e.g. in template rules for creating per-feature-element labels based on feature names (instead of values) and in non-template rules for checking if (at least) one of certain feature element names are present. If both matchExpressions and matchName for certain feature matcher term is specified, they both must match in order to get an overall match. Also, in this case the list of matched features (used in templating) is the union of the results from matchExpressions and matchName. An example of creating an "avx512" label if any AVX512* CPUID feature is present: - name: "avx wildcard rule" labels: avx512: "true" matchFeatures: - feature: cpu.cpuid matchName: {op: InRegexp, value: ["^AVX512"]} An example of a template rule creating a dynamic set of labels based on the existence of certain kconfig options. - name: "kconfig template rule" labelsTemplate: | {{ range .kernel.config }}kconfig-{{ .Name }}={{ .Value }} {{ end }} matchFeatures: - feature: kernel.config matchName: {op: In, value: ["SWAP", "X86", "ARM"]} NOTE: this patch changes the corner case of nil/null match expressions with instance features (i.e. "matchExpressions: null"). Previously, we returned all instances for templating but now a nil match expression is not evaluated and no instances for templating are returned.
426 lines
21 KiB
YAML
426 lines
21 KiB
YAML
---
|
|
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
annotations:
|
|
controller-gen.kubebuilder.io/version: v0.12.1
|
|
name: nodefeatures.nfd.k8s-sigs.io
|
|
spec:
|
|
group: nfd.k8s-sigs.io
|
|
names:
|
|
kind: NodeFeature
|
|
listKind: NodeFeatureList
|
|
plural: nodefeatures
|
|
singular: nodefeature
|
|
scope: Namespaced
|
|
versions:
|
|
- name: v1alpha1
|
|
schema:
|
|
openAPIV3Schema:
|
|
description: NodeFeature resource holds the features discovered for one node
|
|
in the cluster.
|
|
properties:
|
|
apiVersion:
|
|
description: 'APIVersion defines the versioned schema of this representation
|
|
of an object. Servers should convert recognized schemas to the latest
|
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
|
type: string
|
|
kind:
|
|
description: 'Kind is a string value representing the REST resource this
|
|
object represents. Servers may infer this from the endpoint the client
|
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
|
type: string
|
|
metadata:
|
|
type: object
|
|
spec:
|
|
description: NodeFeatureSpec describes a NodeFeature object.
|
|
properties:
|
|
features:
|
|
description: Features is the full "raw" features data that has been
|
|
discovered.
|
|
properties:
|
|
attributes:
|
|
additionalProperties:
|
|
description: AttributeFeatureSet is a set of features having
|
|
string value.
|
|
properties:
|
|
elements:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
required:
|
|
- elements
|
|
type: object
|
|
description: Attributes contains all the attribute-type features
|
|
of the node.
|
|
type: object
|
|
flags:
|
|
additionalProperties:
|
|
description: FlagFeatureSet is a set of simple features only
|
|
containing names without values.
|
|
properties:
|
|
elements:
|
|
additionalProperties:
|
|
description: Nil is a dummy empty struct for protobuf
|
|
compatibility
|
|
type: object
|
|
type: object
|
|
required:
|
|
- elements
|
|
type: object
|
|
description: Flags contains all the flag-type features of the
|
|
node.
|
|
type: object
|
|
instances:
|
|
additionalProperties:
|
|
description: InstanceFeatureSet is a set of features each of
|
|
which is an instance having multiple attributes.
|
|
properties:
|
|
elements:
|
|
items:
|
|
description: InstanceFeature represents one instance of
|
|
a complex features, e.g. a device.
|
|
properties:
|
|
attributes:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
required:
|
|
- attributes
|
|
type: object
|
|
type: array
|
|
required:
|
|
- elements
|
|
type: object
|
|
description: Instances contains all the instance-type features
|
|
of the node.
|
|
type: object
|
|
type: object
|
|
labels:
|
|
additionalProperties:
|
|
type: string
|
|
description: Labels is the set of node labels that are requested to
|
|
be created.
|
|
type: object
|
|
type: object
|
|
required:
|
|
- spec
|
|
type: object
|
|
served: true
|
|
storage: true
|
|
---
|
|
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
annotations:
|
|
controller-gen.kubebuilder.io/version: v0.12.1
|
|
name: nodefeaturerules.nfd.k8s-sigs.io
|
|
spec:
|
|
group: nfd.k8s-sigs.io
|
|
names:
|
|
kind: NodeFeatureRule
|
|
listKind: NodeFeatureRuleList
|
|
plural: nodefeaturerules
|
|
shortNames:
|
|
- nfr
|
|
singular: nodefeaturerule
|
|
scope: Cluster
|
|
versions:
|
|
- name: v1alpha1
|
|
schema:
|
|
openAPIV3Schema:
|
|
description: NodeFeatureRule resource specifies a configuration for feature-based
|
|
customization of node objects, such as node labeling.
|
|
properties:
|
|
apiVersion:
|
|
description: 'APIVersion defines the versioned schema of this representation
|
|
of an object. Servers should convert recognized schemas to the latest
|
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
|
type: string
|
|
kind:
|
|
description: 'Kind is a string value representing the REST resource this
|
|
object represents. Servers may infer this from the endpoint the client
|
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
|
type: string
|
|
metadata:
|
|
type: object
|
|
spec:
|
|
description: NodeFeatureRuleSpec describes a NodeFeatureRule.
|
|
properties:
|
|
rules:
|
|
description: Rules is a list of node customization rules.
|
|
items:
|
|
description: Rule defines a rule for node customization such as
|
|
labeling.
|
|
properties:
|
|
annotations:
|
|
additionalProperties:
|
|
type: string
|
|
description: Annotations to create if the rule matches.
|
|
type: object
|
|
extendedResources:
|
|
additionalProperties:
|
|
type: string
|
|
description: ExtendedResources to create if the rule matches.
|
|
type: object
|
|
labels:
|
|
additionalProperties:
|
|
type: string
|
|
description: Labels to create if the rule matches.
|
|
type: object
|
|
labelsTemplate:
|
|
description: LabelsTemplate specifies a template to expand for
|
|
dynamically generating multiple labels. Data (after template
|
|
expansion) must be keys with an optional value (<key>[=<value>])
|
|
separated by newlines.
|
|
type: string
|
|
matchAny:
|
|
description: MatchAny specifies a list of matchers one of which
|
|
must match.
|
|
items:
|
|
description: MatchAnyElem specifies one sub-matcher of MatchAny.
|
|
properties:
|
|
matchFeatures:
|
|
description: MatchFeatures specifies a set of matcher
|
|
terms all of which must match.
|
|
items:
|
|
description: FeatureMatcherTerm defines requirements
|
|
against one feature set. All requirements (specified
|
|
as MatchExpressions) are evaluated against each element
|
|
in the feature set.
|
|
properties:
|
|
feature:
|
|
description: Feature is the name of the feature
|
|
set to match against.
|
|
type: string
|
|
matchExpressions:
|
|
additionalProperties:
|
|
description: MatchExpression specifies an expression
|
|
to evaluate against a set of input values. It
|
|
contains an operator that is applied when matching
|
|
the input and an array of values that the operator
|
|
evaluates the input against.
|
|
properties:
|
|
op:
|
|
description: Op is the operator to be applied.
|
|
enum:
|
|
- In
|
|
- NotIn
|
|
- InRegexp
|
|
- Exists
|
|
- DoesNotExist
|
|
- Gt
|
|
- Lt
|
|
- GtLt
|
|
- IsTrue
|
|
- IsFalse
|
|
type: string
|
|
value:
|
|
description: Value is the list of values that
|
|
the operand evaluates the input against.
|
|
Value should be empty if the operator is
|
|
Exists, DoesNotExist, IsTrue or IsFalse.
|
|
Value should contain exactly one element
|
|
if the operator is Gt or Lt and exactly
|
|
two elements if the operator is GtLt. In
|
|
other cases Value should contain at least
|
|
one element.
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- op
|
|
type: object
|
|
description: MatchExpressions is the set of per-element
|
|
expressions evaluated. These match against the
|
|
value of the specified elements.
|
|
type: object
|
|
matchName:
|
|
description: MatchName in an expression that is
|
|
matched against the name of each element in the
|
|
feature set.
|
|
properties:
|
|
op:
|
|
description: Op is the operator to be applied.
|
|
enum:
|
|
- In
|
|
- NotIn
|
|
- InRegexp
|
|
- Exists
|
|
- DoesNotExist
|
|
- Gt
|
|
- Lt
|
|
- GtLt
|
|
- IsTrue
|
|
- IsFalse
|
|
type: string
|
|
value:
|
|
description: Value is the list of values that
|
|
the operand evaluates the input against. Value
|
|
should be empty if the operator is Exists,
|
|
DoesNotExist, IsTrue or IsFalse. Value should
|
|
contain exactly one element if the operator
|
|
is Gt or Lt and exactly two elements if the
|
|
operator is GtLt. In other cases Value should
|
|
contain at least one element.
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- op
|
|
type: object
|
|
required:
|
|
- feature
|
|
type: object
|
|
type: array
|
|
required:
|
|
- matchFeatures
|
|
type: object
|
|
type: array
|
|
matchFeatures:
|
|
description: MatchFeatures specifies a set of matcher terms
|
|
all of which must match.
|
|
items:
|
|
description: FeatureMatcherTerm defines requirements against
|
|
one feature set. All requirements (specified as MatchExpressions)
|
|
are evaluated against each element in the feature set.
|
|
properties:
|
|
feature:
|
|
description: Feature is the name of the feature set to
|
|
match against.
|
|
type: string
|
|
matchExpressions:
|
|
additionalProperties:
|
|
description: MatchExpression specifies an expression
|
|
to evaluate against a set of input values. It contains
|
|
an operator that is applied when matching the input
|
|
and an array of values that the operator evaluates
|
|
the input against.
|
|
properties:
|
|
op:
|
|
description: Op is the operator to be applied.
|
|
enum:
|
|
- In
|
|
- NotIn
|
|
- InRegexp
|
|
- Exists
|
|
- DoesNotExist
|
|
- Gt
|
|
- Lt
|
|
- GtLt
|
|
- IsTrue
|
|
- IsFalse
|
|
type: string
|
|
value:
|
|
description: Value is the list of values that the
|
|
operand evaluates the input against. Value should
|
|
be empty if the operator is Exists, DoesNotExist,
|
|
IsTrue or IsFalse. Value should contain exactly
|
|
one element if the operator is Gt or Lt and exactly
|
|
two elements if the operator is GtLt. In other
|
|
cases Value should contain at least one element.
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- op
|
|
type: object
|
|
description: MatchExpressions is the set of per-element
|
|
expressions evaluated. These match against the value
|
|
of the specified elements.
|
|
type: object
|
|
matchName:
|
|
description: MatchName in an expression that is matched
|
|
against the name of each element in the feature set.
|
|
properties:
|
|
op:
|
|
description: Op is the operator to be applied.
|
|
enum:
|
|
- In
|
|
- NotIn
|
|
- InRegexp
|
|
- Exists
|
|
- DoesNotExist
|
|
- Gt
|
|
- Lt
|
|
- GtLt
|
|
- IsTrue
|
|
- IsFalse
|
|
type: string
|
|
value:
|
|
description: Value is the list of values that the
|
|
operand evaluates the input against. Value should
|
|
be empty if the operator is Exists, DoesNotExist,
|
|
IsTrue or IsFalse. Value should contain exactly
|
|
one element if the operator is Gt or Lt and exactly
|
|
two elements if the operator is GtLt. In other cases
|
|
Value should contain at least one element.
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- op
|
|
type: object
|
|
required:
|
|
- feature
|
|
type: object
|
|
type: array
|
|
name:
|
|
description: Name of the rule.
|
|
type: string
|
|
taints:
|
|
description: Taints to create if the rule matches.
|
|
items:
|
|
description: The node this Taint is attached to has the "effect"
|
|
on any pod that does not tolerate the Taint.
|
|
properties:
|
|
effect:
|
|
description: Required. The effect of the taint on pods
|
|
that do not tolerate the taint. Valid effects are NoSchedule,
|
|
PreferNoSchedule and NoExecute.
|
|
type: string
|
|
key:
|
|
description: Required. The taint key to be applied to
|
|
a node.
|
|
type: string
|
|
timeAdded:
|
|
description: TimeAdded represents the time at which the
|
|
taint was added. It is only written for NoExecute taints.
|
|
format: date-time
|
|
type: string
|
|
value:
|
|
description: The taint value corresponding to the taint
|
|
key.
|
|
type: string
|
|
required:
|
|
- effect
|
|
- key
|
|
type: object
|
|
type: array
|
|
vars:
|
|
additionalProperties:
|
|
type: string
|
|
description: Vars is the variables to store if the rule matches.
|
|
Variables do not directly inflict any changes in the node
|
|
object. However, they can be referenced from other rules enabling
|
|
more complex rule hierarchies, without exposing intermediary
|
|
output values as labels.
|
|
type: object
|
|
varsTemplate:
|
|
description: VarsTemplate specifies a template to expand for
|
|
dynamically generating multiple variables. Data (after template
|
|
expansion) must be keys with an optional value (<key>[=<value>])
|
|
separated by newlines.
|
|
type: string
|
|
required:
|
|
- name
|
|
type: object
|
|
type: array
|
|
required:
|
|
- rules
|
|
type: object
|
|
required:
|
|
- spec
|
|
type: object
|
|
served: true
|
|
storage: true
|