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 support 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, in particularly 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_name variable in the pre_tasks section only, to reflect your preferred image name.
  • uncomment the alternative_distribution variable and specify to your needs.
  • uncomment the alternative_image_source variable 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_name variable in the pre_tasks section only, to reflect your preferred image name.
  • uncomment the alternative_distribution variable and specify to your needs.
  • uncomment the alternative_image_source variable and specify 'docker'
  • uncomment or add the alternative_image_distr variable 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

Below matrix 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 -

Docker official provided images repositories: