Azure: handle leaked image upload resources

We could conceivable leak disks used for image uploads as well as
the images themselves.  Handle that in the cleanup method.

Change-Id: I6e72682995c50a57684cd5a0407a85049cdbda16
This commit is contained in:
James E. Blair
2021-03-19 10:22:06 -07:00
parent a0ac467e82
commit 64796c570c
2 changed files with 34 additions and 10 deletions

View File

@@ -579,13 +579,23 @@ class StateMachineProvider(Provider, QuotaSupport):
continue
known_nodes.add(node.id)
known_uploads = set()
uploads = self._zk.getProviderUploads(self.provider.name)
for image in uploads.values():
for build in image.values():
for upload in build:
known_uploads.add(upload.id)
metadata = {'nodepool_provider_name': self.provider.name}
self.adapter.cleanupLeakedResources(known_nodes, metadata)
self.adapter.cleanupLeakedResources(known_nodes,
known_uploads, metadata)
# Image handling
def uploadImage(self, image_name, filename, image_type=None, meta=None,
md5=None, sha256=None):
meta = meta.copy()
meta['nodepool_provider_name'] = self.provider.name
return self.adapter.uploadImage(image_name, filename,
image_format=image_type,
metadata=meta, md5=md5,
@@ -762,7 +772,7 @@ class Adapter:
"""
raise NotImplementedError()
def cleanupLeakedResources(self, known_nodes, metadata):
def cleanupLeakedResources(self, known_nodes, known_uploads, metadata):
"""Delete any leaked resources
Use the supplied metadata to delete any leaked resources.
@@ -774,10 +784,13 @@ class Adapter:
be deleted.
Look up the `nodepool_node_id` metadata attribute on cloud
instances to compare to known_nodes.
instances to compare to known_nodes, and `nodepool_upload_id`
for known_uploads.
:param set known_nodes: A set of string values representing
known node ids.
:param set known_uploads: A set of string values representing
known image upload ids.
:param dict metadata: Metadata values to compare with cloud
instances.