# Copyright 2018 Intel Corporation, Inc
# Modifications © 2020 Orange
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#################################################################
# Global configuration defaults.
#################################################################
global:
  nodePortPrefix: 302
  # Standard OOM
  pullPolicy: "Always"

  tpm:
    enabled: false
    # if enabled, nodeselector will use the below
    # values in the nodeselector section of the pod
    nodeLabel: "tpm-node"
    nodeLabelValue: "true"
  persistence: {}

aaf-sshsm-abrmd:
  enabled: true
aaf-sshsm-distcenter:
  enabled: true
aaf-sshsm-testca:
  enabled: true

persistence:
  enabled: true
  data:
    enabled: true
    size: 10Mi
    volumeReclaimPolicy: Retain
    accessMode: ReadWriteOnce
    mountSubPath: sshsm/data
  dbus:
    enabled: true
    size: 10Mi
    volumeReclaimPolicy: Retain
    accessMode: ReadWriteOnce
    mountSubPath: sshsm/dbus



# Configure resource requests and limits
resources:
  small:
    limits:
      cpu: 20m
      memory: 50Mi
    requests:
      cpu: 10m
      memory: 10Mi
  large:
    limits:
      cpu: 400m
      memory: 1Gi
    requests:
      cpu: 10m
      memory: 100Mi
  unlimited: {}
