dovetail tool: offline support 05/31905/3
authorMatthewLi <matthew.lijun@huawei.com>
Mon, 27 Mar 2017 12:17:55 +0000 (08:17 -0400)
committerMatthewLi <matthew.lijun@huawei.com>
Wed, 29 Mar 2017 06:05:14 +0000 (02:05 -0400)
JIRA: DOVETAIL-164

usage:
dovetail run --testsuite <testsuite> --offline
1,if --offline given, can run offline by using local docker images
(if there is no images, will get an error in log, images can be
pulled from dockerhub or downloaded from artifacts.opnfv.org )
2,if --offline not given, will run online, which means
pull docker image from dockerhub

Change-Id: I87ab35c82e59fb13a7a88c38d233e89285efc4d3
Signed-off-by: MatthewLi <matthew.lijun@huawei.com>
dovetail/conf/cmd_config.yml
dovetail/container.py
dovetail/run.py
dovetail/test_runner.py
requirements.txt
setup.py

index c0da511..da8c473 100644 (file)
@@ -58,3 +58,8 @@ cli:
           - '--report'
           - '-r'
         help: 'push results to DB (e.g. --report http://192.168.135.2:8000/api/v1)'
+      offline:
+        flags:
+          - '--offline'
+        is_flag: 'True'
+        help: 'run in offline method, which means not to update the docker upstream images, functest, yardstick, etc.'
index bfdbeb9..878b21c 100644 (file)
@@ -186,6 +186,12 @@ class Container(object):
                     return 3
         return 0
 
+    @classmethod
+    def check_image_exist(cls, validate_type):
+        docker_image = cls.get_docker_image(validate_type)
+        image_id = cls.get_image_id(docker_image)
+        return image_id
+
     @classmethod
     def clean(cls, container_id):
         cmd1 = 'sudo docker stop %s' % (container_id)
index 17d7edf..2a2c567 100755 (executable)
@@ -171,6 +171,11 @@ def main(*args, **kwargs):
     if kwargs['report']:
         dt_cfg.dovetail_config['report_dest'] = kwargs['report']
 
+    if kwargs['offline']:
+        dt_cfg.dovetail_config['offline'] = True
+    else:
+        dt_cfg.dovetail_config['offline'] = False
+
     testarea = kwargs['testarea']
     testsuite_validation = False
     testarea_validation = False
index 537fdec..ea58768 100644 (file)
@@ -29,8 +29,16 @@ class DockerRunner(object):
         cls.logger = dt_logger.Logger(__name__ + '.DockerRunner').getLogger()
 
     def run(self):
-        Container.pull_image(self.testcase.validate_type())
-        container_id = Container.create(self.testcase.validate_type())
+        if dt_cfg.dovetail_config['offline']:
+            exist = Container.check_image_exist(self.testcase.validate_type())
+            if not exist:
+                self.logger.error('%s image not exist offline running',
+                                  self.testcase.validate_type())
+                return
+            container_id = Container.create(self.testcase.validate_type())
+        else:
+            Container.pull_image(self.testcase.validate_type())
+            container_id = Container.create(self.testcase.validate_type())
         if not container_id:
             self.logger.error('failed to create container')
             return
index ae64322..e636959 100644 (file)
@@ -1,7 +1,8 @@
 Click
 Jinja2==2.8
-pbr>=2.0.0
+pbr==2.0.0
 PyYAML==3.11
 python-openstackclient==3.9.0
 requests==2.10.0
 six==1.10.0
+stevedore==1.20.0
index aeb4bf3..a84dd40 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -10,5 +10,5 @@
 import setuptools
 
 setuptools.setup(
-    setup_requires=['pbr>=2.0.0'],
+    setup_requires=['pbr==2.0.0'],
     pbr=True)