How select the most recent Ubuntu 14.04 LTS image using Azure Resource Manager?

520 Views Asked by At

When creating classic Azure VMs, I can find the most recent Ubuntu 14.04 image using this PowerShell:

Get-AzureVMImage | where { $_.ImageFamily -eq "Ubuntu Server 14.04 LTS" } | sort PublishedDate -Descending | select -First 1

Currently this gives me 14.04.5-LTS, which is perfect.

How can I do the same using Resource Manager PowerShell commandlets? The closest I can work out is:

Get-AzureRMVMImageSku -Location "East US" -Publisher "Canonical" -Offer "UbuntuServer"

which returns

Skus              Offer        PublisherName Location Id
----              -----        ------------- -------- --
...
12.10             UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/12.10
14.04-beta        UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04-beta
14.04.0-LTS       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.0-LTS
14.04.1-LTS       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.1-LTS
14.04.2-LTS       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.2-LTS
14.04.3-LTS       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.3-LTS
14.04.4-LTS       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.4-LTS
14.04.5-DAILY-LTS UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.5-DAILY-LTS
14.04.5-LTS       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.04.5-LTS
14.10             UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.10
14.10-beta        UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.10-beta
14.10-DAILY       UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/14.10-DAILY
15.04             UbuntuServer Canonical     eastus   /Subscriptions/3523a95a-af89-4e37-98f5-bdbd56dce1ba/Providers/Microsoft.Compute/Locations/eastus/Publishers/Canonical/ArtifactTypes/VMImage/Offers/UbuntuServer/Skus/15.04
...

I guess I can grep out the last ^14.04(.\d+)?-LTS$, but I don't like to rely on the naming convention remaining the same. Where is classic's ImageFamily and PublishedDate?

1

There are 1 best solutions below

4
On BEST ANSWER

In ARM module, there is no PublishedDate with the image, we can use sku to list the most recent:

Get-AzureRmVMImageSku -Location "East Us" -PublisherName "canonical" -Offer "UbuntuServer" | ?{($_.skus -like '14.04.*-lts') -and ($_.skus -notlike '14.04.*-da*')} | Sort-Object -Descending skus | select -First 1

enter image description here

$a = (Get-AzureRmVMImageSku -Location "East Us" -PublisherName "canonical" -Offer "UbuntuServer" | ?{($_.skus -like '14.04.*-lts') -and ($_.skus -notlike '14.04.*-da*')} | Sort-Object skus).skus
$b = ([int[]](($a -split '-' -split 'LTS' -split '14.04.') | sort -Descending)) | select -Unique | select -First 1
$c = '14.04.'+$b+'-LTS'
Get-AzureRmVMImageSku -Location "East Us" -PublisherName "canonical" -Offer "UbuntuServer" | ?{($_.skus -eq $c)}

enter image description here

Update:
You are right, relying on the naming scheme is a bad idea. I find that in Azure ARM module, we can use Get-AzureRmVMImage | Sort-Object -Descending -Property PublishedDate:

$ossku = "16.04-beta"
Get-AzureRmVMImage -Location "East Us" -PublisherName 'canonical' -Offer 'UbuntuServer' -Skus $osSKU | Sort-Object -Descending -Property PublishedDate
Version         FilterExpression Skus       Offer        PublisherName Location Id
-------         ---------------- ----       -----        ------------- -------- --
16.04.201603220                  16.04-beta UbuntuServer canonical     eastus   /Subscriptions/53847bbb-222b-49c3-9488-0361e29a7b15/Providers/Microsoft.Compute/Locations/eastus/Publishers/canonical/ArtifactTypes/VMImage/Of...
16.04.201602231                  16.04-beta UbuntuServer canonical     eastus   /Subscriptions/53847bbb-222b-49c3-9488-0361e29a7b15/Providers/Microsoft.Compute/Locations/eastus/Publishers/canonical/ArtifactTypes/VMImage/Of...