summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrexlee8776 <limingjiang@huawei.com>2017-06-27 07:27:03 +0000
committerrexlee8776 <limingjiang@huawei.com>2017-07-06 06:58:18 +0000
commita9fc9d29b782dd90bbac95a602529b5da927ca6d (patch)
tree2ed4dbe55dbaf3bc85dca500311bfb5a10c8d097
parent14bc98f0e810e37f4600cb0b16d227e8290e1db2 (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.py13
-rw-r--r--api/resources/write_hosts.py23
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))