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 .