Skip to main content

CentOS Stream Images from Image Builder

Although you cannot select CentOS Stream from the web interface of Image Builder, you can use the API to select CentOS Stream. Very good instructions can be found here - https://www.redhat.com/en/blog/using-hosted-image-builder-its-api Various API Calls can be found here - https://console.redhat.com/docs/api/image-builder Image builder blog post: https://www.redhat.com/en/blog/announcing-full-support-new-red-hat-enterprise-linux-image-builder-service Image builder web console: https://console.redhat.com/insights/image-builder/

Setup

OFFLINE_TOKEN="PutYourTokenHereItWillBeLongDoNotUseThisBecauseItIsJustAnExample"

Verify you can login to Image Builder

curl --silent \
--request POST \
--data grant_type=refresh_token \
--data client_id=rhsm-api \
--data refresh_token=$OFFLINE_TOKEN \
https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token \
| jq .

Set access_token

Your access token expires fairly quickly run this each time it expires

access_token=$( \
curl --silent \
--request POST \
--data grant_type=refresh_token \
--data client_id=rhsm-api \
--data refresh_token=$OFFLINE_TOKEN \
https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token \
| jq -r .access_token \
)

Common Commands

Get documentation

curl --silent \
--header "Authorization: Bearer $access_token" \
https://console.redhat.com/api/image-builder/v1/openapi.json \
| jq . >> api.documentation

List available distributions

curl --silent \
--header "Authorization: Bearer $access_token" \
https://console.redhat.com/api/image-builder/v1/distributions \
| jq .

Output

...
{
"description": "CentOS Stream 9",
"name": "centos-9"
},
...
{
"description": "Fedora Linux 37",
"name": "fedora-37"
},
...

Get arch and image types

curl --silent \
--header "Authorization: Bearer $access_token" \
https://console.redhat.com/api/image-builder/v1/architectures/fedora-37\
| jq .

Output

...
"arch": "x86_64",
"image_types": [
"ami",
"vhd",
"aws",
"gcp",
"azure",
"edge-commit",
"edge-installer",
"rhel-edge-commit",
"rhel-edge-installer",
"guest-image",
"image-installer",
"vsphere"
],
...

Request image be built

Note: request.json is your template. If you have a different name, replace @request.json with @your-name

curl --silent \
--request POST \
--header "Authorization: Bearer $access_token" \
--header "Content-Type: application/json" \
--data @request.json \
https://console.redhat.com/api/image-builder/v1/compose

Get build id

compose_id=$( \
curl --silent \
--request POST \
--header "Authorization: Bearer $access_token" \
--header "Content-Type: application/json" \
--data @request.json \
https://console.redhat.com/api/image-builder/v1/compose \
| jq -r .id \
)

Check Status

curl \
--silent \
--header "Authorization: Bearer $access_token" \
"https://console.redhat.com/api/image-builder/v1/composes/$compose_id" \
| jq .