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

# 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      
