# Copyright © 2020 Nordix Foundation
#
# 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
  repository: nexus3.onap.org:10001
  readinessImage: onap/oom/readiness:3.0.1
  aafAgentImage: onap/aaf/aaf_agent:2.1.20
  envsubstImage: dibi/envsubst
  persistence:
    mountPath: /dockerdata-nfs
  security:
    aaf:
      enabled: false
  aaf:
    auth:
      header: Basic c29Ac28ub25hcC5vcmc6ZGVtbzEyMzQ1Ngo=

#################################################################
# Secrets metaconfig
#################################################################
secrets:
  - uid: etsi-nfvo-nslcm-creds
    name: '{{ include "common.release" . }}-so-etsi-nfvo-nslcm-creds'
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.etsi.nfvo.nslcm.credsExternalSecret) . }}'
    login: '{{ .Values.etsi.nfvo.nslcm.username }}'
    password: '{{ .Values.etsi.nfvo.nslcm.password }}'
  - uid: db-user-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.db.userCredsExternalSecret) . }}'
    login: '{{ .Values.db.userName }}'
    password: '{{ .Values.db.userPassword }}'
    passwordPolicy: required
  - uid: db-admin-creds
    type: basicAuth
    externalSecret: '{{ tpl (default "" .Values.db.adminCredsExternalSecret) . }}'
    login: '{{ .Values.db.adminName }}'
    password: '{{ .Values.db.adminPassword }}'
    passwordPolicy: required

#################################################################
# Application configuration defaults.
#################################################################
repository: nexus3.onap.org:10001
image: onap/so/so-etsi-nfvo-ns-lcm:1.7.4
pullPolicy: Always

aai:
  auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586
db:
  userName: so_user
  userPassword: so_User123
  # userCredsExternalSecret: some secret
  adminName: so_admin
  adminPassword: so_Admin123
  # adminCredsExternalSecret: some secret
etsi:
  nfvo:
    nslcm:
      username: so-etsi-nfvo-ns-lcm
mso:
  key: 07a7159d3bf51a0e53be7a8f89699be7
so:
  sol003:
    adapter:
      auth: Basic dm5mbTpwYXNzd29yZDEk

replicaCount: 1
minReadySeconds: 10
containerPort: &containerPort 9095
logPath: ./logs/so-etsi-nfvo-ns-lcm/
app: so-etsi-nfvo-ns-lcm
service:
  type: ClusterIP
  name: so-etsi-nfvo-ns-lcm
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: 'true'
    msb.onap.org/service-info: |
      {{ if not .Values.global.msbDisabled -}}[
        {
          "serviceName": "{{ include "common.servicename" . }}",
          "version": "v1",
          "url": "/so/so-etsi-nfvo-ns-lcm/v1",
          "protocol": "REST",
          "port": "{{ include "common.getPort" (dict "global" . "name" "nfvo-nslcm-port") }}",
          "visualRange":"1"
        }
      ]{{ end }}
  ports:
    - name: http-api
      port: *containerPort
updateStrategy:
  type: RollingUpdate
  maxUnavailable: 1
  maxSurge: 1

#################################################################
# soHelpers part
#################################################################
soHelpers:
  nameOverride: so-nfvo-cert-init
  certInitializer:
    nameOverride: so-nfvo-cert-init
    credsPath: /opt/app/osaaf/local
  cadi:
    apiEnforcement: org.onap.so.nfvoAdapterPerm
  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: 9095
  initialDelaySeconds: 600
  periodSeconds: 60
  timeoutSeconds: 10
  successThreshold: 1
  failureThreshold: 3

ingress:
  enabled: false
  service:
    - baseaddr: 'soetsinfvonslcm'
      name: 'so-etsi-nfvo-ns-lcm'
      port: 9095
  config:
    ssl: 'redirect'

nodeSelector: {}

tolerations: []

affinity: {}
