###
# ============LICENSE_START=======================================================
# ONAP POLICY
# ================================================================================
# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# 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.
# ============LICENSE_END=========================================================
###


# SYSTEM software configuration

POLICY_HOME=/opt/app/policy
POLICY_LOGS=/var/log/onap/policy/pdpd
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
KEYSTORE_PASSWD=Pol1cy_0nap
TRUSTSTORE_PASSWD=Pol1cy_0nap

# Telemetry credentials

ENGINE_MANAGEMENT_PORT=9696
ENGINE_MANAGEMENT_HOST=0.0.0.0
ENGINE_MANAGEMENT_USER=demo@people.osaaf.org
ENGINE_MANAGEMENT_PASSWORD=demo123456!

# nexus repository

snapshotRepositoryID=policy-nexus-snapshots
snapshotRepositoryUrl=http://nexus:8081/nexus/content/repositories/snapshots/
releaseRepositoryID=policy-nexus-releases
releaseRepositoryUrl=http://nexus:8081/nexus/content/repositories/releases/
repositoryUsername=admin
repositoryPassword=admin123

# Relational (SQL) DB access

SQL_HOST=mariadb
SQL_USER=policy_user
SQL_PASSWORD=policy_user

# AAF

AAF_NAMESPACE=org.onap.policy
AAF_HOST=aaf.api.simpledemo.onap.org

# PDP-D DMaaP configuration channel

PDPD_CONFIGURATION_TOPIC=PDPD-CONFIGURATION
PDPD_CONFIGURATION_SERVERS=vm1.mr.simpledemo.onap.org
PDPD_CONFIGURATION_API_KEY=
PDPD_CONFIGURATION_API_SECRET=
PDPD_CONFIGURATION_CONSUMER_GROUP=
PDPD_CONFIGURATION_CONSUMER_INSTANCE=
PDPD_CONFIGURATION_PARTITION_KEY=

# PAP

PAP_HOST=pap
PAP_USERNAME=testpap
PAP_PASSWORD=alpha123

# PDP-X

PDP_HOST=pdp
PDP_USERNAME=testpdp
PDP_PASSWORD=alpha123
PDP_CLIENT_USERNAME=python
PDP_CLIENT_PASSWORD=test
PDP_ENVIRONMENT=TEST

# DCAE DMaaP

DCAE_TOPIC=unauthenticated.DCAE_CL_OUTPUT
DCAE_SERVERS=vm1.mr.simpledemo.onap.org
DCAE_CONSUMER_GROUP=dcae.policy.shared

# Open DMaaP

DMAAP_SERVERS=vm1.mr.simpledemo.onap.org

# AAI

AAI_URL=https://aai.api.simpledemo.onap.org:8443
AAI_USERNAME=policy@policy.onap.org
AAI_PASSWORD=demo123456!

# MSO

SO_URL=http://vm1.mso.simpledemo.onap.org:8080/ecomp/mso/infra
SO_USERNAME=InfraPortalClient
SO_PASSWORD=password1$

# VFC

VFC_URL=
VFC_USERNAME=
VFC_PASSWORD=

# SDNC

SDNC_URL=
SDNC_USERNAME=
SDNC_PASSWORD=
