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?
3 Réponses :
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 .
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
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
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 } } }
vous devez expliquer a) ce que vous entendez par «deux derniers» et b) ce que vous avez essayé jusqu'à présent.