From e4ce77466afceec139c9076a3b3092c5115faef5 Mon Sep 17 00:00:00 2001 From: Tobias Urdin Date: Tue, 17 Mar 2020 16:22:30 +0100 Subject: [PATCH] Filter active images for OpenStack provider The OpenStack provider doesn't filter on status so when we uploaded a new image and deactivated the old one it throws a SDKException because it finds multiple images with the same name. This adds a filter to only lookup Glance images with a `active` status with the openstacksdk which is the only valid state where we can use the image [1]. [1] https://docs.openstack.org/glance/latest/user/statuses.html Change-Id: I480b4e222232da1f1aa86b1a08117e605ef08eb4 --- nodepool/driver/fake/provider.py | 2 +- nodepool/driver/openstack/provider.py | 4 ++-- .../filter-active-images-openstack-f69bf47323b6b91a.yaml | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 nodepool/releasenotes/notes/filter-active-images-openstack-f69bf47323b6b91a.yaml diff --git a/nodepool/driver/fake/provider.py b/nodepool/driver/fake/provider.py index 51d17befd..dcfd9a2ac 100644 --- a/nodepool/driver/fake/provider.py +++ b/nodepool/driver/fake/provider.py @@ -230,7 +230,7 @@ class FakeOpenStackCloud(object): self._image_list, instance_type=Dummy.IMAGE, done_status='READY', **kwargs) - def get_image(self, name_or_id): + def get_image(self, name_or_id, filters=None): return self._get(name_or_id, self._image_list) def list_images(self): diff --git a/nodepool/driver/openstack/provider.py b/nodepool/driver/openstack/provider.py index e515e60a5..0a3056152 100755 --- a/nodepool/driver/openstack/provider.py +++ b/nodepool/driver/openstack/provider.py @@ -264,7 +264,7 @@ class OpenStackProvider(Provider): if name in self._images: return self._images[name] - image = self._client.get_image(name) + image = self._client.get_image(name, filters={'status': 'active'}) self._images[name] = image return image @@ -396,7 +396,7 @@ class OpenStackProvider(Provider): image_name, server, **meta) def getImage(self, image_id): - return self._client.get_image(image_id) + return self._client.get_image(image_id, filters={'status': 'active'}) def labelReady(self, label): if not label.cloud_image: diff --git a/nodepool/releasenotes/notes/filter-active-images-openstack-f69bf47323b6b91a.yaml b/nodepool/releasenotes/notes/filter-active-images-openstack-f69bf47323b6b91a.yaml new file mode 100644 index 000000000..5ee71fa48 --- /dev/null +++ b/nodepool/releasenotes/notes/filter-active-images-openstack-f69bf47323b6b91a.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed a bug where Nodepool did not filter for active images when + using the OpenStack provider.