Skip to content

Commit

Permalink
Image remove by name for azure
Browse files Browse the repository at this point in the history
  • Loading branch information
akhil-jha committed Jul 26, 2023
1 parent 62c243b commit 51b32f2
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
33 changes: 33 additions & 0 deletions wrapanapi/systems/ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,39 @@ def list_templates(self, executable_by_me=True, owned_by_me=True, public=False):
return [EC2Image(system=self, raw=self.ec2_resource.Image(image["ImageId"]))
for image in images]

def filter_free_images(self, image_list=None):
"""
Returns images which don't have a VM associated to it
Args:
image_list (list): List of images
"""
occupied_images = []
vm_list = self.list_vms()

if len(vm_list) == 0:
# No VMs using the images, images are free
return image_list

for vm in vm_list:
if vm.raw.image_id in image_list:
occupied_images.append(vm.raw.image_id)
free_images = list(set(image_list) - set(occupied_images))
return free_images

def delete_images(self, image_list=None):
"""
Deletes images by ID
Args:
image_list (list): ["imageID_1", "imageID_2"]
"""
for image in image_list:
img=EC2Image(system=self, raw=self.ec2_resource.Image(image))
img.delete()



def find_templates(self, name=None, id=None, executable_by_me=True, owned_by_me=True,
public=False, filters=None):
"""
Expand Down
44 changes: 44 additions & 0 deletions wrapanapi/systems/msazure.py
Original file line number Diff line number Diff line change
Expand Up @@ -1077,6 +1077,35 @@ def list_compute_images(self):
return self.resource_client.resources.list(
filter="resourceType eq 'Microsoft.Compute/images'")

def list_compute_images_by_resource_group(self, resource_group=None, free_images=None):
"""
Args:
resource_group (str): Name of the resource group
free_images (bool): Whether to collect image which do not have any resource(VM) linked to it
"""
resource_group = resource_group or self.resource_group
image_list = list(self.resource_client.resources.list(filter=f"resourceType eq 'Microsoft.Compute/images' and resourceGroup eq '{resource_group}'"))

if not free_images:
return image_list

vm_list = self.list_vms(resource_group=resource_group)
if len(vm_list) == 0:
return image_list

image_used_by_vm = []
for vm_name in vm_list:
image_used_by_vm.append(self.compute_client.virtual_machines.get(resource_group_name=resource_group, vm_name=vm_name).storage_profile.image_reference.id)

images_with_no_resources = []
for image in image_list:
if image.id not in image_used_by_vm:
images_with_no_resources.append(image)

return images_with_no_resources



def list_all_image_names(self):
blob_image_names = [item.name for item in self.find_templates()]
compute_image_names = [item.name for item in self.list_compute_images()]
Expand Down Expand Up @@ -1130,6 +1159,21 @@ def delete_stack_by_date(self, days_old, resource_group=None):
result)
return results

def delete_compute_image_by_name(self, resource_group=None, image_list=None):
"""
Delete compute images by name
:resource_group: (str) Name of the resource group. "FooBar"
:image_list: (list) List of images. ["imagename1", "imagename2", "imagename3"]
"""
result = []
resource_group = resource_group or self.resource_group
for image in image_list:
self.logger.info("Deleting '%s' from '%s'", image, resource_group)
response = self.compute_client.images.delete(resource_group_name=resource_group, image_name=image)
result.append((image, response))
return result

def list_stack_resources(self, stack_name, resource_group=None):
self.logger.info("Checking Stack %s resources ", stack_name)
# todo: weird implementation to refactor this method later
Expand Down

0 comments on commit 51b32f2

Please sign in to comment.