ClearingAcr.psm1
function Get-PSTSAzureSubscriptions { param([Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $TenantId) $AccountSubscriptions= az account list | ConvertFrom-Json $Subscriptions = $AccountSubscriptions| Where-Object {$_.tenantId -eq $TenantId } return $Subscriptions } function Get-PSTSAcrBySubscription { param([Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $SubscriptionName) process { az account set --subscription $SubscriptionName $AcrList = az acr list | ConvertFrom-Json return $AcrList } } function Get-PSTSReposBySubscription { param([Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $ACRName) process { try { $RepoList = az acr repository list --name $ACRName | ConvertFrom-Json return $RepoList } catch { write-host "The operation is disallowed on this registry" } } } function Get-PSTSRepoTags { param( [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $ACRName, [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $RepositoryName ) process { $RepositoryTags = az acr repository show-tags --name $ACRName --repository $RepositoryName --output tsv --orderby time_desc return $RepositoryTags } } function Delete-PSTSImageAcr { param( [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $ACRName, [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $ImageName ) process { #az acr repository delete --name $ACRName --image $ImageName --yes } } function ClearingAcr { param( [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $TenantId, [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][int] $nbImagestoKeep, [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string] $EnableDelete ) $imagesDeleted = 0 $Subscriptions = Get-PSTSAzureSubscriptions -TenantId $TenantId foreach ($line in $Subscriptions) { write-host "- Subscription -" $line.name $AcrList = Get-PSTSAcrBySubscription -SubscriptionName $line.name foreach ($Acr in $AcrList) { write-host "-- Acr --" $Acr.name $RepoList = Get-PSTSReposBySubscription -ACRName $Acr.name foreach ($Repo in $RepoList) { write-host "--- Repo ---" $Repo $RepositoryTags = Get-PSTSRepoTags -ACRName $Acr.name -RepositoryName $Repo if ($RepositoryTags.length -gt $ImagestoKeep) { write-host "Deleting images..." for ($item=$nbImagestoKeep; $item -lt $RepositoryTags.length; $item++) { $ImageName = $RepositoryName + ":" + $RepositoryTags[$item] $imagesDeleted++ if ($EnableDelete -eq "Yes") { Delete-PSTSImageAcr -ACRName $Acr.name -ImageName $ImageName write-host "---- images deleted:"$ImageName } } } else { write-host "No images to delete." } } } } write-host "Total images deleted:"$imagesDeleted } |