Add API to update hosts info about SUT 57/36557/6
authorrexlee8776 <limingjiang@huawei.com>
Tue, 27 Jun 2017 07:27:03 +0000 (07:27 +0000)
committerrexlee8776 <limingjiang@huawei.com>
Thu, 6 Jul 2017 06:58:18 +0000 (06:58 +0000)
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>
api/resources/env_action.py
api/resources/write_hosts.py [new file with mode: 0644]

index 2ea64ef..fed9870 100644 (file)
@@ -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 (file)
index 0000000..e4b6984
--- /dev/null
@@ -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))