Add UEFI support in functest
authorCatalina Focsa <catalina.focsa@enea.com>
Mon, 28 Aug 2017 12:31:12 +0000 (14:31 +0200)
committerCatalina Focsa <catalina.focsa@enea.com>
Fri, 1 Sep 2017 12:21:37 +0000 (14:21 +0200)
Add extra properties to the cirros image
for ARM architecture.
In the glanceclient repository, the create method
expects **kwargs as parameters, thus an extra_properties
variable containing a dictionary of property-value pairs
can be added (if given) to the image to be created.
If the properties do not appear, the call should not affect
the image properties because the dictionary is initialized
as empty.

Change-Id: I690da90e6c6f250bd0a3d99cce39aa250e19b9c2
Signed-off-by: Catalina Focsa <catalina.focsa@enea.com>
functest/ci/config_aarch64_patch.yaml
functest/opnfv_tests/openstack/rally/rally.py
functest/utils/openstack_utils.py

index 6b3699b..44df3ca 100644 (file)
@@ -4,6 +4,10 @@ os:
             image_name: TestVM
             image_file_name:  cirros-d161201-aarch64-disk.img
             image_password:  gocubsgo
+            extra_properties:
+              hw_firmware_type: 'uefi'
+              hw_video_model: 'vga'
+              short_id: 'ubuntu16.04'
     snaps:
         images:
           glance_tests:
index fdef8be..2042b2d 100644 (file)
@@ -42,6 +42,10 @@ class RallyBase(testcase.OSGCTestCase):
         CONST.__getattribute__('dir_functest_images'),
         GLANCE_IMAGE_FILENAME)
     GLANCE_IMAGE_FORMAT = CONST.__getattribute__('openstack_image_disk_format')
+    GLANCE_IMAGE_EXTRA_PROPERTIES = {}
+    if hasattr(CONST, 'openstack_extra_properties'):
+        GLANCE_IMAGE_EXTRA_PROPERTIES = CONST.__getattribute__(
+            'openstack_extra_properties')
     FLAVOR_NAME = "m1.tiny"
 
     RALLY_DIR = pkg_resources.resource_filename(
@@ -462,7 +466,8 @@ class RallyBase(testcase.OSGCTestCase):
         self.image_exists, self.image_id = os_utils.get_or_create_image(
             self.GLANCE_IMAGE_NAME,
             self.GLANCE_IMAGE_PATH,
-            self.GLANCE_IMAGE_FORMAT)
+            self.GLANCE_IMAGE_FORMAT,
+            self.GLANCE_IMAGE_EXTRA_PROPERTIES)
         if self.image_id is None:
             raise Exception("Failed to get or create image '%s'" %
                             self.GLANCE_IMAGE_NAME)
index 73d1cde..def0539 100644 (file)
@@ -1195,8 +1195,13 @@ def get_image_id(glance_client, image_name):
     return id
 
 
-def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
-                        container="bare", public="public"):
+def create_glance_image(glance_client,
+                        image_name,
+                        file_path,
+                        disk="qcow2",
+                        extra_properties={},
+                        container="bare",
+                        public="public"):
     if not os.path.isfile(file_path):
         logger.error("Error: file %s does not exist." % file_path)
         return None
@@ -1211,7 +1216,8 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
             image = glance_client.images.create(name=image_name,
                                                 visibility=public,
                                                 disk_format=disk,
-                                                container_format=container)
+                                                container_format=container,
+                                                **extra_properties)
             image_id = image.id
             with open(file_path) as image_data:
                 glance_client.images.upload(image_id, image_data)
@@ -1222,7 +1228,7 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
         return None
 
 
-def get_or_create_image(name, path, format):
+def get_or_create_image(name, path, format, extra_properties):
     image_exists = False
     glance_client = get_glance_client()
 
@@ -1232,7 +1238,11 @@ def get_or_create_image(name, path, format):
         image_exists = True
     else:
         logger.info("Creating image '%s' from '%s'..." % (name, path))
-        image_id = create_glance_image(glance_client, name, path, format)
+        image_id = create_glance_image(glance_client,
+                                       name,
+                                       path,
+                                       format,
+                                       extra_properties)
         if not image_id:
             logger.error("Failed to create a Glance image...")
         else: