##
# 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 


#logging parameters for internal file stororage
   #choose among: DEBUG, INFO, WARNING, ERROR, CRITICAL
log_level:         DEBUG  #general log levels for internal logging      
log_level_db:      DEBUG  #database log levels
log_level_vimconn: DEBUG  #VIM connection log levels
log_level_nfvo:    DEBUG  #Main engine log levels
#standard output is used unless 'log_file' is specify 
#log_file:          /var/log/openmano/openmano.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      
