# Copyright 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.
# pdp component installation configuration parameters

# tomcat specific parameters

TOMCAT_JMX_PORT=9991
TOMCAT_SHUTDOWN_PORT=8087
SSL_HTTP_CONNECTOR_PORT=8081
SSL_AJP_CONNECTOR_PORT=8381
SSL_AJP_CONNECTOR_REDIRECT_PORT=8443

TOMCAT_X_MS_MB=1024
TOMCAT_X_MX_MB=1024

# pdp properties

UEB_CLUSTER=vm1.mr.simpledemo.openecomp.org

REST_PAP_URL=http://pap:9091/pap/
REST_PDP_ID=http://pdp:8081/pdp/
REST_PDP_CONFIG=${{POLICY_HOME}}/servers/pdp/bin/config
REST_PDP_WEBAPPS=${{POLICY_HOME}}/servers/pdp/webapps
REST_PDP_REGISTER=true
REST_PDP_REGISTER_SLEEP=15
REST_PDP_REGISTER_RETRIES=-1
REST_PDP_MAXCONTENT=999999999

# PDP related properties
PDP_HTTP_USER_ID=testpdp
PDP_HTTP_PASSWORD=alpha123
PDP_PAP_PDP_HTTP_USER_ID=testpap
PDP_PAP_PDP_HTTP_PASSWORD=alpha123

node_type=pdp_xacml
resource_name=pdp_1
dependency_groups=pdplp_1;brmsgw_1
test_via_jmx=true

#
# Notification Properties
# Notification type: websocket, ueb or dmaap... if left blank websocket is the default
PDP_NOTIFICATION_TYPE=websocket
PDP_UEB_CLUSTER=
PDP_UEB_TOPIC=
PDP_UEB_DELAY=
PDP_UEB_API_KEY=
PDP_UEB_API_SECRET=
PDP_DMAAP_AAF_LOGIN=
PDP_DMAAP_AAF_PASSWORD=

#AAF Policy Name space
#Required only, when we use AAF
POLICY_AAF_NAMESPACE=
POLICY_AAF_RESOURCE=

# Indeterminate resolution
DECISION_INDETERMINATE_RESPONSE=PERMIT
