# Environment settings
# used by docker-compose AND by other shell scripts
# The name ".env" is required by docker-compose

# Dockerfile names.  To skip building one or more docker images,
# change dockerfile name to "skip"
PORTAL_DOCKERFILE=Dockerfile.portal
SDK_DOCKERFILE=Dockerfile.sdk
DB_DOCKERFILE=Dockerfile.mariadb
WMS_DOCKERFILE=Dockerfile.wms
# These are FE only and BE only docker images.  Change to Dockerfile.fe and Dockerfile.be to enable.
FE_DOCKERFILE=skip
BE_DOCKERFILE=skip

# Relative directories and filenames for builds
SDK_APP_DIR=sdk/ecomp-sdk/epsdk-app-os
SDK_WAR_DIR=sdk/ecomp-sdk/epsdk-app-os/target
SDK_WAR_FILE=epsdk-app-os.war
BE_WAR_DIR=ecomp-portal-BE-os/target
BE_WAR_FILE=portal-be-os.war
FE_DIR=portal-FE-os/dist/public
WIDGET_MS_JAR_DIR=ecomp-portal-widget-ms/widget-ms/target
WIDGET_MS_JAR_FILE=widget-ms.jar

# Following are ALSO used in demo/boot/portal_vm_init.sh
EP_IMG_NAME=onap/portal-app
SDK_IMG_NAME=onap/portal-sdk
FE_IMG_NAME=onap/portal-fe
BE_IMG_NAME=onap/portal-be
DB_IMG_NAME=onap/portal-db
WMS_IMG_NAME=onap/portal-wms

CDR_IMG_NAME=onap/music/cassandra_music
ZK_IMG_NAME=zookeeper

# Deployed with portal; built elsewhere
CLI_IMG_NAME=onap/cli

# This is the first portion of the Docker image tag
# that is published to the ONAP registry.
PORTAL_VERSION=3.5.0

# This is used during builds and in docker-compose;
# it is never published to the ONAP registry.
PORTAL_TAG=guilin

# Name of directory in apps container (NOT host)
WEBAPPS_DIR=/opt/apache-tomcat-8.0.37/webapps
TOMCAT_DIR=/opt/apache-tomcat-8.0.37

# Certs
TOMCAT_KEY=keystoreONAP.keystore
TOMCAT_TRUST=truststoreONAPall.jks
CERT_PWD=changeit

# Required settings with default values.
# Export shell environment variables on ALL hosts.
SERVER_XML_DIR=.
LOGS_DIR=./logs
PROPS_DIR=./properties_simpledemo

# Optional settings with no defaults.
EXTRA_HOST_IP=""
EXTRA_HOST_NAME=""
# Export shell environment variables on hosts with no DNS;
# a line is added to docker container's /etc/hosts.
# For example:
#EXTRA_HOST_IP="-i 10.11.12.13"
#EXTRA_HOST_NAME="-n portal.api.simpledemo.onap.org"

#Portal Context
PORTALCONTEXT=ONAPPORTAL
FECONTEXT=ONAPPORTAL
SDKCONTEXT=ONAPPORTALSDK

#Nexus repository for os_docker_base/push/release scripts
NEXUS_REPO=nexus3.onap.org:10003
