# Default values for akri.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

# useLatestContainers is specified if the latest or latest-dev
# tags should be used.  This will be overridden if *.image.tag
# is specified.
useLatestContainers: false

# useDevelopmentContainers is specified if the non-release (*-dev)
# tags should be used.  This will be overridden if *.image.tag
# is specified.
useDevelopmentContainers: false

# imagePullSecrets is the array of secrets needed to pull images.
# This can be set from the helm command line using `--set imagePullSecrets[0].name="mysecret"`
imagePullSecrets: []

# kubernetesDistro describes the Kubernetes distro Akri is running on. It is used to conditionally set
# distribution specific values such as container runtime socket. Options: microk8s | k3s | k8s
kubernetesDistro: ""

# generalize references to `apiGroups` and `apiVersion` values for Akri CRDs
crds:
  group: akri.sh
  version: v0

rbac:
  # enabled defines whether to apply rbac to Akri
  enabled: true

prometheus:
  # enabled defines whether metrics ports are exposed on
  # the Controller and Agent
  enabled: false
  # endpoint is the path the port exposed for metrics
  endpoint: /metrics
  # port is the port that the metrics service is exposed on
  port: 8080
  # portName is the name of the metrics port
  portName: metrics

controller:
  # enabled defines whether to apply the Akri Controller
  enabled: true
  image:
    # repository is the Akri Controller container reference
    repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-controller"
    # tag is the Akri Controller container tag
    # controller.yaml will default to v(AppVersion)[-dev]
    # with `-dev` added if `useDevelopmentContainers` is specified
    tag:
    # pullPolicy is the Akri Controller pull policy
    pullPolicy: "Always"
  # ensures container doesn't run with unnecessary priviledges
  securityContext:
    runAsUser: 1000
    allowPrivilegeEscalation: false
    runAsNonRoot: true
    readOnlyRootFilesystem: true
    capabilities:
      drop: ["ALL"]
  # onlyOnControlPlane dictates whether the Akri Controller will only run on nodes with 
  # the label with (key, value) of ("node-role.kubernetes.io/master", "")
  onlyOnControlPlane: false
  # allowOnControlPlane dictates whether a toleration will be added to allow to Akri Controller 
  # to run on the control plane node
  allowOnControlPlane: true
  # nodeSelectors is the array of nodeSelectors used to target nodes for the Akri Controller to run on
  # This can be set from the helm command line using `--set controller.nodeSelectors.label="value"`
  nodeSelectors: {}
  resources:
    # memoryRequest defines the minimum amount of RAM that must be available to this Pod
    # for it to be scheduled by the Kubernetes Scheduler
    memoryRequest: 11Mi
    # cpuRequest defines the minimum amount of CPU that must be available to this Pod
    # for it to be scheduled by the Kubernetes Scheduler
    cpuRequest: 10m
    # memoryLimit defines the maximum amount of RAM this Pod can consume.
    memoryLimit: 100Mi
    # cpuLimit defines the maximum amount of CPU this Pod can consume.
    cpuLimit: 26m

agent:
  # enabled defines whether to apply the Akri Agent
  enabled: true
  image:
    # repository is the Akri Agent container reference
    repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-agent"
    # tag is the Akri Agent container tag
    # agent.yaml will default to v(AppVersion)[-dev]
    # with `-dev` added if `useDevelopmentContainers` is specified
    tag:
    # pullPolicy is the Akri Agent pull policy
    pullPolicy: ""
  securityContext:
    privileged: true
  host:
    # discoveryHandlers is the location of Akri Discovery Handler sockets and
    # the agent registration service
    discoveryHandlers: /var/lib/akri
    # kubeletDevicePlugins is the location of the kubelet device-plugin sockets
    kubeletDevicePlugins: /var/lib/kubelet/device-plugins
    # containerRuntimeSocket is the default node path of the container runtime socket. 
    # For MicroK8s, set to "/var/snap/microk8s/common/run/containerd.sock"
    # For K3s, set to "/run/k3s/containerd/containerd.sock"
    # For standard K8s, set to "/run/containerd/containerd.sock"
    containerRuntimeSocket: ""
    # udev is the node path of udev, usually at `/run/udev`
    udev:
  # allowDebugEcho dictates whether the Akri Agent will allow DebugEcho Configurations
  allowDebugEcho: false
  # nodeSelectors is the array of nodeSelectors used to target nodes for the Akri Agent to run on
  # This can be set from the helm command line using `--set agent.nodeSelectors.label="value"`
  nodeSelectors: {}
  resources:
    # memoryRequest defines the minimum amount of RAM that must be available to this Pod
    # for it to be scheduled by the Kubernetes Scheduler
    memoryRequest: 11Mi
    # cpuRequest defines the minimum amount of CPU that must be available to this Pod
    # for it to be scheduled by the Kubernetes Scheduler
    cpuRequest: 10m
    # memoryLimit defines the maximum amount of RAM this Pod can consume.
    memoryLimit: 79Mi
    # cpuLimit defines the maximum amount of CPU this Pod can consume.
    cpuLimit: 26m

