Alternative Images also known as Any-Image
By default TrinityX comes bundled with playbooks for conventional HPC but also AI based workloads for the various distributions including Ubuntu and OpenSUSE. See the general information for detailed information regarding these playbooks. However, in some occasions a different distribution release is preferred.
TrinityX supports what we call the Any-Image approach. Besides the out-of-the-box provided playbooks, which technically already utilize the Any-Image functionality, it allows building alternative images to a higher degree, to e.g. have a Rocky-8 image, while the headnode runs a different distribution, for example Alma-9.
Any-Image supports two approaches. A 'base' approach where a pre-packaged base image is used to build further on top of, and a 'docker' approach where Docker images found on the Docker hub repository are used to provide a base. The official Docker images are tested but the stack is prepared to handle custom Docker images as well.
Below are examples to show how to utilize the Any-Image functionality. We work from the TrinityX local/cloned repo, Specifically the site directory where the other playbooks are presented.
Base image approach for Rocky-8
# cp compute-default.yml compute-myimage-rocky8.yml
# vi compute-myimage-rocky8.yml
Inside the compute-myimage-rocky8.yml yaml file:
- change the
image_namevariable in the pre_tasks section only, to reflect your preferred image name. - uncomment the
alternative_distributionvariable and specify to your needs. - uncomment the
alternative_image_sourcevariable and specify 'base'

Please note the yaml format is highly sensitive to wrongfully placed spaces and tabs. It's important to 'line up' to prevent variables being ignored.
Then the playbook can be run:
# ansible-playbook compute-myimage-rocky8.yml
After the playbook finishes, the image appears in luna with the name set according to the 'image_name' variable
Docker image approach for Rocky-8
# cp compute-default.yml compute-mydocker-rocky8.yml
# vi compute-mydocker-rocky8.yml
Inside the compute-mydocker-rocky8.yml yaml file:
- change the
image_namevariable in the pre_tasks section only, to reflect your preferred image name. - uncomment the
alternative_distributionvariable and specify to your needs. - uncomment the
alternative_image_sourcevariable and specify 'docker' - uncomment or add the
alternative_image_distrvariable and specify either 'rocky', 'almalinux', 'opensuse', 'centos' or 'ubuntu'
The variable alternative_image_distr is needed to ensure correct ansible var/yml includes for distribution depended configuration.
When undefined, ansible will fallback to the distribution information of the head node.

Please note the yaml format is highly sensitive to wrongfully placed spaces and tabs. It's important to 'line up' to prevent variables being ignored.
Then the playbook can be run:
# ansible-playbook compute-mydocker-rocky8.yml
After the playbook finishes, the image appears in luna with the name set according to the 'image_name' variable
Tested Matrix
The matrix below presents the combinations tested and confirmed working.
x86_64
| distribution | base | docker |
|---|---|---|
| Rocky 8 | Rocky-8, Rocky-8.9 | rockylinux:8, rockylinux:8.9 |
| Rocky 9 | Rocky-9, Rocky-9.3 | rockylinux:9, rockylinux:9.3 |
| Alma 8 | - | almalinux:8, almalinux:8.10 |
| Alma 9 | Alma-9, Alma-9.4 | almalinux:9, almalinux:9.6 |
| Ubuntu | Ubuntu-22, Ubuntu-24 | ubuntu:22, ubuntu:24 |
| OpenSuse | OpenSuse-15, OpenSuse-15.5 | - |
| Centos 8 | Centos-8 | - |
| Centos 9 | Centos-9 | - |
aarch64
| distribution | base | docker |
|---|---|---|
| Rocky 9 | Rocky-9, Rocky-9.5 | - |
| OpenSuse | OpenSuse-15, OpenSuse-15.5 | - |
External links
Docker official provided images repositories: