##
# Copyright 2015 Telefonica Investigacion 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
# Database ovim parameters
db_ovim_host:   localhost          # by default localhost
db_ovim_user:   mano               # DB user
db_ovim_passwd: manopw             # DB password
db_ovim_name:   mano_vim_db        # Name of the OVIM 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

#   Indicates if at VNF onboarding, flavors and images are loaded at all related VIMs,
#   in order to speed up the later instantiation.
auto_push_VNF_to_VIMs: False  # by default True

#general logging parameters 
   #choose among: DEBUG, INFO, WARNING, ERROR, CRITICAL
log_level:         INFO  #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:      ERROR  #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_wim:     DEBUG  #WIM connection log levels
#log_file_wim:      /opt/openmano/logs/openmano_wimconn.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
#log_level_console: DEBUG  #proxy console log levels
#log_file_console:  /opt/openmano/logs/openmano_console.log
#log_level_ovim:    DEBUG  #ovim library log levels
#log_file_ovim:     /opt/openmano/logs/openmano_ovim.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      
