Check if rally image already exist and don't create it again if so
[functest.git] / testcases / VIM / OpenStack / CI / libraries / run_rally.py
index d5796c1..a7f1db1 100644 (file)
@@ -21,6 +21,7 @@ import argparse
 import logging
 import yaml
 import requests
+import subprocess
 import sys
 from novaclient import client as novaclient
 from keystoneclient.v2_0 import client as keystoneclient
@@ -47,7 +48,7 @@ parser.add_argument("-r", "--report",
 args = parser.parse_args()
 
 
-
+FNULL = open(os.devnull, 'w')
 """ logging configuration """
 logger = logging.getLogger("run_rally")
 logger.setLevel(logging.DEBUG)
@@ -121,16 +122,6 @@ def get_task_id(cmd_raw):
     return None
 
 
-def create_glance_image(path, name, disk_format):
-    """
-    Create a glance image given the absolute path of the image, its name and the disk format
-    """
-    cmd = ("glance image-create --name " + name + "  --visibility public "
-           "--disk-format " + disk_format + " --container-format bare --file " + path)
-    functest_utils.execute_command(cmd, logger)
-    return True
-
-
 def task_succeed(json_raw):
     """
     Parse JSON from rally JSON results
@@ -173,8 +164,14 @@ def run_task(test_name):
         logger.debug('Scenario fetched from : {}'.format(test_file_name))
         cmd_line = "rally task start --abort-on-sla-failure {}".format(test_file_name)
         logger.debug('running command line : {}'.format(cmd_line))
-        cmd = os.popen(cmd_line)
-        task_id = get_task_id(cmd.read())
+        p = subprocess.Popen(cmd_line, stdout=subprocess.PIPE, stderr=FNULL, shell=True)
+        result = ""
+        while p.poll() is None:
+            l = p.stdout.readline()
+            print l.replace('\n', '')
+            result += l
+
+        task_id = get_task_id(result)
         logger.debug('task_id : {}'.format(task_id))
 
         if task_id is None:
@@ -237,20 +234,24 @@ def main():
     glance_client = glanceclient.Client(1, glance_endpoint,
                                         token=keystone_client.auth_token)
 
-    logger.debug("Creating image '%s' from '%s'..." % (GLANCE_IMAGE_NAME, GLANCE_IMAGE_PATH))
-    image_id = functest_utils.create_glance_image(glance_client,
-                                            GLANCE_IMAGE_NAME,GLANCE_IMAGE_PATH)
-    if not image_id:
-        logger.error("Failed to create a Glance image...")
-        exit(-1)
-    # Check if the given image exists
-    try:
-        nova_client.images.find(name=GLANCE_IMAGE_NAME)
-        logger.info("Glance image found '%s'" % GLANCE_IMAGE_NAME)
-    except:
-        logger.error("ERROR: Glance image '%s' not found." % GLANCE_IMAGE_NAME)
-        logger.info("Available images are: ")
-        exit(-1)
+
+    image_id = functest_utils.get_image_id(glance_client, GLANCE_IMAGE_NAME)
+
+    if image_id == '':
+        logger.debug("Creating image '%s' from '%s'..." % (GLANCE_IMAGE_NAME, \
+                                                           GLANCE_IMAGE_PATH))
+        image_id = functest_utils.create_glance_image(glance_client,\
+                                                GLANCE_IMAGE_NAME,GLANCE_IMAGE_PATH)
+        if not image_id:
+            logger.error("Failed to create the Glance image...")
+            exit(-1)
+        else:
+            logger.debug("Image '%s' with ID '%s' created succesfully ." \
+                         % (GLANCE_IMAGE_NAME, image_id))
+    else:
+        logger.debug("Using existing image '%s' with ID '%s'..." \
+                     % (GLANCE_IMAGE_NAME,image_id))
+
 
     if args.test_name == "all":
         for test_name in tests:
@@ -265,6 +266,8 @@ def main():
         print(args.test_name)
         run_task(args.test_name)
 
+    logger.debug("Deleting image '%s' with ID '%s'..." \
+                         % (GLANCE_IMAGE_NAME, image_id))
     if not functest_utils.delete_glance_image(nova_client, image_id):
         logger.error("Error deleting the glance image")