Sync eng/common directory with azure-sdk-tools repository (#6744)

This commit is contained in:
Azure SDK Bot 2025-09-18 11:18:52 -07:00 committed by GitHub
parent 38326b302a
commit 6ec7eb07a6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -38,6 +38,32 @@ function Get-PurgeableGroupResources {
$purgeableResources += $deletedKeyVaults
}
Write-Verbose "Retrieving AI resources from resource group $ResourceGroupName"
# Get AI resources that will go into soft-deleted state when the resource group is deleted
$subscriptionId = (Get-AzContext).Subscription.Id
$aiResources = @()
# Get active Cognitive Services accounts from the resource group
$response = Invoke-AzRestMethod -Method GET -Path "/subscriptions/$subscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.CognitiveServices/accounts?api-version=2024-10-01" -ErrorAction Ignore
if ($response.StatusCode -ge 200 -and $response.StatusCode -lt 300 -and $response.Content) {
$content = $response.Content | ConvertFrom-Json
foreach ($r in $content.value) {
$aiResources += [pscustomobject] @{
AzsdkResourceType = "Cognitive Services ($($r.kind))"
AzsdkName = $r.name
Name = $r.name
Id = $r.id
}
}
}
if ($aiResources) {
Write-Verbose "Found $($aiResources.Count) AI resources to potentially purge after resource group deletion."
$purgeableResources += $aiResources
}
return $purgeableResources
}
@ -94,6 +120,29 @@ function Get-PurgeableResources {
}
catch { }
Write-Verbose "Retrieving deleted Cognitive Services accounts from subscription $subscriptionId"
# Get deleted Cognitive Services accounts for the current subscription.
$response = Invoke-AzRestMethod -Method GET -Path "/subscriptions/$subscriptionId/providers/Microsoft.CognitiveServices/deletedAccounts?api-version=2024-10-01" -ErrorAction Ignore
if ($response.StatusCode -ge 200 -and $response.StatusCode -lt 300 -and $response.Content) {
$content = $response.Content | ConvertFrom-Json
$deletedCognitiveServices = @()
foreach ($r in $content.value) {
$deletedCognitiveServices += [pscustomobject] @{
AzsdkResourceType = "Cognitive Services ($($r.kind))"
AzsdkName = $r.name
Name = $r.name
Id = $r.id
}
}
if ($deletedCognitiveServices) {
Write-Verbose "Found $($deletedCognitiveServices.Count) deleted Cognitive Services accounts to potentially purge."
$purgeableResources += $deletedCognitiveServices
}
}
return $purgeableResources
}
@ -117,16 +166,18 @@ filter Remove-PurgeableResources {
}
$subscriptionId = (Get-AzContext).Subscription.Id
$verboseFlag = $VerbosePreference -eq 'Continue'
foreach ($r in $Resource) {
Log "Attempting to purge $($r.AzsdkResourceType) '$($r.AzsdkName)'"
switch ($r.AzsdkResourceType) {
'Key Vault' {
if ($r.EnablePurgeProtection) {
Write-Warning "Key Vault '$($r.VaultName)' has purge protection enabled and may not be purged until $($r.ScheduledPurgeDate)"
Write-Verbose "Key Vault '$($r.VaultName)' has purge protection enabled and may not be purged until $($r.ScheduledPurgeDate)" -Verbose:$verboseFlag
continue
}
Log "Attempting to purge $($r.AzsdkResourceType) '$($r.AzsdkName)'"
# Use `-AsJob` to start a lightweight, cancellable job and pass to `Wait-PurgeableResoruceJob` for consistent behavior.
Remove-AzKeyVault -VaultName $r.VaultName -Location $r.Location -InRemovedState -Force -ErrorAction Continue -AsJob `
| Wait-PurgeableResourceJob -Resource $r -Timeout $Timeout -PassThru:$PassThru
@ -134,16 +185,18 @@ filter Remove-PurgeableResources {
'Managed HSM' {
if ($r.EnablePurgeProtection) {
Write-Warning "Managed HSM '$($r.Name)' has purge protection enabled and may not be purged until $($r.ScheduledPurgeDate)"
Write-Verbose "Managed HSM '$($r.Name)' has purge protection enabled and may not be purged until $($r.ScheduledPurgeDate)" -Verbose:$verboseFlag
continue
}
Log "Attempting to purge $($r.AzsdkResourceType) '$($r.AzsdkName)'"
# Use `GetNewClosure()` on the `-Action` ScriptBlock to make sure variables are captured.
Invoke-AzRestMethod -Method POST -Path "/subscriptions/$subscriptionId/providers/Microsoft.KeyVault/locations/$($r.Location)/deletedManagedHSMs/$($r.Name)/purge?api-version=2023-02-01" -ErrorAction Ignore -AsJob `
| Wait-PurgeableResourceJob -Resource $r -Timeout $Timeout -PassThru:$PassThru -Action {
param ( $response )
if ($response.StatusCode -ge 200 -and $response.StatusCode -lt 300) {
Write-Warning "Successfully requested that Managed HSM '$($r.Name)' be purged, but may take a few minutes before it is actually purged."
Write-Verbose "Successfully requested that Managed HSM '$($r.Name)' be purged, but may take a few minutes before it is actually purged." -Verbose:$verboseFlag
}
elseif ($response.Content) {
$content = $response.Content | ConvertFrom-Json
@ -155,6 +208,22 @@ filter Remove-PurgeableResources {
}.GetNewClosure()
}
{ $_.StartsWith('Cognitive Services') }
{
Log "Attempting to purge $($r.AzsdkResourceType) '$($r.AzsdkName)'"
# Use `GetNewClosure()` on the `-Action` ScriptBlock to make sure variables are captured.
Invoke-AzRestMethod -Method DELETE -Path "$($r.id)?api-version=2024-10-01" -ErrorAction Ignore -AsJob `
| Wait-PurgeableResourceJob -Resource $r -Timeout $Timeout -PassThru:$PassThru -Action {
param ( $response )
if ($response.StatusCode -eq 200 -or $response.StatusCode -eq 202 -or $response.StatusCode -eq 204) {
Write-Verbose "Successfully purged $($r.AzsdkResourceType) '$($r.Name)'." -Verbose:$verboseFlag
} else {
Write-Warning "Failed purging $($r.AzsdkResourceType) '$($r.Name)' with status code $($response.StatusCode)."
}
}.GetNewClosure()
}
default {
Write-Warning "Cannot purge $($r.AzsdkResourceType) '$($r.AzsdkName)'. Add support to https://github.com/Azure/azure-sdk-tools/blob/main/eng/common/scripts/Helpers/Resource-Helpers.ps1."
}