diff --git a/conf/ucloud.conf b/conf/ucloud.conf new file mode 100644 index 0000000..7f83d80 --- /dev/null +++ b/conf/ucloud.conf @@ -0,0 +1,12 @@ +# This section contains default values for all other sections +[DEFAULT] + +NETWORK_PREFIX = moo + +[api] +NETWORK_PREFIX = foo + +[woo] +NETWORK_PREFIX = foo + +[noval] \ No newline at end of file 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 = ()