X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=openmanod;h=c04d66ac222e942a2d82097a5427ab24bc9c8d10;hb=7fe82640f590cc66a9b11adf0d25abceedf892de;hp=c273f81af312f2e538e3ce471bd1cf282d54945c;hpb=caadc443e5bdc1a6c89a1d826b8768c67b4b19e8;p=osm%2FRO.git diff --git a/openmanod b/openmanod index c273f81a..c04d66ac 100755 --- a/openmanod +++ b/openmanod @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- ## -# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U. +# Copyright 2015 Telefonica Investigacion y Desarrollo, S.A.U. # This file is part of openmano # All Rights Reserved. # @@ -36,7 +36,7 @@ import time import sys import getopt import yaml -from os import getenv as os_getenv, path as os_path +from os import environ, path as os_path from jsonschema import validate as js_v, exceptions as js_e import logging import logging.handlers as log_handlers @@ -48,9 +48,9 @@ import osm_ro __author__ = "Alfonso Tierno, Gerardo Garcia, Pablo Montes" __date__ = "$26-aug-2014 11:09:29$" -__version__ = "0.5.52-r562" -version_date = "Mar 2018" -database_version = 28 # expected database schema version +__version__ = "0.5.84-r594" +version_date = "Nov 2018" +database_version = 33 # expected database schema version global global_config @@ -136,6 +136,7 @@ def usage(): print(" --log-socket-host HOST: send logs to this host") print(" --log-socket-port PORT: send logs using this port (default: 9022)") print(" --log-file FILE: send logs to this file") + print(" --create-tenant NAME: Try to creates this tenant name before starting, ignoring any errors as e.g. conflict") return @@ -154,17 +155,21 @@ def set_logging_file(log_file): if __name__=="__main__": - env_config = { - 'db_host': 'RO_DB_HOST', - 'db_name': 'RO_DB_NAME', - 'db_user': 'RO_DB_USER', - 'db_passwd': 'RO_DB_PASSWORD', - 'db_ovim_host': 'RO_DB_OVIM_HOST', - 'db_ovim_name': 'RO_DB_OVIM_NAME', - 'db_ovim_user': 'RO_DB_OVIM_USER', - 'db_ovim_passwd': 'RO_DB_OVIM_PASSWORD', - 'db_port': 'RO_DB_PORT', - 'db_port': 'RO_DB_PORT', + # env2config contains envioron variable names and the correspondence with configuration file openmanod.cfg keys. + # If this environ is defined, this value is taken instead of the one at at configuration file + env2config = { + 'RO_DB_HOST': 'db_host', + 'RO_DB_NAME': 'db_name', + 'RO_DB_USER': 'db_user', + 'RO_DB_PASSWORD': 'db_passwd', + # 'RO_DB_PORT': 'db_port', + 'RO_DB_OVIM_HOST': 'db_ovim_host', + 'RO_DB_OVIM_NAME': 'db_ovim_name', + 'RO_DB_OVIM_USER': 'db_ovim_user', + 'RO_DB_OVIM_PASSWORD': 'db_ovim_passwd', + # 'RO_DB_OVIM_PORT': 'db_ovim_port', + 'RO_LOG_LEVEL': 'log_level', + 'RO_LOG_FILE': 'log_file', } # Configure logging step 1 hostname = socket.gethostname() @@ -174,7 +179,7 @@ if __name__=="__main__": 'severity:%(levelname)s logger:%(name)s log:%(message)s'.format( host=hostname), datefmt='%Y-%m-%dT%H:%M:%S') - log_format_simple = "%(asctime)s %(levelname)s %(name)s %(filename)s:%(lineno)s %(message)s" + log_format_simple = "%(asctime)s %(levelname)s %(name)s %(thread)d %(filename)s:%(lineno)s %(message)s" log_formatter_simple = logging.Formatter(log_format_simple, datefmt='%Y-%m-%dT%H:%M:%S') logging.basicConfig(format=log_format_simple, level= logging.DEBUG) logger = logging.getLogger('openmano') @@ -183,8 +188,10 @@ if __name__=="__main__": # Read parameters and configuration file httpthread = None try: - #load parameters and configuration - opts, args = getopt.getopt(sys.argv[1:], "hvc:V:p:P:", ["config=", "help", "version", "port=", "vnf-repository=", "adminport=", "log-socket-host=", "log-socket-port=", "log-file="]) + # load parameters and configuration + opts, args = getopt.getopt(sys.argv[1:], "hvc:V:p:P:", + ["config=", "help", "version", "port=", "vnf-repository=", "adminport=", + "log-socket-host=", "log-socket-port=", "log-file=", "create-tenant="]) port=None port_admin = None config_file = 'osm_ro/openmanod.cfg' @@ -192,6 +199,7 @@ if __name__=="__main__": log_file = None log_socket_host = None log_socket_port = None + create_tenant = None for o, a in opts: if o in ("-v", "--version"): @@ -215,6 +223,8 @@ if __name__=="__main__": log_socket_host = a elif o == "--log-file": log_file = a + elif o == "--create-tenant": + create_tenant = a else: assert False, "Unhandled option" if log_file: @@ -234,10 +244,15 @@ if __name__=="__main__": global_config['log_socket_port'] = log_socket_port # override with ENV - for config_key, env_var in env_config.items(): - if os_getenv(env_var): - global_config[config_key] = os_getenv(env_var) - + for env_k, env_v in environ.items(): + try: + if not env_k.startswith("RO_") or env_k not in env2config or not env_v: + continue + global_config[env2config[env_k]] = env_v + if env_k.endswith("PORT"): # convert to int, skip if not possible + global_config[env2config[env_k]] = int(env_v) + except Exception as e: + logger.warn("skipping environ '{}={}' because exception '{}'".format(env_k, env_v, e)) # if vnf_repository is not None: # global_config['vnf_repository'] = vnf_repository @@ -320,6 +335,14 @@ if __name__=="__main__": exit(-1) nfvo.global_config=global_config + if create_tenant: + try: + nfvo.new_tenant(mydb, {"name": create_tenant}) + except Exception as e: + if isinstance(e, nfvo.NfvoException) and e.http_code == 409: + pass # if tenant exist (NfvoException error 409), ignore + else: # otherwise print and error and continue + logger.error("Cannot create tenant '{}': {}".format(create_tenant, e)) nfvo.start_service(mydb) httpthread = httpserver.httpserver(mydb, False, global_config['http_host'], global_config['http_port'])