Skip to content

Commit 63499f9

Browse files
committed
Image remove by name for azure
1 parent 62c243b commit 63499f9

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

wrapanapi/systems/ec2.py

+30
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,36 @@ def list_templates(self, executable_by_me=True, owned_by_me=True, public=False):
832832
return [EC2Image(system=self, raw=self.ec2_resource.Image(image["ImageId"]))
833833
for image in images]
834834

835+
def filter_free_images(self, image_list=None):
836+
"""
837+
Returns images which don't have a VM associated to it
838+
839+
Args:
840+
image_list (list): List of images
841+
"""
842+
occupied_images = []
843+
vm_list = self.list_vms()
844+
845+
if len(vm_list) == 0:
846+
# No VMs using the images, images are free
847+
return image_list
848+
849+
for vm in vm_list:
850+
if vm.raw.image_id in image_list:
851+
occupied_images.append(vm.raw.image_id)
852+
free_images = list(set(image_list) - set(occupied_images))
853+
return free_images
854+
855+
def delete_images(self, image_list=None):
856+
"""
857+
Deletes images by ID
858+
859+
Args:
860+
image_list (list): ["imageID_1", "imageID_2"]
861+
"""
862+
for image in image_list:
863+
img=EC2Image(system=self, raw=self.ec2_resource.Image(image)).delete()
864+
835865
def find_templates(self, name=None, id=None, executable_by_me=True, owned_by_me=True,
836866
public=False, filters=None):
837867
"""

wrapanapi/systems/msazure.py

+51
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,42 @@ def list_compute_images(self):
10771077
return self.resource_client.resources.list(
10781078
filter="resourceType eq 'Microsoft.Compute/images'")
10791079

1080+
def list_compute_images_by_resource_group(self, resource_group=None, free_images=None):
1081+
"""
1082+
Args:
1083+
resource_group (str): Name of the resource group
1084+
free_images (bool): Whether to collect image which do not have any resource(VM) linked to it
1085+
"""
1086+
resource_group = resource_group or self.resource_group
1087+
image_list = list(
1088+
self.resource_client.resources.list(
1089+
filter=f"resourceType eq 'Microsoft.Compute/images' and resourceGroup eq '{resource_group}'"
1090+
)
1091+
)
1092+
1093+
if not free_images:
1094+
return image_list
1095+
1096+
vm_list = self.list_vms(resource_group=resource_group)
1097+
if not vm_list:
1098+
return image_list
1099+
1100+
images_used_by_vm = []
1101+
for vm_name in vm_list:
1102+
images_used_by_vm.append(
1103+
self.compute_client.virtual_machines.get(
1104+
resource_group_name=resource_group,
1105+
vm_name=vm_name
1106+
).storage_profile.image_reference.id
1107+
)
1108+
1109+
images_with_no_resources = []
1110+
for image in image_list:
1111+
if image.id not in images_used_by_vm:
1112+
images_with_no_resources.append(image)
1113+
1114+
return images_with_no_resources
1115+
10801116
def list_all_image_names(self):
10811117
blob_image_names = [item.name for item in self.find_templates()]
10821118
compute_image_names = [item.name for item in self.list_compute_images()]
@@ -1130,6 +1166,21 @@ def delete_stack_by_date(self, days_old, resource_group=None):
11301166
result)
11311167
return results
11321168

1169+
def delete_compute_image_using_name(self, resource_group=None, image_list=None):
1170+
"""
1171+
Delete compute images using name
1172+
1173+
:resource_group: (str) Name of the resource group. "FooBar"
1174+
:image_list: (list) List of images. ["imagename1", "imagename2", "imagename3"]
1175+
"""
1176+
result = []
1177+
resource_group = resource_group or self.resource_group
1178+
for image in image_list:
1179+
self.logger.info("Deleting '%s' from '%s'", image, resource_group)
1180+
response = self.compute_client.images.delete(resource_group_name=resource_group, image_name=image)
1181+
result.append((image, response))
1182+
return result
1183+
11331184
def list_stack_resources(self, stack_name, resource_group=None):
11341185
self.logger.info("Checking Stack %s resources ", stack_name)
11351186
# todo: weird implementation to refactor this method later

0 commit comments

Comments
 (0)