updateTemplate.ps1 (46 lines of code) (raw):
param (
[string]$templateFile = 'azuredeploy.json',
[string]$releasesUrl
)
$cloudConfigFile = 'cloud-config.yaml'
if (!(Test-Path $cloudConfigFile)) {
Write-Host "Cloud config file '$cloudConfigFile' is not accessible"
exit 1
}
. ./newtonjson.ps1
$json = Invoke-WebRequest $releasesUrl | ConvertFrom-Json
# Select last two major releases
$groups = $json.TC | Group-Object -Property majorVersion | Select-Object -First 2
$versions = New-Object System.Collections.ArrayList
foreach($group in $groups) {
foreach($release in $group.Group) {
$versions.add($release.version) > $null
}
}
Write-Host "Will set the following versions: $versions"
Write-Host "Updating $templateFile file"
$replacementTokens = @{
"%RDSHost%" = "',reference(resourceId('Microsoft.DBforMySQL/servers',variables('dbServerName'))).fullyQualifiedDomainName,'";
"%RDSPassword%" = "',replace(parameters('databasePassword'), '\\', '\\\\'),'";
"%RDSDataBase%" = "',variables('dbName'),'";
"%DomainName%" = "',reference(variables('publicIpName')).dnsSettings.fqdn,'";
"%DomainOwnerEmailEnv%" = "',if(empty(parameters('domainOwnerEmail')),'',concat('-e LETSENCRYPT_EMAIL=',parameters('domainOwnerEmail'))),'";
}
$json = (Get-Content -Path $cloudConfigFile -Raw).replace("'", "''")
foreach ($key in $replacementTokens.keys) {
$json = $json.replace($key, $replacementTokens.Item($key))
}
$customData = "[base64(concat('$json'))]"
$template = [Newtonsoft.Json.JsonConvert]::DeserializeObject((Get-Content $templateFile -Raw), [Newtonsoft.Json.Linq.JObject])
$template.parameters.teamcityVersion.defaultValue = $versions[0]
$allowedValues = $template.parameters.teamcityVersion.allowedValues
if ($allowedValues) {
$allowedValues.clear()
foreach($version in $versions) {
$allowedValues.add($version)
}
}
$vmResource = $template.resources | Where-Object { $_.name -eq "[variables('vmName')]" }
$vmResource.properties.osProfile.customData = $customData
[Newtonsoft.Json.JsonConvert]::SerializeObject($template, [Newtonsoft.Json.Formatting]::Indented) | Set-Content $templateFile
Write-Host "$templateFile file was updated"