1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
# coding: utf-8
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
"""
FILE: sample_delete_images.py
DESCRIPTION:
This sample demonstrates deleting all but the most recent three images for each repository.
USAGE:
python sample_delete_images.py
Set the environment variables with your own values before running the sample:
1) CONTAINERREGISTRY_ENDPOINT - The URL of you Container Registry account
This sample assumes your registry has at least four repositories.
"""
import os
from dotenv import find_dotenv, load_dotenv
from azure.containerregistry import ContainerRegistryClient, ArtifactManifestOrder
from sample_utilities import load_registry, get_authority, get_audience, get_credential
class DeleteImages(object):
def __init__(self):
load_dotenv(find_dotenv())
self.endpoint = os.environ.get("CONTAINERREGISTRY_ENDPOINT")
self.authority = get_authority(self.endpoint)
self.audience = get_audience(self.authority)
self.credential = get_credential(
self.authority, exclude_environment_credential=True
)
def delete_images(self):
load_registry()
# Instantiate an instance of ContainerRegistryClient
with ContainerRegistryClient(self.endpoint, self.credential, audience=self.audience) as client:
for repository in client.list_repository_names():
print(repository)
# Keep the three most recent images, delete everything else
manifest_count = 0
for manifest in client.list_manifest_properties(
repository, order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING
):
manifest_count += 1
if manifest_count > 3:
# Make sure will have the permission to delete the manifest later
client.update_manifest_properties(
repository,
manifest.digest,
can_write=True,
can_delete=True
)
print(f"Deleting {repository}:{manifest.digest}")
client.delete_manifest(repository, manifest.digest)
if __name__ == "__main__":
sample = DeleteImages()
sample.delete_images()
|