custom:
  configuration:
    # enabled defines whether to load a custom configuration
    enabled: false
    # name is the Kubernetes resource name that will be created for this
    # custom configuration
    name: akri-custom
    # discoveryHandlerName is the name of the Discovery Handler the Configuration is using
    discoveryHandlerName:
    # brokerProperties is a map of properties that will be passed to any instances
    # created as a result of applying this custom configuration
    brokerProperties: {}
    # capacity is the capacity for any instances created as a result of
    # applying this custom configuration
    capacity: 1
    # discoveryDetails is the string of discovery details that is 
    # passed to a Discovery Handler which can parse it into an expected format.
    discoveryDetails: ""
    brokerPod:
      image:
        # repository is the custom broker container reference
        repository:
        # tag is the custom broker image tag
        tag: latest
        # pullPolicy is the custom pull policy
        pullPolicy: ""
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 11Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 10m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 24Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 24m
    brokerJob: 
      # container used by custom
      image:
        # repository is the custom broker container reference
        repository: 
        # tag is the custom broker image tag
        tag: latest
        # pullPolicy is the custom pull policy
        pullPolicy: ""
      # command to be executed in the Pod. An array of arguments. Can be set like:
      # --set custom.configuration.brokerJob.command[0]="sh" \
      # --set custom.configuration.brokerJob.command[1]="-c" \
      # --set custom.configuration.brokerJob.command[2]="echo 'Hello World'"
      command:
      # restartPolicy for the Job. Can either be OnFailure or Never.
      restartPolicy: OnFailure
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 11Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 10m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 24Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 24m
      # backoffLimit defines the Kubernetes Job backoff failure policy. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy
      backoffLimit: 2
      # parallelism defines how many Pods of a Job should run in parallel. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs
      parallelism: 1
      # completions defines how many Pods of a Job should successfully complete. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job
      completions: 1
    # createInstanceServices is specified if a service should automatically be
    # created for each broker pod
    createInstanceServices: true
    instanceService:
      # name is the description of the instance service
      name: akri-custom-instance-service
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 6052
      # targetPort is the service targetPort of the instance service
      targetPort: 6052
      # protocol is the service protocol of the instance service
      protocol: TCP
    # createConfigurationService is specified if a single service should automatically be
    # created for all broker pods of a Configuration
    createConfigurationService: true
    configurationService:
      # name is the description of the configuration service
      name: akri-custom-configuration-service
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 6052
      # targetPort is the service targetPort of the instance service
      targetPort: 6052
      # protocol is the service protocol of the instance service
      protocol: TCP
  # discovery defines a set of values for a custom discovery handler DaemonSet
  discovery: 
    # exposes discovery handler name as akri.sh/discoveryHandlerName annotation on the DaemonSet
    discoveryHandlerName: ''
    # enabled defines whether discovery handler pods will be deployed in a slim Agent scenario
    enabled: false
    # name is the Kubernetes resource name that will be created for this
    # custom Discovery Handler DaemonSet
    name: akri-custom-discovery
    image:
      # repository is the custom broker container reference
      repository:
      # tag is the custom broker image tag
      tag: latest
      # pullPolicy is the pull policy
      pullPolicy: ""
    # useNetworkConnection specifies whether the discovery handler should make a networked connection
    # with Agents, using its pod IP address when registering
    useNetworkConnection: false
    # port specifies (when useNetworkConnection is true) the port on which the discovery handler advertises its discovery service
    port: 10000
    # nodeSelectors is the array of nodeSelectors used to target nodes for the discovery handler to run on
    # This can be set from the helm command line using `--set custom.discovery.nodeSelectors.label="value"`
    nodeSelectors: {}
    resources:
      # memoryRequest defines the minimum amount of RAM that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      memoryRequest: 11Mi
      # cpuRequest defines the minimum amount of CPU that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      cpuRequest: 10m
      # memoryLimit defines the maximum amount of RAM this Pod can consume.
      memoryLimit: 24Mi
      # cpuLimit defines the maximum amount of CPU this Pod can consume.
      cpuLimit: 24m

