]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
openstack: add exclude_image regex parameter 1659/head
authorKyr Shatskyy <kyrylo.shatskyy@suse.com>
Wed, 14 Jul 2021 14:48:45 +0000 (16:48 +0200)
committerKyr Shatskyy <kyrylo.shatskyy@suse.com>
Wed, 14 Jul 2021 16:30:53 +0000 (18:30 +0200)
Signed-off-by: Kyr Shatskyy <kyrylo.shatskyy@suse.com>
teuthology/provision/cloud/openstack.py
teuthology/provision/cloud/test/test_openstack.py

index 41088cdc608682b3c6ee5d35f270ab657402f7f3..39a1d0e6bad025c5fc80daaf880c2bd1ed6c5609 100644 (file)
@@ -84,7 +84,13 @@ class OpenStackProvider(Provider):
     @property
     def images(self):
         if not hasattr(self, '_images'):
-            self._images = retry(self.driver.list_images)
+            exclude_image = self.conf.get('exclude_image', [])
+            if exclude_image and not isinstance(exclude_image, list):
+                exclude_image = [exclude_image]
+            exclude_re = [re.compile(x) for x in exclude_image]
+            images = retry(self.driver.list_images)
+            self._images = [_ for _ in images
+                if not any(x.match(_.name) for x in exclude_re)]
         return self._images
 
     @property
index fe3c092402f216ff6eec1f1c8a9eb4236055b79a..08f5b9c08a30ed076b2aefa056832b75ffe7d602 100644 (file)
@@ -22,6 +22,15 @@ test_config = dict(
                 password='password',
                 ex_force_auth_url='http://127.0.0.1:9999/v2.0/tokens',
             ),
+        ),
+        image_exclude_provider=dict(
+            driver='openstack',
+            exclude_image=['.*-exclude1', '.*-exclude2'],
+            driver_args=dict(
+                username='user',
+                password='password',
+                ex_force_auth_url='http://127.0.0.1:9999/v2.0/tokens',
+            ),
         )
     )
 )
@@ -174,9 +183,21 @@ class TestOpenStackProvider(TestOpenStackBase):
 
     def test_images(self):
         obj = cloud.get_provider('my_provider')
-        self.mocks['m_list_images'].return_value = ['image0', 'image1']
+        self.mocks['m_list_images'].return_value = [
+                get_fake_obj(attributes=dict(name=_))
+                    for _ in ['image0', 'image1']]
+        assert not hasattr(obj, '_images')
+        assert [_.name for _ in obj.images] == ['image0', 'image1']
+        assert hasattr(obj, '_images')
+
+    def test_exclude_image(self):
+        obj = cloud.get_provider('image_exclude_provider')
+        self.mocks['m_list_images'].return_value = [
+                get_fake_obj(attributes=dict(name=_))
+                    for _ in ['image0', 'image1',
+                        'image2-exclude1', 'image3-exclude2']]
         assert not hasattr(obj, '_images')
-        assert obj.images == ['image0', 'image1']
+        assert [_.name for _ in obj.images] == ['image0', 'image1']
         assert hasattr(obj, '_images')
 
     def test_sizes(self):