1
votes

Azure Container Registry - supprimer toutes les images sauf 2

Je souhaite supprimer toutes les images dans Azure Container Registry, à l'exception des deux dernières. Je cherchais un script pour le faire mais je ne trouve que pour supprimer les images de plus de X jours. Ce n'est pas possible pour ma situation car certains jours il y a beaucoup d'images créées et d'autres jours une seule.

Quelqu'un a une idée?


1 commentaires

vous devez expliquer a) ce que vous entendez par «deux derniers» et b) ce que vous avez essayé jusqu'à présent.


3 Réponses :


1
votes

Je ne peux pas le tester pour le moment, mais ce petit script PowerShell devrait fonctionner:

$acrName = 'YourACRName'

$repo = az acr repository list --name $acrName
$repo | Convertfrom-json | Foreach-Object {
    $imageName = $_
    (az acr repository show-tags -n $acrName --repository $_ | 
        convertfrom-json )| Select-Object -SkipLast 2 | Foreach-Object {
        az acr repository delete --yes -n $acrName --image "$imageName:$_"
        }
}

Il récupère toutes les balises pour chaque référentiel, ignore les 2 dernières, puis itère sur chaque balise et le supprime.

Veuillez d'abord le tester dans une sorte d ' environnement de test .


4 commentaires

Bonjour Martin, désolé pour ma réponse tardive. J'ai 6 référentiels donc je veux également définir le référentiel. Est-ce possible? Merci d'avance


une idée? Merci d'avance! Cordialement


Votre solution a été vraiment utile. J'ai une condition à ajouter qui devrait sauter quelques images et elle ne devrait pas être supprimée, même si elle vient dans la liste de suppression. Par exemple, j'ai une image comme abc: v1, def: v2, xyz: v4 qui ne devrait en aucun cas être supprimée que je peux ajouter en tant que valeur de code en dur afin que le système ne supprime pas cela. Dans la solution ci-dessous, si nous pouvons ajouter une condition pour ignorer une image codée en dur donnée afin que celles-ci ne soient pas supprimées. Peut-être sous un bloc forach, nous pouvons ajouter une condition et ajouter une liste d'images à ignorer?


@RajivMishra Merci pour vos commentaires. Je conviens que ce serait utile, mais la question était de sauter les deux dernières images, ce serait donc une mauvaise réponse à cette question. En général, il suffit d'ajouter un | Where-Object {$ _ -notin $ yourListOfImagesToKeep} après le ConvertFrom-Json



0
votes

Si vous en avez besoin dans bash .

La variable delete_from est basée sur un index 1, c'est-à-dire que si vous spécifiez la valeur 1, toutes les images seront supprimées. Une valeur de 3 conserve les 2 dernières images.

#!/bin/bash -e

acr='your_acr'
repos=('repo1' 'repo2' 'repoN')
delete_from=3

for repo in "${repos[@]}"; do
    tags_to_delete=$(echo $(az acr repository show-tags -n ${acr} --repository ${repo} --orderby time_desc --output tsv) | cut -d ' ' -f${delete_from}-) 
    for tag_to_delete in ${tags_to_delete}; do
        az acr repository delete --yes -n ${acr} --image ${repo}:${tag_to_delete}
    done
done


0 commentaires

3
votes

Modifiez les valeurs de $ skipLastTags & $ registryName selon votre choix et exécutez ce script sur PowerShell.

Remarque: veuillez vérifier que az cli est installé sur votre système local.

$registryName = 'registryName'
$doNotDeleteTags = ''
$skipLastTags = 4

$repoArray = (az acr repository list --name $registryName --output json | ConvertFrom-Json)

foreach ($repo in $repoArray)
{
    $tagsArray = (az acr repository show-tags --name $registryName --repository $repo --orderby time_asc --output json | ConvertFrom-Json ) | Select-Object -SkipLast $skipLastTags

    foreach($tag in $tagsArray)
    {

        if ($donotdeletetags -contains $tag)
        {
            Write-Output ("This tag is not deleted $tag")
        }
        else
        {
            az acr repository delete --name $registryName --image $repo":"$tag --yes
        }
 
    }
}


0 commentaires