debugEcho:
  configuration:
    # enabled defines whether to load a debugEcho configuration
    enabled: false
    # name is the Kubernetes resource name that will be created for this
    # debugEcho configuration
    name: akri-debug-echo
    # brokerProperties is a map of properties that will be passed to any instances
    # created as a result of applying this debugEcho configuration
    brokerProperties: {}
    # capacity is the capacity for any instances created as a result of
    # applying this debugEcho configuration
    capacity: 2
    discoveryDetails:
      # descriptions is the list of instances created as a result of
      # applying this debugEcho configuration
      descriptions:
      - "foo0"
      - "foo1"
    # shared defines whether instances created as a result of
    # applying this debugEcho configuration are shared
    shared: true
    brokerPod:
      # container used by debugEcho
      image:
        # repository is the debugEcho broker container reference
        repository:
        # tag is the debugEcho broker image tag
        tag: latest
        # pullPolicy is the debugEcho pull policy
        pullPolicy: ""
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 10Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 10m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 30Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 29m
    brokerJob: 
      # container used by debugEcho
      image:
        # repository is the debugEcho broker container reference
        repository: 
        # tag is the debugEcho broker image tag
        tag: latest
        # pullPolicy is the debugEcho pull policy
        pullPolicy: ""
      # command to be executed in the Pod. An array of arguments. Can be set like:
      # --set debugEcho.configuration.brokerJob.command[0]="sh" \
      # --set debugEcho.configuration.brokerJob.command[1]="-c" \
      # --set debugEcho.configuration.brokerJob.command[2]="echo 'Hello World'" \
      command:
      # restartPolicy for the Job. Can either be OnFailure or Never.
      restartPolicy: OnFailure
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 10Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 10m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 30Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 29m
      # backoffLimit defines the Kubernetes Job backoff failure policy. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy
      backoffLimit: 2
      # parallelism defines how many Pods of a Job should run in parallel. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs
      parallelism: 1
      # completions defines how many Pods of a Job should successfully complete. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job
      completions: 1
    # createInstanceServices is specified if a service should automatically be
    # created for each broker pod
    createInstanceServices: true
    instanceService:
      # name is the description of the instance service
      name: akri-debug-echo-foo-instance-service
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 6052
      # targetPort is the service targetPort of the instance service
      targetPort: 6052
      # protocol is the service protocol of the instance service
      protocol: TCP
    # createConfigurationService is specified if a single service should automatically be
    # created for all broker pods of a Configuration
    createConfigurationService: true
    configurationService:
      # name is the description of the configuration service
      name: akri-debug-echo-foo-configuration-service
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 6052
      # targetPort is the service targetPort of the instance service
      targetPort: 6052
      # protocol is the service protocol of the instance service
      protocol: TCP
  # discovery defines a set of values for a debugEcho discovery handler DaemonSet
  discovery: 
    # enabled defines whether discovery handler pods will be deployed in a slim Agent scenario
    enabled: false
    image:
      # repository is the container reference
      repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-debug-echo-discovery-handler"
      # tag is the container tag
      # debug-echo-configuration.yaml will default to v(AppVersion)[-dev]
      # with `-dev` added if `useDevelopmentContainers` is specified
      tag:
      # pullPolicy is the pull policy
      pullPolicy: ""
    # useNetworkConnection specifies whether the discovery handler should make a networked connection
    # with Agents, using its pod IP address when registering
    useNetworkConnection: false
    # port specifies (when useNetworkConnection is true) the port on which the discovery handler advertises its discovery service
    port: 10000
    # nodeSelectors is the array of nodeSelectors used to target nodes for the discovery handler to run on
    # This can be set from the helm command line using `--set debugEcho.discovery.nodeSelectors.label="value"`
    nodeSelectors: {}
    resources:
      # memoryRequest defines the minimum amount of RAM that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      memoryRequest: 11Mi
      # cpuRequest defines the minimum amount of CPU that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      cpuRequest: 10m
      # memoryLimit defines the maximum amount of RAM this Pod can consume.
      memoryLimit: 24Mi
      # cpuLimit defines the maximum amount of CPU this Pod can consume.
      cpuLimit: 26m

