legacy/AzureImageBuilder/demoGalleryImageNewVersionFromGalleryImage.ps1 (136 lines of code) (raw):
. .\create-Shared-Custom-Image.ps1
. .\check-Image-Build-Status.ps1
$subscriptionName = "MySubscription"
$ResourceGroupName = "SharedImages"
$galleryName = "CorpImageGalleryEMEA"
# location of the Shared Image Gallery
$region = "northeurope"
$Publisher = "KimmoDemoCorp"
$Offer = "SAP_App_Servers"
$postFix = (Get-Random -Maximum 1000).ToString()
$SKU = "SUSE" + $postFix
#Resource ID of the shared image gallery version that will be updated
$customImageID = "/subscriptions/[SubscriptionID]/resourceGroups/SharedImages/providers/Microsoft.Compute/galleries/CorpImageGalleryEMEA/images/NETWEAVER/versions/1.0.0"
#Need the double quotes if there are more than one Additional Region
$additionalRegion = "westeurope"",""uksouth"
$imageDefName = "NETWEAVER"
$templateFileName = "SLESNetWeaverServerImagFromSharedImageGallery.json"
$OsType = "Linux"
$VersionName = "1.0.1"
$suffix = New-Guid
$imageDefNameTemp = $imageDefName + "-" + $suffix
if(!(Test-Path $templateFileName -PathType Leaf))
{
Write-Error "The ARM template '" $templateFileName +"' could not be found"
exit
}
# select subscription
$Subscription = Get-AzSubscription -SubscriptionName $SubscriptionName
if (-Not $Subscription) {
Write-Host -ForegroundColor Red -BackgroundColor White "Sorry, it seems you are not connected to Azure or don't have access to the subscription. Please use Connect-AzAccount to connect."
exit
}
$res = Get-AzResource -ResourceId $customImageID -ErrorAction SilentlyContinue
if (!$res) {
Write-Host -ForegroundColor Red -BackgroundColor White "The image '" + $customImageID + "' does not exist or is not accessible for this account"
exit
}
$azg = Get-AzGallery -ResourceGroupName $ResourceGroupName -Name $GalleryName -ErrorAction SilentlyContinue
if (!$azg) {
Write-Host -ForegroundColor Red -BackgroundColor White "The Azure Shared Image Gallery '" + $galleryName + "' does not exist or is not accessible for this account"
exit
}
$VerbosePreference = "Continue"
$succeeded = $true
Write-Host "Starting the image creation"
if ($VerbosePreference -eq "Continue") {
$succeeded = New-SharedCustomImage -SubscriptionName $subscriptionName -Region $region -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -ImageDefinitionName $imageDefNameTemp -OsType $OsType -SourceImageID $customImageID -AdditionalRegion $additionalRegion -Publisher $Publisher -Offer $Offer -SKU $SKU -VersionName $VersionName -TemplateFileName $templateFileName -Verbose
}
else {
$succeeded = New-SharedCustomImage -SubscriptionName $subscriptionName -Region $region -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -ImageDefinitionName $imageDefNameTemp -OsType $OsType -SourceImageID $customImageID -AdditionalRegion $additionalRegion -Publisher $Publisher -Offer $Offer -SKU $SKU -VersionName $VersionName -TemplateFileName $templateFileName
}
$status = ""
if ($succeeded) {
$cont = $true
Write-Host "Checking the build process"
while ($cont) {
if ($VerbosePreference -eq "Continue") {
$status = Get-ImageBuildStatus -galleryName $galleryName -imageDefNameToCheck $imageDefNameTemp -Verbose
}
else {
$status = Get-ImageBuildStatus -galleryName $galleryName -imageDefNameToCheck $imageDefNameTemp
}
If ("Running" -eq $status) {
Write-Host "Sleeping for 2 minutes"
Start-Sleep -s 120
}
else {
$cont = $false
}
}
}
$imageID = (Get-AzGalleryImageVersion -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -GalleryImageDefinitionName $imageDefNameTemp -GalleryImageVersionName $VersionName).Id
if ($null -ne $imageID) {
Write-Host "Create a temporary VM"
$vmName = "tempVM"
$nicName = "tempVM-nic"
$imageName = "tempVM-img"
$region1 = @{Name = 'West Europe'; ReplicaCount = 1 }
$region2 = @{Name = 'North Europe'; ReplicaCount = 2 }
$targetRegions = @($region1, $region2)
$user = "azureadm"
$password = "sddr!AA2241afd1234"
$VMLocalAdminSecurePassword = ConvertTo-SecureString $password -AsPlainText -Force
$VMSize = "Standard_DS3"
$vNetName = "aib-vnet"
$subNetId = ""
$vnetCheck = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $ResourceGroupName -ErrorAction SilentlyContinue
if ($vnetCheck) {
$subNetId = [System.String]::Format('{0}/subnets/subNet', $vnetCheck.Id)
}
$cred = New-Object System.Management.Automation.PSCredential ($user, $VMLocalAdminSecurePassword);
$NIC = New-AzNetworkInterface -Name $nicName -ResourceGroupName $ResourceGroupName -Location $region -SubnetId $subNetId
$VirtualMachine = New-AzVMConfig -VMName $vmName -VMSize $VMSize
if("Linux" -eq $OsType)
{
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Linux -Credential $cred -ComputerName "tempvm"
}
else {
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -Credential $cred -ComputerName "tempvm"
}
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -Id $imageID
$vm = New-AzVM -ResourceGroupName $ResourceGroupName -Location $region -VM $VirtualMachine -Verbose
Stop-AzVM -ResourceGroupName $ResourceGroupName -Name $vmName -Force
Set-AzVm -ResourceGroupName $ResourceGroupName -Name $vmName -Generalized
$vm = Get-AzVM -Name $vmName -ResourceGroupName $ResourceGroupName
$osDisk = $vm.StorageProfile.OsDisk
$image = New-AzImageConfig -Location $region -SourceVirtualMachineId $vm.Id
if ($VerbosePreference -eq "Continue") {
$img = New-AzImage -Image $image -ImageName $imageName -ResourceGroupName $ResourceGroupName -Verbose
}
else {
$img = New-AzImage -Image $image -ImageName $imageName -ResourceGroupName $ResourceGroupName
}
Remove-AzVM -Id $vm.Id -Force
Remove-AzResource -ResourceId $osDisk.ManagedDisk.Id -Force
Remove-AzResource -ResourceId $nic.Id -Force
if ($VerbosePreference -eq "Continue") {
New-AzGalleryImageVersion -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -GalleryImageDefinitionName $imageDefName -Name $VersionName -SourceImageId $img.Id -Location $region -TargetRegion $targetRegions -Verbose
}
else {
New-AzGalleryImageVersion -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -GalleryImageDefinitionName $imageDefName -Name $VersionName -SourceImageId $img.Id -Location $region -TargetRegion $targetRegions
}
$foo = Remove-AzResource -ResourceId $imageID -Force
$res = Get-AzResource -ResourceType "Microsoft.VirtualMachineImages/imageTemplates" -Name $imageDefNameTemp -ErrorAction SilentlyContinue
if ($res) {
$foo = Remove-AzResource -ResourceId $res.ResourceId -Force
}
$foo = Remove-AzResource -ResourceId $img.Id -Force
if ($VerbosePreference -eq "Continue") {
Remove-AzGalleryImageDefinition -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -Name $imageDefNameTemp -Verbose
}
else {
Remove-AzGalleryImageDefinition -ResourceGroupName $ResourceGroupName -GalleryName $galleryName -Name $imageDefNameTemp
}
}