Skip to content

Commit 19688f9

Browse files
azure-sdkbenbp
andauthored
Handle cleanup for leased and encrypted storage accounts. Reduce throttling (Azure#37973)
Co-authored-by: Ben Broderick Phillips <[email protected]>
1 parent 2c98e7e commit 19688f9

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

eng/common/scripts/Helpers/Resource-Helpers.ps1

+39-13
Original file line numberDiff line numberDiff line change
@@ -247,19 +247,40 @@ function Remove-WormStorageAccounts() {
247247
if (!$hasContainers) { continue }
248248

249249
$ctx = New-AzStorageContext -StorageAccountName $account.StorageAccountName
250+
$containers = $ctx | Get-AzStorageContainer
251+
$blobs = $containers | Get-AzStorageBlob
250252

251-
$immutableBlobs = $ctx `
252-
| Get-AzStorageContainer `
253+
$immutableBlobs = $containers `
253254
| Where-Object { $_.BlobContainerProperties.HasImmutableStorageWithVersioning } `
254255
| Get-AzStorageBlob
255256
try {
256257
foreach ($blob in $immutableBlobs) {
257-
Write-Host "Removing legal hold - blob: $($blob.Name), account: $($account.StorageAccountName), group: $($group.ResourceGroupName)"
258-
$blob | Set-AzStorageBlobLegalHold -DisableLegalHold | Out-Null
258+
# We can't edit blobs with customer encryption without using that key
259+
# so just try to delete them fully instead. It is unlikely they
260+
# will also have a legal hold enabled.
261+
if (($blob | Get-Member 'ListBlobProperties') `
262+
-and $blob.ListBlobProperties.Properties.CustomerProvidedKeySha256) {
263+
Write-Host "Removing customer encrypted blob: $($blob.Name), account: $($account.StorageAccountName), group: $($group.ResourceGroupName)"
264+
$blob | Remove-AzStorageBlob -Force
265+
continue
266+
}
267+
268+
if (!($blob | Get-Member 'BlobProperties')) {
269+
continue
270+
}
271+
272+
if ($blob.BlobProperties.LeaseState -eq 'Leased') {
273+
Write-Host "Breaking blob lease: $($blob.Name), account: $($account.StorageAccountName), group: $($group.ResourceGroupName)"
274+
$blob.ICloudBlob.BreakLease()
275+
}
276+
277+
if ($blob.BlobProperties.HasLegalHold) {
278+
Write-Host "Removing legal hold - blob: $($blob.Name), account: $($account.StorageAccountName), group: $($group.ResourceGroupName)"
279+
$blob | Set-AzStorageBlobLegalHold -DisableLegalHold | Out-Null
280+
}
259281
}
260-
}
261-
catch {
262-
Write-Warning "User must have 'Storage Blob Data Owner' RBAC permission on subscription or resource group"
282+
} catch {
283+
Write-Warning "Ensure user has 'Storage Blob Data Owner' RBAC permission on subscription or resource group"
263284
Write-Error $_
264285
throw
265286
}
@@ -273,13 +294,19 @@ function Remove-WormStorageAccounts() {
273294
}
274295

275296
try {
276-
Write-Host "Removing immutability policies - account: $($ctx.StorageAccountName), group: $($group.ResourceGroupName)"
277-
$null = $ctx | Get-AzStorageContainer | Get-AzStorageBlob | Remove-AzStorageBlobImmutabilityPolicy
297+
foreach ($blob in $blobs) {
298+
if ($blob.BlobProperties.ImmutabilityPolicy.PolicyMode) {
299+
Write-Host "Removing immutability policy - blob: $($blob.Name), account: $($ctx.StorageAccountName), group: $($group.ResourceGroupName)"
300+
$null = $blob | Remove-AzStorageBlobImmutabilityPolicy
301+
}
302+
}
278303
}
279304
catch {}
280305

281306
try {
282-
$ctx | Get-AzStorageContainer | Get-AzStorageBlob | Remove-AzStorageBlob -Force
307+
foreach ($blob in $blobs) {
308+
$blob | Remove-AzStorageBlob -Force
309+
}
283310
$succeeded = $true
284311
}
285312
catch {
@@ -290,9 +317,8 @@ function Remove-WormStorageAccounts() {
290317

291318
try {
292319
# Use AzRm cmdlet as deletion will only work through ARM with the immutability policies defined on the blobs
293-
$ctx | Get-AzStorageContainer | ForEach-Object { Remove-AzRmStorageContainer -Name $_.Name -StorageAccountName $ctx.StorageAccountName -ResourceGroupName $group.ResourceGroupName -Force }
294-
}
295-
catch {
320+
$containers | ForEach-Object { Remove-AzRmStorageContainer -Name $_.Name -StorageAccountName $ctx.StorageAccountName -ResourceGroupName $group.ResourceGroupName -Force }
321+
} catch {
296322
Write-Warning "Container removal failed. Ignoring the error and trying to delete the storage account."
297323
Write-Warning $_
298324
}

0 commit comments

Comments
 (0)