Bugfix: the config files in useeconfig will cover user's config 33/40733/1
authorxudan <xudan16@huawei.com>
Thu, 31 Aug 2017 06:20:25 +0000 (02:20 -0400)
committerxudan <xudan16@huawei.com>
Thu, 31 Aug 2017 06:20:25 +0000 (02:20 -0400)
1. Now there are 2 sample files tempest_conf.yaml and hosts.yaml in userconfig,
   and thet will cover user's tempest_conf.yaml and hosts.yaml
   in $DOVETAIL_HOME/pre_config.
2. Rename the files in userconfig to be tempest_conf.yaml.sample
   and hosts.yaml.sample.
3. Add the hosts info in file /etc/hosts in Dovetail Container.

JIRA: DOVETAIL-492

Change-Id: I2b5694a8058b864b510925eec595d6f2bd1062ff
Signed-off-by: xudan <xudan16@huawei.com>
dovetail/container.py
dovetail/userconfig/hosts.yaml.sample [moved from dovetail/userconfig/hosts.yaml with 100% similarity]
dovetail/userconfig/tempest_conf.yaml.sample [moved from dovetail/userconfig/tempest_conf.yaml with 100% similarity]
dovetail/utils/dovetail_utils.py

index f3d0837..cf8e14e 100644 (file)
@@ -153,6 +153,23 @@ class Container(object):
         envs = envs + ' -e BUILD_TAG=%s-%s' % (dovetail_config['build_tag'],
                                                testcase_name)
 
+        hosts_config = ""
+        hosts_config_file = os.path.join(dovetail_config['config_dir'],
+                                         'hosts.yaml')
+        try:
+            with open(hosts_config_file) as f:
+                hosts_info = yaml.safe_load(f)
+            if hosts_info['hosts_info']:
+                for host in hosts_info['hosts_info']:
+                    dt_utils.add_hosts_info(host)
+                    hosts_config += " --add-host "
+                    hosts_config += str(host)
+                cls.logger.info('Get hosts info {}.'.format(hosts_config))
+        except Exception:
+            cls.logger.warn('Failed to get hosts info in {}, '
+                            'maybe some issues with domain name resolution.'
+                            .format(hosts_config_file))
+
         config = ""
         if type.lower() == "functest":
             config = cls.set_functest_config(testcase_name)
@@ -168,22 +185,6 @@ class Container(object):
             ' -v %s:%s ' % (os.getenv("DOVETAIL_HOME"),
                             dovetail_config[type]['config']['dir'])
 
-        hosts_config = ""
-        hosts_config_path = os.path.abspath(
-            os.path.join(os.path.dirname(__file__), 'userconfig'))
-        try:
-            with open(os.path.join(hosts_config_path, 'hosts.yaml')) as f:
-                hosts_info = yaml.safe_load(f)
-            if hosts_info['hosts_info']:
-                for host in hosts_info['hosts_info']:
-                    hosts_config += " --add-host "
-                    hosts_config += str(host)
-                cls.logger.info('Get hosts info {}.'.format(hosts_config))
-        except Exception:
-            cls.logger.warn('Failed to get hosts info in {}/hosts.yaml, '
-                            'maybe some issues with domain name resolution.'
-                            .format(hosts_config_path))
-
         cacert_volume = ""
         https_enabled = dt_utils.check_https_enabled(cls.logger)
         cacert = os.getenv('OS_CACERT',)
index 2c7ac31..23285e3 100644 (file)
@@ -208,3 +208,9 @@ def check_docker_version(logger=None):
     if client_ret != 0 or (LooseVersion(client_ver) < LooseVersion('1.12.3')):
         logger.error("Don't support this Docker client version. "
                      "Docker client should be updated to at least 1.12.3.")
+
+
+def add_hosts_info(hosts_info):
+    hosts_file = '/etc/hosts'
+    with open(hosts_file, 'a') as f:
+        f.write("{}\n".format(hosts_info))