From 674a9902d40aef9a4c80669a0d00fc47447a806e Mon Sep 17 00:00:00 2001 From: chenjiankun Date: Tue, 16 May 2017 01:59:06 +0000 Subject: 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 --- api/resources/env_action.py | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) (limited to 'api') 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}) -- cgit 1.2.3-korg