# Copyright © 2018 AT&T USA
#
# 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.
repository: nexus3.onap.org:10001
image: onap/so/api-handler-infra:latest
pullPolicy: IfNotPresent
replicaCount: 1
minReadySeconds: 10
containerPort: 8080
logPath: ./logs/apih/
app: api-handler-infra
service:
    type: NodePort
    nodePort: 77
    internalPort: 8080
    portName: so-apih-port
updateStrategy:
    type: RollingUpdate
    maxUnavailable: 1
    maxSurge: 1
# Resource Limit flavor -By Default using small 
flavor: small
# Segregation for Different environment (Small and Large)
resources:
  small:
    limits:
      cpu: 2000m
      memory: 4Gi
    requests:
      cpu: 500m
      memory: 1Gi
  large:
    limits:
      cpu: 4000m
      memory: 8Gi
    requests:
      cpu: 1000m
      memory: 2Gi
livenessProbe:
    path: /manage/health
    scheme: HTTP
    initialDelaySeconds: 600
    periodSeconds: 60
    timeoutSeconds: 10
    successThreshold: 1
    failureThreshold: 3
global:
  nodePortPrefix: 302
  # docker repository
  repository: nexus3.onap.org:10001
  # image pull Policy
  pullPolicy: IfNotPresent
mariadb:
  nameOverride: so-db
nodeSelector: {}
affinity: {}
