workload/scripts/New-AzureImageBuilderBuild.ps1 (81 lines of code) (raw):
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory)]
[string]$ClientId,
[Parameter(Mandatory)]
[string]$EnvironmentName,
[Parameter(Mandatory)]
[string]$ImagePublisher,
[Parameter(Mandatory)]
[string]$ImageOffer,
[Parameter(Mandatory)]
[string]$ImageSku,
[Parameter(Mandatory)]
[string]$Location,
[Parameter(Mandatory)]
[string]$SubscriptionId,
[Parameter(Mandatory)]
[string]$TemplateName,
[Parameter(Mandatory)]
[string]$TemplateResourceGroupName,
[Parameter(Mandatory)]
[string]$TenantId
)
$ErrorActionPreference = 'Stop'
try
{
# Import Modules
Import-Module -Name 'Az.Accounts','Az.Compute','Az.ImageBuilder'
Write-Output "$TemplateName | $TemplateResourceGroupName | Imported the required modules."
# Connect to Azure using the Managed Identity
Connect-AzAccount -Environment $EnvironmentName -Subscription $SubscriptionId -Tenant $TenantId -Identity -AccountId $ClientId | Out-Null
Write-Output "$TemplateName | $TemplateResourceGroupName | Connected to Azure."
# Get the date / time and status of the last AIB Image Template build
$ImageBuild = Get-AzImageBuilderTemplate -ResourceGroupName $TemplateResourceGroupName -Name $TemplateName
$ImageBuildDate = $ImageBuild.LastRunStatusStartTime
if(!$ImageBuildDate)
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Last Build Start Time: None."
}
else
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Last Build Start Time: $ImageBuildDate."
}
$ImageBuildStatus = $ImageBuild.LastRunStatusRunState
if(!$ImageBuildStatus)
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Last Build Run State: None."
}
else
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Last Build Run State: $ImageBuildStatus."
}
# Get the date of the latest marketplace image version
$ImageVersionDateRaw = (Get-AzVMImage -Location $Location -PublisherName $ImagePublisher -Offer $ImageOffer -Skus $ImageSku | Sort-Object -Property 'Version' -Descending | Select-Object -First 1).Version.Split('.')[-1]
$Year = '20' + $ImageVersionDateRaw.Substring(0,2)
$Month = $ImageVersionDateRaw.Substring(2,2)
$Day = $ImageVersionDateRaw.Substring(4,2)
$ImageVersionDate = Get-Date -Year $Year -Month $Month -Day $Day -Hour 00 -Minute 00 -Second 00
Write-Output "$TemplateName | $TemplateResourceGroupName | Marketplace Image, Latest Version Date: $ImageVersionDate."
# If the latest Image Template build is in a failed state, output a message and throw an error
if($ImageBuildStatus -eq 'Failed')
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Latest Image Template build failed. Review the build log and correct the issue."
throw
}
# If the latest Marketplace Image Version was released after the last AIB Image Template build then trigger a new AIB Image Template build
elseif($ImageVersionDate -gt $ImageBuildDate)
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Image Template build initiated with new Marketplace Image Version."
Start-AzImageBuilderTemplate -ResourceGroupName $TemplateResourceGroupName -Name $TemplateName
Write-Output "$TemplateName | $TemplateResourceGroupName | Image Template build succeeded. New Image Version available in Compute Gallery."
}
else
{
Write-Output "$TemplateName | $TemplateResourceGroupName | Image Template build not required. Marketplace Image Version is older than the latest Image Template build."
}
}
catch {
Write-Output "$TemplateName | $TemplateResourceGroupName | Image Template build failed. Exception: $($_.Exception)"
throw
}