Add Additional Packages

To download and deploy additional software packages and container images using Omnia local repositories, update the required Omnia input files and execute the playbooks.

Configure Additional Container Images from User Registry to Local Repository

Omnia supports configuring additional container images from specified user registries to Omnia Local Repository, so that these images are available and can be pulled by Service Kubernetes Cluster nodes as per requirement. User registries may be hosted either on OIM or on an external server, and both HTTP and HTTPS registries are supported.

After the registry is ready, mention the inputs in local_repo_config.yml, see Input Parameters for Local Repositories.

Update software_config.json

Parameters for Software Configuration

Parameter

Mandatory/Optional

Details

cluster_os_type

Mandatory

  • Type: string

  • Specify the operating system running on the OIM and the one to be provisioned on the compute nodes.

  • Accepted value: rhel

cluster_os_version

Mandatory

  • Type: string

  • The OS Version that will be provisioned on compute nodes.

  • Accepted value: 10.0.

repo_config

Mandatory

  • Type: string

  • Omnia sets up a local Pulp repository on the OIM and downloads all the necessary packages or images for the cluster into this repository. The behavior of the Pulp container varies depending on the value of the repo_config parameter.

  • In case of always, packages are downloaded and cached on OIM during local_repo.yml execution; compute nodes get the packages from OIM. Caching these packages allows them to be reused in future operations without needing to download them again.

  • In case of partial, packages are not pre-downloaded or cached. OIM downloads from upstream URLs when needed.

  • Accepted value: always, partial

  • Default value: always

Note

The following packages will always be downloaded from the local Pulp repository, regardless of the value of repo_config:

  • ISOs

  • pip modules

  • manifests

  • tarballs

  • container images

softwares

