45 lines
1.8 KiB
PowerShell
45 lines
1.8 KiB
PowerShell
function New-ConfigurationDataResolutionContext {
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[System.Collections.Hashtable]
|
|
$ConfigurationData
|
|
)
|
|
|
|
$Context = [PSCustomObject]@{
|
|
Parameters = @{}
|
|
Variables = @{}
|
|
VariableDefinitions = @{}
|
|
ResolvingVariables = @{}
|
|
}
|
|
|
|
if($ConfigurationData.ContainsKey("Parameters") -and $null -ne $ConfigurationData.Parameters){
|
|
foreach($Entry in $ConfigurationData.Parameters.GetEnumerator()){
|
|
$Definition = $Entry.Value
|
|
|
|
$HasExplicitValue = (Test-ConfigurationDataMap -Value $Definition) -and (Test-ConfigurationDataMapContainsKey -Map $Definition -Key "Value")
|
|
$HasDefaultValue = (Test-ConfigurationDataMap -Value $Definition) -and (Test-ConfigurationDataMapContainsKey -Map $Definition -Key "DefaultValue")
|
|
|
|
if($HasExplicitValue){
|
|
$Context.Parameters[$Entry.Name] = Get-ConfigurationDataMapValue -Map $Definition -Key "Value"
|
|
}elseif($HasDefaultValue){
|
|
$Context.Parameters[$Entry.Name] = Get-ConfigurationDataMapValue -Map $Definition -Key "DefaultValue"
|
|
}else{
|
|
$Context.Parameters[$Entry.Name] = $Definition
|
|
}
|
|
|
|
if(Test-ConfigurationDataMap -Value $Definition){
|
|
Assert-ConfigurationDataParameter -Name $Entry.Name -Definition $Definition -Value $Context.Parameters[$Entry.Name] -HasValue:($HasExplicitValue -or $HasDefaultValue)
|
|
}
|
|
}
|
|
}
|
|
|
|
if($ConfigurationData.ContainsKey("Variables") -and $null -ne $ConfigurationData.Variables){
|
|
foreach($Entry in $ConfigurationData.Variables.GetEnumerator()){
|
|
$Context.VariableDefinitions[$Entry.Name] = $Entry.Value
|
|
}
|
|
}
|
|
|
|
return $Context
|
|
}
|