diff options
author | rexlee8776 <limingjiang@huawei.com> | 2017-06-27 07:27:03 +0000 |
---|---|---|
committer | rexlee8776 <limingjiang@huawei.com> | 2017-07-06 06:58:18 +0000 |
commit | a9fc9d29b782dd90bbac95a602529b5da927ca6d (patch) | |
tree | 2ed4dbe55dbaf3bc85dca500311bfb5a10c8d097 | |
parent | 14bc98f0e810e37f4600cb0b16d227e8290e1db2 (diff) |
Add API to update hosts info about SUT
JIRA: YARDSTICK-674
For some SUT which use domain name as endpoint and AUTH_URL, yardstick
restAPI should support to add "ip domain_name" info into /etc/hosts so
that it can use the ip_address to access the SUT.
api: /yardstick/env/action
description: update hosts info for domain name
method: POST
parameters:
{
"action": "update_hosts",
"args": {"opnfv.org": "1.1.1.1",
"openstack.org": "2.2.2.2"
}
}
Change-Id: Iee1defaf069ebcb0328a37a659024eabac297482
Signed-off-by: rexlee8776 <limingjiang@huawei.com>
-rw-r--r-- | api/resources/env_action.py | 13 | ||||
-rw-r--r-- | api/resources/write_hosts.py | 23 |
2 files changed, 31 insertions, 5 deletions
diff --git a/api/resources/env_action.py b/api/resources/env_action.py index 2ea64ef1a..fed987063 100644 --- a/api/resources/env_action.py +++ b/api/resources/env_action.py @@ -18,6 +18,7 @@ import uuid import glob import yaml import collections +from subprocess import PIPE from six.moves import configparser from oslo_serialization import jsonutils @@ -415,10 +416,12 @@ def update_hosts(hosts_ip): if not isinstance(hosts_ip, dict): return result_handler(consts.API_ERROR, 'Error, args should be a dict') LOG.info('Writing hosts: Writing') - hosts_list = ['\n{} {}'.format(ip, host_name) - for host_name, ip in hosts_ip.items()] - LOG.debug('Writing: %s', hosts_list) - with open(consts.ETC_HOSTS, 'a') as f: - f.writelines(hosts_list) + LOG.debug('Writing: %s', hosts_ip) + cmd = ["sudo", "python", "write_hosts.py"] + p = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, + cwd = os.path.join(consts.REPOS_DIR, "api/resources")) + _, err = p.communicate(jsonutils.dumps(hosts_ip)) + if p.returncode != 0 : + return result_handler(consts.API_ERROR, err) LOG.info('Writing hosts: Done') return result_handler(consts.API_SUCCESS, 'success') diff --git a/api/resources/write_hosts.py b/api/resources/write_hosts.py new file mode 100644 index 000000000..e4b69846b --- /dev/null +++ b/api/resources/write_hosts.py @@ -0,0 +1,23 @@ +############################################################################## +# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +from __future__ import absolute_import + +import sys +import json + + +def write_hosts(hosts_ip): + hosts_list = ('\n{} {}'.format(ip, host_name) + for host_name, ip in hosts_ip.items()) + with open("/etc/hosts", 'a') as f: + f.writelines(hosts_list) + f.write("\n") + +if __name__ == "__main__": + write_hosts(json.load(sys.stdin)) |