onvif:
  configuration:
    # enabled defines whether to load a onvif configuration
    enabled: false
    # name is the Kubernetes resource name that will be created for this
    # onvif configuration
    name: akri-onvif
    # brokerProperties is a map of properties that will be passed to any instances
    # created as a result of applying this onvif configuration
    brokerProperties: {}
    discoveryDetails:
      ipAddresses:
        action: Exclude
        items: []
      macAddresses:
        action: Exclude
        items: []
      scopes:
        action: Exclude
        items: []
      uuids:
        action: Exclude
        items: []
      discoveryTimeoutSeconds: 1
    # discoveryProperties is a map of properties fthat will be passed to discovery handler,
    # the properties can be direct specified or read from Secret or ConfigMap 
    discoveryProperties:
    # capacity is the capacity for any instances created as a result of
    # applying this onvif configuration
    capacity: 1
    brokerPod:
      image:
        # repository is the onvif broker container reference
        repository:
        # tag is the onvif broker image tag
        tag: latest
        # pullPolicy is the Akri onvif broker pull policy
        pullPolicy: ""
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 98Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 134m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 400Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 2800m
    brokerJob: 
      # container used by onvif
      image:
        # repository is the onvif broker container reference
        repository: 
        # tag is the onvif broker image tag
        tag: latest
        # pullPolicy is the onvif pull policy
        pullPolicy: ""
      # command to be executed in the Pod. An array of arguments. Can be set like:
      # --set onvif.configuration.brokerJob.command[0]="sh" \
      # --set onvif.configuration.brokerJob.command[1]="-c" \
      # --set onvif.configuration.brokerJob.command[2]="echo 'Hello World'"
      command:
      # restartPolicy for the Job. Can either be OnFailure or Never.
      restartPolicy: OnFailure
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 98Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 134m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 400Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 2800m
      # backoffLimit defines the Kubernetes Job backoff failure policy. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy
      backoffLimit: 2
      # parallelism defines how many Pods of a Job should run in parallel. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs
      parallelism: 1
      # completions defines how many Pods of a Job should successfully complete. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job
      completions: 1
    # createInstanceServices is specified if a service should automatically be
    # created for each broker pod
    createInstanceServices: true
    instanceService:
      # name is the description of the instance service
      name: akri-onvif-instance-service
      # type is the service type of the instance service
      type: ClusterIP
      # portName is the name of the port
      portName: grpc
      # port is the service port of the instance service
      port: 80
      # targetPort is the service targetPort of the instance service
      targetPort: 8083
      # protocol is the service protocol of the instance service
      protocol: TCP
    # createConfigurationService is specified if a single service should automatically be
    # created for all broker pods of a Configuration
    createConfigurationService: true
    configurationService:
      # name is the description of the configuration service
      name: akri-onvif-configuration-service
      # type is the service type of the instance service
      type: ClusterIP
      # portName is the name of the port
      portName: grpc
      # port is the service port of the instance service
      port: 80
      # targetPort is the service targetPort of the instance service
      targetPort: 8083
      # protocol is the service protocol of the instance service
      protocol: TCP
    # discovery defines a set of values for a onvif discovery handler DaemonSet
  discovery: 
    # enabled defines whether discovery handler pods will be deployed in a slim Agent scenario
    enabled: false
    image:
      # repository is the container reference
      repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-onvif-discovery-handler"
      # tag is the container tag
      # onvif-configuration.yaml will default to v(AppVersion)[-dev]
      # with `-dev` added if `useDevelopmentContainers` is specified
      tag:
      # pullPolicy is the pull policy
      pullPolicy: ""
    # useNetworkConnection specifies whether the discovery handler should make a networked connection
    # with Agents, using its pod IP address when registering
    useNetworkConnection: false
    # port specifies (when useNetworkConnection is true) the port on which the discovery handler advertises its discovery service
    port: 10000
    # nodeSelectors is the array of nodeSelectors used to target nodes for the discovery handler to run on
    # This can be set from the helm command line using `--set onvif.discovery.nodeSelectors.label="value"`
    nodeSelectors: {}
    resources:
      # memoryRequest defines the minimum amount of RAM that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      memoryRequest: 11Mi
      # cpuRequest defines the minimum amount of CPU that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      cpuRequest: 10m
      # memoryLimit defines the maximum amount of RAM this Pod can consume.
      memoryLimit: 24Mi
      # cpuLimit defines the maximum amount of CPU this Pod can consume.
      cpuLimit: 24m

