Skip to content

Commit d15dc3c

Browse files
helderpintoHélder Pintoflanakin
authored
[AOE] Fixes long-time deallocated VMs remediation runbook skipping eligible VMs (#1510)
Co-authored-by: Hélder Pinto <[email protected]> Co-authored-by: Michael Flanakin <[email protected]>
1 parent fb929f6 commit d15dc3c

File tree

3 files changed

+73
-29
lines changed

3 files changed

+73
-29
lines changed

docs-mslearn/toolkit/changelog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ The following section lists features and enhancements that are currently in deve
3838
**Fixed**
3939
- Workaround subnets reordering and bicep limitation
4040

41+
### [Optimization engine](optimization-engine/overview.md)
42+
43+
- **Fixed**
44+
- Fixed issue with `Remediate-LongDeallocatedVMsFiltered` runbook that was skipping the remediation of eligible VMs due to `Az.Compute` module breaking changes ([#1456](https://github.com/microsoft/finops-toolkit/issues/1456)).
45+
4146
<br><a name="latest"></a>
4247

4348
## v0.10

src/optimization-engine/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -180,49 +180,68 @@ foreach ($vm in $deallocatedVMs.Rows)
180180
$ctx = Get-AzContext
181181
}
182182
$vmObj = Get-AzVM -ResourceGroupName $resourceGroup -VMName $instanceName -Status -ErrorAction SilentlyContinue
183-
if ($vmObj.PowerState -eq 'VM deallocated')
183+
if (($vmObj.Statuses | Where-Object { $_.Code -like "PowerState/*" }).Code -eq "PowerState/deallocated")
184184
{
185185
$vmState = "Deallocated"
186-
$osDiskId = $vmObj.StorageProfile.OsDisk.ManagedDisk.Id
187-
$dataDiskIds = $vmObj.StorageProfile.DataDisks.ManagedDisk.Id
188-
if ($osDiskId)
186+
$vmObj = Get-AzVM -ResourceGroupName $resourceGroup -VMName $instanceName
187+
if ($vmObj.StorageProfile.OsDisk.ManagedDisk.Id)
189188
{
190189
$hasManagedDisks = $true
191-
$disk = Get-AzDisk -ResourceGroupName $osDiskId.Split("/")[4] -DiskName $osDiskId.Split("/")[8]
192-
$osDiskSkuName = $disk.Sku.Name
193-
if (-not($Simulate) -and $disk.Sku.Name -ne 'Standard_LRS')
190+
$disks = @($vmObj.StorageProfile.OsDisk.ManagedDisk.Id)
191+
if ($vmObj.StorageProfile.DataDisks.ManagedDisk.Id)
194192
{
195-
$disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS')
196-
$disk | Update-AzDisk | Out-Null
193+
$disks = $disks + $vmObj.StorageProfile.DataDisks.ManagedDisk.Id
197194
}
198-
else
195+
foreach ($disk in $disks)
199196
{
200-
Write-Output "Skipping as OS disk is already HDD."
201-
}
202-
foreach ($dataDiskId in $dataDiskIds)
203-
{
204-
$disk = Get-AzDisk -ResourceGroupName $dataDiskId.Split("/")[4] -DiskName $dataDiskId.Split("/")[8]
205-
if ($dataDisksSkuNames -eq 'Unknown')
197+
$diskObj = Get-AzDisk -ResourceGroupName $disk.Split("/")[4] -DiskName $disk.Split("/")[8]
198+
if ($diskObj.OsType)
206199
{
207-
$dataDisksSkuNames = $disk.Sku.Name
200+
$osDiskSkuName = $diskObj.Sku.Name
208201
}
209202
else
210203
{
211-
if ($dataDisksSkuNames -notlike "*$($disk.Sku.Name)*")
204+
if ($dataDisksSkuNames -eq 'Unknown')
205+
{
206+
$dataDisksSkuNames = $diskObj.Sku.Name
207+
}
208+
else
212209
{
213-
$dataDisksSkuNames += ",$($disk.Sku.Name)"
210+
if ($dataDisksSkuNames -notlike "*$($diskObj.Sku.Name)*")
211+
{
212+
$dataDisksSkuNames += ",$($diskObj.Sku.Name)"
213+
}
214214
}
215215
}
216-
217-
if (-not($Simulate) -and $disk.Sku.Name -ne 'Standard_LRS')
216+
if ($diskObj.Sku.Name -notin ('Standard_LRS','StandardSSD_ZRS'))
218217
{
219-
$disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS')
220-
$disk | Update-AzDisk | Out-Null
218+
if ($diskObj.Sku.Name -like "*_LRS" -and $diskObj.Sku.Name -notlike "*V2*")
219+
{
220+
Write-Output "Downgrading $($diskObj.Name) to Standard_LRS..."
221+
if (-not($Simulate))
222+
{
223+
$diskObj.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS', 'Standard')
224+
$diskObj | Update-AzDisk | Out-Null
225+
}
226+
}
227+
elseif ($diskObj.Sku.Name -like "*_ZRS" -and $diskObj.Sku.Name -notlike "*V2*")
228+
{
229+
Write-Output "Downgrading $($diskObj.Name) to StandardSSD_ZRS..."
230+
if (-not($Simulate))
231+
{
232+
$diskObj.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('StandardSSD_ZRS', 'Standard')
233+
$diskObj | Update-AzDisk | Out-Null
234+
}
235+
}
236+
else
237+
{
238+
Write-Output "Skipping as $($diskObj.Name) disk is in an unsupported SKU ($($diskObj.Sku.Name))..."
239+
}
221240
}
222241
else
223242
{
224-
Write-Output "Skipping as Data disk is already HDD."
225-
}
243+
Write-Output "Skipping as $($diskObj.Name) disk is already in the lowest SKU ($($diskObj.Sku.Name))."
244+
}
226245
}
227246
}
228247
else

src/optimization-engine/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,34 @@ foreach ($disk in $unattachedDisks.Rows)
189189
$currentSku = $diskObj.Sku.Name
190190
if ($remediationAction -eq "Downsize")
191191
{
192-
if (-not($Simulate) -and $diskObj.Sku.Name -ne 'Standard_LRS')
192+
if ($diskObj.Sku.Name -notin ('Standard_LRS','StandardSSD_ZRS'))
193193
{
194-
$diskObj.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS')
195-
$diskObj | Update-AzDisk | Out-Null
194+
if ($diskObj.Sku.Name -like "*_LRS" -and $diskObj.Sku.Name -notlike "*V2*")
195+
{
196+
Write-Output "Downgrading $($diskObj.Name) to Standard_LRS..."
197+
if (-not($Simulate))
198+
{
199+
$diskObj.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS', 'Standard')
200+
$diskObj | Update-AzDisk | Out-Null
201+
}
202+
}
203+
elseif ($diskObj.Sku.Name -like "*_ZRS" -and $diskObj.Sku.Name -notlike "*V2*")
204+
{
205+
Write-Output "Downgrading $($diskObj.Name) to StandardSSD_ZRS..."
206+
if (-not($Simulate))
207+
{
208+
$diskObj.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('StandardSSD_ZRS', 'Standard')
209+
$diskObj | Update-AzDisk | Out-Null
210+
}
211+
}
212+
else
213+
{
214+
Write-Output "Skipping as $($diskObj.Name) disk is in an unsupported SKU ($($diskObj.Sku.Name))..."
215+
}
196216
}
197217
else
198218
{
199-
Write-Output "Skipping as disk is already HDD."
219+
Write-Output "Skipping as $($diskObj.Name) disk is already in the lowest SKU ($($diskObj.Sku.Name))."
200220
}
201221
}
202222
elseif ($remediationAction -eq "Delete")

0 commit comments

Comments
 (0)