Skip to content

Commit f46937f

Browse files
authored
Merge pull request #30 from Azure/include-sku-count
Include SKU count
2 parents 01a59c2 + e72c64c commit f46937f

3 files changed

Lines changed: 40 additions & 26 deletions

File tree

1-Collect/Get-AzureServices.ps1

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -377,15 +377,24 @@ foreach ($group in $groupedResources) {
377377
if ($uniqueLocations -isnot [System.Array]) {
378378
$uniqueLocations = @($uniqueLocations)
379379
}
380-
If ($group.Group.ResourceSku -ne 'N/A') {
381-
382-
$uniqueSkus = $group.Group.ResourceSku | Select-Object * -Unique
383-
if ( $uniqueSkus -isnot [System.Array]) {
384-
$uniqueSkus = @($uniqueSkus)
380+
if ($group.Group.ResourceSku -ne 'N/A') {
381+
$skuCounts = $group.Group |
382+
Where-Object { $_.ResourceSku -is [object] } |
383+
Group-Object -Property {
384+
$_.ResourceSku | ConvertTo-Json -Compress
385+
}
386+
$implementedSkus = foreach ($skuGroup in $skuCounts) {
387+
$skuObj = $skuGroup.Group[0].ResourceSku
388+
$newSku = [ordered]@{}
389+
foreach ($prop in $skuObj.PSObject.Properties) {
390+
$newSku[$prop.Name] = $prop.Value
391+
}
392+
$newSku["count"] = $skuGroup.Count
393+
[PSCustomObject]$newSku
385394
}
386-
$summary += [PSCustomObject]@{ResourceCount = $group.Count; ResourceType = $resourceType; ImplementedSkus = $uniqueSkus; ImplementedRegions = $uniqueLocations; meterIds = $uniqueMeterIds }
395+
$summary += [PSCustomObject]@{ResourceCount = $group.Count; ResourceType = $resourceType; ImplementedSkus = $implementedSkus; ImplementedRegions = $uniqueLocations; meterIds = $uniqueMeterIds }
387396
}
388-
Else {
397+
else {
389398
$summary += [PSCustomObject]@{ResourceCount = $group.Count; ResourceType = $resourceType; ImplementedSkus = @("N/A"); ImplementedRegions = $uniqueLocations; meterIds = $uniqueMeterIds }
390399
}
391400
}

2-AvailabilityCheck/Get-AvailabilityInformation.ps1

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
.NOTES
2525
- Requires Azure PowerShell module to be installed and authenticated.
2626
#>
27+
param(
28+
[Parameter(Mandatory = $false)][string]$SummaryFilePath = "$(Get-Location)\..\1-Collect\summary.json"
29+
)
2730

2831
function Out-JSONFile {
2932
param (
@@ -155,22 +158,21 @@ Function Get-ResourceTypeParameters {
155158
function Compare-ObjectsStrict {
156159
param(
157160
[psobject]$Object1,
158-
[psobject]$Object2
161+
[psobject]$Object2,
162+
[string[]]$ExcludeProperty = @("count")
159163
)
160-
write-verbose "Entering Compare-ObjectsStrict"
161-
$norm1 = ($Object1.PSObject.Properties |
164+
Write-Verbose "Entering Compare-ObjectsStrict"
165+
# Filter out excluded properties
166+
$props1 = $Object1.PSObject.Properties | Where-Object { $ExcludeProperty -notcontains $_.Name }
167+
$props2 = $Object2.PSObject.Properties | Where-Object { $ExcludeProperty -notcontains $_.Name }
168+
$norm1 = ($props1 | Sort-Object Name | ForEach-Object { "$($_.Name)=$($_.Value)" }) -join ';'
169+
$norm2 = ($props2 |
162170
Sort-Object Name |
163171
ForEach-Object { "$($_.Name)=$($_.Value)" }) -join ';'
164-
165-
$norm2 = ($Object2.PSObject.Properties |
166-
Sort-Object Name |
167-
ForEach-Object { "$($_.Name)=$($_.Value)" }) -join ';'
168-
169172
Write-Verbose "Comparing objects:"
170-
Write-Verbose " Object1: $norm1"
171-
Write-Verbose " Object2: $norm2"
173+
Write-Verbose " Object1 (norm): $norm1"
174+
Write-Verbose " Object2 (norm): $norm2"
172175
Write-Verbose " Match: $($norm1 -eq $norm2)"
173-
174176
return $norm1 -eq $norm2
175177
}
176178

@@ -296,14 +298,13 @@ Function Get-ResourceType {
296298
}
297299

298300
function Import-CurrentEnvironment {
299-
$SummaryFilePath = "$(Get-Location)\..\1-Collect\summary.json"
300301
# Check if the summary file exists and load it
301302
if (Test-Path $SummaryFilePath) {
302-
Write-Output " Loading summary file: ../1-Collect/summary.json" | Out-Host
303+
Write-Output " Loading summary file: $SummaryFilePath" | Out-Host
303304
$CurrentEnvironment = Get-Content -Path $SummaryFilePath -raw | ConvertFrom-Json -depth 10
304305
}
305306
else {
306-
Write-Output "File 'summary.json' not found in '../1-Collect/summary.json'."
307+
Write-Output "File '$SummaryFilePath' not found."
307308
exit 1
308309
}
309310
# Check for empty SKUs and remove 'ResourceSkus' property if its value is 'N/A' in the current implementation data

7-Report/Get-Report.ps1

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ Function Set-SvcAvailReportObj {
9898
[string]$resourceType,
9999
[int]$resourceCount,
100100
[array]$implementedRegions,
101+
[string]$skuCount,
101102
[string]$sku,
102103
[string]$skuAvailability,
103104
[string]$serviceAvailability
@@ -116,6 +117,7 @@ Function Set-SvcAvailReportObj {
116117
ResourceType = $resourceType
117118
ResourceCount = $resourceCount
118119
ImplementedRegions = ($implementedRegions -join ", ")
120+
SKUCount = $skuCount
119121
sku = $sku
120122
"SKU available" = $skuAvailability
121123
"Service available" = $serviceAvailability
@@ -145,21 +147,23 @@ If ($availabilityInfoPath) {
145147
if ($item.ImplementedSkus -and $item.ImplementedSkus[0] -ne "N/A") {
146148
if ( $regionAvailability -eq "Available") {
147149
ForEach ($sku in $item.SelectedRegion.SKUs) {
148-
$skuName = ($sku.PSObject.Properties | Where-Object { $_.Name -ne 'available' } | ForEach-Object { $_.Value }) -join "_"
149-
$reportItem = Set-SvcAvailReportObj -resourceType $resourceType -resourceCount $itemCount -implementedRegions $item.ImplementedRegions -sku $skuName -skuAvailability $sku.available -serviceAvailability $regionAvailability
150+
$skuName = ($sku.PSObject.Properties | Where-Object { $_.Name -ne 'available' -and $_.Name -ne 'count' } | ForEach-Object { $_.Value }) -join "_"
151+
$skuCount = $sku.count
152+
$reportItem = Set-SvcAvailReportObj -resourceType $resourceType -resourceCount $itemCount -implementedRegions $item.ImplementedRegions -skuCount $skuCount -sku $skuName -skuAvailability $sku.available -serviceAvailability $regionAvailability
150153
$reportData += $reportItem
151154
}
152155
}
153156
else {
154157
ForEach ($sku in $item.ImplementedSkus) {
155-
$skuName = ($sku.PSObject.Properties | Where-Object { $_.Name -ne 'available' } | ForEach-Object { $_.Value }) -join "_"
156-
$reportItem = Set-SvcAvailReportObj -resourceType $resourceType -resourceCount $itemCount -implementedRegions $item.ImplementedRegions -sku $skuName -skuAvailability "false" -serviceAvailability $regionAvailability
158+
$skuName = ($sku.PSObject.Properties | Where-Object { $_.Name -ne 'available' -and $_.Name -ne 'count' } | ForEach-Object { $_.Value }) -join "_"
159+
$skuCount = $sku.count
160+
$reportItem = Set-SvcAvailReportObj -resourceType $resourceType -resourceCount $itemCount -implementedRegions $item.ImplementedRegions -skuCount $skuCount -sku $skuName -skuAvailability "false" -serviceAvailability $regionAvailability
157161
$reportData += $reportItem
158162
}
159163
}
160164
}
161165
else {
162-
$reportItem = Set-SvcAvailReportObj -resourceType $resourceType -resourceCount $itemCount -implementedRegions $item.ImplementedRegions -sku "N/A" -skuAvailability "N/A" -serviceAvailability $regionAvailability
166+
$reportItem = Set-SvcAvailReportObj -resourceType $resourceType -resourceCount $itemCount -implementedRegions $item.ImplementedRegions -skuCount "N/A" -sku "N/A" -skuAvailability "N/A" -serviceAvailability $regionAvailability
163167
$reportData += $reportItem
164168
}
165169
}

0 commit comments

Comments
 (0)