opcua:
  configuration:
    # enabled defines whether to load an OPC UA configuration
    enabled: false
    # name is the Kubernetes resource name that will be created for this
    # OPC UA configuration
    name: akri-opcua
    # brokerProperties is a map of properties that will be passed to any instances
    # created as a result of applying this OPC UA configuration
    brokerProperties: {}
    discoveryDetails:
      # discoveryUrls is a list of DiscoveryUrls for OPC UA servers
      discoveryUrls:
      - "opc.tcp://localhost:4840/"
      # applicationNames is a filter applied to the discovered OPC UA servers to either exclusively
      # include or exclude servers with application names in the applicationNames list.
      applicationNames:
        action: Exclude
        items: []
    # mountCertificates determines whether to mount into the broker pods k8s Secrets 
    # containing OPC UA client credentials for connecting to OPC UA severs with the 
    # same signing certificate authority.
    # If set to false, the brokers will attempt to make an insecure connection with the servers.
    mountCertificates: false
    # capacity is the capacity for any instances created as a result of
    # applying this OPC UA configuration
    capacity: 1
    brokerPod:
      image:
        # repository is the OPC UA broker container reference
        repository:
        # tag is the OPC UA broker image tag
        tag: latest
        # pullPolicy is the OPC UA broker pull policy
        pullPolicy: ""
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 76Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 9m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 200Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 30m
    brokerJob: 
      # container used by opcua
      image:
        # repository is the opcua broker container reference
        repository: 
        # tag is the opcua broker image tag
        tag: latest
        # pullPolicy is the opcua pull policy
        pullPolicy: ""
      # command to be executed in the Pod. An array of arguments. Can be set like:
      # --set opcua.configuration.brokerJob.command[0]="sh" \
      # --set opcua.configuration.brokerJob.command[1]="-c" \
      # --set opcua.configuration.brokerJob.command[2]="echo 'Hello World'"
      command:
      # restartPolicy for the Job. Can either be OnFailure or Never.
      restartPolicy: OnFailure
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 76Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 9m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 200Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 30m
      # backoffLimit defines the Kubernetes Job backoff failure policy. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy
      backoffLimit: 2
      # parallelism defines how many Pods of a Job should run in parallel. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs
      parallelism: 1
      # completions defines how many Pods of a Job should successfully complete. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job
      completions: 1
    # createInstanceServices is specified if a service should automatically be
    # created for each broker pod
    createInstanceServices: true
    instanceService:
      # name is the description of the instance service
      name: akri-opcua-instance-service
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 80
      # targetPort is the service targetPort of the instance service
      targetPort: 8083
      # protocol is the service protocol of the instance service
      protocol: TCP
    # createConfigurationService is specified if a single service should automatically be
    # created for all broker pods of a Configuration
    createConfigurationService: true
    configurationService:
      # name is the description of the configuration service
      name: akri-opcua-configuration-service
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 80
      # targetPort is the service targetPort of the instance service
      targetPort: 8083
      # protocol is the service protocol of the instance service
      protocol: TCP
  # discovery defines a set of values for a opcua discovery handler DaemonSet
  discovery: 
    # enabled defines whether discovery handler pods will be deployed in a slim Agent scenario
    enabled: false
    image:
      # repository is the container reference
      repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-opcua-discovery-handler"
      # tag is the container tag
      # opcua-configuration.yaml will default to v(AppVersion)[-dev]
      # with `-dev` added if `useDevelopmentContainers` is specified
      tag:
      # pullPolicy is the pull policy
      pullPolicy: ""
    # useNetworkConnection specifies whether the discovery handler should make a networked connection
    # with Agents, using its pod IP address when registering
    useNetworkConnection: false
    # port specifies (when useNetworkConnection is true) the port on which the discovery handler advertises its discovery service
    port: 10000
    # nodeSelectors is the array of nodeSelectors used to target nodes for the discovery handler to run on
    # This can be set from the helm command line using `--set opcua.discovery.nodeSelectors.label="value"`
    nodeSelectors: {}
    resources:
      # memoryRequest defines the minimum amount of RAM that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      memoryRequest: 11Mi
      # cpuRequest defines the minimum amount of CPU that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      cpuRequest: 10m
      # memoryLimit defines the maximum amount of RAM this Pod can consume.
      memoryLimit: 24Mi
      # cpuLimit defines the maximum amount of CPU this Pod can consume.
      cpuLimit: 24m

