# Copyright © 2019 Nordix Foundation
# Copyright © 2020 Huawei
# 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:
  nodePortPrefixExt: 304
  persistence:
    mountPath: /dockerdata-nfs
  security:
    aaf:
      enabled: false
  aaf:
    auth:
      header: Basic c29Ac28ub25hcC5vcmc6ZGVtbzEyMzQ1Ngo=

#################################################################
# Application configuration defaults.
#################################################################
image: onap/so/so-etsi-sol003-adapter:1.9.0
pullPolicy: Always

aaf:
  auth:
    username: so@so.onap.org
    password: 8DB1C939BFC6A35C3832D0E52E452D0E05AE2537AF142CECD125FF827C05A972FDD0F4700547DA
aai:
  auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586
mso:
  key: 07a7159d3bf51a0e53be7a8f89699be7
sdc:
  username: mso
  password: 76966BDD3C7414A03F7037264FF2E6C8EEC6C28F2B67F2840A1ED857C0260FEE731D73F47F828E5527125D29FD25D3E0DE39EE44C058906BF1657DE77BF897EECA93BDC07FA64F
  key: 566B754875657232314F5548556D3665

replicaCount: 1
minReadySeconds: 10
containerPort: &containerPort 9092
logPath: ./logs/etsi-sol003-adapter/
app: etsi-sol003-adapter
service:
    type: NodePort
    internalPort: *containerPort
    externalPort: *containerPort
    nodePort: "06"
    portName: http
updateStrategy:
    type: RollingUpdate
    maxUnavailable: 1
    maxSurge: 1

#################################################################
# soHelpers part
#################################################################
soHelpers:
  nameOverride: so-etsi-sol003-cert-init
  certInitializer:
    nameOverride: so-etsi-sol003-cert-init
    credsPath: /opt/app/osaaf/local
  cadi:
    apiEnforcement: org.onap.so.vnfmAdapterPerm
  containerPort: *containerPort

# Resource Limit flavor -By Default using small
flavor: small
# Segregation for Different environment (Small and Large)
resources:
  small:
    limits:
      memory: 4Gi
      cpu: 2000m
    requests:
      memory: 1Gi
      cpu: 500m
  large:
    limits:
      memory: 8Gi
      cpu: 4000m
    requests:
      memory: 2Gi
      cpu: 1000m
  unlimited: {}
livenessProbe:
    port: 9092
    initialDelaySeconds: 600
    periodSeconds: 60
    timeoutSeconds: 10
    successThreshold: 1
    failureThreshold: 3
ingress:
  enabled: false
  service:
      - baseaddr: "so-etsi-sol003-adapter-api"
        name: "so-etsi-sol003-adapter"
        port: 9092
  config:
    ssl: "redirect"
nodeSelector: {}
tolerations: []
affinity: {}

#Pods Service Account
serviceAccount:
  nameOverride: so-etsi-sol003-adapter
  roles:
    - read
