@@ -213,7 +213,8 @@ function Wait-PurgeableResourceJob {
213213function Remove-WormStorageAccounts () {
214214 [CmdletBinding (SupportsShouldProcess = $True )]
215215 param (
216- [string ]$GroupPrefix
216+ [string ]$GroupPrefix ,
217+ [switch ]$CI
217218 )
218219
219220 $ErrorActionPreference = ' Stop'
@@ -222,8 +223,8 @@ function Remove-WormStorageAccounts() {
222223 # DO NOT REMOVE THIS
223224 # We call this script from live test pipelines as well, and a string mismatch/error could blow away
224225 # some static storage accounts we rely on
225- if (! $groupPrefix -or ! $GroupPrefix.StartsWith (' rg-' )) {
226- throw " The -GroupPrefix parameter must start with 'rg-'"
226+ if (! $groupPrefix -or ( $CI -and ! $GroupPrefix.StartsWith (' rg-' ) )) {
227+ throw " The -GroupPrefix parameter must not be empty, or must start with 'rg-' in CI contexts "
227228 }
228229
229230 $groups = Get-AzResourceGroup | Where-Object { $_.ResourceGroupName.StartsWith ($GroupPrefix ) } | Where-Object { $_.ProvisioningState -ne ' Deleting' }
@@ -274,12 +275,14 @@ function Remove-WormStorageAccounts() {
274275 try {
275276 Write-Host " Removing immutability policies - account: $ ( $ctx.StorageAccountName ) , group: $ ( $group.ResourceGroupName ) "
276277 $null = $ctx | Get-AzStorageContainer | Get-AzStorageBlob | Remove-AzStorageBlobImmutabilityPolicy
277- } catch {}
278+ }
279+ catch {}
278280
279281 try {
280282 $ctx | Get-AzStorageContainer | Get-AzStorageBlob | Remove-AzStorageBlob - Force
281283 $succeeded = $true
282- } catch {
284+ }
285+ catch {
283286 Write-Warning " Failed to remove blobs - account: $ ( $ctx.StorageAccountName ) , group: $ ( $group.ResourceGroupName ) "
284287 Write-Warning $_
285288 }
@@ -314,6 +317,7 @@ function SetStorageNetworkAccessRules([string]$ResourceGroupName, [array]$AllowI
314317 $storageAccounts = Retry { Get-AzResource - ResourceGroupName $ResourceGroupName - ResourceType " Microsoft.Storage/storageAccounts" }
315318 # Add client IP to storage account when running as local user. Pipeline's have their own vnet with access
316319 if ($storageAccounts ) {
320+ $appliedRule = $false
317321 foreach ($account in $storageAccounts ) {
318322 $rules = Get-AzStorageAccountNetworkRuleSet - ResourceGroupName $ResourceGroupName - AccountName $account.Name
319323 if ($rules -and ($Override -or $rules.DefaultAction -eq " Allow" )) {
@@ -322,13 +326,15 @@ function SetStorageNetworkAccessRules([string]$ResourceGroupName, [array]$AllowI
322326 if ($CI -and $env: PoolSubnet ) {
323327 Write-Host " Enabling access to '$ ( $account.Name ) ' from pipeline subnet $ ( $env: PoolSubnet ) "
324328 Retry { Add-AzStorageAccountNetworkRule - ResourceGroupName $ResourceGroupName - Name $account.Name - VirtualNetworkResourceId $env: PoolSubnet }
329+ $appliedRule = $true
325330 }
326331 elseif ($AllowIpRanges ) {
327332 Write-Host " Enabling access to '$ ( $account.Name ) ' to $ ( $AllowIpRanges.Length ) IP ranges"
328333 $ipRanges = $AllowIpRanges | ForEach-Object {
329334 @ { Action = ' allow' ; IPAddressOrRange = $_ }
330335 }
331336 Retry { Update-AzStorageAccountNetworkRuleSet - ResourceGroupName $ResourceGroupName - Name $account.Name - IPRule $ipRanges | Out-Null }
337+ $appliedRule = $true
332338 }
333339 elseif (! $CI ) {
334340 Write-Host " Enabling access to '$ ( $account.Name ) ' from client IP"
@@ -343,9 +349,14 @@ function SetStorageNetworkAccessRules([string]$ResourceGroupName, [array]$AllowI
343349 }
344350 }
345351 Retry { Add-AzStorageAccountNetworkRule - ResourceGroupName $ResourceGroupName - Name $account.Name - IPAddressOrRange $clientIp | Out-Null }
352+ $appliedRule = $true
346353 }
347354 }
348355 }
356+ if ($appliedRule ) {
357+ Write-Host " Sleeping for 15 seconds to allow network rules to take effect"
358+ Start-Sleep 15
359+ }
349360 }
350361}
351362
0 commit comments