# /*-
# * ============LICENSE_START=======================================================
# * ONAP : APPC
# * ================================================================================
# * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
# * ================================================================================
# * Copyright (C) 2017 Amdocs
# * =============================================================================
# * 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.
# * 
# * ECOMP is a trademark and service mark of AT&T Intellectual Property.
# * ============LICENSE_END=========================================================
# */

# Host definition
ip:	0.0.0.0 
port:	8000

# Security (controls use of TLS encrypton and RestServer authentication)
tls:	no
auth:	no

# TLS certificates (must be built on application host)
priv:	provide_privated_key.pem
pub:	provide_public_key.pem

# RestServer authentication
id:	provide_RestServer_id
psswd:	provide_password_4_RestServer_id

# Mysql
host:	localhost
user:	mysql_user_id
passwd:	password_4_mysql_user_id
db:	ansible

# Playbooks
from_files:		yes
ansible_path:		/home/ubuntu/RestServerOpenSource
ansible_inv:		Ansible_inventory
ansible_temp:		PlaybooksTemp
timeout_seconds:	60

# Blocking on GetResults
getresults_block:	yes
