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