diff options
-rw-r--r-- | api/resources/env_action.py | 39 | ||||
-rw-r--r-- | yardstick/common/constants.py | 3 |
2 files changed, 38 insertions, 4 deletions
diff --git a/api/resources/env_action.py b/api/resources/env_action.py index dd6566526..42bef8529 100644 --- a/api/resources/env_action.py +++ b/api/resources/env_action.py @@ -16,6 +16,7 @@ import threading import time import uuid import glob +import collections from six.moves import configparser from oslo_serialization import jsonutils @@ -26,7 +27,7 @@ from api.database.handler import AsyncTaskHandler from api.utils import influx from api.utils.common import result_handler from yardstick.common import constants as consts -from yardstick.common import utils as yardstick_utils +from yardstick.common import utils as common_utils from yardstick.common import openstack_utils from yardstick.common.httpClient import HttpClient @@ -179,7 +180,7 @@ def _config_influxdb(): def _change_output_to_influxdb(): - yardstick_utils.makedirs(consts.CONF_DIR) + common_utils.makedirs(consts.CONF_DIR) parser = configparser.ConfigParser() parser.read(consts.CONF_SAMPLE_FILE) @@ -235,11 +236,11 @@ def _prepare_env_daemon(task_id): def _create_directories(): - yardstick_utils.makedirs(consts.CONF_DIR) + common_utils.makedirs(consts.CONF_DIR) def _source_file(rc_file): - yardstick_utils.source_env(rc_file) + common_utils.source_env(rc_file) def _get_remote_rc_file(rc_file, installer_ip, installer_type): @@ -312,3 +313,33 @@ def _update_task_error(task_id, error): task = async_handler.get_task_by_taskid(task_id) async_handler.update_status(task, 2) async_handler.update_error(task, error) + + +def update_openrc(args): + try: + openrc_vars = args['openrc'] + except KeyError: + return result_handler(consts.API_ERROR, 'openrc must be provided') + else: + if not isinstance(openrc_vars, collections.Mapping): + return result_handler(consts.API_ERROR, 'args should be a dict') + + lines = ['export {}={}\n'.format(k, v) for k, v in openrc_vars.items()] + logger.debug('Writing: %s', ''.join(lines)) + + logger.info('Writing openrc: Writing') + common_utils.makedirs(consts.CONF_DIR) + + with open(consts.OPENRC, 'w') as f: + f.writelines(lines) + logger.info('Writing openrc: Done') + + logger.info('Source openrc: Sourcing') + try: + _source_file(consts.OPENRC) + except Exception as e: + logger.exception('Failed to source openrc') + return result_handler(consts.API_ERROR, str(e)) + logger.info('Source openrc: Done') + + return result_handler(consts.API_SUCCESS, {'openrc': openrc_vars}) diff --git a/yardstick/common/constants.py b/yardstick/common/constants.py index cb98c356d..4d65aff0c 100644 --- a/yardstick/common/constants.py +++ b/yardstick/common/constants.py @@ -77,6 +77,9 @@ DOCKER_URL = 'unix://var/run/docker.sock' INSTALLERS = ['apex', 'compass', 'fuel', 'joid'] SQLITE = 'sqlite:////tmp/yardstick.db' +API_SUCCESS = 1 +API_ERROR = 2 + BASE_URL = 'http://localhost:5000' ENV_ACTION_API = BASE_URL + '/yardstick/env/action' ASYNC_TASK_API = BASE_URL + '/yardstick/asynctask' |