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

#   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

#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      
