# This is a sample config file; for use by a developer to perform application integration tests.
#
# Please replace the <PLACEHOLDER> values with real values.

# Model Loader Distribution Client Configuration
ml.distribution.ACTIVE_SERVER_TLS_AUTH=false
ml.distribution.ASDC_ADDRESS=<ASDC_HOST_NAME>:8443
ml.distribution.MSG_BUS_ADDRESSES=localhost
ml.distribution.CONSUMER_GROUP=<CONSUMER_GROUP>
ml.distribution.CONSUMER_ID=<CONSUMER_ID>
ml.distribution.ENVIRONMENT_NAME=<ENV>
ml.distribution.KEYSTORE_PASSWORD=<OBF:1234>
ml.distribution.KEYSTORE_FILE=asdc-client.jks
ml.distribution.PASSWORD=<OBF:1234>
ml.distribution.POLLING_INTERVAL=30
ml.distribution.POLLING_TIMEOUT=20
ml.distribution.USER=<DIST_USER>
ml.distribution.ARTIFACT_TYPES=MODEL_QUERY_SPEC,TOSCA_CSAR

# Model Loader Client Configuration for the A&AI REST interface
ml.aai.BASE_URL=https://<AAI_HOST>:8443
ml.aai.MODEL_URL=/aai/v*/service-design-and-creation/models/model/
ml.aai.NAMED_QUERY_URL=/aai/v*/service-design-and-creation/named-queries/named-query/
ml.aai.VNF_IMAGE_URL=/aai/v*/service-design-and-creation/vnf-images
ml.aai.KEYSTORE_FILE=<AAI_KEYSTORE>
ml.aai.KEYSTORE_PASSWORD=<OBF:1234>
ml.aai.AUTH_USER=ModelLoader
ml.aai.AUTH_PASSWORD=

# Model Loader Client Configuration for the Babel Service
ml.babel.BASE_URL=https://<BABEL_HOST>:9516
ml.babel.GENERATE_ARTIFACTS_URL=/services/babel-service/v1/app/generateArtifacts
ml.babel.KEYSTORE_FILE=<BABEL_KEYSTORE>
ml.babel.KEYSTORE_PASSWORD=<OBF:1234>
ml.babel.TRUSTSTORE_FILE=<BABEL_TRUSTSTORE>
ml.babel.TRUSTSTORE_PASSWORD=<OBF:1234>
