Private/Format/New-RecommendOutputContract.ps1
|
function New-RecommendOutputContract { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] param( [Parameter(Mandatory)][hashtable]$TargetProfile, [Parameter(Mandatory)][AllowEmptyCollection()][array]$TargetAvailability, [Parameter(Mandatory)][AllowEmptyCollection()][array]$RankedRecommendations, [Parameter(Mandatory)][AllowEmptyCollection()][array]$Warnings, [Parameter(Mandatory)][AllowEmptyCollection()][array]$BelowMinSpec, [Parameter(Mandatory)][int]$MinScore, [Parameter(Mandatory)][int]$TopN, [Parameter(Mandatory)][bool]$FetchPricing, [Parameter(Mandatory)][bool]$ShowPlacement, [Parameter(Mandatory)][bool]$ShowSpot ) $rankedPayload = [System.Collections.Generic.List[object]]::new() $rank = 1 foreach ($item in @($RankedRecommendations)) { $rankedPayload.Add([pscustomobject]@{ rank = $rank sku = $item.SKU region = $item.Region vCPU = $item.vCPU memGiB = $item.MemGiB family = $item.Family purpose = $item.Purpose gen = $item.Gen arch = $item.Arch cpu = $item.CPU disk = $item.Disk tempDiskGB = $item.TempGB accelNet = $item.AccelNet maxDisks = $item.MaxDisks maxNICs = $item.MaxNICs iops = $item.IOPS score = $item.Score capacity = $item.Capacity allocScore = $item.AllocScore zonesOK = $item.ZonesOK priceHr = $item.PriceHr priceMo = $item.PriceMo spotPriceHr = $item.SpotPriceHr spotPriceMo = $item.SpotPriceMo }) $rank++ } $belowMinSpecPayload = [System.Collections.Generic.List[object]]::new() foreach ($item in @($BelowMinSpec)) { $belowMinSpecPayload.Add([pscustomobject]@{ sku = $item.SKU region = $item.Region vCPU = $item.vCPU memGiB = $item.MemGiB score = $item.Score capacity = $item.Capacity }) } return [pscustomobject]@{ schemaVersion = '1.0' mode = 'recommend' generatedAt = (Get-Date).ToString('o') minScore = $MinScore topN = $TopN pricingEnabled = $FetchPricing placementEnabled = $ShowPlacement spotPricingEnabled = ($FetchPricing -and $ShowSpot) target = [pscustomobject]$TargetProfile targetAvailability = @($TargetAvailability) recommendations = @($rankedPayload) warnings = @($Warnings) belowMinSpec = @($belowMinSpecPayload) } } |