From ca56ed8e1cc74a1c6543440cfccabc9781fb2cb4 Mon Sep 17 00:00:00 2001 From: Kyr Shatskyy Date: Wed, 14 Jul 2021 16:48:45 +0200 Subject: [PATCH] openstack: add exclude_image regex parameter Signed-off-by: Kyr Shatskyy --- teuthology/provision/cloud/openstack.py | 8 +++++- .../provision/cloud/test/test_openstack.py | 25 +++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/teuthology/provision/cloud/openstack.py b/teuthology/provision/cloud/openstack.py index 41088cdc60..39a1d0e6ba 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 fe3c092402..08f5b9c08a 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): -- 2.39.5