###
# ============LICENSE_START=======================================================
# ONAP POLICY
# ================================================================================
# Copyright (C) 2017 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
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
KEYSTORE_PASSWD=Pol1cy_0nap

# Telemetry credentials

ENGINE_MANAGEMENT_PORT=9696
ENGINE_MANAGEMENT_HOST=0.0.0.0
ENGINE_MANAGEMENT_USER=@1b3rt
ENGINE_MANAGEMENT_PASSWORD=31nst31n

# 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

# PDP-D DMaaP configuration channel

PDPD_CONFIGURATION_TOPIC=PDPD-CONFIGURATION
PDPD_CONFIGURATION_SERVERS=vm1.mr.simpledemo.openecomp.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.openecomp.org

# Open DMaaP

DMAAP_SERVERS=vm1.mr.simpledemo.openecomp.org

# AAI

AAI_URL=https://aai.api.simpledemo.openecomp.org:8443
AAI_USERNAME=POLICY
AAI_PASSWORD=POLICY

# MSO

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

# VFC

VFC_URL=
VFC_USERNAME=
VFC_PASSWORD=
