ps/Modules/Alkami.DevOps.Common/Public/New-WebTierMachineConfigAppSettings.ps1
2023-05-30 22:51:22 -07:00

81 lines
3.6 KiB
PowerShell

function New-WebTierMachineConfigAppSettings {
<#
.SYNOPSIS
Upserts Web Tier Machine Config App Settings.
#>
[CmdletBinding()]
Param()
$logLead = (Get-LogLeadName);
[XML]$machineConfig = Read-MachineConfig
[System.Xml.XmlElement]$configRoot = $machineConfig.configuration
$machineConfigIsDirty = $false
$appSettingsNode = $configRoot.SelectSingleNode("//appSettings")
if ($null -eq $appSettingsNode) {
Write-Verbose "$logLead : Creating appSettings Node"
$appSettingsNode = $machineConfig.CreateElement("appSettings")
$configRoot.AppendChild($appSettingsNode) | Out-Null
}
# Add App Settings
foreach ($setting in $webTierAppSettings) {
# Some settings are derived values which depend on other settings being instrumented.
# We will change the value to REPLACEME here if the dependent values are not properly set so that they're skipped
if ($setting.Name -eq "ReportServerUrl" -and ($webTierAppSettings | Where-Object {$_.Name -eq "ReportServer"}).Value -eq "REPLACEME") {
$setting.Value = "REPLACEME"
}
elseif ($setting.Name -eq "ReportServerPath" -and $setting.Value -eq "/" -and [String]::IsNullOrEmpty([Environment]::GetEnvironmentVariable("POD", "Machine"))) {
$setting.Value = "REPLACEME"
}
$appSetting = $appSettingsNode.SelectSingleNode(("//add[@key='{0}']" -f $setting.Name))
if ($null -eq $appSetting) {
Write-Output ("$logLead : Adding {0} node with value {1}" -f $setting.Name, $setting.Value)
$appSettingElement = $machineConfig.CreateElement("add")
$appSettingElement.SetAttribute("key", $setting.Name)
if ($setting.Value -eq "REPLACEME") {
Write-Warning ("$logLead : Value read as REPLACEME. Node {0} will be added with an empty value" -f $setting.Name)
$appSettingElement.SetAttribute("value", "")
}
else {
$appSettingElement.SetAttribute("value", $setting.Value)
}
$appSettingsNode.AppendChild($appSettingElement) | Out-Null
$machineConfigIsDirty = $true
}
elseif ($appSetting.Attributes["value"].Value -ne $setting.Value) {
if ($setting.Value -ne "REPLACEME" -and $setting.Name -ne "ReportServerPath") {
Write-Output ("$logLead : Update setting {0} value from {1} to {2}" -f $setting.Name, $appSetting.Attributes["value"].Value, $setting.Value)
$appSetting.SetAttribute("value", $setting.Value)
$machineConfigIsDirty = $true
}
elseif ($setting.Value -ne "REPLACEME" -and $setting.Name -eq "ReportServerPath") {
Write-Warning ("$logLead : The ReportServerPath setting exists but does not follow convention. Please confirm the value is correct. Value in machine.config: {0}. Value in script: {1}" -f $appSetting.Attributes["value"].Value, $setting.Value)
}
else {
Write-Warning ("$logLead : Value read as REPLACEME. Node {0} will not be updated" -f $setting.Name)
}
}
else {
Write-Verbose ("$logLead : AppSetting {0} already exists with correct value" -f $setting.Name)
}
}
if ($machineConfigIsDirty) {
Write-Output ("$logLead : Saving Modified machine.config")
$machineConfig.Save($machineConfigPath)
}
else {
Write-Output ("$logLead : No changes required to the machine.config")
}
}
Set-Alias -name Create-WebTierMachineConfigAppSettings -value New-WebTierMachineConfigAppSettings;