X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=cmframework%2Fsrc%2Fcmframework%2Fserver%2Fcmargs.py;fp=cmframework%2Fsrc%2Fcmframework%2Fserver%2Fcmargs.py;h=fd31e5da62ad4748323e1dd821c9849952d209ef;hb=c389bdee7b3845b55f443dbf04c0ce4083a55886;hp=0000000000000000000000000000000000000000;hpb=5030f0c004701dd422c78c71c014ef60f48139fc;p=ta%2Fconfig-manager.git diff --git a/cmframework/src/cmframework/server/cmargs.py b/cmframework/src/cmframework/server/cmargs.py new file mode 100644 index 0000000..fd31e5d --- /dev/null +++ b/cmframework/src/cmframework/server/cmargs.py @@ -0,0 +1,423 @@ +# Copyright 2019 Nokia + +# 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. +import sys +import argparse +import os + +from ConfigParser import SafeConfigParser + +from cmframework.apis import cmerror +from cmframework.utils import cmlogger + + +class CMArgsParser(object): + def __init__(self, prog): + self.prog = prog + self.ip = None + self.port = None + self.verbose = False + self.log_level = cmlogger.CMLogger.str_to_level('debug') + self.log_dest = cmlogger.CMLogger.str_to_dest('syslog') + self.disable_remote_activation = False + self.rmq_host = None + self.rmq_port = None + self.activators = None + self.validators = None + self.rmq_ip = None + self.backend_uri = None + self.backend_api = None + self.filename = None + self.inventory_handlers = None + self.inventory_data = None + self.install_phase = False + self.activationstate_handler_uri = None + self.activationstate_handler_api = None + self.activator_workers = 1 + self.snapshot_handler_uri = None + self.snapshot_handler_api = None + self.alarmhandler_api = None + + def parse(self, args): + argparse.ArgumentParser(description='Configuration Management Server', + prog=self.prog) + + if '--file' in args: + self.parse_config(args) + else: + self.parse_cmd_line(args) + + def parse_config(self, args): + parser = argparse.ArgumentParser(description='Configuration Management Server', + prog=self.prog) + + parser.add_argument('--file', + dest='filename', + required=True, + type=str, + action='store') + try: + args = parser.parse_args(args) + self.filename = args.filename + except Exception as error: + raise cmerror.CMError(str(error)) + + self.parse_config_file() + + def parse_config_file(self): + config = SafeConfigParser( + {'log_level': cmlogger.CMLogger.level_to_str(self.log_level), + 'log_dest': cmlogger.CMLogger.dest_to_str(self.log_dest), + 'verbose': repr(self.verbose), + 'disable_remote_activation': repr(self.disable_remote_activation), + 'activator_workers': '10', + 'alarmhandler_api': 'cmframework.lib.cmalarmhandler_dummy.AlarmHandler_Dummy', + 'snapshot_handler_api': ''}) + try: + config.read(self.filename) + self.ip = config.get('cmserver', 'ip') + self.port = config.getint('cmserver', 'port') + self.backend_api = config.get('cmserver', 'backend_api') + self.backend_uri = config.get('cmserver', 'backend_uri') + self.verbose = config.getboolean('cmserver', 'verbose') + self.log_level = cmlogger.CMLogger.str_to_level(config.get('cmserver', 'log_level')) + self.log_dest = cmlogger.CMLogger.str_to_dest(config.get('cmserver', 'log_dest')) + self.validators = CMArgsParser.dir_parser(config.get('cmserver', 'validators')) + self.activators = CMArgsParser.dir_parser(config.get('cmserver', 'activators')) + self.disable_remote_activation = \ + config.getboolean('cmserver', 'disable_remote_activation') + if not self.disable_remote_activation: + self.rmq_ip = config.get('cmserver', 'rmq_ip') + self.rmq_port = config.getint('cmserver', 'rmq_port') + self.inventory_handlers = CMArgsParser.dir_parser(config.get('cmserver', + 'inventory_handlers')) + self.inventory_data = config.get('cmserver', 'inventory_data') + self.install_phase = config.getboolean('cmserver', 'install_phase') + self.activationstate_handler_uri = config.get('cmserver', 'activationstate_handler_uri') + self.activationstate_handler_api = config.get('cmserver', 'activationstate_handler_api') + self.activator_workers = config.getint('cmserver', 'activator_workers') + self.snapshot_handler_uri = config.get('cmserver', 'snapshot_handler_uri') + self.snapshot_handler_api = config.get('cmserver', 'snapshot_handler_api') + self.alarmhandler_api = config.get('cmserver', 'alarmhandler_api') + except Exception as error: + raise cmerror.CMError(str(error)) + + def parse_cmd_line(self, args): + parser = argparse.ArgumentParser(description='Configuration Management Server', + prog=self.prog) + + parser.add_argument('--ip', + required=True, + help='The IP address to listen to', + type=str, + action='store') + + parser.add_argument('--port', + required=True, + help='The port number used for listening', + type=int, + action='store') + + parser.add_argument('--backend-api', + dest='backend_api', + metavar='BACKEND-API', + required=True, + help='The module.class implementing the backend api', + type=str, + action='store') + + parser.add_argument('--backend-uri', + dest='backend_uri', + metavar='BACKEND-URI', + required=True, + help='The uri needed by the backend api', + type=str, action='store') + + parser.add_argument('--log-level', + dest='log_level', + metavar='LOG-LEVEL', + required=False, + help=('The enabled logging level, possible values are ' + '{debug, info, warn, error}'), + type=CMArgsParser.log_level_parser, + default=self.log_level, + action='store') + + parser.add_argument('--log-dest', + dest='log_dest', + metavar='LOG-DEST', + required=False, + help='The logs destination, possible values are {console, syslog}', + type=CMArgsParser.log_dest_parser, + default=self.log_dest, + action='store') + + parser.add_argument('--verbose', + dest='verbose', + required=False, + default=self.verbose, + help='Enable verbose mode', + action='store_true') + + parser.add_argument('--validators', + dest='validators', + metavar='VALIDATORS-PATH', + required=True, + help='The full path were validatation plugin(s) are located', + type=CMArgsParser.dir_parser, + action='store') + + parser.add_argument('--activators', + dest='activators', + metavar='ACTIVATORS-PATH', + required=True, + help='The full path were activation plugin(s) are located', + type=CMArgsParser.dir_parser, + action='store') + + parser.add_argument('--disable-remote-activation', + dest='disable_remote_activation', + required=False, + default=self.disable_remote_activation, + help='Enable running activators in the target nodes', + action='store_true') + + parser.add_argument('--rmq-ip', + dest='rmq_ip', + metavar='RMQ-IP', + required=False, + help='RMQ broker IP address', + type=str, + action='store') + + parser.add_argument('--rmq-port', + dest='rmq_port', + metavar='RMQ-PORT', + required=False, + help='RMQ broker port number', + type=int, + action='store') + + parser.add_argument('--inventory-handlers', + dest='inventory_handlers', + metavar='INVENTORY-HANDLERS-PATH', + required=True, + help='The full path were inventory handlers are located', + type=CMArgsParser.dir_parser, + action='store') + + parser.add_argument('--inventory-data', + dest='inventory_data', + metavar='INVENTORY-DATA', + required=True, + help='The full path for the inventory data file', + type=str, + action='store') + + parser.add_argument('--install-phase', + dest='install_phase', + required=False, + default=False, + help='Indicate install phase startup', + action='store_true') + + parser.add_argument('--activationstate-handler-api', + dest='activationstate_handler_api', + metavar='ACTIVATIONSTATE-HANDLER-API', + required=True, + help='The module.class implementing the activationstate handler api', + type=str, + action='store') + + parser.add_argument('--activationstate-handler-uri', + dest='activationstate_handler_uri', + metavar='ACTIVATIONSTATE-HANDLER-URI', + required=True, + help='The uri needed by the activationstate handler uri', + type=str, action='store') + + parser.add_argument('--activator-workers', + dest='activator_workers', + metavar='ACTIVATOR_WORKERS', + required=False, + default=1, + help='Number of activator workers', + type=int, + action='store') + + parser.add_argument('--snapshot-handler-api', + dest='snapshot_handler_api', + metavar='SNAPSHOT-HANDLER-API', + required=True, + help='The module.class implementing the snapshot handler api', + type=str, + action='store') + + parser.add_argument('--snapshot-handler-uri', + dest='snapshot_handler_uri', + metavar='SNAPSHOT-HANDLER-URI', + required=False, + default='', + help='The uri needed by the snapshot handler uri', + type=str, action='store') + + parser.add_argument('--alarmhandler-api', + dest='alarmhandler_api', + metavar='ALARMHANDLER-API', + required=True, + help='The module.class implementing the alarmhandler api', + type=str, + action='store') + + try: + args = parser.parse_args(args) + self.ip = args.ip + self.port = args.port + self.backend_api = args.backend_api + self.backend_uri = args.backend_uri + self.verbose = args.verbose + self.log_level = args.log_level + self.log_dest = args.log_dest + self.validators = args.validators + self.activators = args.activators + self.disable_remote_activation = args.disable_remote_activation + if not self.disable_remote_activation: + self.rmq_ip = args.rmq_ip + self.rmq_port = args.rmq_port + self.inventory_handlers = args.inventory_handlers + self.inventory_data = args.inventory_data + self.install_phase = args.install_phase + self.activationstate_handler_api = args.activationstate_handler_api + self.activationstate_handler_uri = args.activationstate_handler_uri + self.activator_workers = args.activator_workers + self.snapshot_handler_api = args.snapshot_handler_api + self.snapshot_handler_uri = args.snapshot_handler_uri + self.alarmhandler_api = args.alarmhandler_api + except Exception as error: + raise cmerror.CMError(str(error)) + + @staticmethod + def log_level_parser(level): + try: + return cmlogger.CMLogger.str_to_level(level) + except cmerror.CMError as exp: + raise argparse.ArgumentTypeError(str(exp)) + + @staticmethod + def log_dest_parser(dest): + try: + return cmlogger.CMLogger.str_to_dest(dest) + except cmerror.CMError as exp: + raise argparse.ArgumentTypeError(str(exp)) + + @staticmethod + def dir_parser(path): + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError('Not a directory') + + def get_ip(self): + return self.ip + + def get_port(self): + return self.port + + def get_backend_api(self): + return self.backend_api + + def get_backend_uri(self): + return self.backend_uri + + def get_log_level(self): + return self.log_level + + def get_log_dest(self): + return self.log_dest + + def get_verbose(self): + return self.verbose + + def get_validators(self): + return self.validators + + def get_activators(self): + return self.activators + + def get_disable_remote_activation(self): + return self.disable_remote_activation + + def get_rmq_ip(self): + return self.rmq_ip + + def get_rmq_port(self): + return self.rmq_port + + def get_inventory_handlers(self): + return self.inventory_handlers + + def get_inventory_data(self): + return self.inventory_data + + def is_install_phase(self): + return self.install_phase + + def get_activationstate_handler_api(self): + return self.activationstate_handler_api + + def get_activationstate_handler_uri(self): + return self.activationstate_handler_uri + + def get_activator_workers(self): + return self.activator_workers + + def get_snapshot_handler_api(self): + return self.snapshot_handler_api + + def get_snapshot_handler_uri(self): + return self.snapshot_handler_uri + + def get_alarmhandler_api(self): + return self.alarmhandler_api + + +def main(): + cm_parser = CMArgsParser('cmserver') + try: + cm_parser.parse(sys.argv[1:]) + print 'ip = %s' % cm_parser.get_ip() + print 'port = %d' % cm_parser.get_port() + print 'backend-api = %s' % cm_parser.get_backend_api() + print 'backend-uri = %s' % cm_parser.get_backend_uri() + print 'log-level = %s' % cmlogger.CMLogger.level_to_str(cm_parser.get_log_level()) + print 'log-dest = %s' % cmlogger.CMLogger.dest_to_str(cm_parser.get_log_dest()) + print 'verbose = %s' % repr(cm_parser.get_verbose()) + print 'validators = %s' % repr(cm_parser.get_validators()) + print 'activators = %s' % repr(cm_parser.get_activators()) + print 'rmq-ip = %s' % repr(cm_parser.get_rmq_ip()) + print 'rmq-port = %s' % repr(cm_parser.get_rmq_port()) + print 'inventory-handlers = %s' % repr(cm_parser.get_inventory_handlers()) + print 'inventory-data = %s' % repr(cm_parser.get_inventory_data()) + print 'install-phase = %s' % repr(cm_parser.is_install_phase()) + print 'activationstate-handler-api = %s' % repr(cm_parser.get_activationstate_handler_api()) + print 'activationstate-handler-uri = %s' % repr(cm_parser.get_activationstate_handler_uri()) + print 'activator-workers = %s' % repr(cm_parser.get_activator_workers()) + print 'snapshot-handler-api = %s' % repr(cm_parser.get_snapshot_handler_api()) + print 'snapshot-handler-uri = %s' % repr(cm_parser.get_snapshot_handler_uri()) + print 'alarmhandler-api = %s' % cm_parser.get_alarmhandler_api() + except cmerror.CMError as error: + print 'Got error %s' % str(error) + sys.exit(1) + + +if __name__ == '__main__': + main()