TLDR;
sstream-query --json --max=1 --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg http://cloud-images.ubuntu.com/releases/streams/v1/com.ubuntu.cloud:released:download.sjson arch=amd64 release_codename='Xenial Xerus' ftype='disk1.img' | jq -r '.[].item_url'
This will show you the URL for the most recent Ubuntu 16.04 Xenial cloud image in QCOW format.
Part one of a three part series.
There are a few ways to find the most recent Ubuntu cloud image an the simplest method is to view the release page which lists the most recent release.
Another method is to use the cloud image simple streams data which we also update every time we (I work on the Certified Public Cloud team @ Canonical) publish an image.
We publish simple streams data for major public clouds too but this post deals with the base Ubuntu cloud image. I will follow up this post with details on how to use the cloud specific streams data.
Simple streams
Simple streams is a structured format describing the Ubuntu cloud image releases.
You can parse the Ubuntu’s release cloud image stream json yourself or you can use a combination of sstream-query and jq (install packages “ubuntu-cloudimage-keyring“, “simplestreams” and “jq“) to get all or specific data about the most recent release.
Query all data from most recent release
sstream-query --json --max=1 --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg http://cloud-images.ubuntu.com/releases/ arch=amd64 release='xenial' ftype='disk1.img'
This will return all data on the release including date released and also the checksums of the file.
[
{
"aliases": "16.04,default,lts,x,xenial",
"arch": "amd64",
"content_id": "com.ubuntu.cloud:released:download",
"datatype": "image-downloads",
"format": "products:1.0",
"ftype": "disk1.img",
"item_name": "disk1.img",
"item_url": "http://cloud-images.ubuntu.com/releases/server/releases/xenial/release-20180126/ubuntu-16.04-server-cloudimg-amd64-disk1.img",
"label": "release",
"license": "http://www.canonical.com/intellectual-property-policy",
"md5": "9cb8ed487ad8fbc8b7d082968915c4fd",
"os": "ubuntu",
"path": "server/releases/xenial/release-20180126/ubuntu-16.04-server-cloudimg-amd64-disk1.img",
"product_name": "com.ubuntu.cloud:server:16.04:amd64",
"pubname": "ubuntu-xenial-16.04-amd64-server-20180126",
"release": "xenial",
"release_codename": "Xenial Xerus",
"release_title": "16.04 LTS",
"sha256": "da7a59cbaf43eaaa83ded0b0588bdcee4e722d9355bd6b9bfddd01b2e7e372e2",
"size": "289603584",
"support_eol": "2021-04-21",
"supported": "True",
"updated": "Wed, 07 Feb 2018 03:58:59 +0000",
"version": "16.04",
"version_name": "20180126"
}
]
Query only the url to the most recent release
sstream-query --json --max=1 --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg http://cloud-images.ubuntu.com/releases/streams/v1/com.ubuntu.cloud:released:download.sjson arch=amd64 release_codename='Xenial Xerus' ftype='disk1.img' | jq -r '.[].item_url'
This will show you the URL for the most recent Ubuntu 16.04 Xenial cloud image in QCOW format.
"http://cloud-images.ubuntu.com/releases/server/releases/xenial/release-20180126/ubuntu-16.04-server-cloudimg-amd64-disk1.img"
Query only the serial of the most recent release
sstream-query --json --max=1 --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg http://cloud-images.ubuntu.com/releases/ arch=amd64 release_codename='Xenial Xerus' ftype='disk1.img' | jq ".[].version_name"
This will show you the serial of the most recent Ubuntu 16.04 Xenial cloud image.
"20180126"
The above streams are signed using keys in the ubuntu-cloudimage-keyring keyring but you can replace the –keyring option with –no-verify to bypass any signing checks. Another way to bypass the checks is to to use the unsigned streams.
It is also worth noting that OpenStack can be configured to use streams too.
I hope the above is helpful with your automation.