udev:
  configuration:
    # enabled defines whether to load a udev configuration
    enabled: false
    # name is the Kubernetes resource name that will be created for this
    # udev configuration
    name: akri-udev
    # brokerProperties is a map of properties that will be passed to any instances
    # created as a result of applying this udev configuration
    brokerProperties: {}
    discoveryDetails:
      # groupRecursive defines whether to group discovered parent/children under the same instance
      groupRecursive: false
      # udevRules is the list of udev rules used to find instances created as a result of
      # applying this udev configuration
      udevRules:
    # capacity is the capacity for any instances created as a result of
    # applying this udev configuration
    capacity: 1
    brokerPod:
      image:
        # repository is the udev broker container reference
        repository:
        # tag is the udev broker image tag
        tag: latest
        # pullPolicy is the udev broker pull policy
        pullPolicy: ""
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 10Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 10m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 30Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 29m
      securityContext: {}
    brokerJob: 
      # container used by udev
      image:
        # repository is the udev broker container reference
        repository: 
        # tag is the udev broker image tag
        tag: latest
        # pullPolicy is the udev pull policy
        pullPolicy: ""
      # command to be executed in the Pod. An array of arguments. Can be set like:
      # --set udev.configuration.brokerJob.command[0]="sh" \
      # --set udev.configuration.brokerJob.command[1]="-c" \
      # --set udev.configuration.brokerJob.command[2]="echo 'Hello World'"
      command:
      # restartPolicy for the Job. Can either be OnFailure or Never.
      restartPolicy: OnFailure
      resources:
        # memoryRequest defines the minimum amount of RAM that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        memoryRequest: 10Mi
        # cpuRequest defines the minimum amount of CPU that must be available to this Pod
        # for it to be scheduled by the Kubernetes Scheduler
        cpuRequest: 10m
        # memoryLimit defines the maximum amount of RAM this Pod can consume.
        memoryLimit: 30Mi
        # cpuLimit defines the maximum amount of CPU this Pod can consume.
        cpuLimit: 29m
      # backoffLimit defines the Kubernetes Job backoff failure policy. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy
      backoffLimit: 2
      # parallelism defines how many Pods of a Job should run in parallel. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job/#parallel-jobs
      parallelism: 1
      # completions defines how many Pods of a Job should successfully complete. More info:
      # https://kubernetes.io/docs/concepts/workloads/controllers/job
      completions: 1
    # createInstanceServices is specified if a service should automatically be
    # created for each broker pod
    createInstanceServices: true
    instanceService:
      # portName is the name of the port
      portName: grpc
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 80
      # targetPort is the service targetPort of the instance service
      targetPort: 8083
      # protocol is the service protocol of the instance service
      protocol: TCP
    # createConfigurationService is specified if a single service should automatically be
    # created for all broker pods of a Configuration
    createConfigurationService: true
    configurationService:
      # portName is the name of the port
      portName: grpc
      # type is the service type of the instance service
      type: ClusterIP
      # port is the service port of the instance service
      port: 80
      # targetPort is the service targetPort of the instance service
      targetPort: 8083
      # protocol is the service protocol of the instance service
      protocol: TCP
  # discovery defines a set of values for a udev discovery handler DaemonSet
  discovery: 
    # enabled defines whether discovery handler pods will be deployed in a slim Agent scenario
    enabled: false
    image:
      # repository is the container reference
      repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-udev-discovery-handler"
      # tag is the container tag
      # udev-configuration.yaml will default to v(AppVersion)[-dev]
      # with `-dev` added if `useDevelopmentContainers` is specified
      tag:
      # pullPolicy is the pull policy
      pullPolicy: ""
    # useNetworkConnection specifies whether the discovery handler should make a networked connection
    # with Agents, using its pod IP address when registering
    useNetworkConnection: false
    # port specifies (when useNetworkConnection is true) the port on which the discovery handler advertises its discovery service
    port: 10000
    # nodeSelectors is the array of nodeSelectors used to target nodes for the discovery handler to run on
    # This can be set from the helm command line using `--set udev.discovery.nodeSelectors.label="value"`
    nodeSelectors: {}
    host: 
      # udev is the node path of udev, usually at `/run/udev`
      udev: /run/udev
    resources:
      # memoryRequest defines the minimum amount of RAM that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      memoryRequest: 11Mi
      # cpuRequest defines the minimum amount of CPU that must be available to this Pod
      # for it to be scheduled by the Kubernetes Scheduler
      cpuRequest: 10m
      # memoryLimit defines the maximum amount of RAM this Pod can consume.
      memoryLimit: 24Mi
      # cpuLimit defines the maximum amount of CPU this Pod can consume.
      cpuLimit: 24m

