From 6d0ce65f5c3124d0f038b767df70d08c37540fec Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 8 Dec 2019 12:59:18 +0100 Subject: [PATCH] begin to switch to configparser To not have unwanted environment influence --- scripts/ucloud | 17 ++++++++++------- ucloud/config.py | 40 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/scripts/ucloud b/scripts/ucloud index 277bf2e..b8ef32d 100755 --- a/scripts/ucloud +++ b/scripts/ucloud @@ -3,10 +3,8 @@ import argparse import logging import importlib - -# For the exception -import decouple import sys +import os COMMANDS = ['api', 'scheduler', 'host', 'filescanner', 'imagescanner', 'metadata'] @@ -15,20 +13,25 @@ if __name__ == "__main__": arg_parser = argparse.ArgumentParser(prog='ucloud', description='Open Source Cloud Management Software') + arg_parser.add_argument('-c', '--conf-dir', help="Configuration directory") arg_parser.add_argument('component', choices=COMMANDS) arg_parser.add_argument('component_args', nargs='*') args = arg_parser.parse_args() try: name = args.component - mod = importlib.import_module("ucloud.{}.main".format(name)) main = getattr(mod, "main") + + if args.conf_dir: + print("setting conf") + os.environ['UCLOUD_CONF_DIR'] = args.conf_dir + main() - except decouple.UndefinedValueError as e: - print(e) - sys.exit(1) + # except decouple.UndefinedValueError as e: + # print(e) + # sys.exit(1) except Exception as e: logging.exception(e) diff --git a/ucloud/config.py b/ucloud/config.py index a5b8f00..b508f56 100644 --- a/ucloud/config.py +++ b/ucloud/config.py @@ -4,14 +4,46 @@ from ucloud.common.host import HostPool from ucloud.common.request import RequestPool from ucloud.common.vm import VmPool from ucloud.common.storage_handlers import FileSystemBasedImageStorageHandler, CEPHBasedImageStorageHandler + from decouple import Config, RepositoryEnv, RepositoryEmpty +# Replacing decouple inline +import configparser +import os +import os.path + +import logging + +log = logging.getLogger("ucloud.config") + + +conf_name = "ucloud.conf" + +try: + conf_dir = os.environ["UCLOUD_CONF_DIR"] +except KeyError: + conf_dir = "/etc/ucloud" + +config_file = os.path.join(conf_dir, conf_name) + +config = configparser.ConfigParser() + +try: + with open(config_file, "r") as conf_fd: + conf.read(conf_fd) +except FileNotFoundError: + log.warn("Configuration file not found - using defaults") + + +# Compatibility to old code +env_vars = config + # Try importing config, but don't fail if it does not exist -try: - env_vars = Config(RepositoryEnv('/etc/ucloud/ucloud.conf')) -except FileNotFoundError: - env_vars = Config(RepositoryEmpty()) +# try: +# env_vars = Config(RepositoryEnv('/etc/ucloud/ucloud.conf')) +# except FileNotFoundError: +# env_vars = Config(RepositoryEmpty()) etcd_wrapper_args = ()