Mandatory

  • Type: JSON list

  • A JSON list of required software with the software version (optional) and architecture type aarch64, x86_64 or both. This field is mandatory.

  • The following software should be listed with a version in the list: OpenLDAP, NFS, Slurm, service_k8s, utils, ucx, openmpi.

  • A minimum of one software should be provided in the list for local_repo.yml to execute correctly.

  • The software_config.json will have the basic softwares present in it. To install additional software stacks, update the additional_packages.json available at /opt/omnia/input/project_default/config/<architecture>/rhel/10.0/ and add the following entry to the JSON list: {"name": "additional_packages", "arch": ["x86_64, "aarch64"]}.

  • To install debug pakages on the cluster nodes, add the following entry to the JSON list: {"name": "admin_debug_packages", "arch": ["x86_64, "aarch64"]}.

  • For the list of all applicable softwares based on your <cluster_os_type>, see the templates at examples/template_<os>_software_config.json. For example, /omnia/examples/rhel_software_config.json

Note

The accepted names for software are taken from /opt/omnia/input/project_default/config/<architecture>/<cluster_os_type>/<cluster_os_version>.

slurm_custom

Mandatory

Specify the functional roles of the Slurm nodes, login and login compiler on which basic software packages must be deployed.

service_k8s

Mandatory

Specify the functional roles of the Service Kubernetes Cluster nodes on which basic software packages must be deployed.

additional_packages

Optional

Specify the functional roles of the cluster nodes on which additional software packages must be deployed.

  1. Open /opt/omnia/input/project_default/software_config.json.

  2. Under softwares, add the additional_packages entry. Ensure the architecture list matches your cluster:

    {"name": "additional_packages", "arch": ["x86_64","aarch64"]}
    
  3. Save the file.

The following is a sample software_config.json snippet with additional_packages enabled:

{
"cluster_os_type": "rhel",
"cluster_os_version": "10.0",
"repo_config": "always",
"softwares": [
    {"name": "default_packages", "arch": ["x86_64","aarch64"]},
    {"name": "additional_packages", "arch": ["x86_64","aarch64"]}
],
"additional_packages": [
    {"name": "slurm_control_node"},
    {"name": "slurm_node"},
    {"name": "login_node"},
    {"name": "login_compiler_node"},
    {"name": "service_kube_control_plane"},
    {"name": "service_kube_node"}
]
}

Update additional_packages.json

Additional software packages

Parameter

Details

Supported Package Type

additional_packages

  • Type: string

  • Provide the name of the additional software packages to be available on all cluster nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

service_kube_control_plane

  • Type: string

  • Provide the name of the additional software packages to be available on all Kubernetes control plane nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

service_kube_node

  • Type: string

  • Provide the name of the additional software packages to be available on all kube nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

slurm_control_node

  • Type: string

  • Provide the name of the additional software packages to be available on all Slurm control nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

slurm_node

  • Type: string

  • Provide the name of the additional software packages to be be available on all Slurm nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

login_node

  • Type: string

  • Provide the name of the additional software packages to be available on all login nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

login_compiler_node

  • Type: string

  • Provide the name of the additional software packages to be available on login compiler node.

  • rpm: requires repo_name

  • image: requires tag or digest

Note

All container images specified in additional_packages.json under any given subgroup are configured in Omnia local repository and can be pulled on all Service Kubernetes Cluster nodes.

  1. Update the additional_packages.json file available at /opt/omnia/input/project_default/config/<architecture>/rhel/10.0/ with the required packages/images.

  2. Ensure you provide the correct package type (rpm or image) and the repository name/tag/digest, based on your requirement.

The following is a sample additional_packages.json file:

{
"additional_packages": {
    "cluster": [
    { "package": "fuse-overlayfs", "type": "rpm", "repo_name": "x86_64_appstream" },
    { "package": "python3-PyMySQL", "type": "rpm", "repo_name": "x86_64_appstream" },
    { "package": "sssd", "type": "rpm", "repo_name": "x86_64_baseos" },
    { "package": "oddjob-mkhomedir", "type": "rpm", "repo_name": "x86_64_appstream" },
    { "package": "quay.io/strimzi/kafka-bridge", "type": "image", "tag": "0.33.1" },
    { "package": "registry.k8s.io/pause", "type": "image", "digest": "sha256:7031c1b283388c2c47cc389c74e7a6a1f91e3c23f7f9c2d9e25f7c8b1a2d3e4f" }
    { "package": "172.16.0.254:7000/ubuntu/squid", "type": "image", "tag": "latest" }
    ]
}
}

Note

When user_registry is configured in local_repo_config.yml, local_repo.yml pulls all images in additional_packages.json exclusively from the specified registry. Images are not pulled from public registries (e.g., Docker Hub). Ensure all required images are available in the configured user registry.

Architecture Support Guidelines

Note

The additional_packages feature has architecture-specific functional group support. Users must configure both software_config.json and the architecture-specific additional_packages.json files according to the supported groups for their target architecture.

Supported Functional Groups by Architecture:

  • x86_64: slurm_control_node, slurm_node, login_node, login_compiler_node, service_kube_control_plane, service_kube_control_plane_first, service_kube_node

  • aarch64: slurm_node, login_node, login_compiler_node

Configuration Steps:

  1. Edit ``software_config.json``: Define the additional_packages entry with the desired functional groups and specify the appropriate architecture(s) in the arch field.

  2. Edit architecture-specific JSON files: Update the corresponding architecture-specific JSON files located at:

    • /opt/omnia/input/<project_name>/config/x86_64/rhel/<version>/additional_packages.json

    • /opt/omnia/input/<project_name>/config/aarch64/rhel/<version>/additional_packages.json

    Ensure these files contain only the functional groups that are supported for that architecture.

  • Kubernetes-related functional groups (service_kube_*) and slurm_control_node are only supported on x86_64 architecture.

  • The architecture-specific additional_packages.json files must include an additional_packages parent key and contain only supported functional groups for that architecture.

  • Declare only supported functional groups for each architecture in both software_config.json and the architecture-specific JSON files.

  • Validation logs warnings (not errors) for unsupported groups and continues execution.

  • Review validation logs at /opt/omnia/log/core/playbooks/validation_omnia_<project_name>.log for configuration warnings.

Download packages/images to the Pulp container

After updating the input files, execute the local_repo.yml playbook from inside the omnia_core container to download packages and container images to the Pulp container:

ssh omnia_core
cd /omnia/local_repo
ansible-playbook local_repo.yml

For more information about executing the playbook, see Execute the Local Repo Playbook.

If you have any feedback about Omnia documentation, please reach out at omnia.readme@dell.com.