Add Additional Packages

This section explains how to download and deploy additional software packages and container images on the cluster nodes using Omnia local repositories.

Prerequisites

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.

Steps

To add additional packages, follow these steps:

  1. Open /opt/omnia/input/project_default/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.

  2. Under softwares, add the additional_packages entry.

    Note

    Ensure the architecture list matches your cluster:

    {"name": "additional_packages", "arch": ["x86_64","aarch64"]}
    

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"},
    {"name": "os"}
]
}
  1. Save the software_config.json file.

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

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.

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

os

  • Type: string

  • Provide the name of the additional software packages to be available on Minimal OS x86_64 and aarch64 nodes.

  • rpm: requires repo_name

  • image: requires tag or digest

The following is a sample additional_packages.json file:

{
"additional_packages": {
    "cluster": [
    { "package": "fuse-overlayfs", "type": "rpm", "repo_name": "appstream" },
    { "package": "python3-PyMySQL", "type": "rpm", "repo_name": "appstream" },
    { "package": "sssd", "type": "rpm", "repo_name": "x86_64_baseos" },
    { "package": "oddjob-mkhomedir", "type": "rpm", "repo_name": "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" }
    ]
},
"os": {
    "cluster": [
    { "package": "podman", "type": "rpm", "repo_name": "appstream" },
    { "package": "curl", "type": "rpm", "repo_name": "x86_64_baseos" },
    { "package": "wget", "type": "rpm", "repo_name": "appstream" },
    { "package": "podman", "type": "rpm", "repo_name": "appstream" },
    { "package": "curl", "type": "rpm", "repo_name": "arm64_baseos" },
    { "package": "wget", "type": "rpm", "repo_name": "appstream" }
    ]
}
}
  1. Ensure you provide the correct package type (rpm or image) and the repository name/tag/digest, based on your requirement.

  2. Save the additional_packages.json file.

Guidelines for Configuring Additional Packages for Specific Architectures

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, os

  • aarch64: slurm_node, login_node, login_compiler_node, os

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.

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