Skip to content

Commit e42d938

Browse files
authored
Add --grace-period option to delete-deprecated-images (#341)
Allow specifying a number of days to wait after an AMI's deprecation time before actually deleting it.Defaults to 0, preserving existing behavior.
1 parent 4c54158 commit e42d938

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

upload-ami/src/upload_ami/delete_deprecated_images.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
logger = logging.getLogger(__name__)
99

1010

11-
def delete_deprecated_images(ec2: EC2Client, dry_run: bool) -> None:
11+
def delete_deprecated_images(
12+
ec2: EC2Client, dry_run: bool, grace_period_days: int = 0
13+
) -> None:
1214
"""
1315
Delete an image by its name.
1416
@@ -29,7 +31,9 @@ def delete_deprecated_images(ec2: EC2Client, dry_run: bool) -> None:
2931
# ISO8601 string and compare the strings. This works because
3032
# ISO8601 strings are lexicographically comparable.
3133
current_time = datetime.datetime.isoformat(
32-
datetime.datetime.now(), timespec="milliseconds"
34+
datetime.datetime.now()
35+
- datetime.timedelta(days=grace_period_days),
36+
timespec="milliseconds",
3337
)
3438
if (
3539
image["Name"].startswith("nixos/23.11")
@@ -67,6 +71,13 @@ def main() -> None:
6771
action="store_true",
6872
help="Do not actually delete anything, just log what would be deleted",
6973
)
74+
parser.add_argument(
75+
"--grace-period",
76+
type=int,
77+
default=0,
78+
metavar="DAYS",
79+
help="Number of days after deprecation before an image is deleted (default: 0)",
80+
)
7081
logging.basicConfig(level=logging.INFO)
7182
ec2: EC2Client = boto3.client("ec2")
7283

@@ -76,7 +87,7 @@ def main() -> None:
7687
assert "RegionName" in region
7788
ec2r = boto3.client("ec2", region_name=region["RegionName"])
7889
logging.info(f"Checking region {region['RegionName']}")
79-
delete_deprecated_images(ec2r, args.dry_run)
90+
delete_deprecated_images(ec2r, args.dry_run, args.grace_period)
8091

8192

8293
if __name__ == "__main__":

0 commit comments

Comments
 (0)