NEW: various python files
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user