# Admission Controllers (Webhooks)
webhookConfiguration:
  # enabled defines whether to apply the Akri Admission Controller (Webhook) for Akri Configurations
  enabled: true
  # name of the webhook
  name: akri-webhook-configuration
  # base64-encoded CA certificate (PEM) used by Kubernetes to validate the Webhook's certificate, if
  # unset, will generate a self-signed certificate valid for 100y
  caBundle: null
  image:
    # repository is the Akri Webhook for Configurations image reference
    repository: "%%IMG_REPO%%/%%IMG_PREFIX%%akri-webhook-configuration"
    # tag is the container tag
    # webhook-configuration.yaml will default to v(AppVersion)[-dev]
    # with `-dev` added if `useDevelopmentContainers` is specified
    tag:
    # pullPolicy is the Akri Webhook pull policy
    pullPolicy: Always
  certImage:
    # reference is the webhook-certgen image reference
    reference: registry.k8s.io/ingress-nginx/kube-webhook-certgen
    # tag is the webhook-certgen image tag
    tag: v1.1.1
    # pullPolicy is the webhook-certgen pull policy
    pullPolicy: IfNotPresent
  # onlyOnControlPlane dictates whether the Akri Webhook will only run on nodes with 
  # the label with (key, value) of ("node-role.kubernetes.io/master", "")
  onlyOnControlPlane: false
  # allowOnControlPlane dictates whether a toleration will be added to allow to Akri Webhook 
  # to run on the control plane node
  allowOnControlPlane: true
  # nodeSelectors is the array of nodeSelectors used to target nodes for the Akri Webhook to run on
  # This can be set from the helm command line using `--set webhookConfiguration.nodeSelectors.label="value"`
  nodeSelectors: {}
  resources:
    # memoryRequest defines the minimum amount of RAM that must be available to this Pod
    # for it to be scheduled by the Kubernetes Scheduler
    memoryRequest: 100Mi
    # cpuRequest defines the minimum amount of CPU that must be available to this Pod
    # for it to be scheduled by the Kubernetes Scheduler
    cpuRequest: 15m
    # memoryLimit defines the maximum amount of RAM this Pod can consume.
    memoryLimit: 100Mi
    # cpuLimit defines the maximum amount of CPU this Pod can consume.
    cpuLimit: 26m
