File charts.obscpio of Package sriov-network-operator-chart

07070100619D35000041ED000003E800000064000000016908B8E200000000000000000000002D00000000000000000000001100000000charts/sriov-nfd07070100619D36000041ED000003E8000000640000000168FF5A3300000000000000000000002D00000000000000000000001600000000charts/sriov-nfd/crds07070100619D38000041ED000003E800000064000000016908C24700000000000000000000002D00000000000000000000001B00000000charts/sriov-nfd/templates07070100619D4B000081A4000003E8000000640000000168FF99950000015D000000000000002D00000000000000000000001D00000000charts/sriov-nfd/.helmignore# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
07070100619D4D000081A4000003E8000000640000000168FF99FD000001C6000000000000002D00000000000000000000001B00000000charts/sriov-nfd/README.md# Node Feature Discovery

Node Feature Discovery (NFD) is a Kubernetes add-on for detecting hardware
features and system configuration. Detected features are advertised as node
labels. NFD provides flexible configuration and extension points for a wide
range of vendor and application specific node labeling needs.

See
[NFD documentation](https://kubernetes-sigs.github.io/node-feature-discovery/v0.18/deployment/helm.html)
for deployment instructions.
0707010066852C000081A4000003E800000064000000016908B8CD000001AE000000000000002D00000000000000000000001C00000000charts/sriov-nfd/Chart.yamlapiVersion: v2
appVersion: v0.18.2
description: |
  Detects hardware features available on each node in a Kubernetes cluster, and advertises
  those features using node labels.
name: sriov-nfd
sources:
- https://github.com/kubernetes-sigs/node-feature-discovery
home: https://github.com/kubernetes-sigs/node-feature-discovery
keywords:
  - feature-discovery
  - feature-detection
  - node-labels
type: application
version: 0.18.2
07070100668538000081A4000003E800000064000000016908BC0F000042D3000000000000002D00000000000000000000001D00000000charts/sriov-nfd/values.yamlimage:
  repository: "%%IMG_REPO%%/%%IMG_PREFIX%%node-feature-discovery"
  # This should be set to 'IfNotPresent' for released version
  pullPolicy: IfNotPresent
  # tag, if defined will use the given image tag, else Chart.AppVersion will be used
  # tag
imagePullSecrets: []

nameOverride: ""
fullnameOverride: ""
namespaceOverride: ""

featureGates:
  NodeFeatureGroupAPI: false

priorityClassName: ""

postDeleteCleanup: true

master:
  enable: true
  extraArgs: []
  extraEnvs: []
  hostNetwork: false
  dnsPolicy: ClusterFirstWithHostNet
  config: ### <NFD-MASTER-CONF-START-DO-NOT-REMOVE>
    # noPublish: false
    # extraLabelNs: ["added.ns.io","added.kubernets.io"]
    # denyLabelNs: ["denied.ns.io","denied.kubernetes.io"]
    # enableTaints: false
    # informerPageSize: 200
    # labelWhiteList: "foo"
    # resyncPeriod: "2h"
    # restrictions:
    #   disableLabels: true
    #   disableTaints: true
    #   disableExtendedResources: true
    #   disableAnnotations: true
    #   allowOverwrite: false
    #   denyNodeFeatureLabels: true
    #   nodeFeatureNamespaceSelector:
    #    matchLabels:
    #      kubernetes.io/metadata.name: "node-feature-discovery"
    #    matchExpressions:
    #      - key: "kubernetes.io/metadata.name"
    #        operator: "In"
    #        values:
    #           - "node-feature-discovery"
    # 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-master restart to take effect after being changed
    #    logDir:
    #    logFile:
    #    logFileMaxSize: 1800
    #    skipLogHeaders: false
    # leaderElection:
    #   leaseDuration: 15s
    #   # this value has to be lower than leaseDuration and greater than retryPeriod*1.2
    #   renewDeadline: 10s
    #   # this value has to be greater than 0
    #   retryPeriod: 2s
    # nfdApiParallelism: 10
  ### <NFD-MASTER-CONF-END-DO-NOT-REMOVE>
  port: 8080
  instance:
  resyncPeriod:
  denyLabelNs: []
  extraLabelNs: []
  enableTaints: false
  nfdApiParallelism: null
  deploymentAnnotations: {}
  replicaCount: 1

  podSecurityContext: {}
    # fsGroup: 2000

  securityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop: [ "ALL" ]
    readOnlyRootFilesystem: true
    runAsNonRoot: true
    # runAsUser: 1000

  serviceAccount:
    # Specifies whether a service account should be created
    create: true
    # Annotations to add to the service account
    annotations: {}
    # The name of the service account to use.
    # If not set and create is true, a name is generated using the fullname template
    name:

  # specify how many old ReplicaSets for the Deployment to retain.
  revisionHistoryLimit:

  rbac:
    create: true

  resources: {}
    #limits:
    #  memory: 4Gi
    #requests:
    #  cpu: 100m
      # You may want to use the same value for `requests.memory` and `limits.memory`. The “requests” value affects scheduling to accommodate pods on nodes.
      # If there is a large difference between “requests” and “limits” and nodes experience memory pressure, the kernel may invoke
      # the OOM Killer, even if the memory does not exceed the “limits” threshold. This can cause unexpected pod evictions. Memory
      # cannot be compressed and once allocated to a pod, it can only be reclaimed by killing the pod.
      # Natan Yellin 22/09/2022 https://home.robusta.dev/blog/kubernetes-memory-limit
    #  memory: 128Mi

  nodeSelector: {}

  tolerations:
  - key: "node-role.kubernetes.io/master"
    operator: "Equal"
    value: ""
    effect: "NoSchedule"
  - key: "node-role.kubernetes.io/control-plane"
    operator: "Equal"
    value: ""
    effect: "NoSchedule"

  podDisruptionBudget:
    enable: false
    minAvailable: 1
    unhealthyPodEvictionPolicy: AlwaysAllow

  annotations: {}

  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: "node-role.kubernetes.io/control-plane"
                operator: In
                values: [""]
                
  startupProbe:
    failureThreshold: 30
    # periodSeconds: 10
  livenessProbe: {}
    # failureThreshold: 3
    # initialDelaySeconds: 0
    # periodSeconds: 10
    # timeoutSeconds: 1
  readinessProbe:
    failureThreshold: 10
    # initialDelaySeconds: 0
    # periodSeconds: 10
    # timeoutSeconds: 1
    # successThreshold: 1

worker:
  enable: true
  extraArgs: []
  extraEnvs: []
  hostNetwork: false
  dnsPolicy: ClusterFirstWithHostNet
  config: ### <NFD-WORKER-CONF-START-DO-NOT-REMOVE>
    #core:
    #  labelWhiteList:
    #  noPublish: false
    #  noOwnerRefs: 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"]}
### <NFD-WORKER-CONF-END-DO-NOT-REMOVE>

  port: 8080
  daemonsetAnnotations: {}
  podSecurityContext: {}
    # fsGroup: 2000

  securityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop: [ "ALL" ]
    readOnlyRootFilesystem: true
    runAsNonRoot: true
    # runAsUser: 1000

  livenessProbe:
    initialDelaySeconds: 10
    # failureThreshold: 3
    # periodSeconds: 10
    # timeoutSeconds: 1
  readinessProbe:
    initialDelaySeconds: 5
    failureThreshold: 10
    # periodSeconds: 10
    # timeoutSeconds: 1
    # successThreshold: 1

  serviceAccount:
    # Specifies whether a service account should be created.
    # We create this by default to make it easier for downstream users to apply PodSecurityPolicies.
    create: true
    # Annotations to add to the service account
    annotations: {}
    # The name of the service account to use.
    # If not set and create is true, a name is generated using the fullname template
    name:

  # specify how many old ControllerRevisions for the DaemonSet to retain.
  revisionHistoryLimit:

  rbac:
    create: true

  # Allow users to mount the hostPath /usr/src, useful for RHCOS on s390x
  # Does not work on systems without /usr/src AND a read-only /usr, such as Talos
  mountUsrSrc: false

  resources: {}
    #limits:
    #  memory: 512Mi
    #requests:
    #  cpu: 5m
    #  memory: 64Mi

  nodeSelector: {}

  tolerations: []

  annotations: {}

  affinity: {}

  priorityClassName: ""

  updateStrategy: {}
    # type: RollingUpdate
    # rollingUpdate:
    #   maxSurge: 0
    #   maxUnavailable: "10%"

topologyUpdater:
  config: ### <NFD-TOPOLOGY-UPDATER-CONF-START-DO-NOT-REMOVE>
    ## key = node name, value = list of resources to be excluded.
    ## use * to exclude from all nodes.
    ## an example for how the exclude list should looks like
    #excludeList:
    #  node1: [cpu]
    #  node2: [memory, example/deviceA]
    #  *: [hugepages-2Mi]
### <NFD-TOPOLOGY-UPDATER-CONF-END-DO-NOT-REMOVE>

  enable: false
  createCRDs: false
  extraArgs: []
  extraEnvs: []
  hostNetwork: false
  dnsPolicy: ClusterFirstWithHostNet

  serviceAccount:
    create: true
    annotations: {}
    name:

  # specify how many old ControllerRevisions for the DaemonSet to retain.
  revisionHistoryLimit:

  rbac:
    create: true

  port: 8080
  kubeletConfigPath:
  kubeletPodResourcesSockPath:
  updateInterval: 60s
  watchNamespace: "*"
  kubeletStateDir: /var/lib/kubelet

  podSecurityContext: {}
  securityContext:
    allowPrivilegeEscalation: false
    capabilities:
      drop: [ "ALL" ]
    readOnlyRootFilesystem: true
    runAsUser: 0

  livenessProbe:
    initialDelaySeconds: 10
    # failureThreshold: 3
    # periodSeconds: 10
    # timeoutSeconds: 1
  readinessProbe:
    initialDelaySeconds: 5
    failureThreshold: 10
    # periodSeconds: 10
    # timeoutSeconds: 1
    # successThreshold: 1

  resources: {}
    #limits:
    #  memory: 60Mi
    #requests:
    #  cpu: 50m
    #  memory: 40Mi

  nodeSelector: {}
  tolerations: []
  annotations: {}
  daemonsetAnnotations: {}
  affinity: {}
  podSetFingerprint: true

gc:
  enable: true
  extraArgs: []
  extraEnvs: []
  hostNetwork: false
  replicaCount: 1
  dnsPolicy: ClusterFirstWithHostNet

  serviceAccount:
    create: true
    annotations: {}
    name:
  rbac:
    create: true

  interval: 1h

  podSecurityContext: {}

  livenessProbe:
    initialDelaySeconds: 10
    # failureThreshold: 3
    # periodSeconds: 10
    # timeoutSeconds: 1
  readinessProbe:
    initialDelaySeconds: 5
    # failureThreshold: 3
    # periodSeconds: 10
    # timeoutSeconds: 1
    # successThreshold: 1

  resources: {}
    #limits:
    #  memory: 1Gi
    #requests:
    #  cpu: 10m
    #  memory: 128Mi

  port: 8080

  nodeSelector: {}
  tolerations: []
  annotations: {}
  deploymentAnnotations: {}
  affinity: {}

  podDisruptionBudget:
    enable: false
    minAvailable: 1
    unhealthyPodEvictionPolicy: AlwaysAllow

  # specify how many old ReplicaSets for the Deployment to retain.
  revisionHistoryLimit:

prometheus:
  enable: false
  scrapeInterval: 10s
  labels: {}
07070100619D37000081A4000003E800000064000000016908C51700009B32000000000000002D00000000000000000000002800000000charts/sriov-nfd/crds/nfd-api-crds.yaml---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.3
  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: Specification of the NodeFeature, containing features discovered
              for a node.
            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
                          description: Individual features of the feature set.
                          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.
                              NOTE: protobuf definitions have been removed but this is kept for API compatibility.
                            type: object
                          description: Individual features of the feature set.
                          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:
                          description: Individual features of the feature set.
                          items:
                            description: InstanceFeature represents one instance of
                              a complex features, e.g. a device.
                            properties:
                              attributes:
                                additionalProperties:
                                  type: string
                                description: Attributes of the instance feature.
                                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.16.3
  name: nodefeaturegroups.nfd.k8s-sigs.io
spec:
  group: nfd.k8s-sigs.io
  names:
    kind: NodeFeatureGroup
    listKind: NodeFeatureGroupList
    plural: nodefeaturegroups
    shortNames:
    - nfg
    singular: nodefeaturegroup
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: NodeFeatureGroup resource holds Node pools by featureGroup
        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: Spec defines the rules to be evaluated.
            properties:
              featureGroupRules:
                description: List of rules to evaluate to determine nodes that belong
                  in this group.
                items:
                  description: GroupRule defines a rule for nodegroup filtering.
                  properties:
                    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
                                        - Ge
                                        - Lt
                                        - Le
                                        - GtLt
                                        - GeLe
                                        - IsTrue
                                        - IsFalse
                                        type: string
                                      type:
                                        description: |-
                                          Type defines the value type for specific operators.
                                          The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                        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
                                      - Ge
                                      - Lt
                                      - Le
                                      - GtLt
                                      - GeLe
                                      - IsTrue
                                      - IsFalse
                                      type: string
                                    type:
                                      description: |-
                                        Type defines the value type for specific operators.
                                        The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                      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
                                  - Ge
                                  - Lt
                                  - Le
                                  - GtLt
                                  - GeLe
                                  - IsTrue
                                  - IsFalse
                                  type: string
                                type:
                                  description: |-
                                    Type defines the value type for specific operators.
                                    The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                  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
                                - Ge
                                - Lt
                                - Le
                                - GtLt
                                - GeLe
                                - IsTrue
                                - IsFalse
                                type: string
                              type:
                                description: |-
                                  Type defines the value type for specific operators.
                                  The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                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
                    vars:
                      additionalProperties:
                        type: string
                      description: |-
                        Vars is the variables to store if the rule matches. Variables can be
                        referenced from other rules enabling more complex rule hierarchies.
                      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:
            - featureGroupRules
            type: object
          status:
            description: |-
              Status of the NodeFeatureGroup after the most recent evaluation of the
              specification.
            properties:
              nodes:
                description: Nodes is a list of FeatureGroupNode in the cluster that
                  match the featureGroupRules
                items:
                  properties:
                    name:
                      description: Name of the node.
                      type: string
                  required:
                  - name
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.3
  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: Spec defines the rules to be evaluated.
            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
                                        - Ge
                                        - Lt
                                        - Le
                                        - GtLt
                                        - GeLe
                                        - IsTrue
                                        - IsFalse
                                        type: string
                                      type:
                                        description: |-
                                          Type defines the value type for specific operators.
                                          The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                        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
                                      - Ge
                                      - Lt
                                      - Le
                                      - GtLt
                                      - GeLe
                                      - IsTrue
                                      - IsFalse
                                      type: string
                                    type:
                                      description: |-
                                        Type defines the value type for specific operators.
                                        The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                      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
                                  - Ge
                                  - Lt
                                  - Le
                                  - GtLt
                                  - GeLe
                                  - IsTrue
                                  - IsFalse
                                  type: string
                                type:
                                  description: |-
                                    Type defines the value type for specific operators.
                                    The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                  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
                                - Ge
                                - Lt
                                - Le
                                - GtLt
                                - GeLe
                                - IsTrue
                                - IsFalse
                                type: string
                              type:
                                description: |-
                                  Type defines the value type for specific operators.
                                  The currently supported type is 'version' for Gt,Ge,Lt,Le,GtLt,GeLe operators.
                                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
0707010061E080000081A4000003E8000000640000000168FFA9D300000710000000000000002D00000000000000000000003300000000charts/sriov-nfd/templates/clusterrolebinding.yaml{{- if and .Values.master.enable .Values.master.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: {{ include "node-feature-discovery.fullname" . }}
subjects:
- kind: ServiceAccount
  name: {{ include "node-feature-discovery.master.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" .  }}
{{- end }}

{{- if and .Values.topologyUpdater.enable .Values.topologyUpdater.rbac.create }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
subjects:
- kind: ServiceAccount
  name: {{ include "node-feature-discovery.topologyUpdater.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" .  }}
{{- end }}

{{- if and .Values.gc.enable .Values.gc.rbac.create }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-gc
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: {{ include "node-feature-discovery.fullname" . }}-gc
subjects:
- kind: ServiceAccount
  name: {{ include "node-feature-discovery.gc.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" .  }}
{{- end }}
0707010061E081000081A4000003E8000000640000000168FFA9D3000008D3000000000000002D00000000000000000000002C00000000charts/sriov-nfd/templates/clusterrole.yaml{{- if and .Values.master.enable .Values.master.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - watch
  - list
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/status
  verbs:
  - get
  - patch
  - update
  - list
- apiGroups:
  - nfd.k8s-sigs.io
  resources:
  - nodefeatures
  - nodefeaturerules
  - nodefeaturegroups
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - nfd.k8s-sigs.io
  resources:
  - nodefeaturegroups/status
  verbs:
  - patch
  - update
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - create
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  resourceNames:
  - "nfd-master.nfd.kubernetes.io"
  verbs:
  - get
  - update
{{- end }}

{{- if and .Values.topologyUpdater.enable .Values.topologyUpdater.rbac.create }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
- apiGroups:
    - ""
  resources:
    - nodes/proxy
  verbs:
    - get
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - topology.node.k8s.io
  resources:
  - noderesourcetopologies
  verbs:
  - create
  - get
  - update
{{- end }}

{{- if and .Values.gc.enable .Values.gc.rbac.create }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-gc
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/proxy
  verbs:
  - get
- apiGroups:
  - topology.node.k8s.io
  resources:
  - noderesourcetopologies
  verbs:
  - delete
  - list
- apiGroups:
  - nfd.k8s-sigs.io
  resources:
  - nodefeatures
  verbs:
  - delete
  - list
{{- end }}
0707010061E082000081A4000003E800000064000000016908BF3300001218000000000000002D00000000000000000000002800000000charts/sriov-nfd/templates/_helpers.tpl{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "node-feature-discovery.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "node-feature-discovery.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}

{{/*
Allow the release namespace to be overridden for multi-namespace deployments in combined charts
*/}}
{{- define "node-feature-discovery.namespace" -}}
  {{- if .Values.namespaceOverride -}}
    {{- .Values.namespaceOverride -}}
  {{- else -}}
    {{- .Release.Namespace -}}
  {{- end -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "node-feature-discovery.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Common labels
*/}}
{{- define "node-feature-discovery.labels" -}}
helm.sh/chart: {{ include "node-feature-discovery.chart" . }}
{{ include "node-feature-discovery.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}

{{/*
Selector labels
*/}}
{{- define "node-feature-discovery.selectorLabels" -}}
app.kubernetes.io/name: {{ include "node-feature-discovery.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}

{{/*
Create the name of the service account which the nfd master will use
*/}}
{{- define "node-feature-discovery.master.serviceAccountName" -}}
{{- if .Values.master.serviceAccount.create -}}
    {{ default (include "node-feature-discovery.fullname" .) .Values.master.serviceAccount.name }}
{{- else -}}
    {{ default "default" .Values.master.serviceAccount.name }}
{{- end -}}
{{- end -}}

{{/*
Create the name of the service account which the nfd worker will use
*/}}
{{- define "node-feature-discovery.worker.serviceAccountName" -}}
{{- if .Values.worker.serviceAccount.create -}}
    {{ default (printf "%s-worker" (include "node-feature-discovery.fullname" .)) .Values.worker.serviceAccount.name }}
{{- else -}}
    {{ default "default" .Values.worker.serviceAccount.name }}
{{- end -}}
{{- end -}}

{{/*
Create the name of the service account which topologyUpdater will use
*/}}
{{- define "node-feature-discovery.topologyUpdater.serviceAccountName" -}}
{{- if .Values.topologyUpdater.serviceAccount.create -}}
    {{ default (printf "%s-topology-updater" (include "node-feature-discovery.fullname" .)) .Values.topologyUpdater.serviceAccount.name }}
{{- else -}}
    {{ default "default" .Values.topologyUpdater.serviceAccount.name }}
{{- end -}}
{{- end -}}

{{/*
Create the name of the service account which nfd-gc will use
*/}}
{{- define "node-feature-discovery.gc.serviceAccountName" -}}
{{- if .Values.gc.serviceAccount.create -}}
    {{ default (printf "%s-gc" (include "node-feature-discovery.fullname" .)) .Values.gc.serviceAccount.name }}
{{- else -}}
    {{ default "default" .Values.gc.serviceAccount.name }}
{{- end -}}
{{- end -}}

{{/*
imagePullSecrets helper - uses local values or falls back to global values
*/}}
{{- define "node-feature-discovery.imagePullSecrets" -}}
{{- $imagePullSecrets := list -}}
{{- if .Values.imagePullSecrets -}}
  {{- range .Values.imagePullSecrets -}}
    {{- $imagePullSecrets = append $imagePullSecrets . -}}
  {{- end -}}
{{- else if and .Values.global .Values.global.imagePullSecrets -}}
  {{- range .Values.global.imagePullSecrets -}}
    {{- $imagePullSecrets = append $imagePullSecrets . -}}
  {{- end -}}
{{- end -}}
{{- if $imagePullSecrets -}}
{{- $imagePullSecrets | toJson }}
{{- end -}}

{{/*
system_default_registry helper - prints global value "cattle.systemDefaultRegistry" (adding a "/" at the end) 
or empty string (if this global Helm param. not defined)
*/}}
{{- define "node-feature-discovery.system_default_registry" -}}
{{- if .Values.global.cattle.systemDefaultRegistry -}}
  {{- printf "%s/" .Values.global.cattle.systemDefaultRegistry -}}
{{- else -}}
  {{- "" -}}
{{- end -}}
{{- end -}}
0707010061E084000081A4000003E800000064000000016908C062000018CB000000000000002D00000000000000000000002700000000charts/sriov-nfd/templates/master.yaml{{- if .Values.master.enable }}
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  {{ include "node-feature-discovery.fullname" . }}-master
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
    role: master
  {{- with .Values.master.deploymentAnnotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  replicas: {{ .Values.master.replicaCount }}
  revisionHistoryLimit: {{ .Values.master.revisionHistoryLimit }}
  selector:
    matchLabels:
      {{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
      role: master
  template:
    metadata:
      labels:
        {{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
        role: master
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/nfd-master-conf.yaml") . | sha256sum }}
        {{- with .Values.master.annotations }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
    spec:
      dnsPolicy: {{ .Values.master.dnsPolicy }}
    {{- with .Values.priorityClassName }}
      priorityClassName: {{ . }}
    {{- end }}
      imagePullSecrets: {{ include "node-feature-discovery.imagePullSecrets" . }}
      serviceAccountName: {{ include "node-feature-discovery.master.serviceAccountName" . }}
      enableServiceLinks: false
      securityContext:
        {{- toYaml .Values.master.podSecurityContext | nindent 8 }}
      hostNetwork: {{ .Values.master.hostNetwork }}
      containers:
        - name: master
          securityContext:
            {{- toYaml .Values.master.securityContext | nindent 12 }}
          image: "{{ include "node-feature-discovery.system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          startupProbe:
            httpGet:
              path: /healthz
              port: http
          {{- with .Values.master.startupProbe.initialDelaySeconds }}
            initialDelaySeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.startupProbe.failureThreshold }}
            failureThreshold: {{ . }}
          {{- end }}
          {{- with .Values.master.startupProbe.periodSeconds }}
            periodSeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.startupProbe.timeoutSeconds }}
            timeoutSeconds: {{ . }}
          {{- end }}
          livenessProbe:
            httpGet:
              path: /healthz
              port: http
          {{- with .Values.master.livenessProbe.initialDelaySeconds }}
            initialDelaySeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.livenessProbe.failureThreshold }}
            failureThreshold: {{ . }}
          {{- end }}
          {{- with .Values.master.livenessProbe.periodSeconds }}
            periodSeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.livenessProbe.timeoutSeconds }}
            timeoutSeconds: {{ . }}
          {{- end }}
          readinessProbe:
            httpGet:
              path: /healthz
              port: http
          {{- with .Values.master.readinessProbe.initialDelaySeconds }}
            initialDelaySeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.readinessProbe.failureThreshold }}
            failureThreshold: {{ . }}
          {{- end }}
          {{- with .Values.master.readinessProbe.periodSeconds }}
            periodSeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.readinessProbe.timeoutSeconds }}
            timeoutSeconds: {{ . }}
          {{- end }}
          {{- with .Values.master.readinessProbe.successThreshold }}
            successThreshold: {{ . }}
          {{- end }}
          ports:
          - containerPort: {{ .Values.master.port | default "8080" }}
            name: http
          env:
          - name: NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
        {{- with .Values.master.extraEnvs }}
          {{- toYaml . | nindent 10 }}
        {{- end}}
          command:
            - "nfd-master"
          resources:
            {{- toYaml .Values.master.resources | nindent 12 }}
          args:
            {{- if .Values.master.instance | empty | not }}
            - "-instance={{ .Values.master.instance }}"
            {{- end }}
            - "-enable-leader-election"
            {{- if .Values.master.extraLabelNs | empty | not }}
            - "-extra-label-ns={{- join "," .Values.master.extraLabelNs }}"
            {{- end }}
            {{- if .Values.master.denyLabelNs | empty | not }}
            - "-deny-label-ns={{- join "," .Values.master.denyLabelNs }}"
            {{- end }}
            {{- if .Values.master.enableTaints }}
            - "-enable-taints"
            {{- end }}
            {{- if .Values.master.resyncPeriod }}
            - "-resync-period={{ .Values.master.resyncPeriod }}"
            {{- end }}
            {{- if .Values.master.nfdApiParallelism | empty | not }}
            - "-nfd-api-parallelism={{ .Values.master.nfdApiParallelism }}"
            {{- end }}
            # Go over featureGates and add the feature-gate flag
            {{- range $key, $value := .Values.featureGates }}
            - "-feature-gates={{ $key }}={{ $value }}"
            {{- end }}
            - "-port={{ .Values.master.port | default "8080" }}"
            {{- with .Values.master.extraArgs }}
            {{- toYaml . | nindent 12 }}
            {{- end }}
          volumeMounts:
            - name: nfd-master-conf
              mountPath: "/etc/kubernetes/node-feature-discovery"
              readOnly: true
      volumes:
        - name: nfd-master-conf
          configMap:
            name: {{ include "node-feature-discovery.fullname" . }}-master-conf
            items:
              - key: nfd-master.conf
                path: nfd-master.conf
    {{- with .Values.master.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.master.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.master.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}
{{- end }}
0707010061E086000081A4000003E800000064000000016908C13A00000FB9000000000000002D00000000000000000000002700000000charts/sriov-nfd/templates/nfd-gc.yaml{{- if and .Values.gc.enable -}}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-gc
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
    role: gc
  {{- with .Values.gc.deploymentAnnotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  replicas: {{ .Values.gc.replicaCount | default 1 }}
  revisionHistoryLimit: {{ .Values.gc.revisionHistoryLimit }}
  selector:
    matchLabels:
      {{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
      role: gc
  template:
    metadata:
      labels:
        {{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
        role: gc
      {{- with .Values.gc.annotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    spec:
      serviceAccountName: {{ include "node-feature-discovery.gc.serviceAccountName" . }}
      dnsPolicy: {{ .Values.gc.dnsPolicy }}
    {{- with .Values.priorityClassName }}
      priorityClassName: {{ . }}
    {{- end }}
      imagePullSecrets: {{ include "node-feature-discovery.imagePullSecrets" . }}
      securityContext:
        {{- toYaml .Values.gc.podSecurityContext | nindent 8 }}
      hostNetwork: {{ .Values.gc.hostNetwork }}
      containers:
      - name: gc
        image: "{{ include "node-feature-discovery.system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
        imagePullPolicy: "{{ .Values.image.pullPolicy }}"
        livenessProbe:
          httpGet:
            path: /healthz
            port: http
        {{- with .Values.gc.livenessProbe.initialDelaySeconds }}
          initialDelaySeconds: {{ . }}
        {{- end }}
        {{- with .Values.gc.livenessProbe.failureThreshold }}
          failureThreshold: {{ . }}
        {{- end }}
        {{- with .Values.gc.livenessProbe.periodSeconds }}
          periodSeconds: {{ . }}
        {{- end }}
        {{- with .Values.gc.livenessProbe.timeoutSeconds }}
          timeoutSeconds: {{ . }}
        {{- end }}
        readinessProbe:
          httpGet:
            path: /healthz
            port: http
        {{- with .Values.gc.readinessProbe.initialDelaySeconds }}
          initialDelaySeconds: {{ . }}
        {{- end }}
        {{- with .Values.gc.readinessProbe.failureThreshold }}
          failureThreshold: {{ . }}
        {{- end }}
        {{- with .Values.gc.readinessProbe.periodSeconds }}
          periodSeconds: {{ . }}
        {{- end }}
        {{- with .Values.gc.readinessProbe.timeoutSeconds }}
          timeoutSeconds: {{ . }}
        {{- end }}
        {{- with .Values.gc.readinessProbe.successThreshold }}
          successThreshold: {{ . }}
        {{- end }}
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
      {{- with .Values.gc.extraEnvs }}
        {{- toYaml . | nindent 8 }}
      {{- end}}
        command:
          - "nfd-gc"
        args:
          {{- if .Values.gc.interval | empty | not }}
          - "-gc-interval={{ .Values.gc.interval }}"
          {{- end }}
          {{- with .Values.gc.extraArgs }}
          {{- toYaml . | nindent 10 }}
          {{- end }}
        resources:
      {{- toYaml .Values.gc.resources | nindent 12 }}
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: [ "ALL" ]
          readOnlyRootFilesystem: true
          runAsNonRoot: true
        ports:
          - name: http
            containerPort: {{ .Values.gc.port | default "8080"}}

    {{- with .Values.gc.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.gc.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.gc.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}
{{- end }}
0707010061E087000081A4000003E8000000640000000168FFA9D300000175000000000000002D00000000000000000000003000000000charts/sriov-nfd/templates/nfd-master-conf.yaml{{- if .Values.master.enable }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-master-conf
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
  {{- include "node-feature-discovery.labels" . | nindent 4 }}
data:
  nfd-master.conf: |-
    {{- .Values.master.config | toYaml | nindent 4 }}
{{- end }}
0707010061E088000081A4000003E8000000640000000168FFA9D30000019C000000000000002D00000000000000000000003900000000charts/sriov-nfd/templates/nfd-topologyupdater-conf.yaml{{- if .Values.topologyUpdater.enable -}}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-topology-updater-conf
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
  {{- include "node-feature-discovery.labels" . | nindent 4 }}
data:
  nfd-topology-updater.conf: |-
    {{- .Values.topologyUpdater.config | toYaml | nindent 4 }}
{{- end }}
0707010061E089000081A4000003E8000000640000000168FFA9D300000175000000000000002D00000000000000000000003000000000charts/sriov-nfd/templates/nfd-worker-conf.yaml{{- if .Values.worker.enable }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-worker-conf
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
  {{- include "node-feature-discovery.labels" . | nindent 4 }}
data:
  nfd-worker.conf: |-
    {{- .Values.worker.config | toYaml | nindent 4 }}
{{- end }}
0707010061E08A000081A4000003E800000064000000016908C20700000CA5000000000000002D00000000000000000000003000000000charts/sriov-nfd/templates/post-delete-job.yaml{{- if .Values.postDeleteCleanup }}
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-prune
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  annotations:
    "helm.sh/hook": post-delete
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-prune
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  annotations:
    "helm.sh/hook": post-delete
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/status
  verbs:
  - get
  - patch
  - update
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-prune
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  annotations:
    "helm.sh/hook": post-delete
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: {{ include "node-feature-discovery.fullname" . }}-prune
subjects:
- kind: ServiceAccount
  name: {{ include "node-feature-discovery.fullname" . }}-prune
  namespace: {{ include "node-feature-discovery.namespace" .  }}
---
apiVersion: batch/v1
kind: Job
metadata:
  name:  {{ include "node-feature-discovery.fullname" . }}-prune
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  annotations:
    "helm.sh/hook": post-delete
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
  template:
    metadata:
      labels:
        {{- include "node-feature-discovery.labels" . | nindent 8 }}
        role: prune
    spec:
      serviceAccountName: {{ include "node-feature-discovery.fullname" . }}-prune
      imagePullSecrets: {{ include "node-feature-discovery.imagePullSecrets" . }}
      containers:
        - name: nfd-master
          securityContext:
            {{- toYaml .Values.master.securityContext | nindent 12 }}
          image: "{{ include "node-feature-discovery.system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          command:
            - "nfd-master"
          args:
            - "-prune"
            {{- if .Values.master.instance | empty | not }}
            - "-instance={{ .Values.master.instance }}"
            {{- end }}
      restartPolicy: Never
      {{- with .Values.master.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.master.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.master.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      {{- with .Values.master.resources }}
      resources:
        {{- toYaml . | nindent 8 }}
      {{- end }}
{{- end }}
0707010061E08C000081A4000003E8000000640000000168FFA9D300000286000000000000002D00000000000000000000002C00000000charts/sriov-nfd/templates/rolebinding.yaml{{- if and .Values.worker.enable .Values.worker.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-worker
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: {{ include "node-feature-discovery.fullname" . }}-worker
subjects:
- kind: ServiceAccount
  name: {{ include "node-feature-discovery.worker.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" .  }}
{{- end }}

0707010061E08D000081A4000003E8000000640000000168FFA9D300000207000000000000002D00000000000000000000002500000000charts/sriov-nfd/templates/role.yaml{{- if and .Values.worker.enable .Values.worker.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-worker
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
rules:
- apiGroups:
  - nfd.k8s-sigs.io
  resources:
  - nodefeatures
  verbs:
  - create
  - get
  - update
  - delete
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
{{- end }}
0707010061E08E000081A4000003E8000000640000000168FFA9D300000753000000000000002D00000000000000000000002F00000000charts/sriov-nfd/templates/serviceaccount.yaml{{- if and .Values.master.enable .Values.master.serviceAccount.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "node-feature-discovery.master.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  {{- with .Values.master.serviceAccount.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
{{- end }}

{{- if and .Values.topologyUpdater.enable .Values.topologyUpdater.serviceAccount.create }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "node-feature-discovery.topologyUpdater.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  {{- with .Values.topologyUpdater.serviceAccount.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
{{- end }}

{{- if and .Values.gc.enable .Values.gc.serviceAccount.create }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "node-feature-discovery.gc.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  {{- with .Values.gc.serviceAccount.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
{{- end }}

{{- if and .Values.worker.enable .Values.worker.serviceAccount.create }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: {{ include "node-feature-discovery.worker.serviceAccountName" . }}
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
  {{- with .Values.worker.serviceAccount.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
{{- end }}
0707010061E08F000081A4000003E8000000640000000168FFA9D300002DFE000000000000002D00000000000000000000003500000000charts/sriov-nfd/templates/topologyupdater-crds.yaml{{- if and .Values.topologyUpdater.enable .Values.topologyUpdater.createCRDs -}}
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    api-approved.kubernetes.io: https://github.com/kubernetes/enhancements/pull/1870
    controller-gen.kubebuilder.io/version: v0.11.2
  creationTimestamp: null
  name: noderesourcetopologies.topology.node.k8s.io
spec:
  group: topology.node.k8s.io
  names:
    kind: NodeResourceTopology
    listKind: NodeResourceTopologyList
    plural: noderesourcetopologies
    shortNames:
    - node-res-topo
    singular: noderesourcetopology
  scope: Cluster
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: NodeResourceTopology describes node resources and their topology.
        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
          topologyPolicies:
            items:
              type: string
            type: array
          zones:
            description: ZoneList contains an array of Zone objects.
            items:
              description: Zone represents a resource topology zone, e.g. socket,
                node, die or core.
              properties:
                attributes:
                  description: AttributeList contains an array of AttributeInfo objects.
                  items:
                    description: AttributeInfo contains one attribute of a Zone.
                    properties:
                      name:
                        type: string
                      value:
                        type: string
                    required:
                    - name
                    - value
                    type: object
                  type: array
                costs:
                  description: CostList contains an array of CostInfo objects.
                  items:
                    description: CostInfo describes the cost (or distance) between
                      two Zones.
                    properties:
                      name:
                        type: string
                      value:
                        format: int64
                        type: integer
                    required:
                    - name
                    - value
                    type: object
                  type: array
                name:
                  type: string
                parent:
                  type: string
                resources:
                  description: ResourceInfoList contains an array of ResourceInfo
                    objects.
                  items:
                    description: ResourceInfo contains information about one resource
                      type.
                    properties:
                      allocatable:
                        anyOf:
                        - type: integer
                        - type: string
                        description: Allocatable quantity of the resource, corresponding
                          to allocatable in node status, i.e. total amount of this
                          resource available to be used by pods.
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      available:
                        anyOf:
                        - type: integer
                        - type: string
                        description: Available is the amount of this resource currently
                          available for new (to be scheduled) pods, i.e. Allocatable
                          minus the resources reserved by currently running pods.
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      capacity:
                        anyOf:
                        - type: integer
                        - type: string
                        description: Capacity of the resource, corresponding to capacity
                          in node status, i.e. total amount of this resource that
                          the node has.
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      name:
                        description: Name of the resource.
                        type: string
                    required:
                    - allocatable
                    - available
                    - capacity
                    - name
                    type: object
                  type: array
                type:
                  type: string
              required:
              - name
              - type
              type: object
            type: array
        required:
        - topologyPolicies
        - zones
        type: object
    served: true
    storage: false
  - name: v1alpha2
    schema:
      openAPIV3Schema:
        description: NodeResourceTopology describes node resources and their topology.
        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
          attributes:
            description: AttributeList contains an array of AttributeInfo objects.
            items:
              description: AttributeInfo contains one attribute of a Zone.
              properties:
                name:
                  type: string
                value:
                  type: string
              required:
              - name
              - value
              type: object
            type: array
          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
          topologyPolicies:
            description: 'DEPRECATED (to be removed in v1beta1): use top level attributes
              if needed'
            items:
              type: string
            type: array
          zones:
            description: ZoneList contains an array of Zone objects.
            items:
              description: Zone represents a resource topology zone, e.g. socket,
                node, die or core.
              properties:
                attributes:
                  description: AttributeList contains an array of AttributeInfo objects.
                  items:
                    description: AttributeInfo contains one attribute of a Zone.
                    properties:
                      name:
                        type: string
                      value:
                        type: string
                    required:
                    - name
                    - value
                    type: object
                  type: array
                costs:
                  description: CostList contains an array of CostInfo objects.
                  items:
                    description: CostInfo describes the cost (or distance) between
                      two Zones.
                    properties:
                      name:
                        type: string
                      value:
                        format: int64
                        type: integer
                    required:
                    - name
                    - value
                    type: object
                  type: array
                name:
                  type: string
                parent:
                  type: string
                resources:
                  description: ResourceInfoList contains an array of ResourceInfo
                    objects.
                  items:
                    description: ResourceInfo contains information about one resource
                      type.
                    properties:
                      allocatable:
                        anyOf:
                        - type: integer
                        - type: string
                        description: Allocatable quantity of the resource, corresponding
                          to allocatable in node status, i.e. total amount of this
                          resource available to be used by pods.
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      available:
                        anyOf:
                        - type: integer
                        - type: string
                        description: Available is the amount of this resource currently
                          available for new (to be scheduled) pods, i.e. Allocatable
                          minus the resources reserved by currently running pods.
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      capacity:
                        anyOf:
                        - type: integer
                        - type: string
                        description: Capacity of the resource, corresponding to capacity
                          in node status, i.e. total amount of this resource that
                          the node has.
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      name:
                        description: Name of the resource.
                        type: string
                    required:
                    - allocatable
                    - available
                    - capacity
                    - name
                    type: object
                  type: array
                type:
                  type: string
              required:
              - name
              - type
              type: object
            type: array
        required:
        - zones
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
{{- end }}
0707010061E090000081A4000003E800000064000000016908C32800001C1A000000000000002D00000000000000000000003000000000charts/sriov-nfd/templates/topologyupdater.yaml{{- if .Values.topologyUpdater.enable -}}
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}-topology-updater
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
    role: topology-updater
  {{- with .Values.topologyUpdater.daemonsetAnnotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  revisionHistoryLimit: {{ .Values.topologyUpdater.revisionHistoryLimit }}
  selector:
    matchLabels:
      {{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
      role: topology-updater
  template:
    metadata:
      labels:
        {{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
        role: topology-updater
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/nfd-topologyupdater-conf.yaml") . | sha256sum }}
        {{- with .Values.topologyUpdater.annotations }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
    spec:
      serviceAccountName: {{ include "node-feature-discovery.topologyUpdater.serviceAccountName" . }}
      dnsPolicy: {{ .Values.topologyUpdater.dnsPolicy }}
    {{- with .Values.priorityClassName }}
      priorityClassName: {{ . }}
    {{- end }}
      imagePullSecrets: {{ include "node-feature-discovery.imagePullSecrets" . }}
      securityContext:
        {{- toYaml .Values.topologyUpdater.podSecurityContext | nindent 8 }}
      hostNetwork: {{ .Values.topologyUpdater.hostNetwork }}
      containers:
      - name: topology-updater
        image: "{{ include "node-feature-discovery.system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
        imagePullPolicy: "{{ .Values.image.pullPolicy }}"
        livenessProbe:
          httpGet:
            path: /healthz
            port: http
        {{- with .Values.topologyUpdater.livenessProbe.initialDelaySeconds }}
          initialDelaySeconds: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.livenessProbe.failureThreshold }}
          failureThreshold: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.livenessProbe.periodSeconds }}
          periodSeconds: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.livenessProbe.timeoutSeconds }}
          timeoutSeconds: {{ . }}
        {{- end }}
        readinessProbe:
          httpGet:
            path: /healthz
            port: http
        {{- with .Values.topologyUpdater.readinessProbe.initialDelaySeconds }}
          initialDelaySeconds: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.readinessProbe.failureThreshold }}
          failureThreshold: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.readinessProbe.periodSeconds }}
          periodSeconds: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.readinessProbe.timeoutSeconds }}
          timeoutSeconds: {{ . }}
        {{- end }}
        {{- with .Values.topologyUpdater.readinessProbe.successThreshold }}
          successThreshold: {{ . }}
        {{- end }}
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: NODE_ADDRESS
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
      {{- with .Values.topologyUpdater.extraEnvs }}
        {{- toYaml . | nindent 8 }}
      {{- end}}
        command:
          - "nfd-topology-updater"
        args:
          - "-podresources-socket=/host-var/lib/kubelet-podresources/kubelet.sock"
          {{- if .Values.topologyUpdater.updateInterval | empty | not }}
          - "-sleep-interval={{ .Values.topologyUpdater.updateInterval }}"
          {{- else }}
          - "-sleep-interval=3s"
          {{- end }}
          {{- if .Values.topologyUpdater.watchNamespace | empty | not }}
          - "-watch-namespace={{ .Values.topologyUpdater.watchNamespace }}"
          {{- else }}
          - "-watch-namespace=*"
          {{- end }}
          {{- if not .Values.topologyUpdater.podSetFingerprint }}
          - "-pods-fingerprint=false"
          {{- end }}
          {{- if .Values.topologyUpdater.kubeletConfigPath | empty | not }}
          - "-kubelet-config-uri=file:///host-var/kubelet-config"
          {{- end }}
          {{- if .Values.topologyUpdater.kubeletStateDir | empty }}
          # Disable kubelet state tracking by giving an empty path
          - "-kubelet-state-dir="
          {{- end }}
          - "-port={{ .Values.topologyUpdater.port | default "8080"}}"
          {{- with .Values.topologyUpdater.extraArgs }}
          {{- toYaml . | nindent 10 }}
          {{- end }}
        ports:
          - containerPort: {{ .Values.topologyUpdater.port | default "8080"}}
            name: http
        volumeMounts:
        {{- if .Values.topologyUpdater.kubeletConfigPath | empty | not }}
        - name: kubelet-config
          mountPath: /host-var/kubelet-config
        {{- end }}
        - name: kubelet-podresources-sock
          mountPath: /host-var/lib/kubelet-podresources/kubelet.sock
        - name: host-sys
          mountPath: /host-sys
        {{- if .Values.topologyUpdater.kubeletStateDir | empty | not }}
        - name: kubelet-state-files
          mountPath: /host-var/lib/kubelet
          readOnly: true
        {{- end }}
        - name: nfd-topology-updater-conf
          mountPath: "/etc/kubernetes/node-feature-discovery"
          readOnly: true

        resources:
      {{- toYaml .Values.topologyUpdater.resources | nindent 12 }}
        securityContext:
      {{- toYaml .Values.topologyUpdater.securityContext | nindent 12 }}
      volumes:
      - name: host-sys
        hostPath:
          path: "/sys"
      {{- if .Values.topologyUpdater.kubeletConfigPath | empty | not }}
      - name: kubelet-config
        hostPath:
          path: {{ .Values.topologyUpdater.kubeletConfigPath }}
      {{- end }}
      - name: kubelet-podresources-sock
        hostPath:
          {{- if .Values.topologyUpdater.kubeletPodResourcesSockPath | empty | not }}
          path: {{ .Values.topologyUpdater.kubeletPodResourcesSockPath }}
          {{- else }}
          path: /var/lib/kubelet/pod-resources/kubelet.sock
          {{- end }}
      {{- if .Values.topologyUpdater.kubeletStateDir | empty | not }}
      - name: kubelet-state-files
        hostPath:
          path: {{ .Values.topologyUpdater.kubeletStateDir }}
      {{- end }}
      - name: nfd-topology-updater-conf
        configMap:
          name: {{ include "node-feature-discovery.fullname" . }}-topology-updater-conf
          items:
            - key: nfd-topology-updater.conf
              path: nfd-topology-updater.conf

    {{- with .Values.topologyUpdater.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.topologyUpdater.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.topologyUpdater.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}
{{- end }}
0707010061E091000081A4000003E800000064000000016908C3C7000019A1000000000000002D00000000000000000000002700000000charts/sriov-nfd/templates/worker.yaml{{- if .Values.worker.enable }}
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name:  {{ include "node-feature-discovery.fullname" . }}-worker
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
    role: worker
  {{- with .Values.worker.daemonsetAnnotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  revisionHistoryLimit: {{ .Values.worker.revisionHistoryLimit }}
  {{- with .Values.worker.updateStrategy }}
  updateStrategy:
    {{- toYaml . | nindent 4 }}
  {{- end}}
  selector:
    matchLabels:
      {{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
      role: worker
  template:
    metadata:
      labels:
        {{- include "node-feature-discovery.selectorLabels" . | nindent 8 }}
        role: worker
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/nfd-worker-conf.yaml") . | sha256sum }}
        {{- with .Values.worker.annotations }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
    spec:
      dnsPolicy: {{ .Values.worker.dnsPolicy }}
    {{- with .Values.priorityClassName }}
      priorityClassName: {{ . }}
    {{- end }}
      imagePullSecrets: {{ include "node-feature-discovery.imagePullSecrets" . }}
      serviceAccountName: {{ include "node-feature-discovery.worker.serviceAccountName" . }}
      securityContext:
        {{- toYaml .Values.worker.podSecurityContext | nindent 8 }}
      hostNetwork: {{ .Values.worker.hostNetwork }}
      containers:
      - name: worker
        securityContext:
          {{- toYaml .Values.worker.securityContext | nindent 12 }}
        image: "{{ include "node-feature-discovery.system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        livenessProbe:
          httpGet:
            path: /healthz
            port: http
        {{- with .Values.worker.livenessProbe.initialDelaySeconds }}
          initialDelaySeconds: {{ . }}
        {{- end }}
        {{- with .Values.worker.livenessProbe.failureThreshold }}
          failureThreshold: {{ . }}
        {{- end }}
        {{- with .Values.worker.livenessProbe.periodSeconds }}
          periodSeconds: {{ . }}
        {{- end }}
        {{- with .Values.worker.livenessProbe.timeoutSeconds }}
          timeoutSeconds: {{ . }}
        {{- end }}
        readinessProbe:
          httpGet:
            path: /healthz
            port: http
        {{- with .Values.worker.readinessProbe.initialDelaySeconds }}
          initialDelaySeconds: {{ . }}
        {{- end }}
        {{- with .Values.worker.readinessProbe.failureThreshold }}
          failureThreshold: {{ . }}
        {{- end }}
        {{- with .Values.worker.readinessProbe.periodSeconds }}
          periodSeconds: {{ . }}
        {{- end }}
        {{- with .Values.worker.readinessProbe.timeoutSeconds }}
          timeoutSeconds: {{ . }}
        {{- end }}
        {{- with .Values.worker.readinessProbe.successThreshold }}
          successThreshold: {{ . }}
        {{- end }}
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_UID
          valueFrom:
            fieldRef:
              fieldPath: metadata.uid
      {{- with .Values.worker.extraEnvs }}
        {{- toYaml . | nindent 8 }}
      {{- end}}
        resources:
        {{- toYaml .Values.worker.resources | nindent 12 }}
        command:
        - "nfd-worker"
        args:
        # Go over featureGate and add the feature-gate flag
        {{- range $key, $value := .Values.featureGates }}
        - "-feature-gates={{ $key }}={{ $value }}"
        {{- end }}
        - "-port={{ .Values.worker.port | default "8080"}}"
        {{- with .Values.worker.extraArgs }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
        ports:
          - containerPort: {{ .Values.worker.port | default "8080"}}
            name: http
        volumeMounts:
        - name: host-boot
          mountPath: "/host-boot"
          readOnly: true
        - name: host-os-release
          mountPath: "/host-etc/os-release"
          readOnly: true
        - name: host-sys
          mountPath: "/host-sys"
          readOnly: true
        - name: host-usr-lib
          mountPath: "/host-usr/lib"
          readOnly: true
        - name: host-lib
          mountPath: "/host-lib"
          readOnly: true
        - name: host-proc-swaps
          mountPath: "/host-proc/swaps"
          readOnly: true
        {{- if .Values.worker.mountUsrSrc }}
        - name: host-usr-src
          mountPath: "/host-usr/src"
          readOnly: true
        {{- end }}
        - name: features-d
          mountPath: "/etc/kubernetes/node-feature-discovery/features.d/"
          readOnly: true
        - name: nfd-worker-conf
          mountPath: "/etc/kubernetes/node-feature-discovery"
          readOnly: true
      volumes:
        - name: host-boot
          hostPath:
            path: "/boot"
        - name: host-os-release
          hostPath:
            path: "/etc/os-release"
        - name: host-sys
          hostPath:
            path: "/sys"
        - name: host-usr-lib
          hostPath:
            path: "/usr/lib"
        - name: host-lib
          hostPath:
            path: "/lib"
        - name: host-proc-swaps
          hostPath:
            path: "/proc/swaps"
        {{- if .Values.worker.mountUsrSrc }}
        - name: host-usr-src
          hostPath:
            path: "/usr/src"
        {{- end }}
        - name: features-d
          hostPath:
            path: "/etc/kubernetes/node-feature-discovery/features.d/"
        - name: nfd-worker-conf
          configMap:
            name: {{ include "node-feature-discovery.fullname" . }}-worker-conf
            items:
              - key: nfd-worker.conf
                path: nfd-worker.conf
      {{- with .Values.worker.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.worker.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.worker.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.worker.priorityClassName }}
      priorityClassName: {{ . | quote }}
    {{- end }}
{{- end }}
07070100668711000081A4000003E800000064000000016908BD4100000240000000000000002D00000000000000000000002B00000000charts/sriov-nfd/templates/master-pdb.yaml{{- if .Values.master.enable }}
{{- if .Values.master.podDisruptionBudget.enable -}}
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name:  {{ include "node-feature-discovery.fullname" . }}-master
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
spec:
  selector:
    matchLabels:
      {{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
      role: master
{{- toYaml (omit .Values.master.podDisruptionBudget "enable") | nindent 2 }}
{{- end }}
{{- end }}
07070100668713000081A4000003E800000064000000016908BD530000022C000000000000002D00000000000000000000002B00000000charts/sriov-nfd/templates/nfd-gc-pdb.yaml{{- if .Values.gc.enable }}
{{- if .Values.gc.podDisruptionBudget.enable -}}
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name:  {{ include "node-feature-discovery.fullname" . }}-gc
  namespace: {{ include "node-feature-discovery.namespace" . }}
  labels:
    {{- include "node-feature-discovery.labels" . | nindent 4 }}
spec:
  selector:
    matchLabels:
      {{- include "node-feature-discovery.selectorLabels" . | nindent 6 }}
      role: gc
{{- toYaml (omit .Values.gc.podDisruptionBudget "enable") | nindent 2 }}
{{- end }}
{{- end }}
070701006688C7000081A4000003E800000064000000016908C24700000365000000000000002D00000000000000000000002B00000000charts/sriov-nfd/templates/prometheus.yaml{{- if .Values.prometheus.enable }}
# Prometheus Monitor Service (Metrics)
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: {{ include "node-feature-discovery.fullname" . }}
  labels:
    {{- include "node-feature-discovery.selectorLabels" . | nindent 4 }}
    {{- with .Values.prometheus.labels }}
    {{ toYaml . | nindent 4 }}
    {{- end }}
spec:
  podMetricsEndpoints:
    - honorLabels: true
      interval: {{ .Values.prometheus.scrapeInterval }}
      path: /metrics
      port: http
      scheme: http
  namespaceSelector:
    matchNames:
    - {{ include "node-feature-discovery.namespace" . }}
  selector:
    matchExpressions:
    - {key: app.kubernetes.io/instance, operator: In, values: ["{{ .Release.Name }}"]}
    - {key: app.kubernetes.io/name, operator: In, values: ["{{ include "node-feature-discovery.name" . }}"]}
{{- end }}
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!
openSUSE Build Service is sponsored by