from etcd3_wrapper import Etcd3Wrapper 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()) etcd_wrapper_args = () etcd_wrapper_kwargs = { 'host': env_vars.get('ETCD_URL', 'localhost'), 'port': env_vars.get('ETCD_PORT', 2379), 'ca_cert': env_vars.get('CA_CERT', None), 'cert_cert': env_vars.get('CERT_CERT', None), 'cert_key': env_vars.get('CERT_KEY', None) } etcd_client = Etcd3Wrapper(*etcd_wrapper_args, **etcd_wrapper_kwargs) host_pool = HostPool(etcd_client, env_vars.get('HOST_PREFIX', "hosts")) vm_pool = VmPool(etcd_client, env_vars.get('VM_PREFIX', "vms")) request_pool = RequestPool(etcd_client, env_vars.get('REQUEST_PREFIX', "requests")) running_vms = [] __storage_backend = env_vars.get("STORAGE_BACKEND", "filesystem") if __storage_backend == "filesystem": image_storage_handler = FileSystemBasedImageStorageHandler(vm_base=env_vars.get("VM_DIR", "/tmp/ucloud-vms"), image_base=env_vars.get("IMAGE_DIR", "/tmp/ucloud-images")) elif __storage_backend == "ceph": image_storage_handler = CEPHBasedImageStorageHandler(vm_base="ssd", image_base="ssd") else: raise Exception("Unknown Image Storage Handler")