##
# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
# This file is part of openmano
# 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.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact with: nfvlabs@tid.es
##

#HTTP Server parameters (MANO API). IP address and port where openmanod listens
# IPtables/firewalld must allow this port
# for CentOS/Redhad firewalld is configured at '/etc/firewalld/services/openmanod.xml'
# edit this file and reload firewalld with 'firewall-cmd --reload' if port is changed
http_host:       0.0.0.0      # IP address, (by default, 0.0.0.0 means that it will listen in all interfaces)
http_port:       9090         # General port (by default, 9090)
#http_admin_port: 9095        # Admin port where openmano is listening (when missing, no administration server is launched)
                              # Not used in current version!

#Parameters for a VIM console access. Can be directly the VIM URL or a proxy to offer the openmano IP address
#http_console_proxy: False    #by default True. If False proxy is not implemented and VIM URL is offered. It is
                              #assumed then, that client can access directly to the VIMs
#http_console_host: <ip>       #by default the same as 'http_host'. However is openmano server is behind a NAT/proxy
                              #you should specify the public IP used to access the server. Also when 'http_host' is 
                              #0.0.0.0 you should specify the concrete IP address (or name) the server is accessed 
# Ports to be used. Comma separated list. Can contain a {"from":<port>, "to":<port>} entry
#e.g. from 9000 to 9005: [{"from":9000, "to":9005}], or also [9000,9001,9002,9003,9004,9005]
#e.g. from 9000 to 9100 apart from 9050,9053: [{"from":9000, "to":9049},9051,9052,{"from":9054, "to":9099}]
http_console_ports: [{"from":9096, "to":9110}]

#Database parameters
db_host:   localhost          # by default localhost
db_user:   mano               # DB user
db_passwd: manopw             # DB password
db_name:   mano_db            # Name of the MANO DB

#other MANO parameters
#  Folder where the VNF descriptors will be stored
#  The folder will be created in the execution folder if it does not exist
#vnf_repository: "./vnfrepo"   # Use an absolute path to avoid misunderstandings 


#general logging parameters 
   #choose among: DEBUG, INFO, WARNING, ERROR, CRITICAL
log_level:         DEBUG  #general log levels for internal logging      
#standard output is used unless 'log_file' is specify 
#log_file:          /var/log/openmano/openmano.log

#individual logging settings
#log_level_db:      DEBUG  #database log levels
#log_file_db:       /opt/openmano/logs/openmano_db.log
#log_level_vim:     DEBUG  #VIM connection log levels
#log_file_vim:      /opt/openmano/logs/openmano_vimconn.log
#log_level_nfvo:    DEBUG  #Main engine log levels
#log_file_nfvo:      /opt/openmano/logs/openmano_nfvo.log
#log_level_http:    DEBUG  #Main engine log levels
#log_file_http:      /opt/openmano/logs/openmano_http.log

#Uncomment to send logs via IP to an external host
#log_socket_host:   localhost
log_socket_port:   9022
log_socket_level:  DEBUG  #general log levels for socket logging      
