Revamp config parsing and imports
Brings sanity to the passing of the config variable around the various submodules for use in the ZKConnection decorator.
This commit is contained in:
		| @@ -19,15 +19,14 @@ | ||||
| # | ||||
| ############################################################################### | ||||
|  | ||||
| import yaml | ||||
| import os | ||||
| import flask | ||||
|  | ||||
| from distutils.util import strtobool as dustrtobool | ||||
| from functools import wraps | ||||
| from flask_restful import Resource, Api, reqparse, abort | ||||
| from celery import Celery | ||||
|  | ||||
| from pvcapid.Daemon import config, strtobool | ||||
|  | ||||
| import pvcapid.helper as api_helper | ||||
| import pvcapid.provisioner as api_provisioner | ||||
| import pvcapid.benchmark as api_benchmark | ||||
| @@ -35,80 +34,10 @@ import pvcapid.ova as api_ova | ||||
|  | ||||
| from flask_sqlalchemy import SQLAlchemy | ||||
|  | ||||
| # API version | ||||
| API_VERSION = 1.0 | ||||
|  | ||||
|  | ||||
| def strtobool(stringv): | ||||
|     if stringv is None: | ||||
|         return False | ||||
|     if isinstance(stringv, bool): | ||||
|         return bool(stringv) | ||||
|     try: | ||||
|         return bool(dustrtobool(stringv)) | ||||
|     except Exception: | ||||
|         return False | ||||
|  | ||||
|  | ||||
| # Parse the configuration file | ||||
| try: | ||||
|     pvcapid_config_file = os.environ['PVC_CONFIG_FILE'] | ||||
| except Exception: | ||||
|     print('Error: The "PVC_CONFIG_FILE" environment variable must be set before starting pvcapid.') | ||||
|     exit(1) | ||||
|  | ||||
| print('Loading configuration from file "{}"'.format(pvcapid_config_file)) | ||||
|  | ||||
| # Read in the config | ||||
| try: | ||||
|     with open(pvcapid_config_file, 'r') as cfgfile: | ||||
|         o_config = yaml.load(cfgfile, Loader=yaml.BaseLoader) | ||||
| except Exception as e: | ||||
|     print('ERROR: Failed to parse configuration file: {}'.format(e)) | ||||
|     exit(1) | ||||
|  | ||||
| try: | ||||
|     # Create the config object | ||||
|     config = { | ||||
|         'debug': strtobool(o_config['pvc']['debug']), | ||||
|         'coordinators': o_config['pvc']['coordinators'], | ||||
|         'listen_address': o_config['pvc']['api']['listen_address'], | ||||
|         'listen_port': int(o_config['pvc']['api']['listen_port']), | ||||
|         'auth_enabled': strtobool(o_config['pvc']['api']['authentication']['enabled']), | ||||
|         'auth_secret_key': o_config['pvc']['api']['authentication']['secret_key'], | ||||
|         'auth_tokens': o_config['pvc']['api']['authentication']['tokens'], | ||||
|         'ssl_enabled': strtobool(o_config['pvc']['api']['ssl']['enabled']), | ||||
|         'ssl_key_file': o_config['pvc']['api']['ssl']['key_file'], | ||||
|         'ssl_cert_file': o_config['pvc']['api']['ssl']['cert_file'], | ||||
|         'database_host': o_config['pvc']['provisioner']['database']['host'], | ||||
|         'database_port': int(o_config['pvc']['provisioner']['database']['port']), | ||||
|         'database_name': o_config['pvc']['provisioner']['database']['name'], | ||||
|         'database_user': o_config['pvc']['provisioner']['database']['user'], | ||||
|         'database_password': o_config['pvc']['provisioner']['database']['pass'], | ||||
|         'queue_host': o_config['pvc']['provisioner']['queue']['host'], | ||||
|         'queue_port': o_config['pvc']['provisioner']['queue']['port'], | ||||
|         'queue_path': o_config['pvc']['provisioner']['queue']['path'], | ||||
|         'storage_hosts': o_config['pvc']['provisioner']['ceph_cluster']['storage_hosts'], | ||||
|         'storage_domain': o_config['pvc']['provisioner']['ceph_cluster']['storage_domain'], | ||||
|         'ceph_monitor_port': o_config['pvc']['provisioner']['ceph_cluster']['ceph_monitor_port'], | ||||
|         'ceph_storage_secret_uuid': o_config['pvc']['provisioner']['ceph_cluster']['ceph_storage_secret_uuid'] | ||||
|     } | ||||
|  | ||||
|     # Use coordinators as storage hosts if not explicitly specified | ||||
|     if not config['storage_hosts']: | ||||
|         config['storage_hosts'] = config['coordinators'] | ||||
|  | ||||
|     # Set the config object in the api_helper namespace | ||||
|     api_helper.config = config | ||||
|     # Set the config object in the api_provisioner namespace | ||||
|     api_provisioner.config = config | ||||
|     # Set the config object in the api_benchmark namespace | ||||
|     api_benchmark.config = config | ||||
|     # Set the config object in the api_ova namespace | ||||
|     api_ova.config = config | ||||
| except Exception as e: | ||||
|     print('ERROR: Failed to load configuration: {}'.format(e)) | ||||
|     exit(1) | ||||
|  | ||||
| # Create Flask app and set config values | ||||
| app = flask.Flask(__name__) | ||||
| app.config['CELERY_BROKER_URL'] = 'redis://{}:{}{}'.format(config['queue_host'], config['queue_port'], config['queue_path']) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user