# Copyright © 2017 Amdocs, Bell Canada
#
# 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: # global defaults
  nodePortPrefix: 302
  ubuntuInitRepository: registry.hub.docker.com

# application image
repository: nexus3.onap.org:10001
image: onap/testsuite:1.2.1
pullPolicy: Always

ubuntuInitImage: oomk8s/ubuntu-init:2.0.0

# flag to enable debugging - application support required
debugEnabled: false

#################################################################
# Application configuration defaults.
#################################################################
config:
  # Username of the lighthttpd server.  Used for HTML auth for webpage access
  lightHttpdUsername: robot
  # Password of the lighthttpd server.  Used for HTML auth for webpage access
  lightHttpdPassword: robot
  # gerrit branch where the latest heat code is checked in
  gerritBranch: master
  # gerrit project where the latest heat code is checked in
  gerritProject: http://gerrit.onap.org/r/demo.git


# Demo configuration
# Nexus demo artifact version.  Maps to GLOBAL_INJECTED_ARTIFACTS_VERSION
demoArtifactsVersion: "1.2.0-SNAPSHOT"
# Openstack medium sized flavour name.  Maps GLOBAL_INJECTED_VM_FLAVOR
openStackFlavourMedium: "m1.medium"
# Openstack keystone URL.  Maps to GLOBAL_INJECTED_KEYSTONE
openStackKeyStoneUrl: "http://1.2.3.4:5000"
# UUID of the Openstack network that can assign floating ips.  Maps to GLOBAL_INJECTED_PUBLIC_NET_ID
openStackPublicNetId: "e8f51958045716781ffc"
# password for Openstack tenant where VNFs will be spawned.  Maps to GLOBAL_INJECTED_OPENSTACK_PASSWORD
openStackPassword: "tenantPassword"
# Openstack region.  Maps to GLOBAL_INJECTED_REGION
openStackRegion: "RegionOne"
# Openstack tenant UUID where VNFs will be spawned. Maps to GLOBAL_INJECTED_OPENSTACK_TENANT_ID
openStackTenantId: "47899782ed714295b1151681fdfd51f5"
# username for Openstack tenant where VNFs will be spawned.  Maps to GLOBAL_INJECTED_OPENSTACK_USERNAME
openStackUserName: "tenantUsername"
# Openstack glance image name for Ubuntu 14.  Maps to GLOBAL_INJECTED_UBUNTU_1404_IMAGE
ubuntu14Image: "Ubuntu_14_trusty"
# Openstack glance image name for Ubuntu 16.  Maps to GLOBAL_INJECTED_UBUNTU_1604_IMAGE
ubuntu16Image: "Ubuntu_16_xenial"
# GLOBAL_INJECTED_SCRIPT_VERSION.  Maps to GLOBAL_INJECTED_SCRIPT_VERSION
scriptVersion: "1.2.0-SNAPSHOT"
# Openstack network to which VNFs will bind their primary (first) interface.  Maps to GLOBAL_INJECTED_NETWORK
openStackPrivateNetId: "e8f51956-00dd-4425-af36-045716781ffc"

# SDNC Preload configuration
# Openstack subnet UUID for the network defined by openStackPrivateNetId.  Maps to onap_private_subnet_id
openStackPrivateSubnetId: "e8f51956-00dd-4425-af36-045716781ffc"
# CIDR notation for the Openstack private network where VNFs will be spawned.  Maps to onap_private_net_cidr
openStackPrivateNetCidr: "10.0.0.0/8"
# The first 2 octets of the private Openstack subnet where VNFs will be spawned.
# Needed because sdnc preload templates hardcodes things like this 10.0.${ecompnet}.X
openStackOamNetworkCidrPrefix: "10.0"
# Override with Pub Key for access to VNF
vnfPubKey: "FILL_IN_WITH_PUB_KEY"
# Override with DCAE VES Collector external IP 
dcaeCollectorIp: "FILL_IN_WITH_DCAE_VES_COLLECTOR_IP"

# default number of instances
replicaCount: 1

nodeSelector: {}

affinity: {}

# probe configuration parameters
liveness:
  initialDelaySeconds: 10
  periodSeconds: 10
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: true

readiness:
  initialDelaySeconds: 10
  periodSeconds: 10


service:
  name: robot
  type: NodePort
  portName: httpd
  externalPort: 88
  internalPort: 88
  nodePort: "09"


ingress:
  enabled: false


resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  #
  # Example:
  # Configure resource requests and limits
  # ref: http://kubernetes.io/docs/user-guide/compute-resources/
  # Minimum memory for development is 2 CPU cores and 4GB memory
  # Minimum memory for production is 4 CPU cores and 8GB memory
#resources:
#  limits:
#    cpu: 2
#    memory: 4Gi
#  requests:
#    cpu: 2
#    memory: 4Gi
