76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
#!/usr/bin/pytho3
|
|
|
|
from pprint import pprint
|
|
import boto3
|
|
from datetime import datetime, timezone, timedelta
|
|
|
|
|
|
class Ami:
|
|
def __init__(self, name: str, age: int, delete: bool):
|
|
self.name = name
|
|
self.age = age
|
|
self.delete = delete
|
|
|
|
def __repr__(self):
|
|
return f"Ami(name='{self.name}', age={self.age}, delete={self.delete})"
|
|
|
|
def mark_for_deletion(self):
|
|
self.delete = True
|
|
|
|
|
|
ec2 = boto3.client("ec2")
|
|
images = ec2.describe_images(
|
|
Owners=["self"],
|
|
Filters=[
|
|
{"Name": "name", "Values": ["var*", "online-ordering-website*"]},
|
|
],
|
|
)
|
|
|
|
ami_in_use = []
|
|
launch_templates = ec2.describe_launch_templates()
|
|
for t in launch_templates.get("LaunchTemplates"):
|
|
latest = ec2.describe_launch_template_versions(
|
|
LaunchTemplateId=t.get("LaunchTemplateId"),
|
|
Versions=["$Latest"],
|
|
)
|
|
for lt in latest.get("LaunchTemplateVersions"):
|
|
ami_in_use.append(lt.get("LaunchTemplateData").get("ImageId"))
|
|
|
|
all_images = images.get("Images", [])
|
|
inactive_images = [i for i in all_images if i.get("ImageId") not in ami_in_use]
|
|
|
|
my_amis = {}
|
|
for i in all_images:
|
|
ami_id = i.get("ImageId")
|
|
ami_date = datetime.strptime(
|
|
i.get("CreationDate"), "%Y-%m-%dT%H:%M:%S.%fZ"
|
|
).replace(tzinfo=timezone.utc)
|
|
ami_age = datetime.now(timezone.utc) - ami_date
|
|
in_use = i.get("ImageId") not in ami_in_use
|
|
my_amis[i.get("ImageId")] = Ami(i.get("Name"), ami_age.days, in_use)
|
|
|
|
bno_images = {
|
|
k: v for k, v in my_amis.items() if v.name.startswith("var-backend-non-ordering")
|
|
}
|
|
bo_images = {
|
|
k: v for k, v in my_amis.items() if v.name.startswith("var-backend-ordering")
|
|
}
|
|
oo_images = {k: v for k, v in my_amis.items() if v.name.startswith("online-ordering")}
|
|
|
|
# sort and do not delete the newest 2
|
|
bno_sorted = sorted(bno_images.items(), key=lambda item: item[1].age)
|
|
for key, ami_obj in bno_sorted[:2]:
|
|
ami_obj.delete = False
|
|
|
|
bo_sorted = sorted(bo_images.items(), key=lambda item: item[1].age)
|
|
for key, ami_obj in bo_sorted[:2]:
|
|
ami_obj.delete = False
|
|
|
|
oo_sorted = sorted(oo_images.items(), key=lambda item: item[1].age)
|
|
for key, ami_obj in oo_sorted[:2]:
|
|
ami_obj.delete = False
|
|
|
|
pprint(bno_sorted)
|
|
pprint(bo_sorted)
|
|
pprint(oo_sorted)
|