scripts/Add-OsTemplateRoleParameters.ps1
function Add-OsTemplatemoduleParameters { Param( [string] $Environment, [string] $module, [string] $ResourceGroupLocation, [object] $JsonParameters, [string] $ProjectDirectory = (Get-Location | Select-Object -ExpandProperty Path).ToString() ) $DefaultParameters = $JsonParameters.parameters | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name $JsonParameters.parameters | Add-Member -MemberType NoteProperty -Name $module -Value (New-Object -TypeName pscustomobject) -Force $JsonParameters.parameters.$module | Add-Member -MemberType NoteProperty -Name "value" -Value (New-Object -TypeName pscustomobject) -Force $ParametersList = $JsonParameters.parameters | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name # Loop through template parameters and add to JSON. if (Test-Path -Path "$ProjectDirectory\env\$ResourceGroupLocation\$Environment\modules\$module\") { $ModulesFileList = Get-ChildItem "$ProjectDirectory\env\$ResourceGroupLocation\$Environment\modules\$module\" -File *.json | Where-Object { $_.Name -notmatch 'readme|example|metadata' } $ModulesFileList | Sort-Object -Property LastWriteTime | ForEach-Object { $ModuleParameters = Get-Content $_.FullName -Raw | ConvertFrom-Json $ModuleParamList = $ModuleParameters.parameters | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name if ($ModuleParamList -contains 'Global') { try { $moduleParameters.parameters.Global.value | Get-Member -MemberType NoteProperty -ErrorAction Stop | Select-Object -ExpandProperty Name | ForEach-Object -ErrorAction Stop { if (-not $JsonParameters.parameters.Global.value) { $JsonParameters.parameters.Global | Add-Member -MemberType NoteProperty -Name value -Value $moduleParameters.parameters.Global.value -ErrorAction Stop -Force } $JsonParameters.parameters.Global.value | Add-Member -MemberType NoteProperty -Name $_ -Value $moduleParameters.parameters.Global.value.$_ -ErrorAction Stop -Force } } catch { throw "Module file contains a Global parameter block but the values are malformed or null! Remove or fix the Global parameter." } } $ModuleParamList | Where-Object { $DefaultParameters -notcontains $_ } | ForEach-Object { $JsonParameters.parameters.$module.value | Add-Member -MemberType NoteProperty -Name $_ -Value $ModuleParameters.parameters.$_.value -Force if ($ParametersList -contains $_) { $JsonParameters.parameters.$module.value | Add-Member -MemberType NoteProperty -Name $_ -Value $JsonParameters.parameters.$_.value -Force } } } } else { Write-Verbose "No module settings found for $module in $Environment." # if (-not ($moduleDefaultParameters | Select-Object)) { # $JsonParameters.parameters = $JsonParameters.parameters | Select-Object -ExcludeProperty $module # } # Write-Verbose "Removing $module from parameter file since it has no values." } $JsonParameters.parameters.modules.value | Add-Member -MemberType NoteProperty -Name $module -value 1 -Force Write-Verbose "module Added: $module" } |