| Ready for Production |
Use this script in YML pipelines to deploy ARM templates and optional to use a parameter file.
For example:
- task: AzureCLI@2
displayName: "KeyVault: Add ADA Web permissions"
inputs:
azureSubscription: "$"
scriptType: "pscore"
scriptLocation: "scriptPath"
scriptPath: "pipelines/scripts/deploy-armtemplate.ps1"
arguments: '-TemplateFile $(Build.SourcesDirectory)/keyvaultpermissions/azuredeploy.json -ParameterFile $(Build.SourcesDirectory)/keyvaultpermissions/azuredeploy.parameters.json -DeploymentName "$-kv-permissions" -ResourceGroupName $ -ParametersOverwrite @("keyVaultName=$","resourceType=Web","resourceName=$","resourceResourceGroup=$")'
addSpnToEnvironment: true
Template Locations
Used by
Used by Landing zone(s)
| Landing zone name |
|---|
| Artificial Data Amplifier |
The script
param
(
[Parameter(Mandatory = $true, HelpMessage = "Unique deployment name")]
[string] $DeploymentName,
[Parameter(Mandatory = $true, HelpMessage = "Enter the name of the Resource Group.")]
[string] $ResourceGroupName,
[Parameter(Mandatory = $true, HelpMessage = "Template file location.")]
[string] $TemplateFile,
[Parameter(Mandatory = $true, HelpMessage = "String with template parameters")]
[string] $ParameterFile,
[Parameter(Mandatory = $false, HelpMessage = "Overwrite parameters values from the parameter file.")]
[string[]] $ParametersOverwrite,
[Parameter(Mandatory = $false, HelpMessage = "Last know good deployment to rollback to")]
[string] $rollbackDeploymentName
)
Write-Host Inputs:
Write-Host DeploymentName: $DeploymentName
Write-Host TemplateFile: $TemplateFile
Write-Host ParameterFile: $ParameterFile
Write-Host ParametersOverwrite: $ParametersOverwrite
Write-Host RollbackDeploymentName: $rollbackDeploymentName
Function ValidateTemplate {
Param(
[Parameter(Mandatory = $true)][string]$ResourceGroupName,
[Parameter(Mandatory = $true)][string]$TemplateFile,
[Parameter(Mandatory = $true)][string]$ParameterFile,
[Parameter(Mandatory = $false)][string]$ParametersOverwriteJson
)
$FileExists = Test-Path $TemplateFile
if($FileExists -ne $True){
Write-Error "Template file does not exist: $TemplateFile"
Write-Host "##vso[task.LogIssue type=error;]Template file does not exist"
Exit 1
}
$FileExists = Test-Path $ParameterFile
if($FileExists -ne $True){
Write-Error "Parametes file does not exist: $ParameterFile"
Write-Host "##vso[task.LogIssue type=error;]Template file does not exist"
Exit 1
}
if([string]::IsNullOrWhiteSpace($ParametersOverwriteJson))
{
$validationResult = az deployment group validate --resource-group $ResourceGroupName --template-file $TemplateFile --parameters $ParameterFile
}
else{
$validationResult = az deployment group validate --resource-group $ResourceGroupName --template-file $TemplateFile --parameters $ParameterFile --parameters $ParametersOverwriteJson
}
Write-Host "Validation result: $validationResult"
if( $null -ne $validationResult) {
Write-Host "Template validation succeeded"
}
else {
Write-Error "Template validation failed"
Write-Host "##vso[task.LogIssue type=error;]Template validation failed"
Exit 1
}
}
Function CreateDeployment {
Param(
[Parameter(Mandatory = $true)][string]$ResourceGroupName,
[Parameter(Mandatory = $true)][string]$DeploymentName,
[Parameter(Mandatory = $false)][string]$RollbackDeploymentName,
[Parameter(Mandatory = $true)][string]$TemplateFile,
[Parameter(Mandatory = $true)][string]$ParameterFile,
[Parameter(Mandatory = $false)][string]$ParametersOverwriteJson
)
Write-Host "Override parameters: $ParametersOverwriteJson"
if ([string]::IsNullOrWhiteSpace($RollbackDeploymentName)) {
Write-Host "Create deployment $DeploymentName without rollback in resourcegroup $ResourceGroupName"
if([string]::IsNullOrWhiteSpace($ParametersOverwriteJson))
{
az deployment group create --name $DeploymentName --resource-group $ResourceGroupName --template-file $TemplateFile --parameters $ParameterFile
}
else {
az deployment group create --name $DeploymentName --resource-group $ResourceGroupName --template-file $TemplateFile --parameters $ParameterFile --parameters $ParametersOverwriteJson
}
}
else {
Write-Host "Create deployment $DeploymentName with rollback oppertunity to deployment $rollbackDeploymentName in resourcegroup $ResourceGroupName"
if([string]::IsNullOrWhiteSpace($ParametersOverwriteJson))
{
az deployment group create --name $DeploymentName --resource-group $ResourceGroupName --rollback-on-error $RollbackDeploymentName --template-file $TemplateFile --parameters $ParameterFile
}
else {
az deployment group create --name $DeploymentName --resource-group $ResourceGroupName --rollback-on-error $RollbackDeploymentName --template-file $TemplateFile --parameters $ParameterFile --parameters $ParametersOverwriteJson
}
}
}
Function GetOverwriteParametersAsJson{
Param(
[Parameter(Mandatory = $false)][string[]]$ParametersOverwrite
)
$obj = New-Object pscustomobject
foreach ($parameter in $ParametersOverwrite) {
$kvp = $parameter.Split("=")
$key = $kvp[0]
$value = $kvp[1]
$prop = New-Object PSObject
$prop | Add-Member NoteProperty "value" $value
$obj | Add-Member NoteProperty $key $prop
}
$json = $obj | ConvertTo-Json -compress
$json = $json.Replace("""","'")
return $json
}
$json = GetOverwriteParametersAsJson -ParametersOverwrite $ParametersOverwrite
ValidateTemplate -ResourceGroupName $ResourceGroupName -TemplateFile $TemplateFile -ParameterFile $ParameterFile -ParametersOverwrite $json
CreateDeployment -ResourceGroupName $ResourceGroupName `
-DeploymentName $DeploymentName `
-RollbackDeploymentName $rollbackDeploymentName `
-TemplateFile $TemplateFile `
-ParameterFile $ParameterFile `
-ParametersOverwrite $json