Private/Configuration/Resolve-HydrationWorkloadPlan.ps1
|
function Resolve-HydrationWorkloadPlan { [CmdletBinding()] param( [Parameter(Mandatory)] [hashtable]$Imports, [Parameter(Mandatory)] [string[]]$Platforms, [Parameter()] [bool]$DeleteEnabled ) function Get-FilteredPlatforms { param( [Parameter(Mandatory)] [string[]]$ValidSet, [Parameter(Mandatory)] [string[]]$SelectedPlatforms ) if ($SelectedPlatforms -contains 'All') { return @('All') } return @($SelectedPlatforms | Where-Object { $_ -in $ValidSet }) } $workloadCatalog = @(Get-HydrationWorkloadCatalog) $deleteIsPlatformScoped = $DeleteEnabled -and $Platforms -and -not ($Platforms -contains 'All') $platformFilters = @{} foreach ($workload in $workloadCatalog) { if ($workload.PlatformNeutral) { continue } if ($platformFilters.ContainsKey($workload.FilterKey)) { continue } $platformFilters[$workload.FilterKey] = Get-FilteredPlatforms -ValidSet $workload.Platforms -SelectedPlatforms $Platforms } $effectiveImports = @{} foreach ($importKey in $Imports.Keys) { $effectiveImports[$importKey] = [bool]$Imports[$importKey] } foreach ($workload in $workloadCatalog) { if ($workload.PlatformNeutral) { if ($deleteIsPlatformScoped -and $effectiveImports.ContainsKey($workload.ImportKey) -and $effectiveImports[$workload.ImportKey]) { $effectiveImports[$workload.ImportKey] = $false Write-Verbose "Skipping $($workload.ImportKey) because platform-scoped delete cannot safely target platform-neutral resources." } continue } if (-not $effectiveImports.ContainsKey($workload.ImportKey) -or -not $effectiveImports[$workload.ImportKey]) { continue } if (@($platformFilters[$workload.FilterKey]).Count -eq 0) { $effectiveImports[$workload.ImportKey] = $false Write-Verbose "Skipping $($workload.ImportKey) because selected platform(s) are not supported for that workload." } } return @{ Imports = $effectiveImports PlatformFilters = $platformFilters } } |