orchestration/scripts/New-Dashboard.ps1 (104 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
<#
.SYNOPSIS
The powershell script deploys dashboard as part of SLZ deployment.
#>
param (
$parAttendedLogin = $true
)
. ".\Invoke-Helper.ps1"
#variables
$varDashboardBicepFilePath = '..\dashboard\dashboard.bicep'
$varDashboardRequiredParams = @('parDeploymentPrefix', 'parDeploymentLocation', 'parManagementSubscriptionId')
<#
.Description
Creates the SLZ Dashboard under the management group
Parameters:
parDashboardParametersFilePath -> path to the parameter file containing required parameters to deploy dashboard
varParameters -> hash table containing parameter name and value
modDeployBootstrapOutputs -> hash table containing parameter outputs from bootstrap deployment
#>
function New-Dashboard {
param($parDashboardParametersFilePath, $parParameters, $parDeployBootstrapOutputs)
if (!$parParameters -and !$parDeployBootstrapOutputs) {
$parParameters = Read-ParametersValue($parDashboardParametersFilePath)
Confirm-Parameters($varDashboardRequiredParams)
Get-DonotRetryErrorCodes
}
if ($parDeployBootstrapOutputs) {
$varManagementSubscriptionId = $parDeployBootstrapOutputs.outputs.outManagementSubscriptionId.value
}
else {
$varManagementSubscriptionId = $parParameters.parManagementSubscriptionId.value
}
$parDeploymentPrefix = $parParameters.parDeploymentPrefix.value
$parDeploymentSuffix = $parParameters.parDeploymentSuffix.value
$varManagementGroupId = "$parDeploymentPrefix$parDeploymentSuffix"
$parDeploymentLocation = $parParameters.parDeploymentLocation.value
$varDeploymentName = "deploy-dashboard-$vartimeStamp"
$varParams = @{
parDeploymentLocation = $parDeploymentLocation
parDeploymentPrefix = $parDeploymentPrefix
parDeploymentSuffix = $parDeploymentSuffix
parManagementSubscriptionId = $varManagementSubscriptionId
parCustomer = $parParameters.parCustomer.value
parTags = Convert-ToHashTable($parParameters.parTags.value)
}
$varLoopCounter = 0;
$varRetry = $true
while ($varRetry -and $varLoopCounter -lt $varMaxRetryAttemptTransientErrorRetry) {
$modDeployDashboard = $null
try {
Write-Information ">>> Dashboard deployment started" -InformationAction Continue
$modDeployDashboard = New-AzManagementGroupDeployment `
-Name $varDeploymentName `
-Location $parDeploymentLocation `
-TemplateFile $varDashboardBicepFilePath `
-ManagementGroupId $varManagementGroupId `
-TemplateParameterObject $varParams `
-WarningAction Ignore
if (!$modDeployDashboard) {
$varRetry = $false
Write-Error "Error while executing dashboard deployment" -ErrorAction Stop
}
if ($modDeployDashboard.ProvisioningState -eq "Failed") {
Write-Error "Error occurred during dashboard deployment." -ErrorAction Stop
}
Write-Information ">>> Dashboard deployment completed `n" -InformationAction Continue
if (!$parAttendedLogin) {
Write-Information ">>> Please note: it can take up to 24 hours for the dashboard to reflect the latest data." -InformationAction Continue
}
return $modDeployDashboard
}
catch {
$varException = $_.Exception
$varErrorDetails = $_.ErrorDetails
$varTrace = $_.ScriptStackTrace
if (!$varRetry) {
Write-Error ">>> Validation error occurred during execution . Please try after addressing the error : $varException \n $varErrorDetails \n $varTrace" -ErrorAction Stop
}
if (!$modDeployDashboard) {
Write-Error ">>> Error occurred during execution . Please try after addressing the error : $varException \n $varErrorDetails \n $varTrace" -ErrorAction Stop
}
else {
$varDeploymentErrorCodes = Get-FailedDeploymentErrorCodes $varManagementGroupId $varDeploymentName $varManagementGroupDeployment
if ($null -eq $varDeploymentErrorCodes) {
$varRetry = $false
}
else {
$varLoopCounter++
$varRetry = Confirm-Retry $varDeploymentErrorCodes
if ($varRetry -and $varLoopCounter -lt $varMaxRetryAttemptTransientErrorRetry) {
Write-Information ">>> Retrying deployment after waiting for $varRetryWaitTimeTransientErrorRetry secs" -InformationAction Continue
Start-Sleep -Seconds $varRetryWaitTimeTransientErrorRetry
}
else {
$varRetry = $false
Write-Error ">>> Error occurred in dashboard deployment. Please try after addressing the above error." -ErrorAction Stop
}
}
}
}
}
}