Scale-AzPostgressFlex.ps1
# Example # Scale-AzPostgressFlex -ResourceGroupName 'POC-CSI-Demo' -Sku 'Standard_B1ms' -Name 'mytestpostgress' # Stop-AzPostgressFlex -ResourceGroupName 'POC-CSI-Demo' -Stop '*' -Name 'mytestpostgress' # Start-AzPostgressFlex -ResourceGroupName 'POC-CSI-Demo' -Start '*' -Name 'mytestpostgress' # param ([string] $AzureRunAsConnection, [string] $ResourceGroupName, [string] $Name, [string] $Sku, [string] $Start, [string] $Stop) Function Scale-AzPostgressFlex { param ([string] $AzureRunAsConnection, [string] $ResourceGroupName, [string] $Name, [string] $Sku, [string] $Start, [string] $Stop) filter timestamp { "[$(Get-Date -Format G)]: $_" } Write-Output 'Script started.' | timestamp # Available SKU $t = @' +----------+--------------------+------------------+ | SKU | SKU_Name | Tier | +----------+--------------------+------------------+ | B1ms | Standard_B1ms | Burstable | | B2s | Standard_B2s | Burstable | | B2ms | Standard_B2ms | Burstable | | B4ms | Standard_B4ms | Burstable | | B8ms | Standard_B8ms | Burstable | | B16ms | Standard_B16ms | Burstable | | B20ms | Standard_B20ms | Burstable | +----------+--------------------+------------------+ | D2s_v3 | Standard_D2s_v3 | General Purpose | | D2ds_v4 | Standard_D2ds_v4 | General Purpose | | D2ds_v5 | Standard_D2ds_v5 | General Purpose | | D4s_v3 | Standard_D4s_v3 | General Purpose | | D4ds_v4 | Standard_D4ds_v4 | General Purpose | | D4ds_v5 | Standard_D4ds_v5 | General Purpose | | D8s_v3 | Standard_D8s_v3 | General Purpose | | D8ds_v4 | Standard_D8ds_v4 | General Purpose | | D8ds_v5 | Standard_D8ds_v5 | General Purpose | | D16s_v3 | Standard_D16s_v3 | General Purpose | | D16ds_v4 | Standard_D16ds_v4 | General Purpose | | D16ds_v5 | Standard_D16ds_v5 | General Purpose | | D32s_v3 | Standard_D32s_v3 | General Purpose | | D32ds_v4 | Standard_D32ds_v4 | General Purpose | | D32ds_v5 | Standard_D32ds_v5 | General Purpose | | D64s_v3 | Standard_D64s_v3 | General Purpose | | D64ds_v4 | Standard_D64ds_v4 | General Purpose | | D64ds_v5 | Standard_D64ds_v5 | General Purpose | | D96ds_v5 | Standard_D96ds_v5 | General Purpose | +----------+--------------------+------------------+ | E2s_v3 | Standard_E2s_v3 | Memory Optimized | | E2ds_v4 | Standard_E2ds_v4 | Memory Optimized | | E2ds_v5 | Standard_E2ds_v5 | Memory Optimized | | E4s_v3 | Standard_E4s_v3 | Memory Optimized | | E4ds_v4 | Standard_E4ds_v4 | Memory Optimized | | E4ds_v5 | Standard_E4ds_v5 | Memory Optimized | | E8s_v3 | Standard_E8s_v3 | Memory Optimized | | E8ds_v4 | Standard_E8ds_v4 | Memory Optimized | | E8ds_v5 | Standard_E8ds_v5 | Memory Optimized | | E16s_v3 | Standard_E16s_v3 | Memory Optimized | | E16ds_v4 | Standard_E16ds_v4 | Memory Optimized | | E16ds_v5 | Standard_E16ds_v5 | Memory Optimized | | E20ds_v4 | Standard_E20ds_v4 | Memory Optimized | | E20ds_v5 | Standard_E20ds_v5 | Memory Optimized | | E32s_v3 | Standard_E32s_v3 | Memory Optimized | | E32ds_v4 | Standard_E32ds_v4 | Memory Optimized | | E32ds_v5 | Standard_E32ds_v5 | Memory Optimized | | E48s_v3 | Standard_E48s_v3 | Memory Optimized | | E48ds_v4 | Standard_E48ds_v4 | Memory Optimized | | E48ds_v5 | Standard_E48ds_v5 | Memory Optimized | | E64s_v3 | Standard_E64s_v3 | Memory Optimized | | E64ds_v4 | Standard_E64ds_v4 | Memory Optimized | | E64ds_v5 | Standard_E64ds_v5 | Memory Optimized | | E96ds_v5 | Standard_E96ds_v5 | Memory Optimized | +----------+--------------------+------------------+ '@ # Connect using a Managed Service Identity try { $AzureContext = (Connect-AzAccount -Identity).context } catch { Write-Output 'There is no system-assigned user identity. Aborting. Setu the same or try using RunAs account automation method.' | timestamp } $pgsqlflex = Get-AzPostgreSqlFlexibleServer -ResourceGroup $ResourceGroupName -ServerName $Name -ErrorAction Stop function Green { process { Write-Host $_ -ForegroundColor Green } } function Red { process { Write-Host $_ -ForegroundColor Red } } Write-Output ('AzureRunAsConnection: {0} ResourceGroupName: {1} Name: {2} SKU: {3} Start: {4} Stop: {5}' -F $AzureRunAsConnection, $ResourceGroupName, $Name, $Sku, $Start, $Stop) | timestamp if ($Start) { Start-AzPostgressFlex -ResourceGroupName $ResourceGroupName -Name $Name -ErrorAction Stop } if ($Stop) { Stop-AzPostgressFlex -ResourceGroupName $ResourceGroupName -Name $Name -ErrorAction Stop } if ($Sku) { # Scaling logic starts here $pgsqlflex = (Get-AzPostgreSqlFlexibleServer -ResourceGroup $ResourceGroupName -ServerName $Name -ErrorAction Stop) Write-Output "State for $($Name) - $($pgsqlflex.State)" | timestamp if (($pgsqlflex.SkuName -ne $Sku) -and (-not [System.String]::IsNullOrEmpty($Sku))) { if ($pgsqlflex.State -eq 'Ready') { try { $t ('-' * 75) Write-Output "Initiating scaling for $($Name)" | timestamp ('-' * 75) $UpdateOperation = Update-AzPostgreSqlFlexibleServer -ResourceGroup $ResourceGroupName -ServerName $Name -Sku $Sku if ($UpdateOperation) { Write-Output ('Resource "{0}" successfully scaled from SKU "{1}" to "{2}"' -F $Name, $pgsqlflex.SkuName, $Sku) | timestamp #| Green } } catch { Write-Output ('Resource "{0}" ERROR scaling from SKU "{1}" to "{2}"' -F $Name, $pgsqlflex.SkuName, $Sku) | timestamp #| Red } } } } else { Write-Output ('Resource "{0}" cannot scaled from SKU "{1}" to "{2}" as it is in {3} state.' -F $Name, "$($pgsqlflex.SkuName)", $Sku, "$($pgsqlflex.State)") | timestamp #| Red } } # Function Call # Scale-AzPostgressFlex -ResourceGroupName $ResourceGroupName -Name $Name -Sku $Sku -Start $Start -Stop $Stop |