mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 12:20:52 +01:00
ecr_gc: Iterate through all tags, reduce prints (#42492)
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/42492 There's a potential for multiple tags to be created for the same digest so we should iterate through all potential tags so that we're not deleting digests that are associated with tags that we actually want. Also, reduced the number of prints in this script to only the absolutely necessary prints. (i.e. only the deleted images) Signed-off-by: Eli Uriegas <eliuriegas@fb.com> Test Plan: Imported from OSS Reviewed By: ezyang Differential Revision: D22909248 Pulled By: seemethere fbshipit-source-id: 7f2e540d133485ed6464e413b01ef67aa73df432
This commit is contained in:
parent
d3acfe3ba8
commit
934b68f866
|
|
@ -88,6 +88,9 @@ parser = argparse.ArgumentParser(description="Delete old Docker tags from regist
|
|||
parser.add_argument(
|
||||
"--dry-run", action="store_true", help="Dry run; print tags that would be deleted"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--debug", action="store_true", help="Debug, print ignored / saved tags"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--keep-stable-days",
|
||||
type=int,
|
||||
|
|
@ -164,51 +167,48 @@ for repo in repos(client):
|
|||
|
||||
# Keep list of image digests to delete for this repository
|
||||
digest_to_delete = []
|
||||
print(repositoryName)
|
||||
|
||||
for image in images(client, repo):
|
||||
tags = image.get("imageTags")
|
||||
if not isinstance(tags, (list,)) or len(tags) == 0:
|
||||
continue
|
||||
|
||||
tag = tags[0]
|
||||
created = image["imagePushedAt"]
|
||||
age = now - created
|
||||
if any([
|
||||
looks_like_git_sha(tag),
|
||||
tag.isdigit(),
|
||||
tag.count("-") == 4, # TODO: Remove, this no longer applies as tags are now built using a SHA1
|
||||
tag in ignore_tags]):
|
||||
window = stable_window
|
||||
if tag in ignore_tags:
|
||||
stable_window_tags.append((repositoryName, tag, "", age, created))
|
||||
elif age < window:
|
||||
stable_window_tags.append((repositoryName, tag, window, age, created))
|
||||
else:
|
||||
window = unstable_window
|
||||
for tag in tags:
|
||||
if any([
|
||||
looks_like_git_sha(tag),
|
||||
tag.isdigit(),
|
||||
tag.count("-") == 4, # TODO: Remove, this no longer applies as tags are now built using a SHA1
|
||||
tag in ignore_tags]):
|
||||
window = stable_window
|
||||
if tag in ignore_tags:
|
||||
stable_window_tags.append((repositoryName, tag, "", age, created))
|
||||
elif age < window:
|
||||
stable_window_tags.append((repositoryName, tag, window, age, created))
|
||||
else:
|
||||
window = unstable_window
|
||||
|
||||
if tag in ignore_tags:
|
||||
print("Ignoring tag {}:{} (age: {})".format(repositoryName, tag, age))
|
||||
continue
|
||||
if age < window:
|
||||
print("Not deleting manifest for tag {}:{} (age: {})".format(repositoryName, tag, age))
|
||||
continue
|
||||
|
||||
if args.dry_run:
|
||||
print("(dry run) Deleting manifest for tag {}:{} (age: {})".format(repositoryName, tag, age))
|
||||
if tag in ignore_tags or age < window:
|
||||
if args.debug:
|
||||
print("Ignoring {}:{} (age: {})".format(repositoryName, tag, age))
|
||||
break
|
||||
else:
|
||||
print("Deleting manifest for tag{}:{} (age: {})".format(repositoryName, tag, age))
|
||||
for tag in tags:
|
||||
print("{}Deleting {}:{} (age: {})".format("(dry run) " if args.dry_run else "", repositoryName, tag, age))
|
||||
digest_to_delete.append(image["imageDigest"])
|
||||
if args.dry_run:
|
||||
if args.debug:
|
||||
print("Skipping actual deletion, moving on...")
|
||||
else:
|
||||
# Issue batch delete for all images to delete for this repository
|
||||
# Note that as of 2018-07-25, the maximum number of images you can
|
||||
# delete in a single batch is 100, so chunk our list into batches of
|
||||
# 100
|
||||
for c in chunks(digest_to_delete, 100):
|
||||
client.batch_delete_image(
|
||||
registryId="308535385114",
|
||||
repositoryName=repositoryName,
|
||||
imageIds=[{"imageDigest": digest} for digest in c],
|
||||
)
|
||||
|
||||
# Issue batch delete for all images to delete for this repository
|
||||
# Note that as of 2018-07-25, the maximum number of images you can
|
||||
# delete in a single batch is 100, so chunk our list into batches of
|
||||
# 100
|
||||
for c in chunks(digest_to_delete, 100):
|
||||
client.batch_delete_image(
|
||||
registryId="308535385114",
|
||||
repositoryName=repositoryName,
|
||||
imageIds=[{"imageDigest": digest} for digest in c],
|
||||
)
|
||||
|
||||
save_to_s3(args.filter_prefix, stable_window_tags)
|
||||
save_to_s3(args.filter_prefix, stable_window_tags)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user