diff options
author | chenjiankun <chenjiankun1@huawei.com> | 2017-05-16 01:59:06 +0000 |
---|---|---|
committer | chenjiankun <chenjiankun1@huawei.com> | 2017-06-24 02:16:10 +0000 |
commit | 674a9902d40aef9a4c80669a0d00fc47447a806e (patch) | |
tree | 2796b0f5f3661f9bae95ff0805cd0becaf8ace5d | |
parent | 417df8187c1ddb04066409db6b2360b85c894b65 (diff) |
Add API to update openrc variable
JIRA: YARDSTICK-651
Currently we source openrc variable manually or use yardstick env
prepare to get openrc file.
We need API to update the openrc variable.
api: /yardstick/env/action
description: source environment variable
method: POST
parameters:
{
'action': 'update_openrc',
'args':{
'openrc': {
'OS_USERNAME': 'admin',
'OS_PASSWORD': 'console',
'OS_TENANT_NAME': 'admin',
'OS_AUTH_URL': 'http://192.168.131.222:5000/v2.0',
'EXTERNAL_NETWORK': 'ext-net'
}
}
}
Change-Id: I680a7249116c8ff0c1a9e7d5089538d935240c80
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
-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' |