X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=openmanod.py;h=bf3c3aa908ba114b851f5f2aa96f6beb1c2254f9;hb=refs%2Fchanges%2F26%2F226%2F1;hp=522a6576c5bc420cba25eafe9773bd25fcbe03bc;hpb=7edb675ac76f3e0473042cf5cf7de3c0f19eda7d;p=osm%2FRO.git diff --git a/openmanod.py b/openmanod.py index 522a6576..bf3c3aa9 100755 --- a/openmanod.py +++ b/openmanod.py @@ -33,8 +33,8 @@ It loads the configuration file and launches the http_server thread that will li ''' __author__="Alfonso Tierno, Gerardo Garcia, Pablo Montes" __date__ ="$26-aug-2014 11:09:29$" -__version__="0.4.36-r467" -version_date="Mar 2016" +__version__="0.4.39-r472" +version_date="May 2016" database_version="0.10" #expected database schema version import httpserver @@ -45,23 +45,33 @@ import getopt import yaml import nfvo_db from jsonschema import validate as js_v, exceptions as js_e -from utils import auxiliary_functions as af +import utils from openmano_schemas import config_schema import nfvo +import logging global global_config +logger = logging.getLogger('mano') + +class LoadConfigurationException(Exception): + pass def load_configuration(configuration_file): - default_tokens ={'http_port':9090, 'http_host':'localhost'} + default_tokens ={'http_port':9090, + 'http_host':'localhost', + 'log_level': 'DEBUG', + 'log_level_db': 'ERROR', + 'log_level_vimconn': 'DEBUG', + } try: #Check config file exists if not os.path.isfile(configuration_file): - return (False, "Error: Configuration file '"+configuration_file+"' does not exists.") + raise LoadConfigurationException("Error: Configuration file '"+configuration_file+"' does not exist.") #Read file - (return_status, code) = af.read_file(configuration_file) + (return_status, code) = utils.read_file(configuration_file) if not return_status: - return (return_status, "Error loading configuration file '"+configuration_file+"': "+code) + raise LoadConfigurationException("Error loading configuration file '"+configuration_file+"': "+code) #Parse configuration file try: config = yaml.load(code) @@ -70,7 +80,7 @@ def load_configuration(configuration_file): if hasattr(exc, 'problem_mark'): mark = exc.problem_mark error_pos = " at position: (%s:%s)" % (mark.line+1, mark.column+1) - return (False, "Error loading configuration file '"+configuration_file+"'"+error_pos+": content format error: Failed to parse yaml format") + raise LoadConfigurationException("Error loading configuration file '"+configuration_file+"'"+error_pos+": content format error: Failed to parse yaml format") #Validate configuration file with the config_schema try: @@ -78,16 +88,16 @@ def load_configuration(configuration_file): except js_e.ValidationError, exc: error_pos = "" if len(exc.path)>0: error_pos=" at '" + ":".join(map(str, exc.path))+"'" - return False, "Error loading configuration file '"+configuration_file+"'"+error_pos+": "+exc.message + raise LoadConfigurationException("Error loading configuration file '"+configuration_file+"'"+error_pos+": "+exc.message) #Check default values tokens for k,v in default_tokens.items(): if k not in config: config[k]=v except Exception,e: - return (False, "Error loading configuration file '"+configuration_file+"': "+str(e)) + raise LoadConfigurationException("Error loading configuration file '"+configuration_file+"': "+str(e)) - return (True, config) + return config def console_port_iterator(): '''this iterator deals with the http_console_ports @@ -96,69 +106,66 @@ def console_port_iterator(): index = 0 while index < len(global_config["http_console_ports"]): port = global_config["http_console_ports"][index] - #print "ports -> ", port + #print("ports -> ", port) if type(port) is int: yield port else: #this is dictionary with from to keys port2 = port["from"] - #print "ports -> ", port, port2 + #print("ports -> ", port, port2) while port2 <= port["to"]: - print "ports -> ", port, port2 + #print("ports -> ", port, port2) yield port2 port2 += 1 index += 1 def usage(): - print "Usage: ", sys.argv[0], "[options]" - print " -v|--version: prints current version" - print " -c|--config [configuration_file]: loads the configuration file (default: openmanod.cfg)" - print " -h|--help: shows this help" - print " -p|--port [port_number]: changes port number and overrides the port number in the configuration file (default: 9090)" - print " -P|--adminport [port_number]: changes admin port number and overrides the port number in the configuration file (default: 9095)" - print " -V|--vnf-repository: changes the path of the vnf-repository and overrides the path in the configuration file" + print("Usage: ", sys.argv[0], "[options]") + print( " -v|--version: prints current version") + print( " -c|--config [configuration_file]: loads the configuration file (default: openmanod.cfg)") + print( " -h|--help: shows this help") + print( " -p|--port [port_number]: changes port number and overrides the port number in the configuration file (default: 9090)") + print( " -P|--adminport [port_number]: changes admin port number and overrides the port number in the configuration file (default: 9095)") + print( " -V|--vnf-repository: changes the path of the vnf-repository and overrides the path in the configuration file") return if __name__=="__main__": + #streamformat = "%(levelname)s (%(module)s:%(lineno)d) %(message)s" + streamformat = "%(asctime)s %(name)s %(levelname)s: %(message)s" + logging.basicConfig(format=streamformat, level= logging.DEBUG) + logger.setLevel(logging.DEBUG) # Read parameters and configuration file try: opts, args = getopt.getopt(sys.argv[1:], "hvc:V:p:P:", ["config", "help", "version", "port", "vnf-repository", "adminport"]) - except getopt.GetoptError, err: - # print help information and exit: - print "Error:", err # will print something like "option -a not recognized" - usage() - sys.exit(2) - port=None - port_admin = None - config_file = 'openmanod.cfg' - vnf_repository = None + port=None + port_admin = None + config_file = 'openmanod.cfg' + vnf_repository = None + + for o, a in opts: + if o in ("-v", "--version"): + print "openmanod version", __version__, version_date + print "(c) Copyright Telefonica" + sys.exit() + elif o in ("-h", "--help"): + usage() + sys.exit() + elif o in ("-V", "--vnf-repository"): + vnf_repository = a + elif o in ("-c", "--config"): + config_file = a + elif o in ("-p", "--port"): + port = a + elif o in ("-P", "--adminport"): + port_admin = a + else: + assert False, "Unhandled option" - for o, a in opts: - if o in ("-v", "--version"): - print "openmanod version", __version__, version_date - print "(c) Copyright Telefonica" - sys.exit() - elif o in ("-h", "--help"): - usage() - sys.exit() - elif o in ("-V", "--vnf-repository"): - vnf_repository = a - elif o in ("-c", "--config"): - config_file = a - elif o in ("-p", "--port"): - port = a - elif o in ("-P", "--adminport"): - port_admin = a - else: - assert False, "Unhandled option" - - try: - r, global_config = load_configuration(config_file) + global_config = load_configuration(config_file) #print global_config - if not r: - print global_config - exit(-1) + logging.basicConfig(level = getattr(logging, global_config.get('log_level',"debug"))) + logger.setLevel(getattr(logging, global_config['log_level'])) # Override parameters obtained by command line if port is not None: global_config['http_port'] = port if port_admin is not None: global_config['http_admin_port'] = port_admin @@ -166,16 +173,16 @@ if __name__=="__main__": global_config['vnf_repository'] = vnf_repository else: if not 'vnf_repository' in global_config: - print os.getcwd() + logger.error( os.getcwd() ) global_config['vnf_repository'] = os.getcwd()+'/vnfrepo' #print global_config if not os.path.exists(global_config['vnf_repository']): - print "Creating folder vnf_repository folder: '%s'." % global_config['vnf_repository'] + logger.error( "Creating folder vnf_repository folder: '%s'.", global_config['vnf_repository']) try: os.makedirs(global_config['vnf_repository']) - except Exception,e: - print "Error '%s'. Ensure the path 'vnf_repository' is properly set at %s" %(e.args[1], config_file) + except Exception as e: + logger.error( "Error '%s'. Ensure the path 'vnf_repository' is properly set at %s",e.args[1], config_file) exit(-1) global_config["console_port_iterator"] = console_port_iterator @@ -184,14 +191,14 @@ if __name__=="__main__": # Initialize DB connection mydb = nfvo_db.nfvo_db(); if mydb.connect(global_config['db_host'], global_config['db_user'], global_config['db_passwd'], global_config['db_name']) == -1: - print "Error connecting to database", global_config['db_name'], "at", global_config['db_user'], "@", global_config['db_host'] + logger.error("Error connecting to database %s at %s@%s", global_config['db_name'], global_config['db_user'], global_config['db_host']) exit(-1) r = mydb.get_db_version() if r[0]<0: - print "Error DATABASE is not a MANO one or it is a '0.0' version. Try to upgrade to version '%s' with './database_utils/migrate_mano_db.sh'" % database_version + logger.error("Error DATABASE is not a MANO one or it is a '0.0' version. Try to upgrade to version '%s' with './database_utils/migrate_mano_db.sh'", database_version) exit(-1) elif r[1]!=database_version: - print "Error DATABASE wrong version '%s'. Try to upgrade/downgrade to version '%s' with './database_utils/migrate_mano_db.sh'" % (r[1], database_version) + logger.error("Error DATABASE wrong version '%s'. Try to upgrade/downgrade to version '%s' with './database_utils/migrate_mano_db.sh'", r[1], database_version) exit(-1) nfvo.global_config=global_config @@ -203,9 +210,9 @@ if __name__=="__main__": httpthreadadmin = httpserver.httpserver(mydb, True, global_config['http_host'], global_config['http_admin_port']) httpthreadadmin.start() time.sleep(1) - print 'Waiting for http clients' - print 'openmanod ready' - print '====================' + logger.info('Waiting for http clients') + print('openmanod ready') + print('====================') time.sleep(20) sys.stdout.flush() @@ -220,7 +227,12 @@ if __name__=="__main__": thread.terminate = True except (KeyboardInterrupt, SystemExit): - print 'Exiting openmanod' - exit() - + logger.info('Exiting openmanod') + except getopt.GetoptError as e: + logger.error("Error:", e) # will print something like "option -a not recognized" + #usage() + exit(-1) + except LoadConfigurationException as e: + logger.error("Error:", e) + exit(-1)