Add container and disk format parameters

Add the following parameters about glance images.
They are utilized in
tempest.api.image.v2.test_images.BasicOperationsImagesTest and
tempest.api.image.v2.test_images.ListImagesTest.

container_formats:
A list of image's container formats that users can specify.

disk_formats:
A list of image's disk formats that users can specify.

DocImpact
Change-Id: I8153cc8a75d52de8f39260675739174a2ea3b4e4
Partial-Bug: #1483177
diff --git a/tempest/api/image/v2/test_images.py b/tempest/api/image/v2/test_images.py
index a336507..bacf211 100644
--- a/tempest/api/image/v2/test_images.py
+++ b/tempest/api/image/v2/test_images.py
@@ -18,10 +18,15 @@
 
 from six import moves
 
+from oslo_log import log as logging
 from tempest.api.image import base
 from tempest.common.utils import data_utils
+from tempest import config
 from tempest import test
 
+CONF = config.CONF
+LOG = logging.getLogger(__name__)
+
 
 class BasicOperationsImagesTest(base.BaseV2ImageTest):
     """
@@ -39,9 +44,11 @@
 
         uuid = '00000000-1111-2222-3333-444455556666'
         image_name = data_utils.rand_name('image')
+        container_format = CONF.image.container_formats[0]
+        disk_format = CONF.image.disk_formats[0]
         body = self.create_image(name=image_name,
-                                 container_format='bare',
-                                 disk_format='raw',
+                                 container_format=container_format,
+                                 disk_format=disk_format,
                                  visibility='private',
                                  ramdisk_id=uuid)
         self.assertIn('id', body)
@@ -77,9 +84,11 @@
 
         # Create image
         image_name = data_utils.rand_name('image')
+        container_format = CONF.image.container_formats[0]
+        disk_format = CONF.image.disk_formats[0]
         body = self.client.create_image(name=image_name,
-                                        container_format='bare',
-                                        disk_format='raw',
+                                        container_format=container_format,
+                                        disk_format=disk_format,
                                         visibility='private')
         image_id = body['id']
 
@@ -99,9 +108,11 @@
 
         # Create image
         image_name = data_utils.rand_name('image')
+        container_format = CONF.image.container_formats[0]
+        disk_format = CONF.image.disk_formats[0]
         body = self.client.create_image(name=image_name,
-                                        container_format='bare',
-                                        disk_format='iso',
+                                        container_format=container_format,
+                                        disk_format=disk_format,
                                         visibility='private')
         self.addCleanup(self.client.delete_image, body['id'])
         self.assertEqual('queued', body['status'])
@@ -133,13 +144,17 @@
         super(ListImagesTest, cls).resource_setup()
         # We add a few images here to test the listing functionality of
         # the images API
-        cls._create_standard_image('bare', 'raw')
-        cls._create_standard_image('bare', 'raw')
-        cls._create_standard_image('ami', 'raw')
-        # Add some more for listing
-        cls._create_standard_image('ami', 'ami')
-        cls._create_standard_image('ari', 'ari')
-        cls._create_standard_image('aki', 'aki')
+        container_fmts = CONF.image.container_formats
+        disk_fmts = CONF.image.disk_formats
+        all_pairs = [(container_fmt, disk_fmt)
+                     for container_fmt in container_fmts
+                     for disk_fmt in disk_fmts]
+
+        for (container_fmt, disk_fmt) in all_pairs[:6]:
+            LOG.debug("Creating a image"
+                      "(Container format: %s, Disk format: %s).",
+                      container_fmt, disk_fmt)
+            cls._create_standard_image(container_fmt, disk_fmt)
 
     @classmethod
     def _create_standard_image(cls, container_format, disk_format):
@@ -201,7 +216,7 @@
     @test.idempotent_id('cf1b9a48-8340-480e-af7b-fe7e17690876')
     def test_list_images_param_size(self):
         # Test to get all images by size
-        image_id = self.created_images[1]
+        image_id = self.created_images[0]
         # Get image metadata
         image = self.client.show_image(image_id)
 
@@ -211,7 +226,7 @@
     @test.idempotent_id('4ad8c157-971a-4ba8-aa84-ed61154b1e7f')
     def test_list_images_param_min_max_size(self):
         # Test to get all images with size between 2000 to 3000
-        image_id = self.created_images[1]
+        image_id = self.created_images[0]
         # Get image metadata
         image = self.client.show_image(image_id)
 
@@ -234,7 +249,7 @@
     @test.idempotent_id('e914a891-3cc8-4b40-ad32-e0a39ffbddbb')
     def test_list_images_param_limit(self):
         # Test to get images by limit
-        params = {"limit": 2}
+        params = {"limit": 1}
         images_list = self.client.list_images(params=params)['images']
 
         self.assertEqual(len(images_list), params['limit'],
diff --git a/tempest/config.py b/tempest/config.py
index eb49fed..e3d71c1 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -459,7 +459,16 @@
     cfg.IntOpt('build_interval',
                default=1,
                help="Time in seconds between image operation status "
-                    "checks.")
+                    "checks."),
+    cfg.ListOpt('container_formats',
+                default=['ami', 'ari', 'aki', 'bare', 'ovf', 'ova'],
+                help="A list of image's container formats "
+                     "users can specify."),
+    cfg.ListOpt('disk_formats',
+                default=['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2',
+                         'vdi', 'iso'],
+                help="A list of image's disk formats "
+                     "users can specify.")
 ]
 
 image_feature_group = cfg.OptGroup(name='image-feature-enabled',