@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
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',
+ ),
)
)
)
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):