From: Kyr Shatskyy Date: Wed, 14 Jul 2021 14:48:45 +0000 (+0200) Subject: openstack: add exclude_image regex parameter X-Git-Tag: 1.2.0~245^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F1659%2Fhead;p=teuthology.git openstack: add exclude_image regex parameter Signed-off-by: Kyr Shatskyy --- diff --git a/teuthology/provision/cloud/openstack.py b/teuthology/provision/cloud/openstack.py index 41088cdc6..39a1d0e6b 100644 --- a/teuthology/provision/cloud/openstack.py +++ b/teuthology/provision/cloud/openstack.py @@ -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 diff --git a/teuthology/provision/cloud/test/test_openstack.py b/teuthology/provision/cloud/test/test_openstack.py index fe3c09240..08f5b9c08 100644 --- a/teuthology/provision/cloud/test/test_openstack.py +++ b/teuthology/provision/cloud/test/test_openstack.py @@ -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):