From bbafdc7c04d822e491c71396970b1308732808e6 Mon Sep 17 00:00:00 2001 From: Nagachandan-P Date: Wed, 3 Jun 2026 07:08:43 +0000 Subject: [PATCH 1/8] oim cleanup issue fixed for scratch dir Signed-off-by: Nagachandan-P --- .../tasks/cleanup_k8s.yml | 137 +++---- .../tasks/cleanup_slurm.yml | 366 ++++++------------ .../oim_container_cleanup/vars/main.yml | 14 +- 3 files changed, 186 insertions(+), 331 deletions(-) diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml index 279d053830..d7d44d8490 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml @@ -18,9 +18,9 @@ ansible.builtin.include_vars: file: "{{ hostvars['localhost']['input_project_dir'] }}/omnia_config.yml" -- name: Set k8s NFS storage name +- name: Get k8s NFS storage names from all clusters ansible.builtin.set_fact: - k8s_nfs_storage_name: "{{ service_k8s_cluster[0].nfs_storage_name }}" + k8s_nfs_storage_names: "{{ service_k8s_cluster | map(attribute='nfs_storage_name') | list | default([]) }}" when: - service_k8s_cluster is defined - service_k8s_cluster | length > 0 @@ -28,64 +28,73 @@ - name: Fail if k8s cluster not configured ansible.builtin.fail: msg: "K8s cluster not configured in omnia_config.yml. Please configure service_k8s_cluster first." - when: k8s_nfs_storage_name is not defined + when: k8s_nfs_storage_names is not defined or k8s_nfs_storage_names | length == 0 -- name: Check if k8s mount exists in storage_config +- name: Find all k8s storage mounts ansible.builtin.set_fact: - k8s_mount_found: >- - {{ mounts | selectattr('name', 'equalto', k8s_nfs_storage_name) | list | length > 0 }} + k8s_storage_mounts: "{{ mounts | selectattr('name', 'in', k8s_nfs_storage_names) | list }}" -- name: Skip k8s cleanup if mount not configured +- name: Skip k8s cleanup if no mounts found ansible.builtin.debug: msg: > - K8s NFS mount '{{ k8s_nfs_storage_name }}' not found in storage_config.yml. + K8s NFS mounts {{ k8s_nfs_storage_names }} not found in storage_config.yml. Skipping k8s cleanup. If you want to clean k8s directories, please configure - the mount for '{{ k8s_nfs_storage_name }}' in storage_config.yml. - when: not k8s_mount_found - -- name: Set k8s base path from detected mount - ansible.builtin.set_fact: - k8s_base_path: "{{ (mounts | selectattr('name', 'equalto', k8s_nfs_storage_name) | first).mount_point }}" - when: k8s_mount_found + the mounts in storage_config.yml. + when: k8s_storage_mounts | length == 0 - name: K8s cleanup tasks - when: k8s_mount_found + when: k8s_storage_mounts | length > 0 block: - - name: Display detected k8s base path - ansible.builtin.debug: - msg: "K8s cleanup using mount: {{ k8s_base_path }} (storage name: {{ k8s_nfs_storage_name }})" + - name: Build cleanup paths for all storage mounts + ansible.builtin.set_fact: + all_k8s_base_paths: [] + + - name: Build cleanup paths for each storage mount + ansible.builtin.set_fact: + all_k8s_base_paths: "{{ all_k8s_base_paths + [item.mount_point] }}" + loop: "{{ k8s_storage_mounts }}" + loop_control: + label: "{{ item.name }}" - - name: Build k8s cleanup paths from variable list + - name: Build k8s cleanup paths from variable list for all mounts ansible.builtin.set_fact: - k8s_static_cleanup_paths: [] + all_k8s_static_cleanup_paths: [] - - name: Build cleanup paths using loop + - name: Build cleanup paths using loop for all mounts ansible.builtin.set_fact: - k8s_static_cleanup_paths: "{{ k8s_static_cleanup_paths + [k8s_base_path + '/' + item] }}" - loop: "{{ k8s_cleanup_directories }}" + all_k8s_static_cleanup_paths: "{{ all_k8s_static_cleanup_paths + [path_item[0] + '/' + path_item[1]] }}" + loop: "{{ all_k8s_base_paths | product(k8s_cleanup_directories) | list }}" + loop_control: + loop_var: path_item - name: Check if static k8s directories exist ansible.builtin.stat: path: "{{ item }}" register: k8s_static_dirs_stat - loop: "{{ k8s_static_cleanup_paths }}" + loop: "{{ all_k8s_static_cleanup_paths }}" - - name: Find node IP directories when enabled + - name: Find node IP directories when enabled for all mounts when: k8s_cleanup_node_ips | default(false) block: - - name: Find all directories in k8s base path + - name: Find all directories in all k8s base paths ansible.builtin.find: - paths: "{{ k8s_base_path }}" + paths: "{{ item }}" file_type: directory register: k8s_all_dirs + loop: "{{ all_k8s_base_paths }}" - - name: Filter IP-named directories using basename + - name: Combine all found directories + ansible.builtin.set_fact: + k8s_all_found_dirs: "{{ k8s_all_dirs.results | map(attribute='files') | list | flatten }}" + + - name: Filter IP-named directories using basename for all mounts ansible.builtin.set_fact: k8s_ip_dirs: >- - {{ k8s_all_dirs.files - | selectattr('path', 'match', k8s_base_path + '/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') + {{ k8s_all_found_dirs + | selectattr('path', 'match', item + '/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') | map(attribute='path') | list }} + loop: "{{ all_k8s_base_paths }}" - name: Set empty IP dirs list when disabled ansible.builtin.set_fact: @@ -112,29 +121,33 @@ - name: Display k8s cleanup information ansible.builtin.debug: msg: | - WARNING: This will delete K8s-related directories from NFS share: - Base path: {{ k8s_base_path }} + WARNING: This will delete K8s-related directories from NFS shares: + {% for mount in k8s_storage_mounts %} + Storage: {{ mount.name }} ({{ mount.mount_point }}) {% for item in k8s_static_dirs_stat.results %} - {% if item.stat.exists %} + {% if item.stat.exists and item.item.startswith(mount.mount_point) %} - {{ item.item }} ({{ item.item | basename }}) {% endif %} {% endfor %} {% if k8s_cleanup_node_ips | default(false) %} Node IP directories: {% for item in k8s_ip_dirs %} + {% if item.startswith(mount.mount_point) %} - {{ item }} ({{ item | basename }}) + {% endif %} {% else %} - No IP directories found {% endfor %} {% else %} Node IP directories: Skipped (k8s_cleanup_node_ips: false) {% endif %} + {% endfor %} This action is destructive and cannot be undone. when: k8s_cleanup_needed | default(false) - name: Prompt for k8s cleanup confirmation ansible.builtin.pause: - prompt: "This will delete K8s-related directories. Type {{ k8s_cleanup_confirm_token }} to continue" + prompt: "This will delete K8s-related directories from {{ k8s_storage_mounts | length }} storage mount(s). Type {{ k8s_cleanup_confirm_token }} to continue" register: k8s_cleanup_confirm - name: Fail if cleanup not confirmed @@ -142,57 +155,27 @@ msg: "K8s cleanup aborted" when: k8s_cleanup_confirm.user_input | lower != k8s_cleanup_confirm_token | lower - - name: Delete static k8s directories - ansible.builtin.file: - path: "{{ item.item }}" - state: absent - register: k8s_static_cleanup_result - when: - - k8s_cleanup_needed | default(false) - - item.stat.exists - loop: "{{ k8s_static_dirs_stat.results }}" - - - name: Delete node IP directories + - name: Delete all k8s directories ansible.builtin.file: path: "{{ item }}" state: absent - register: k8s_ip_cleanup_result - when: - - k8s_cleanup_needed | default(false) - - k8s_cleanup_node_ips | default(false) - loop: "{{ k8s_ip_dirs }}" + register: k8s_cleanup_result + when: k8s_cleanup_needed | default(false) + loop: "{{ k8s_all_cleanup_paths }}" - name: Display k8s cleanup completion message ansible.builtin.debug: msg: | K8s-related cleanup completed. - Base path: {{ k8s_base_path }} - {% if k8s_static_cleanup_result.results is defined %} - Static directories: - {% for item in k8s_static_cleanup_result.results %} - {% if item is defined and item.changed %} - ✅ Deleted: {{ item.item }} - {% elif item is defined and not item.changed %} - ℹ️ Already absent: {{ item.item }} - {% endif %} + {% for mount in k8s_storage_mounts %} + Storage: {{ mount.name }} ({{ mount.mount_point }}) + {% set mount_deleted = k8s_cleanup_result.results | selectattr('item', 'search', '^' + mount.mount_point) | selectattr('changed') | list %} + {% if mount_deleted %} + {% for item in mount_deleted %} + -> Deleted: {{ item.item }} {% endfor %} {% else %} - Static directories: None deleted - {% endif %} - {% if k8s_cleanup_node_ips | default(false) %} - {% if k8s_ip_cleanup_result.results is defined %} - Node IP directories: - {% for item in k8s_ip_cleanup_result.results %} - {% if item is defined and item.changed %} - ✅ Deleted: {{ item.item }} - {% elif item is defined and not item.changed %} - ℹ️ Already absent: {{ item.item }} + -> No directories deleted from this storage {% endif %} {% endfor %} - {% else %} - Node IP directories: None deleted - {% endif %} - {% else %} - Node IP directories: Skipped - {% endif %} - when: k8s_cleanup_needed | default(false) + when: k8s_cleanup_needed | default(false) \ No newline at end of file diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml index c208965329..e82a808cd4 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml @@ -14,25 +14,93 @@ --- -- name: Check if slurm mount exists in storage_config +- name: Read omnia_config for slurm cluster configuration + ansible.builtin.include_vars: + file: "{{ hostvars['localhost']['input_project_dir'] }}/omnia_config.yml" + +- name: Fail if slurm cluster not configured + ansible.builtin.fail: + msg: "Slurm cluster not configured in omnia_config.yml. Please configure slurm_cluster first." + when: slurm_cluster is not defined or slurm_cluster | length == 0 + +- name: Build cleanup storage list for each cluster + ansible.builtin.set_fact: + cleanup_storage_list: [] + +- name: Determine storage mounts to clean for each cluster + ansible.builtin.set_fact: + cleanup_storage_list: >- + {{ cleanup_storage_list + [ + { + 'cluster_name': cluster_item.cluster_name, + 'nfs_storage': cluster_item.nfs_storage_name, + 'vast_storage': cluster_item.vast_storage_name | default(cluster_item.nfs_storage_name), + 'nfs_mount_point': (mounts | selectattr('name', 'equalto', cluster_item.nfs_storage_name) | first | default({})).mount_point, + 'vast_mount_point': (mounts | selectattr('name', 'equalto', cluster_item.vast_storage_name | default(cluster_item.nfs_storage_name)) | first | default({})).mount_point, + 'has_separate_vast': cluster_item.vast_storage_name is defined and cluster_item.vast_storage_name and cluster_item.vast_storage_name != cluster_item.nfs_storage_name + } + ] }} + loop: "{{ slurm_cluster }}" + loop_control: + loop_var: cluster_item + +- name: Build unique storage mount entries for cleanup ansible.builtin.set_fact: - slurm_mount_found: >- - {{ mounts | selectattr('name', 'equalto', 'nfs_slurm') | list | length > 0 }} + unique_storage_mounts: [] -- name: Skip slurm cleanup if mount not configured +- name: Collect unique storage mounts with directory types + ansible.builtin.set_fact: + unique_storage_mounts: >- + {{ unique_storage_mounts + [ + { + 'mount_point': item.nfs_mount_point, + 'storage_name': item.nfs_storage, + 'dir_type': 'nfs', + 'directories': ['slurm', 'ctld_track', 'openldap', 'slurm_backups'] + (['apps', 'scratch', 'projects', 'slurm/hpc_tools'] if not item.has_separate_vast else []) + } + ] if item.nfs_mount_point not in unique_storage_mounts | map(attribute='mount_point') | list else unique_storage_mounts }} + loop: "{{ cleanup_storage_list }}" + loop_control: + label: "{{ item.cluster_name }}" + +- name: Add separate VAST storage mounts + ansible.builtin.set_fact: + unique_storage_mounts: >- + {{ unique_storage_mounts + [ + { + 'mount_point': item.vast_mount_point, + 'storage_name': item.vast_storage, + 'dir_type': 'vast', + 'directories': ['apps', 'scratch', 'projects', 'slurm/hpc_tools'] + } + ] if item.has_separate_vast and item.vast_mount_point not in unique_storage_mounts | map(attribute='mount_point') | list else unique_storage_mounts }} + loop: "{{ cleanup_storage_list }}" + loop_control: + label: "{{ item.cluster_name }}" + +- name: Skip slurm cleanup if no mounts found ansible.builtin.debug: msg: > - Slurm NFS mount 'nfs_slurm' not found in storage_config.yml. + Slurm storage mounts not found in storage_config.yml. Skipping slurm cleanup. If you want to clean slurm directories, please configure - the mount for 'nfs_slurm' in storage_config.yml. - when: not slurm_mount_found + the storage mounts in storage_config.yml. + when: unique_storage_mounts | length == 0 - name: Slurm cleanup tasks - when: slurm_mount_found + when: unique_storage_mounts | length > 0 block: - - name: Set slurm cleanup paths + - name: Build all cleanup paths + ansible.builtin.set_fact: + all_cleanup_paths: [] + + - name: Build cleanup paths for each storage mount ansible.builtin.set_fact: - slurm_cleanup_path: "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/slurm" + all_cleanup_paths: >- + {{ all_cleanup_paths + (storage_item.directories | map('regex_replace', '^', storage_item.mount_point + '/') | list) }} + loop: "{{ unique_storage_mounts }}" + loop_control: + loop_var: storage_item + label: "{{ storage_item.storage_name }}" - name: Check if any slurm-related directories exist ansible.builtin.stat: @@ -40,10 +108,7 @@ register: slurm_dirs_stat failed_when: false ignore_errors: true - loop: - - "{{ slurm_cleanup_path }}" - - "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/ctld_track" - - "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/openldap" + loop: "{{ all_cleanup_paths }}" - name: Set cleanup needed flag ansible.builtin.set_fact: @@ -57,185 +122,25 @@ - name: Display slurm cleanup information ansible.builtin.debug: msg: | - WARNING: This will delete Slurm-related directories from NFS share: - - {{ slurm_cleanup_path }} (Slurm configuration) - - {{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/ctld_track (Controller tracking) - - {{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/openldap (OpenLDAP) - PRESERVED: {{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/slurm_backups (Backups) - This action is destructive and cannot be easily undone. + WARNING: This will delete Slurm-related directories from NFS shares: + {% for storage in unique_storage_mounts %} + Storage: {{ storage.storage_name }} ({{ storage.mount_point }}) + Type: {{ storage.dir_type | upper }} + {% for dir in storage.directories %} + - {{ storage.mount_point }}/{{ dir }}{% if dir == 'slurm_backups' %} (PRESERVED - will not be deleted){% endif %} + {% endfor %} + {% endfor %} + + Note: slurm_backups directories will be preserved. + If you need Slurm configuration backup, use the separate utility: + ansible-playbook utils/slurm_config_util.yml --tags config_backup + + This action is destructive and cannot be undone. when: cleanup_needed | default(false) - - name: Prompt for pre-cleanup backup - ansible.builtin.pause: - prompt: "Before cleanup, take a Slurm config backup? (y/n)" - register: pre_cleanup_backup - - - name: Set pre-cleanup backup choice - ansible.builtin.set_fact: - pre_cleanup_backup_choice: "{{ pre_cleanup_backup.user_input | default('') | trim | lower }}" - - - name: Fail if pre-cleanup backup choice is empty - ansible.builtin.fail: - msg: "No input provided for pre-cleanup backup prompt. Slurm cleanup aborted." - when: pre_cleanup_backup_choice | length == 0 - - - name: Validate pre-cleanup backup choice - ansible.builtin.fail: - msg: "Invalid input '{{ pre_cleanup_backup.user_input | default('') }}'. Enter 'y' or 'n'." - when: pre_cleanup_backup_choice not in ['y', 'yes', 'n', 'no'] - - - name: Normalize backup choice to boolean - ansible.builtin.set_fact: - backup_choice_bool: "{{ pre_cleanup_backup_choice in ['y', 'yes'] }}" - - - name: Set slurm backup variables - ansible.builtin.set_fact: - share_path: "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}" - slurm_share_dir_name: slurm - slurm_backups_dir_name: slurm_backups - when: backup_choice_bool | default(false) - - - name: Read omnia_config for slurm_cluster - ansible.builtin.include_vars: - file: "{{ hostvars['localhost']['input_project_dir'] }}/omnia_config.yml" - when: backup_choice_bool | default(false) - - - name: Set slurm cluster facts - ansible.builtin.set_fact: - nfs_storage_name: "{{ slurm_cluster[0].nfs_storage_name }}" - when: - - backup_choice_bool | default(false) - - slurm_cluster is defined - - slurm_cluster | length > 0 - - - name: Check if nodes.yaml exists - ansible.builtin.stat: - path: "{{ hostvars['localhost']['oim_shared_path'] }}/omnia/openchami/workdir/nodes/nodes.yaml" - register: nodes_yaml_stat - when: backup_choice_bool | default(false) - - - name: Warn if nodes.yaml not found and skip backup - ansible.builtin.debug: - msg: > - WARNING: nodes.yaml not found at - {{ hostvars['localhost']['oim_shared_path'] }}/omnia/openchami/workdir/nodes/nodes.yaml. - Skipping backup and proceeding with cleanup only. - when: - - backup_choice_bool | default(false) - - not nodes_yaml_stat.stat.exists - - - name: Set backup skipped flag - ansible.builtin.set_fact: - backup_skipped: true - when: - - backup_choice_bool | default(false) - - not nodes_yaml_stat.stat.exists - - - name: Slurp nodes.yaml - ansible.builtin.slurp: - src: "{{ hostvars['localhost']['oim_shared_path'] }}/omnia/openchami/workdir/nodes/nodes.yaml" - register: slurped_yaml - when: - - backup_choice_bool | default(false) - - nodes_yaml_stat.stat.exists - - - name: Parse nodes.yaml - ansible.builtin.set_fact: - node_yaml: "{{ slurped_yaml.content | b64decode | from_yaml }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Get node IP mapping - ansible.builtin.set_fact: - tmp_ip_name_map: "{{ node_yaml.nodes | items2dict(key_name='name', value_name='interfaces') }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Create IP name map - ansible.builtin.set_fact: - ip_name_map: "{{ ip_name_map | default({}) | combine({item.key: item.value[0]['ip_addrs'][0]['ip_addr']}) }}" - loop: "{{ tmp_ip_name_map | dict2items }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Get node group mapping - ansible.builtin.set_fact: - name_group_map: "{{ node_yaml.nodes | items2dict(key_name='name', value_name='group') }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Group functional groups - ansible.builtin.set_fact: - tmp_grouped_nodes: "{{ name_group_map | dict2items | groupby('value') }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Reorganize groups - ansible.builtin.set_fact: - grouped_nodes: "{{ grouped_nodes | default({}) | combine({item[0]: ((item[1] | items2dict).keys() | list)}) }}" - loop: "{{ tmp_grouped_nodes }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Set ctld_list - ansible.builtin.set_fact: - ctld_list: "{{ grouped_nodes | dict2items - | selectattr('key', 'match', '^' ~ 'slurm_control_node_') - | map(attribute='value') | list | flatten }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Set controller IP - ansible.builtin.set_fact: - controller_ip: "{{ ip_name_map[ctld_list | first] }}" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - ctld_list is defined - - ctld_list | length > 0 - - - name: Add slurm controller as dynamic host - ansible.builtin.add_host: - name: slurm_controller - ansible_host: "{{ controller_ip }}" - ansible_user: root - ansible_port: 22 - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - controller_ip is defined - - - name: Run slurm config backup before cleanup - ansible.builtin.include_role: - name: slurm_config_backup - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Display backup completion message - ansible.builtin.debug: - msg: "Slurm configuration backup completed. You can restore using: ansible-playbook utils/slurm_config_util.yml --tags config_rollback" - when: - - backup_choice_bool | default(false) - - backup_skipped is not defined - - - name: Display backup skipped message - ansible.builtin.debug: - msg: "Slurm configuration backup was skipped due to missing nodes.yaml. Cleanup will proceed without backup." - when: - - backup_choice_bool | default(false) - - backup_skipped is defined - - name: Prompt for slurm cleanup confirmation ansible.builtin.pause: - prompt: "This will delete Slurm-related directories (slurm, ctld_track, openldap). Type {{ slurm_cleanup_confirm_token }} to continue" + prompt: "This will delete Slurm-related directories from {{ unique_storage_mounts | length }} storage mount(s). Type {{ slurm_cleanup_confirm_token }} to continue" register: cleanup_confirm - name: Fail if cleanup not confirmed @@ -243,74 +148,39 @@ msg: "Slurm cleanup aborted" when: cleanup_confirm.user_input | lower != slurm_cleanup_confirm_token | lower - - name: Delete slurm configuration directory + - name: Delete slurm directories (excluding slurm_backups) ansible.builtin.file: - path: "{{ slurm_cleanup_path }}" + path: "{{ item.item }}" state: absent register: slurm_cleanup_result ignore_errors: true when: - cleanup_needed | default(false) - - slurm_dirs_stat.results[0].stat is defined - - slurm_dirs_stat.results[0].stat.exists - - - name: Set related directories to clean - ansible.builtin.set_fact: - related_dirs: - - "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/ctld_track" - - "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/openldap" - when: cleanup_needed | default(false) - - - name: Delete ctld_track directory - ansible.builtin.file: - path: "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/ctld_track" - state: absent - register: ctld_track_cleanup_result - ignore_errors: true - when: - - cleanup_needed | default(false) - - slurm_dirs_stat.results[1].stat is defined - - slurm_dirs_stat.results[1].stat.exists - - - name: Delete openldap directory - ansible.builtin.file: - path: "{{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/openldap" - state: absent - register: openldap_cleanup_result - ignore_errors: true - when: - - cleanup_needed | default(false) - - slurm_dirs_stat.results[2].stat is defined - - slurm_dirs_stat.results[2].stat.exists + - item.stat is defined + - item.stat.exists + - not item.item | regex_search('slurm_backups$') + loop: "{{ slurm_dirs_stat.results }}" + loop_control: + label: "{{ item.item }}" - name: Display slurm cleanup completion message ansible.builtin.debug: msg: | Slurm-related cleanup completed. - {% if slurm_cleanup_result is defined and slurm_cleanup_result.changed %} - -> Slurm configuration directory deleted: {{ slurm_cleanup_path }} - {% elif slurm_cleanup_result is defined %} - -> Slurm configuration directory already absent: {{ slurm_cleanup_path }} + {% for storage in unique_storage_mounts %} + Storage: {{ storage.storage_name }} ({{ storage.mount_point }}) + Type: {{ storage.dir_type | upper }} + {% for dir in storage.directories %} + {% set full_path = storage.mount_point + '/' + dir %} + {% set dir_deleted = slurm_cleanup_result.results | selectattr('item', 'equalto', full_path) | selectattr('changed') | list %} + {% set dir_exists = slurm_cleanup_result.results | selectattr('item', 'equalto', full_path) | selectattr('stat', 'defined') | selectattr('stat.exists') | list %} + {% if dir == 'slurm_backups' %} + -> Preserved: {{ full_path }} + {% elif dir_deleted %} + -> Deleted: {{ full_path }} + {% elif dir_exists %} + -> Already absent: {{ full_path }} {% endif %} - {% if ctld_track_cleanup_result is defined and ctld_track_cleanup_result.changed %} - -> Controller tracking directory deleted: {{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/ctld_track - {% elif ctld_track_cleanup_result is defined %} - -> Controller tracking directory already absent - {% endif %} - {% if openldap_cleanup_result is defined and openldap_cleanup_result.changed %} - -> OpenLDAP directory deleted: {{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/openldap - {% elif openldap_cleanup_result is defined %} - -> OpenLDAP directory already absent - {% endif %} - -> Slurm backups preserved at: {{ (mounts | selectattr('name', 'equalto', 'nfs_slurm') | first).mount_point }}/slurm_backups - {% if backup_choice_bool | default(false) %} - {% if backup_skipped is defined %} - -> Backup was skipped due to missing nodes.yaml. - {% else %} - -> Backup was created using slurm_config_backup role. - To restore, use: ansible-playbook utils/slurm_config_util.yml --tags config_rollback - {% endif %} - {% else %} - -> No backup was created. This action cannot be undone. - {% endif %} - when: cleanup_needed | default(false) + {% endfor %} + {% endfor %} + when: cleanup_needed | default(false) \ No newline at end of file diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml b/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml index 75bc2e3e5d..ba9143a6f3 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml @@ -196,21 +196,23 @@ oim_cleanup_note: | [Post-Cleanup Actions Required] 1. Reboot the OIM node after running oim_cleanup.yml. - 2. The playbook now removes Slurm-related directories from NFS share: + 2. The playbook removes Slurm-related directories from NFS shares: - slurm (Slurm configuration) - ctld_track (Controller tracking) - openldap (OpenLDAP) + - apps (Applications) + - projects (Projects) + - scratch (Scratch space) - PRESERVED: slurm_backups (Backup directory) - - Slurm configuration backup is offered before cleanup (recommended to accept). + - Supports multi-storage: Cleans directories from all Slurm storage mounts configured in omnia_config.yml + - For Slurm configuration backup, use the separate utility: ansible-playbook utils/slurm_config_util.yml --tags config_backup - To skip slurm cleanup, run: ansible-playbook utils/oim_cleanup.yml --skip-tags slurm - - Backup uses existing slurm_config_backup role (same as slurm_config_util.yml) - - To restore slurm configs from backup, use: ansible-playbook utils/slurm_config_util.yml --tags config_rollback - 3. The playbook now removes K8s-related directories from NFS share: + 3. The playbook removes K8s-related directories from NFS shares: - ssh, calico, metallb, helm, packages, telemetry, karavi-observability, csi-driver-powerscale, nfs-client-provisioner - Node IP directories (when k8s_cleanup_node_ips: true) - - PRESERVED: slurm, ctld_track, openldap, slurm_backups (Slurm directories) - Directory list is configurable via k8s_cleanup_directories variable in vars/main.yml + - Supports multi-storage: Cleans directories from all K8s storage mounts configured in omnia_config.yml - To skip k8s cleanup, run: ansible-playbook utils/oim_cleanup.yml --skip-tags k8s - No backup is created for k8s directories (directory deletion only) From 08d4554517d40f0f232e65b0aef306898c5ac605 Mon Sep 17 00:00:00 2001 From: Nagachandan-P Date: Wed, 3 Jun 2026 07:29:08 +0000 Subject: [PATCH 2/8] lint issue fixed Signed-off-by: Nagachandan-P --- .../tasks/cleanup_k8s.yml | 11 ++++-- .../tasks/cleanup_slurm.yml | 34 ++++++++++++++----- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml index d7d44d8490..c6905ea917 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_k8s.yml @@ -142,12 +142,19 @@ Node IP directories: Skipped (k8s_cleanup_node_ips: false) {% endif %} {% endfor %} + + CRITICAL WARNING: Deleting NFS shared data will affect ALL nodes! + - Ensure K8s services are stopped on all nodes + - Ensure nodes are not accessing these directories + - This may cause stale file handles on running nodes + - Only proceed if you understand the impact on your cluster + This action is destructive and cannot be undone. when: k8s_cleanup_needed | default(false) - name: Prompt for k8s cleanup confirmation ansible.builtin.pause: - prompt: "This will delete K8s-related directories from {{ k8s_storage_mounts | length }} storage mount(s). Type {{ k8s_cleanup_confirm_token }} to continue" + prompt: "I understand this will delete NFS data affecting all nodes. Type {{ k8s_cleanup_confirm_token }} to continue" register: k8s_cleanup_confirm - name: Fail if cleanup not confirmed @@ -178,4 +185,4 @@ -> No directories deleted from this storage {% endif %} {% endfor %} - when: k8s_cleanup_needed | default(false) \ No newline at end of file + when: k8s_cleanup_needed | default(false) diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml index e82a808cd4..4cc76a93b8 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_slurm.yml @@ -35,9 +35,14 @@ 'cluster_name': cluster_item.cluster_name, 'nfs_storage': cluster_item.nfs_storage_name, 'vast_storage': cluster_item.vast_storage_name | default(cluster_item.nfs_storage_name), - 'nfs_mount_point': (mounts | selectattr('name', 'equalto', cluster_item.nfs_storage_name) | first | default({})).mount_point, - 'vast_mount_point': (mounts | selectattr('name', 'equalto', cluster_item.vast_storage_name | default(cluster_item.nfs_storage_name)) | first | default({})).mount_point, - 'has_separate_vast': cluster_item.vast_storage_name is defined and cluster_item.vast_storage_name and cluster_item.vast_storage_name != cluster_item.nfs_storage_name + 'nfs_mount_point': (mounts | selectattr('name', 'equalto', cluster_item.nfs_storage_name) + | first | default({})).mount_point, + 'vast_mount_point': (mounts | selectattr('name', 'equalto', + cluster_item.vast_storage_name | default(cluster_item.nfs_storage_name)) + | first | default({})).mount_point, + 'has_separate_vast': cluster_item.vast_storage_name is defined + and cluster_item.vast_storage_name + and cluster_item.vast_storage_name != cluster_item.nfs_storage_name } ] }} loop: "{{ slurm_cluster }}" @@ -56,9 +61,12 @@ 'mount_point': item.nfs_mount_point, 'storage_name': item.nfs_storage, 'dir_type': 'nfs', - 'directories': ['slurm', 'ctld_track', 'openldap', 'slurm_backups'] + (['apps', 'scratch', 'projects', 'slurm/hpc_tools'] if not item.has_separate_vast else []) + 'directories': ['slurm', 'ctld_track', 'openldap', 'slurm_backups'] + + (['apps', 'scratch', 'projects', 'slurm/hpc_tools'] + if not item.has_separate_vast else []) } - ] if item.nfs_mount_point not in unique_storage_mounts | map(attribute='mount_point') | list else unique_storage_mounts }} + ] if item.nfs_mount_point not in unique_storage_mounts + | map(attribute='mount_point') | list else unique_storage_mounts }} loop: "{{ cleanup_storage_list }}" loop_control: label: "{{ item.cluster_name }}" @@ -131,6 +139,12 @@ {% endfor %} {% endfor %} + CRITICAL WARNING: Deleting NFS shared data will affect ALL nodes! + - Ensure Slurm services are stopped on all compute nodes + - Ensure compute nodes are not accessing these directories + - This may cause stale file handles on running nodes + - Only proceed if you understand the impact on your cluster + Note: slurm_backups directories will be preserved. If you need Slurm configuration backup, use the separate utility: ansible-playbook utils/slurm_config_util.yml --tags config_backup @@ -140,7 +154,7 @@ - name: Prompt for slurm cleanup confirmation ansible.builtin.pause: - prompt: "This will delete Slurm-related directories from {{ unique_storage_mounts | length }} storage mount(s). Type {{ slurm_cleanup_confirm_token }} to continue" + prompt: "I understand this will delete NFS data affecting all nodes. Type {{ slurm_cleanup_confirm_token }} to continue" register: cleanup_confirm - name: Fail if cleanup not confirmed @@ -172,8 +186,10 @@ Type: {{ storage.dir_type | upper }} {% for dir in storage.directories %} {% set full_path = storage.mount_point + '/' + dir %} - {% set dir_deleted = slurm_cleanup_result.results | selectattr('item', 'equalto', full_path) | selectattr('changed') | list %} - {% set dir_exists = slurm_cleanup_result.results | selectattr('item', 'equalto', full_path) | selectattr('stat', 'defined') | selectattr('stat.exists') | list %} + {% set dir_deleted = slurm_cleanup_result.results | selectattr('item', 'equalto', full_path) + | selectattr('changed') | list %} + {% set dir_exists = slurm_cleanup_result.results | selectattr('item', 'equalto', full_path) + | selectattr('stat', 'defined') | selectattr('stat.exists') | list %} {% if dir == 'slurm_backups' %} -> Preserved: {{ full_path }} {% elif dir_deleted %} @@ -183,4 +199,4 @@ {% endif %} {% endfor %} {% endfor %} - when: cleanup_needed | default(false) \ No newline at end of file + when: cleanup_needed | default(false) From bea459544e032ecc63e48134e74905508ddcf3ee Mon Sep 17 00:00:00 2001 From: Katakam Rakesh Naga Sai <125246792+Katakam-Rakesh@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:19:08 +0530 Subject: [PATCH 3/8] Validation check for pxe mapping file and cluster initialised check and banner preview (#4655) * added banner changes and validation of pxemapping file for software presence and cluster initialized file in cloud-init-log Signed-off-by: Katakam-Rakesh * lint fix Signed-off-by: Katakam-Rakesh --------- Signed-off-by: Katakam-Rakesh --- .../common_utils/en_us_validation_msg.py | 12 +++ .../validation_flows/provision_validation.py | 84 +++++++++++++++++++ .../tasks/preflight_checks_storage.yml | 61 +++++++++++--- upgrade/upgrade.yml | 43 ++++++---- 4 files changed, 169 insertions(+), 31 deletions(-) diff --git a/common/library/module_utils/input_validation/common_utils/en_us_validation_msg.py b/common/library/module_utils/input_validation/common_utils/en_us_validation_msg.py index 605b437b9d..f17d9c568c 100644 --- a/common/library/module_utils/input_validation/common_utils/en_us_validation_msg.py +++ b/common/library/module_utils/input_validation/common_utils/en_us_validation_msg.py @@ -102,6 +102,18 @@ " is not currently supported and is reserved for future use. Please remove or update this role" " to avoid configuration errors.") +# Mapping file and software_config.json consistency validation messages +SERVICE_K8S_FUNCTIONAL_GROUP_WITHOUT_SOFTWARE_MSG = ( + "Service Kubernetes functional groups (service_kube_node_* or service_kube_control_plane_*) " + "are defined in the PXE mapping file, but 'service_k8s' is not configured in software_config.json. " + "Please add 'service_k8s' to the 'softwares' list in software_config.json to deploy the service cluster." +) +SLURM_FUNCTIONAL_GROUP_WITHOUT_SOFTWARE_MSG = ( + "Slurm functional groups (slurm_control_node_* or slurm_node_*) " + "are defined in the PXE mapping file, but 'slurm_custom' is not configured in software_config.json. " + "Please add 'slurm_custom' to the 'softwares' list in software_config.json to deploy the Slurm cluster." +) + # Functional Groups Config Validation Messages EMPTY_OR_SYNTAX_ERROR_FUNCTIONAL_GROUPS_CONFIG_MSG = ( diff --git a/common/library/module_utils/input_validation/validation_flows/provision_validation.py b/common/library/module_utils/input_validation/validation_flows/provision_validation.py index 1a9f610d69..6b7fdabcef 100644 --- a/common/library/module_utils/input_validation/validation_flows/provision_validation.py +++ b/common/library/module_utils/input_validation/validation_flows/provision_validation.py @@ -915,6 +915,89 @@ def validate_aarch64_local_path_compatibility(pxe_mapping_file_path): if aarch64_found: raise ValueError(en_us_validation_msg.PXE_MAPPING_AARCH64_LOCAL_PATH_MSG) +def validate_functional_groups_software_consistency(pxe_mapping_file_path, software_config_json, logger): + """ + Validates that functional groups in the PXE mapping file have corresponding + software configured in software_config.json. + + This ensures that: + - If service_kube_node_* or service_kube_control_plane_* functional groups exist + in the mapping file, then 'service_k8s' must be in software_config.json + - If slurm_control_node_* or slurm_node_* functional groups exist in the mapping file, + then 'slurm_custom' must be in software_config.json + + Args: + pxe_mapping_file_path (str): Path to the PXE mapping file. + software_config_json (dict): Parsed software_config.json data. + logger (Logger): Logger instance for logging messages. + + Raises: + ValueError: If functional groups are defined without corresponding software. + """ + if not pxe_mapping_file_path or not os.path.isfile(pxe_mapping_file_path): + return + + # Read the mapping file to find functional groups + with open(pxe_mapping_file_path, "r", encoding="utf-8") as fh: + raw_lines = fh.readlines() + + non_comment_lines = [ln for ln in raw_lines if ln.strip()] + if not non_comment_lines: + return + + reader = csv.DictReader(non_comment_lines) + fieldname_map = {fn.strip().upper(): fn for fn in reader.fieldnames} + fg_col = fieldname_map.get("FUNCTIONAL_GROUP_NAME") + + if not fg_col: + return + + # Track which functional groups are found + has_service_k8s_fg = False + has_slurm_fg = False + + for row in reader: + fg_name = row.get(fg_col, "").strip() if row.get(fg_col) else "" + if not fg_name: + continue + + # Check for service k8s functional groups + if fg_name.startswith('service_kube_node_') or fg_name.startswith('service_kube_control_plane_'): + has_service_k8s_fg = True + logger.info(f"Found service k8s functional group in mapping file: {fg_name}") + + # Check for slurm functional groups + if fg_name.startswith('slurm_control_node_') or fg_name.startswith('slurm_node_'): + has_slurm_fg = True + logger.info(f"Found slurm functional group in mapping file: {fg_name}") + + # Get list of software names from software_config.json + software_names = [] + if software_config_json and "softwares" in software_config_json: + software_names = [sw.get("name", "") for sw in software_config_json.get("softwares", [])] + + logger.info(f"Software configured in software_config.json: {software_names}") + + # Validate service_k8s and slurm_custom, collecting all errors + consistency_errors = [] + + if has_service_k8s_fg and "service_k8s" not in software_names: + logger.error("Service k8s functional groups found but service_k8s not in software_config.json") + consistency_errors.append(en_us_validation_msg.SERVICE_K8S_FUNCTIONAL_GROUP_WITHOUT_SOFTWARE_MSG) + + if has_slurm_fg and "slurm_custom" not in software_names: + logger.error("Slurm functional groups found but slurm_custom not in software_config.json") + consistency_errors.append(en_us_validation_msg.SLURM_FUNCTIONAL_GROUP_WITHOUT_SOFTWARE_MSG) + + if consistency_errors: + raise ValueError(" | ".join(consistency_errors)) + + # Log success + if has_service_k8s_fg and "service_k8s" in software_names: + logger.info("✓ Service k8s functional groups validated: service_k8s found in software_config.json") + if has_slurm_fg and "slurm_custom" in software_names: + logger.info("✓ Slurm functional groups validated: slurm_custom found in software_config.json") + def validate_provision_config( input_file_path, data, logger, module, omnia_base_dir, module_utils_base, project_name ): @@ -993,6 +1076,7 @@ def validate_provision_config( validate_parent_service_tag_hierarchy(pxe_mapping_file_path) validate_slurm_login_compiler_prefix(pxe_mapping_file_path) validate_aarch64_local_path_compatibility(pxe_mapping_file_path) + validate_functional_groups_software_consistency(pxe_mapping_file_path, software_config_json, logger) # Validate ADMIN_IPs against network_spec.yml ranges # network_spec_path = create_file_path(input_file_path, file_names["network_spec"]) diff --git a/upgrade/roles/upgrade_k8s/tasks/preflight_checks_storage.yml b/upgrade/roles/upgrade_k8s/tasks/preflight_checks_storage.yml index 4d2572fa7e..7cc2b8f319 100644 --- a/upgrade/roles/upgrade_k8s/tasks/preflight_checks_storage.yml +++ b/upgrade/roles/upgrade_k8s/tasks/preflight_checks_storage.yml @@ -20,6 +20,7 @@ # 1. No PersistentVolumes in Failed state # 2. No PersistentVolumeClaims in Lost state # 3. NFS storage mount is accessible on kube_vip +# 4. All control planes (first + additional) have .cluster_initialized marker # ── Check 1: PersistentVolumes must not be in Failed state ───────── - name: "Preflight storage — Check for PersistentVolumes in Failed state" @@ -74,29 +75,63 @@ when: not (preflight_nfs_stat.stat.exists | default(false)) # ── Check 4: All control planes must have .cluster_initialized marker ── +- name: "Preflight storage — Build list of all control plane nodes" + ansible.builtin.set_fact: + all_control_plane_nodes: "{{ (groups['k8s_control_plane_first'] | default([])) + (groups['k8s_control_plane'] | default([])) }}" + - name: "Preflight storage — Check .cluster_initialized marker on all control planes" ansible.builtin.stat: path: "/etc/kubernetes/.cluster_initialized" delegate_to: "{{ item }}" register: preflight_cluster_init_check - loop: "{{ groups[group_cp] | default([]) }}" + loop: "{{ all_control_plane_nodes }}" loop_control: label: "{{ item }}" + when: all_control_plane_nodes | length > 0 -- name: "Preflight storage — Fail if any control plane is missing .cluster_initialized" - ansible.builtin.fail: - msg: | - Control plane node {{ item.item }} is missing /etc/kubernetes/.cluster_initialized marker file. - This indicates that the node's cloud-init provisioning did not complete successfully. +- name: "Preflight storage — Collect nodes missing .cluster_initialized" + ansible.builtin.set_fact: + missing_cluster_init_nodes: >- + {{ preflight_cluster_init_check.results + | selectattr('stat.exists', 'defined') + | rejectattr('stat.exists') + | map(attribute='item') + | list }} + when: preflight_cluster_init_check.results is defined - Please check the cloud-init logs on {{ item.item }}: - ssh {{ item.item }} cat /var/log/cloud-init-output.log +- name: "Preflight storage — Display missing nodes warning" + ansible.builtin.debug: + msg: + - "" + - "╔════════════════════════════════════════════════════════════════════════════════╗" + - "║ PREFLIGHT CHECK FAILED: Missing .cluster_initialized marker ║" + - "╚════════════════════════════════════════════════════════════════════════════════╝" + - "" + - "The following control plane node(s) are missing /etc/kubernetes/.cluster_initialized:" + - " {{ missing_cluster_init_nodes | join(', ') }}" + - "" + - "This indicates that cloud-init provisioning did not complete successfully." + - "" + - "── Troubleshooting Steps ──────────────────────────────────────────────────────" + - "" + - "Check cloud-init logs on the affected node(s):" + - "{% for node in missing_cluster_init_nodes %} ssh {{ node }}{% endfor %}" + - "{% for node in missing_cluster_init_nodes %} cat /var/log/cloud-init-output.log{% endfor %}" + - "" + - "── Action Required ────────────────────────────────────────────────────────────" + - "" + - "Fix the provisioning issues on the affected nodes before retrying the upgrade." + - "" + when: + - missing_cluster_init_nodes is defined + - missing_cluster_init_nodes | length > 0 - The node must be successfully provisioned before upgrade can proceed. - loop: "{{ preflight_cluster_init_check.results }}" - loop_control: - label: "{{ item.item }}" - when: not (item.stat.exists | default(false)) +- name: "Preflight storage — Fail if any control plane is missing .cluster_initialized" + ansible.builtin.fail: + msg: "Control plane nodes missing .cluster_initialized marker: {{ missing_cluster_init_nodes | join(', ') }}" + when: + - missing_cluster_init_nodes is defined + - missing_cluster_init_nodes | length > 0 - name: "Preflight storage — All storage checks passed" ansible.builtin.debug: diff --git a/upgrade/upgrade.yml b/upgrade/upgrade.yml index 65feccc39c..880530a34f 100644 --- a/upgrade/upgrade.yml +++ b/upgrade/upgrade.yml @@ -532,29 +532,36 @@ - not (build_stream_terminal | default(false) | bool) - name: Validate operator confirmation - ansible.builtin.fail: - msg: | - ══════════════════════════════════════════════════════════════ - UPGRADE ABORTED — CONFIRMATION REQUIRED - ══════════════════════════════════════════════════════════════ - - You did not type 'yes' to confirm that all pre-flight checks - have been completed. - - To proceed with the upgrade, you MUST explicitly confirm by - typing 'yes' when prompted. - - Please re-run the upgrade playbook and type 'yes' at the - confirmation prompt: - - ansible-playbook upgrade/upgrade.yml - - ══════════════════════════════════════════════════════════════ when: - not (skip_approval | default(false) | bool) - approval_manifest.approval_status | default('pending') != 'approved' - not (build_stream_terminal | default(false) | bool) - operator_confirmation.user_input | default('') | lower != 'yes' + block: + - name: Display abort message + ansible.builtin.pause: + seconds: 1 + prompt: |2 + ══════════════════════════════════════════════════════════════ + UPGRADE ABORTED — CONFIRMATION REQUIRED + ══════════════════════════════════════════════════════════════ + + You did not type 'yes' to confirm that all pre-flight checks + have been completed. + + To proceed with the upgrade, you MUST explicitly confirm by + typing 'yes' when prompted. + + Please re-run the upgrade playbook and type 'yes' at the + confirmation prompt: + + ansible-playbook upgrade/upgrade.yml + + ══════════════════════════════════════════════════════════════ + + - name: Fail the playbook + ansible.builtin.fail: + msg: "Upgrade aborted: operator did not confirm pre-flight checks" - name: Update approval_status to approved in manifest ansible.builtin.copy: From 89d44907c01520519f3f38e3fca19de0bdb50f8c Mon Sep 17 00:00:00 2001 From: Nagachandan P Date: Wed, 3 Jun 2026 14:16:58 +0530 Subject: [PATCH 4/8] Update slurm_custom.json Signed-off-by: Nagachandan P --- input/config/x86_64/rhel/10.0/slurm_custom.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/input/config/x86_64/rhel/10.0/slurm_custom.json b/input/config/x86_64/rhel/10.0/slurm_custom.json index 15abda0c76..e2f13ecf68 100644 --- a/input/config/x86_64/rhel/10.0/slurm_custom.json +++ b/input/config/x86_64/rhel/10.0/slurm_custom.json @@ -34,12 +34,7 @@ {"package": "slurm-slurmd", "type": "rpm", "repo_name": "slurm_custom"}, {"package": "slurm-pam_slurm", "type": "rpm", "repo_name": "slurm_custom"}, {"package": "kernel-devel", "type": "rpm", "repo_name": "appstream"}, - {"package": "kernel-headers", "type": "rpm", "repo_name": "appstream"}, - { - "package": "nvhpc_2025_2511_Linux_x86_64_cuda_13.0", - "type": "tarball", - "url": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_x86_64_cuda_13.0.tar.gz" - } + {"package": "kernel-headers", "type": "rpm", "repo_name": "appstream"} ] }, "login_node":{ From 62e2eb10aab7fdcc4ba43c74b96869062f6e054e Mon Sep 17 00:00:00 2001 From: Nagachandan P Date: Wed, 3 Jun 2026 14:17:20 +0530 Subject: [PATCH 5/8] Update slurm_custom.json Signed-off-by: Nagachandan P --- input/config/aarch64/rhel/10.0/slurm_custom.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/input/config/aarch64/rhel/10.0/slurm_custom.json b/input/config/aarch64/rhel/10.0/slurm_custom.json index 736c58e690..ade7d526ce 100644 --- a/input/config/aarch64/rhel/10.0/slurm_custom.json +++ b/input/config/aarch64/rhel/10.0/slurm_custom.json @@ -33,12 +33,7 @@ {"package": "slurm-slurmd", "type": "rpm", "repo_name": "slurm_custom"}, {"package": "slurm-pam_slurm", "type": "rpm", "repo_name": "slurm_custom"}, {"package": "kernel-devel", "type": "rpm", "repo_name": "appstream"}, - {"package": "kernel-headers", "type": "rpm", "repo_name": "appstream"}, - { - "package": "nvhpc_2025_2511_Linux_aarch64_cuda_13.0", - "type": "tarball", - "url": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_aarch64_cuda_13.0.tar.gz" - } + {"package": "kernel-headers", "type": "rpm", "repo_name": "appstream"} ] }, From 6cde8788000f37fca6cd85c5b96ff45f9bbc209d Mon Sep 17 00:00:00 2001 From: Rajeshkumar-s2 Date: Wed, 3 Jun 2026 15:53:07 +0530 Subject: [PATCH 6/8] Update cleaned images via OIM cleanup to 'CLEANED' status (#4657) * Upgrade gitlab config and Pipeline as part of BuildStream 2.1 to 2.2 Signed-off-by: Rajeshkumar S * Update the upgrade and upgrade_build_stream playbooks Signed-off-by: Rajeshkumar S * Fixing lint issues and review comments Signed-off-by: Rajeshkumar S * Modularize the gitlab tasks under upgrade_build_stream.yml playbook Signed-off-by: Rajeshkumar S * Move relevant tasks Signed-off-by: Rajeshkumar S * Fix integration issues during upgrade Signed-off-by: Rajeshkumar S * Fix lint issues Signed-off-by: Rajeshkumar S * BuildStream Feature Bug fixes and Upgrade Stabilisation Signed-off-by: Rajeshkumar S * Fix lint issues and review comments Signed-off-by: Rajeshkumar S * Removed unused methods Signed-off-by: Rajeshkumar S * Refactor Gitlab configuration in Upgrade Signed-off-by: Rajeshkumar S * Fix upgrade validation, summary paths, lint issues, and validate stage log_file_path - Fix validation: only abort if enable_build_stream was true in 2.1 backup AND false in current config - Fix summary: resolve backup_dir to actual path using source_version instead of Jinja template - Fix 3 yaml line-length lint failures (gitlab_ci_file.yml, gitlab_example_catalog.yml, gitlab_input_file.yml) - Fix missing log_file_path for validate stage: add NFS log file creation in playbook watcher execute_molecule() to match other stages Signed-off-by: Rajeshkumar S * Remove buildstream directories as part of cleanup Signed-off-by: Rajeshkumar S * Fix review comments Signed-off-by: Rajeshkumar S * Address review comments Signed-off-by: Rajeshkumar S * Fix documentation for discover.yml Signed-off-by: Rajeshkumar S * Fix checkmarx issues Signed-off-by: Rajeshkumar S * Fix checkmarx issues2 Signed-off-by: Rajeshkumar S * Fic checkmarx issues3 Signed-off-by: Rajeshkumar S * Fix the checkmarx issues4 Signed-off-by: Rajeshkumar S * Fix checkmarx issues5 Signed-off-by: Rajeshkumar S * Fix the order of trigger files followed by pipeline to avoid incorrect pipelines execution Signed-off-by: Rajeshkumar S * Add ci skip tags Signed-off-by: Rajeshkumar S * Better logging visibility Signed-off-by: Rajeshkumar S * Update the Image_Groups table Signed-off-by: Rajeshkumar S * Catalog update Signed-off-by: Rajeshkumar S --------- Signed-off-by: Rajeshkumar S --- examples/catalog/catalog_rhel.json | 551 ++++++++---------- .../catalog_rhel_aarch64_with_slurm_only.json | 499 ++++++++-------- .../catalog_rhel_with_nfs_provisioner.json | 535 ++++++++--------- examples/catalog/catalog_rhel_x86_64.json | 20 - .../catalog_rhel_x86_64_with_slurm_only.json | 20 - .../tasks/cleanup_omnia_postgres.yml | 58 ++ .../oim_container_cleanup/vars/main.yml | 10 + 7 files changed, 802 insertions(+), 891 deletions(-) diff --git a/examples/catalog/catalog_rhel.json b/examples/catalog/catalog_rhel.json index 5defce4134..4950344ae2 100644 --- a/examples/catalog/catalog_rhel.json +++ b/examples/catalog/catalog_rhel.json @@ -250,7 +250,6 @@ "lsscsi_na_rpm", "munge_na_rpm", "nvcr-io-nvidia-hpc-benchmarks_25.09_image", - "nvhpc_2025_2511_Linux_aarch64_cuda_13-0_na_tarball", "osu-micro-benchmarks_na_tarball", "papi_na_tarball", "pmix_na_rpm", @@ -424,11 +423,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -550,11 +549,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -574,11 +573,11 @@ "Type": "rpm_repo", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "doca" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "doca" } ] @@ -958,11 +957,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1001,11 +1000,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/geopm/geopm/archive/refs/tags/v3.1.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/geopm/geopm/archive/refs/tags/v3.1.0.tar.gz" } ] @@ -1113,11 +1112,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz" } ] @@ -1137,11 +1136,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1181,11 +1180,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1205,11 +1204,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1299,11 +1298,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/RRZE-HPC/likwid/archive/refs/tags/v5.4.1.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/RRZE-HPC/likwid/archive/refs/tags/v5.4.1.tar.gz" } ] @@ -1323,11 +1322,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1347,11 +1346,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1409,11 +1408,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1453,44 +1452,6 @@ "Tag": "25.09", "Version": "25.09" }, - "nvhpc_2025_2511_Linux_aarch64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_aarch64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "aarch64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "aarch64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_aarch64_cuda_13.0.tar.gz" - } - ] - }, - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_x86_64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "x86_64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "x86_64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_x86_64_cuda_13.0.tar.gz" - } - ] - }, "omsdk_1.2.518_pip_module": { "Name": "omsdk==1.2.518", "SupportedOS": [ @@ -1519,11 +1480,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1543,11 +1504,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.5.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.5.tar.gz" } ] @@ -1567,11 +1528,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "ldms" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "ldms" } ] @@ -1591,11 +1552,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/icl-utk-edu/papi/releases/download/papi-7-2-0-t/papi-7.2.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/icl-utk-edu/papi/releases/download/papi-7-2-0-t/papi-7.2.0.tar.gz" } ] @@ -1615,11 +1576,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1684,11 +1645,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1708,11 +1669,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "codeready-builder" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "codeready-builder" } ] @@ -1732,11 +1693,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1756,11 +1717,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2069,11 +2030,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2093,11 +2054,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.7" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.7" } ] @@ -2117,11 +2078,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2141,11 +2102,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2165,11 +2126,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2189,11 +2150,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2213,11 +2174,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2275,11 +2236,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2301,11 +2262,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2325,11 +2286,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2349,11 +2310,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2373,11 +2334,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2397,11 +2358,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2421,11 +2382,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2445,11 +2406,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2469,11 +2430,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2493,11 +2454,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2517,11 +2478,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2541,11 +2502,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2565,11 +2526,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -2589,11 +2550,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2613,11 +2574,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2637,11 +2598,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2661,11 +2622,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2685,11 +2646,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2709,11 +2670,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2763,11 +2724,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2787,11 +2748,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2811,11 +2772,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2835,11 +2796,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2859,11 +2820,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2883,11 +2844,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2907,11 +2868,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -2931,11 +2892,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2955,11 +2916,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2979,11 +2940,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3003,11 +2964,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3027,11 +2988,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3051,11 +3012,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3075,11 +3036,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -3099,11 +3060,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3123,11 +3084,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3147,11 +3108,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3171,11 +3132,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3195,11 +3156,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3219,11 +3180,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3243,11 +3204,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3267,11 +3228,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3291,11 +3252,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3315,11 +3276,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3339,11 +3300,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3363,11 +3324,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3387,11 +3348,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3411,11 +3372,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3435,11 +3396,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3459,11 +3420,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3483,11 +3444,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3507,11 +3468,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3531,11 +3492,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3555,11 +3516,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3579,11 +3540,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3603,11 +3564,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3627,11 +3588,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3651,11 +3612,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3675,11 +3636,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "codeready-builder" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "codeready-builder" } ] @@ -3699,11 +3660,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3723,11 +3684,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3747,11 +3708,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3771,11 +3732,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -3795,11 +3756,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3819,11 +3780,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3844,11 +3805,11 @@ "Version": "5.0.8", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.8.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.8.tar.gz" } ] @@ -3868,11 +3829,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3892,11 +3853,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3916,11 +3877,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3940,11 +3901,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3964,11 +3925,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3988,11 +3949,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "ldms" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "ldms" } ] @@ -4012,11 +3973,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4036,11 +3997,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4060,11 +4021,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4084,11 +4045,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4108,11 +4069,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4132,11 +4093,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4156,11 +4117,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "codeready-builder" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "codeready-builder" } ] @@ -4180,11 +4141,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4204,11 +4165,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4228,11 +4189,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4252,11 +4213,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4276,11 +4237,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4300,11 +4261,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4324,11 +4285,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4348,11 +4309,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4372,11 +4333,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4396,11 +4357,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4420,11 +4381,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4444,11 +4405,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4468,11 +4429,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4493,11 +4454,11 @@ "Version": "1.19.0", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/openucx/ucx/releases/download/v1.19.0/ucx-1.19.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/openucx/ucx/releases/download/v1.19.0/ucx-1.19.0.tar.gz" } ] @@ -4517,11 +4478,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4541,11 +4502,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4565,11 +4526,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4589,11 +4550,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4613,11 +4574,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4637,11 +4598,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4661,11 +4622,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] diff --git a/examples/catalog/catalog_rhel_aarch64_with_slurm_only.json b/examples/catalog/catalog_rhel_aarch64_with_slurm_only.json index 570caa686d..908f8a7728 100644 --- a/examples/catalog/catalog_rhel_aarch64_with_slurm_only.json +++ b/examples/catalog/catalog_rhel_aarch64_with_slurm_only.json @@ -96,7 +96,6 @@ "lsscsi_na_rpm", "munge_na_rpm", "nvcr-io-nvidia-hpc-benchmarks_25.09_image", - "nvhpc_2025_2511_Linux_aarch64_cuda_13-0_na_tarball", "osu-micro-benchmarks_na_tarball", "papi_na_tarball", "pmix_na_rpm", @@ -227,11 +226,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -251,11 +250,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -275,11 +274,11 @@ "Type": "rpm_repo", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "doca" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "doca" } ] @@ -299,11 +298,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -323,11 +322,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/geopm/geopm/archive/refs/tags/v3.1.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/geopm/geopm/archive/refs/tags/v3.1.0.tar.gz" } ] @@ -347,11 +346,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz" } ] @@ -371,11 +370,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -395,11 +394,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -419,11 +418,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -443,11 +442,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/RRZE-HPC/likwid/archive/refs/tags/v5.4.1.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/RRZE-HPC/likwid/archive/refs/tags/v5.4.1.tar.gz" } ] @@ -467,11 +466,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -491,11 +490,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -534,11 +533,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -559,44 +558,6 @@ "Tag": "25.09", "Version": "25.09" }, - "nvhpc_2025_2511_Linux_aarch64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_aarch64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "aarch64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "aarch64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_aarch64_cuda_13.0.tar.gz" - } - ] - }, - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_x86_64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "x86_64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "x86_64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_x86_64_cuda_13.0.tar.gz" - } - ] - }, "osu-micro-benchmarks_na_tarball": { "Name": "osu-micro-benchmarks", "SupportedOS": [ @@ -612,11 +573,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.5.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.5.tar.gz" } ] @@ -636,11 +597,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/icl-utk-edu/papi/releases/download/papi-7-2-0-t/papi-7.2.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/icl-utk-edu/papi/releases/download/papi-7-2-0-t/papi-7.2.0.tar.gz" } ] @@ -660,11 +621,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -684,11 +645,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -708,11 +669,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -732,11 +693,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -756,11 +717,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.7" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.7" } ] @@ -780,11 +741,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -804,11 +765,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -828,11 +789,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -852,11 +813,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -876,11 +837,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -902,11 +863,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -926,11 +887,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -950,11 +911,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -974,11 +935,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -998,11 +959,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1022,11 +983,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1046,11 +1007,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1070,11 +1031,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1094,11 +1055,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1118,11 +1079,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1142,11 +1103,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1166,11 +1127,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -1190,11 +1151,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1214,11 +1175,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1238,11 +1199,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1262,11 +1223,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1286,11 +1247,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1310,11 +1271,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1364,11 +1325,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1388,11 +1349,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1412,11 +1373,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1436,11 +1397,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1460,11 +1421,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1484,11 +1445,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1508,11 +1469,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -1532,11 +1493,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1556,11 +1517,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1580,11 +1541,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1604,11 +1565,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1628,11 +1589,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1652,11 +1613,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1676,11 +1637,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -1700,11 +1661,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1724,11 +1685,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1748,11 +1709,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1772,11 +1733,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1796,11 +1757,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1820,11 +1781,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1844,11 +1805,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1868,11 +1829,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1892,11 +1853,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1916,11 +1877,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1940,11 +1901,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1964,11 +1925,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1988,11 +1949,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2012,11 +1973,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2036,11 +1997,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2060,11 +2021,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2084,11 +2045,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2108,11 +2069,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2132,11 +2093,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2156,11 +2117,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2180,11 +2141,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2204,11 +2165,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2228,11 +2189,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2252,11 +2213,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2276,11 +2237,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2300,11 +2261,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2324,11 +2285,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2348,11 +2309,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -2372,11 +2333,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2396,11 +2357,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2420,11 +2381,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2444,11 +2405,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2468,11 +2429,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2492,11 +2453,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2516,11 +2477,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2540,11 +2501,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2564,11 +2525,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2588,11 +2549,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2612,11 +2573,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2636,11 +2597,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2660,11 +2621,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2684,11 +2645,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2708,11 +2669,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2732,11 +2693,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2756,11 +2717,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2780,11 +2741,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2804,11 +2765,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2828,11 +2789,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2852,11 +2813,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2876,11 +2837,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2900,11 +2861,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2924,11 +2885,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2948,11 +2909,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2972,11 +2933,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2996,11 +2957,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3020,11 +2981,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3044,11 +3005,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3068,11 +3029,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] diff --git a/examples/catalog/catalog_rhel_with_nfs_provisioner.json b/examples/catalog/catalog_rhel_with_nfs_provisioner.json index 69d40eb4f6..d6c5e467f0 100644 --- a/examples/catalog/catalog_rhel_with_nfs_provisioner.json +++ b/examples/catalog/catalog_rhel_with_nfs_provisioner.json @@ -241,7 +241,6 @@ "lsscsi_na_rpm", "munge_na_rpm", "nvcr-io-nvidia-hpc-benchmarks_25.09_image", - "nvhpc_2025_2511_Linux_aarch64_cuda_13-0_na_tarball", "osu-micro-benchmarks_na_tarball", "papi_na_tarball", "pmix_na_rpm", @@ -393,11 +392,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -519,11 +518,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -543,11 +542,11 @@ "Type": "rpm_repo", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "doca" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "doca" } ] @@ -927,11 +926,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -970,11 +969,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/geopm/geopm/archive/refs/tags/v3.1.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/geopm/geopm/archive/refs/tags/v3.1.0.tar.gz" } ] @@ -1082,11 +1081,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/intel/mpi-benchmarks/archive/refs/tags/IMB-v2021.8.tar.gz" } ] @@ -1106,11 +1105,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1150,11 +1149,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1174,11 +1173,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1268,11 +1267,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/RRZE-HPC/likwid/archive/refs/tags/v5.4.1.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/RRZE-HPC/likwid/archive/refs/tags/v5.4.1.tar.gz" } ] @@ -1292,11 +1291,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1316,11 +1315,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1378,11 +1377,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1422,44 +1421,6 @@ "Tag": "25.09", "Version": "25.09" }, - "nvhpc_2025_2511_Linux_aarch64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_aarch64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "aarch64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "aarch64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_aarch64_cuda_13.0.tar.gz" - } - ] - }, - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_x86_64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "x86_64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "x86_64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_x86_64_cuda_13.0.tar.gz" - } - ] - }, "omsdk_1.2.518_pip_module": { "Name": "omsdk==1.2.518", "SupportedOS": [ @@ -1488,11 +1449,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.5.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-7.5.tar.gz" } ] @@ -1512,11 +1473,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/icl-utk-edu/papi/releases/download/papi-7-2-0-t/papi-7.2.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/icl-utk-edu/papi/releases/download/papi-7-2-0-t/papi-7.2.0.tar.gz" } ] @@ -1536,11 +1497,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1605,11 +1566,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -1629,11 +1590,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1942,11 +1903,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -1966,11 +1927,11 @@ "Type": "tarball", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.7" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.7" } ] @@ -1990,11 +1951,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2014,11 +1975,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2038,11 +1999,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2062,11 +2023,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2086,11 +2047,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "slurm_custom" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "slurm_custom" } ] @@ -2148,11 +2109,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2174,11 +2135,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2198,11 +2159,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2222,11 +2183,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2246,11 +2207,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2270,11 +2231,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2294,11 +2255,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2318,11 +2279,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2342,11 +2303,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2366,11 +2327,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2390,11 +2351,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2414,11 +2375,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2438,11 +2399,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -2462,11 +2423,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2486,11 +2447,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2510,11 +2471,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2534,11 +2495,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2558,11 +2519,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2582,11 +2543,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2636,11 +2597,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2660,11 +2621,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2684,11 +2645,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2708,11 +2669,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2732,11 +2693,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2756,11 +2717,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2780,11 +2741,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -2804,11 +2765,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2828,11 +2789,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2852,11 +2813,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2876,11 +2837,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2900,11 +2861,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2924,11 +2885,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -2948,11 +2909,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -2972,11 +2933,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -2996,11 +2957,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3020,11 +2981,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3044,11 +3005,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3068,11 +3029,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3092,11 +3053,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3116,11 +3077,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3140,11 +3101,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3164,11 +3125,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3188,11 +3149,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3212,11 +3173,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3236,11 +3197,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3260,11 +3221,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3284,11 +3245,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3308,11 +3269,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3332,11 +3293,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3356,11 +3317,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3380,11 +3341,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3404,11 +3365,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3428,11 +3389,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3452,11 +3413,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3476,11 +3437,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3500,11 +3461,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3524,11 +3485,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3548,11 +3509,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "codeready-builder" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "codeready-builder" } ] @@ -3572,11 +3533,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3596,11 +3557,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3620,11 +3581,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3644,11 +3605,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "epel" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "epel" } ] @@ -3668,11 +3629,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3692,11 +3653,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3717,11 +3678,11 @@ "Version": "5.0.8", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.8.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.8.tar.gz" } ] @@ -3741,11 +3702,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3765,11 +3726,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3789,11 +3750,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3813,11 +3774,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3837,11 +3798,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3861,11 +3822,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "ldms" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "ldms" } ] @@ -3885,11 +3846,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3909,11 +3870,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3933,11 +3894,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -3957,11 +3918,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -3981,11 +3942,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4005,11 +3966,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4029,11 +3990,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "codeready-builder" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "codeready-builder" } ] @@ -4053,11 +4014,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4077,11 +4038,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4101,11 +4062,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4125,11 +4086,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4149,11 +4110,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4173,11 +4134,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4197,11 +4158,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4221,11 +4182,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4245,11 +4206,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4269,11 +4230,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4293,11 +4254,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4317,11 +4278,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4341,11 +4302,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4366,11 +4327,11 @@ "Version": "1.19.0", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "Uri": "https://github.com/openucx/ucx/releases/download/v1.19.0/ucx-1.19.0.tar.gz" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "Uri": "https://github.com/openucx/ucx/releases/download/v1.19.0/ucx-1.19.0.tar.gz" } ] @@ -4390,11 +4351,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4414,11 +4375,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4438,11 +4399,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4462,11 +4423,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4486,11 +4447,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "appstream" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "appstream" } ] @@ -4510,11 +4471,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] @@ -4534,11 +4495,11 @@ "Type": "rpm", "Sources": [ { - "Architecture": "x86_64", + "Architecture": "aarch64", "RepoName": "baseos" }, { - "Architecture": "aarch64", + "Architecture": "x86_64", "RepoName": "baseos" } ] diff --git a/examples/catalog/catalog_rhel_x86_64.json b/examples/catalog/catalog_rhel_x86_64.json index e14c517ba7..d984115f65 100644 --- a/examples/catalog/catalog_rhel_x86_64.json +++ b/examples/catalog/catalog_rhel_x86_64.json @@ -252,7 +252,6 @@ "msr-safe_na_tarball", "munge_na_rpm", "nvcr-io-nvidia-hpc-benchmarks_25.09_image", - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball", "osu-micro-benchmarks_na_tarball", "papi_na_tarball", "pmix_na_rpm", @@ -1388,25 +1387,6 @@ "Tag": "25.09", "Version": "25.09" }, - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_x86_64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "x86_64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "x86_64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_x86_64_cuda_13.0.tar.gz" - } - ] - }, "omsdk_1.2.518_pip_module": { "Name": "omsdk==1.2.518", "SupportedOS": [ diff --git a/examples/catalog/catalog_rhel_x86_64_with_slurm_only.json b/examples/catalog/catalog_rhel_x86_64_with_slurm_only.json index 1a799a3b19..69f73baa15 100644 --- a/examples/catalog/catalog_rhel_x86_64_with_slurm_only.json +++ b/examples/catalog/catalog_rhel_x86_64_with_slurm_only.json @@ -98,7 +98,6 @@ "msr-safe_na_tarball", "munge_na_rpm", "nvcr-io-nvidia-hpc-benchmarks_25.09_image", - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball", "osu-micro-benchmarks_na_tarball", "papi_na_tarball", "pmix_na_rpm", @@ -494,25 +493,6 @@ "Tag": "25.09", "Version": "25.09" }, - "nvhpc_2025_2511_Linux_x86_64_cuda_13-0_na_tarball": { - "Name": "nvhpc_2025_2511_Linux_x86_64_cuda_13.0", - "SupportedOS": [ - { - "Name": "RHEL", - "Version": "10.0" - } - ], - "Architecture": [ - "x86_64" - ], - "Type": "tarball", - "Sources": [ - { - "Architecture": "x86_64", - "Uri": "https://developer.download.nvidia.com/hpc-sdk/25.11/nvhpc_2025_2511_Linux_x86_64_cuda_13.0.tar.gz" - } - ] - }, "osu-micro-benchmarks_na_tarball": { "Name": "osu-micro-benchmarks", "SupportedOS": [ diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_omnia_postgres.yml b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_omnia_postgres.yml index 8faaf7dd37..84e349cd48 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_omnia_postgres.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/tasks/cleanup_omnia_postgres.yml @@ -20,6 +20,64 @@ ansible.builtin.debug: msg: "{{ postgres_cleanup_mode_msg }}" +- name: Mark all image_groups as CLEANED before stopping Postgres + block: + - name: Check if omnia_postgres container is running + containers.podman.podman_container_info: + name: "{{ postgres_container_name }}" + register: pg_pre_check + failed_when: false + + - name: Check if image_groups table exists in build_stream_db + ansible.builtin.command: + cmd: >- + podman exec {{ postgres_container_name }} + psql -U admin -d build_stream_db -tAc + "SELECT EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'image_groups');" + register: image_groups_table_check + changed_when: false + failed_when: false + when: + - pg_pre_check.containers | default([]) | length > 0 + - pg_pre_check.containers[0].State.Running | default(false) + + - name: Count non-CLEANED image_groups records + ansible.builtin.command: + cmd: >- + podman exec {{ postgres_container_name }} + psql -U admin -d build_stream_db -tAc + "SELECT COUNT(*) FROM image_groups WHERE status != 'CLEANED';" + register: non_cleaned_count + changed_when: false + failed_when: false + when: + - image_groups_table_check is not skipped + - image_groups_table_check.stdout | default('') | trim == 't' + + - name: Update all non-CLEANED image_groups to CLEANED + ansible.builtin.command: + cmd: >- + podman exec {{ postgres_container_name }} + psql -U admin -d build_stream_db -c + "UPDATE image_groups SET status = 'CLEANED', updated_at = NOW() + WHERE status != 'CLEANED';" + register: image_groups_update + changed_when: image_groups_update.rc == 0 + when: + - non_cleaned_count is not skipped + - (non_cleaned_count.stdout | default('0') | trim | int) > 0 + + - name: Display image_groups cleanup result + ansible.builtin.debug: + msg: "{{ image_groups_cleaned_msg }}" + when: + - image_groups_update is not skipped + - image_groups_update.rc | default(1) == 0 + rescue: + - name: Log image_groups cleanup failure + ansible.builtin.debug: + msg: "{{ image_groups_cleanup_failure_msg }}" + - name: Reload systemd daemon ansible.builtin.systemd: daemon_reload: true diff --git a/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml b/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml index ba9143a6f3..28dd327351 100644 --- a/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml +++ b/utils/roles/oim_cleanup/oim_container_cleanup/vars/main.yml @@ -182,6 +182,16 @@ postgres_cleanup_directory: - "{{ omnia_nfs_share }}/postgres" postgres_container_name: omnia_postgres + +# Usage: cleanup_omnia_postgres.yml (image_groups DB update) +image_groups_cleaned_msg: >- + BuildStream image_groups: All records updated to CLEANED status. + S3 images were already removed during OpenCHAMI cleanup. + Database is now consistent for backup. +image_groups_cleanup_failure_msg: >- + WARNING: Failed to update image_groups status to CLEANED in build_stream_db. + If postgres_backup is enabled, the backed-up database may contain stale image_groups records. + This does not affect the cleanup process. Proceeding with Postgres container removal. postgres_cleanup_mode_msg: "Postgres cleanup mode: {{ 'PRESERVE data (postgres_backup=true)' if postgres_backup | bool else 'DELETE data (postgres_backup=false)' }}" postgres_preserved_msg: "PRESERVED: Postgres data directories retained (postgres_backup=true): {{ postgres_cleanup_directory }}" From 50e45c61e669ab113571163c41a0bbf63199a795 Mon Sep 17 00:00:00 2001 From: Mithilesh Reddy Date: Wed, 3 Jun 2026 18:20:05 +0530 Subject: [PATCH 7/8] Upgrade and rollback defect fixes (#4661) Signed-off-by: mithileshreddy04 --- omnia.sh | 31 ++++-- .../tasks/start_v21_containers.yml | 98 ------------------- rollback/rollback.yml | 32 +++--- .../tasks/backup_openchami.yml | 21 +--- .../tasks/upgrade_openchami_containers.yml | 87 ---------------- upgrade/roles/upgrade_openchami/vars/main.yml | 2 - 6 files changed, 47 insertions(+), 224 deletions(-) diff --git a/omnia.sh b/omnia.sh index 21e6f7ce0b..9bc5856605 100755 --- a/omnia.sh +++ b/omnia.sh @@ -30,6 +30,7 @@ GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' # No Color YELLOW='\033[0;33m' +WHITE='\033[0;37m' # Function to get version from git tag get_version_from_git_tag() { @@ -1785,14 +1786,11 @@ backup_openchami_data() { return 0 fi - # Create openchami backup directory structure with secure permissions + # Create openchami backup directory structure if ! podman exec -u root omnia_core bash -c " set -e mkdir -p '${backup_base%/}/openchami/openchami_data' - chmod 0700 '${backup_base%/}/openchami' cp -a /opt/omnia/openchami/. '${backup_base%/}/openchami/openchami_data/' 2>&1 - chmod -R 0600 '${backup_base%/}/openchami/openchami_data'/* - find '${backup_base%/}/openchami/openchami_data' -type d -exec chmod 0700 {} \; "; then echo "[WARN] [ORCHESTRATOR] Failed to backup OpenCHAMI data — upgrade will continue" return 0 @@ -1809,17 +1807,15 @@ backup_openchami_data() { if [ -f "/etc/systemd/system/openchami.target" ]; then podman cp "/etc/systemd/system/openchami.target" \ "omnia_core:${backup_base%/}/openchami/openchami.target" >/dev/null 2>&1 || true - podman exec -u root omnia_core chmod 0600 "${backup_base%/}/openchami/openchami.target" 2>/dev/null || true echo "[INFO] [ORCHESTRATOR] openchami.target backed up" fi # Backup quadlet .container files from host (if they exist) if ls /etc/containers/systemd/*.container >/dev/null 2>&1; then - podman exec -u root omnia_core bash -c "mkdir -p '${backup_base%/}/openchami/quadlets' && chmod 0700 '${backup_base%/}/openchami/quadlets'" 2>/dev/null || true + podman exec -u root omnia_core mkdir -p "${backup_base%/}/openchami/quadlets" 2>/dev/null || true for qfile in /etc/containers/systemd/*.container; do podman cp "$qfile" \ "omnia_core:${backup_base%/}/openchami/quadlets/$(basename "$qfile")" >/dev/null 2>&1 || true - podman exec -u root omnia_core chmod 0600 "${backup_base%/}/openchami/quadlets/$(basename "$qfile")" 2>/dev/null || true done echo "[INFO] [ORCHESTRATOR] Quadlet .container files backed up" fi @@ -1827,11 +1823,10 @@ backup_openchami_data() { # Backup quadlet .network files from host (if they exist) # These define Podman networks that enable DNS resolution between containers if ls /etc/containers/systemd/*.network >/dev/null 2>&1; then - podman exec -u root omnia_core bash -c "mkdir -p '${backup_base%/}/openchami/quadlets' && chmod 0700 '${backup_base%/}/openchami/quadlets'" 2>/dev/null || true + podman exec -u root omnia_core mkdir -p "${backup_base%/}/openchami/quadlets" 2>/dev/null || true for nfile in /etc/containers/systemd/*.network; do podman cp "$nfile" \ "omnia_core:${backup_base%/}/openchami/quadlets/$(basename "$nfile")" >/dev/null 2>&1 || true - podman exec -u root omnia_core chmod 0600 "${backup_base%/}/openchami/quadlets/$(basename "$nfile")" 2>/dev/null || true done echo "[INFO] [ORCHESTRATOR] Quadlet .network files backed up" fi @@ -2533,7 +2528,7 @@ rollback_omnia_core() { echo "[INFO] [ROLLBACK] No components upgraded yet. Core container rollback is safe to proceed." fi else - echo "[INFO] [ROLLBACK] No upgrade manifest found. Core container rollback is safe to proceed." + echo -e "${WHITE}[INFO] [ROLLBACK] No upgrade manifest found. Core container rollback is safe to proceed.${NC}" fi # ═══════════════════════════════════════════════════════════════════════════ @@ -2642,6 +2637,14 @@ rollback_omnia_core() { rm -f "$upgrade_guard_lock_path" >/dev/null 2>&1 || true echo "[INFO] [ROLLBACK] Cleared upgrade guard lock: $upgrade_guard_lock_path" + # Remove upgrade_backup_dir and previous_omnia_version from metadata + # These are upgrade-only fields that should not persist after rollback + podman exec -u root omnia_core bash -c " + sed -i '/^upgrade_backup_dir:/d' '$CONTAINER_METADATA_FILE' 2>/dev/null || true + sed -i '/^previous_omnia_version:/d' '$CONTAINER_METADATA_FILE' 2>/dev/null || true + " 2>/dev/null || true + echo "[INFO] [ROLLBACK] Cleaned upgrade_backup_dir and previous_omnia_version from metadata" + # Fetch config from restored metadata (populates omnia_path, domain_name, etc.) fetch_config @@ -2779,6 +2782,14 @@ rollback_omnia_core() { rm -f "$upgrade_guard_lock_path" >/dev/null 2>&1 || true echo "[INFO] [ROLLBACK] Cleared upgrade guard lock: $upgrade_guard_lock_path" + # Remove upgrade_backup_dir and previous_omnia_version from metadata + # These are upgrade-only fields that should not persist after rollback + podman exec -u root omnia_core bash -c " + sed -i '/^upgrade_backup_dir:/d' '$CONTAINER_METADATA_FILE' 2>/dev/null || true + sed -i '/^previous_omnia_version:/d' '$CONTAINER_METADATA_FILE' 2>/dev/null || true + " 2>/dev/null || true + echo "[INFO] [ROLLBACK] Cleaned upgrade_backup_dir and previous_omnia_version from metadata" + # Fetch config from restored metadata (populates omnia_path, domain_name, etc.) fetch_config diff --git a/rollback/roles/rollback_openchami/tasks/start_v21_containers.yml b/rollback/roles/rollback_openchami/tasks/start_v21_containers.yml index 250208cb3a..61e8505fcb 100644 --- a/rollback/roles/rollback_openchami/tasks/start_v21_containers.yml +++ b/rollback/roles/rollback_openchami/tasks/start_v21_containers.yml @@ -30,104 +30,6 @@ - name: Start v2.1 containers block: - # ── Create Podman networks if they don't exist ────────────────────── - # These networks enable DNS resolution between containers. - # Without these networks, containers fail with "Could not resolve host" errors. - # We create them directly with podman as a fallback if network quadlet - # files weren't in the backup or the network services don't exist. - - name: Ensure ochami-internal Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-internal - register: create_internal_net - changed_when: "'ochami-internal' in create_internal_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Ensure ochami-jwt-internal Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-jwt-internal - register: create_jwt_net - changed_when: "'ochami-jwt-internal' in create_jwt_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Ensure ochami-cert-internal Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-cert-internal - register: create_cert_net - changed_when: "'ochami-cert-internal' in create_cert_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Ensure ochami-external Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-external - register: create_ext_net - changed_when: "'ochami-external' in create_ext_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Display network creation status - ansible.builtin.debug: - verbosity: 1 - msg: >- - Podman networks ensured: ochami-internal, ochami-jwt-internal, - ochami-cert-internal, ochami-external - - # ── Start Podman network services if they exist ───────────────────── - # These systemd services may exist from the openchami RPM installation - - name: Start OpenCHAMI internal network service - ansible.builtin.systemd: - name: openchami-internal-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Start OpenCHAMI external network service - ansible.builtin.systemd: - name: openchami-external-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Start OpenCHAMI cert internal network service - ansible.builtin.systemd: - name: openchami-cert-internal-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Start OpenCHAMI JWT internal network service - ansible.builtin.systemd: - name: openchami-jwt-internal-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Wait for network services to initialize - ansible.builtin.pause: - seconds: 5 - # ── Start all OpenCHAMI services ──────────────────────────────────── - name: Start openchami.target with v2.1 containers ansible.builtin.systemd: diff --git a/rollback/rollback.yml b/rollback/rollback.yml index e0bde802a3..335bf76eeb 100644 --- a/rollback/rollback.yml +++ b/rollback/rollback.yml @@ -333,24 +333,34 @@ ansible.builtin.set_fact: rollback_manifest: "{{ raw_rollback_manifest.content | b64decode | from_yaml }}" - # Build cleaned component_status: preserve 'skipped' for BuildStream-gated - # components; mark everything else as 'completed'. - - name: Build cleaned component_status (preserve failed; mark pending as completed) + # ── Identify tags skipped by BuildStream terminal gate ── + - name: Identify BuildStream-skipped components (rollback) + ansible.builtin.set_fact: + bs_skipped_tags: "{{ bs_rollback_skipped | default([]) }}" + + - name: Resolve requested tags for finalize + ansible.builtin.set_fact: + finalize_requested_tags: >- + {{ all_rollback_components + if (ansible_run_tags is not defined or 'all' in ansible_run_tags) + else ansible_run_tags | intersect(all_rollback_components) }} + + # Build cleaned component_status: only update components that were + # actually requested via --tags; leave unrequested components as-is. + - name: Build cleaned component_status (only update requested tags) ansible.builtin.set_fact: cleaned_component_status: >- {%- set result = {} -%} {%- for key, val in rollback_manifest.component_status.items() -%} - {%- if val in ['completed', 'skipped', 'failed'] -%} - {%- set _ = result.update({key: val}) -%} + {%- if key in bs_skipped_tags and val == 'pending' -%} + {%- set _ = result.update({key: 'skipped'}) -%} + {%- elif key in finalize_requested_tags -%} + {%- set _ = result.update({key: val if val in ['completed', 'skipped'] else 'completed'}) -%} {%- else -%} - {%- set _ = result.update({key: 'completed'}) -%} + {%- set _ = result.update({key: val}) -%} {%- endif -%} {%- endfor -%} - {{ result | to_json }} - - - name: Coerce cleaned_component_status to a real dict - ansible.builtin.set_fact: - cleaned_component_status: "{{ cleaned_component_status | from_json }}" + {{ result }} - name: Determine rollback_status (failed if any failed, partial if pending, else completed) ansible.builtin.set_fact: diff --git a/upgrade/roles/upgrade_openchami/tasks/backup_openchami.yml b/upgrade/roles/upgrade_openchami/tasks/backup_openchami.yml index 2e0889e048..e646f78066 100644 --- a/upgrade/roles/upgrade_openchami/tasks/backup_openchami.yml +++ b/upgrade/roles/upgrade_openchami/tasks/backup_openchami.yml @@ -92,13 +92,13 @@ ansible.builtin.file: path: "{{ openchami_backup_dir }}/openchami/postgresql_backup" state: directory - mode: "{{ dir_permissions_700 }}" + mode: "{{ dir_permissions_755 }}" - name: Create PostgreSQL backup directory (OIM host — shared path) ansible.builtin.file: path: "{{ oim_host_backup_dir }}/openchami/postgresql_backup" state: directory - mode: "{{ dir_permissions_700 }}" + mode: "{{ dir_permissions_755 }}" delegate_to: oim delegate_facts: true connection: ssh @@ -181,15 +181,6 @@ delegate_facts: true connection: ssh - - name: Set PostgreSQL backup file permissions to 0600 - ansible.builtin.file: - path: "{{ oim_host_backup_dir }}/openchami/postgresql_backup/openchami.sql" - mode: "0600" - when: pgdump_result.rc == 0 - delegate_to: oim - delegate_facts: true - connection: ssh - - name: Create empty backup marker if pg_dump failed ansible.builtin.copy: content: | @@ -197,7 +188,7 @@ -- Database may be empty (prepare_oim-only scenario) -- stderr: {{ pgdump_result.stderr | default('') | trim }} dest: "{{ openchami_backup_dir }}/openchami/postgresql_backup/openchami.sql" - mode: "{{ file_permissions_600 }}" + mode: "{{ file_permissions_644 }}" when: pgdump_result.rc | default(1) != 0 - name: Display pg_dump warning if it failed @@ -241,7 +232,7 @@ ansible.builtin.file: path: "{{ oim_host_backup_dir }}/{{ backup_etc_openchami_subpath }}" state: directory - mode: "{{ dir_permissions_700 }}" + mode: "{{ dir_permissions_755 }}" delegate_to: oim delegate_facts: true connection: ssh @@ -258,8 +249,6 @@ ansible.builtin.shell: | set -o pipefail cp -a {{ openchami_etc_dir }}/. {{ oim_host_backup_dir }}/{{ backup_etc_openchami_subpath }}/ - chmod -R 0600 {{ oim_host_backup_dir }}/{{ backup_etc_openchami_subpath }}/* - find {{ oim_host_backup_dir }}/{{ backup_etc_openchami_subpath }} -type d -exec chmod 0700 {} \; register: etc_openchami_backup_result changed_when: etc_openchami_backup_result.rc == 0 when: etc_openchami_stat.stat.exists | default(false) @@ -329,7 +318,7 @@ path: "{{ backup_etc_openchami_subpath }}" present: {{ etc_openchami_backup_stat.stat.exists | default(false) }} dest: "{{ openchami_backup_dir }}/openchami_backup_manifest.yml" - mode: "{{ file_permissions_600 }}" + mode: "{{ file_permissions_644 }}" - name: Display backup completion summary ansible.builtin.debug: diff --git a/upgrade/roles/upgrade_openchami/tasks/upgrade_openchami_containers.yml b/upgrade/roles/upgrade_openchami/tasks/upgrade_openchami_containers.yml index 9430b711ac..e2ff8bd7fa 100644 --- a/upgrade/roles/upgrade_openchami/tasks/upgrade_openchami_containers.yml +++ b/upgrade/roles/upgrade_openchami/tasks/upgrade_openchami_containers.yml @@ -525,93 +525,6 @@ connection: ssh # --- 9. Start services and recover any failed services --- - # Create Podman networks if they don't exist - these enable DNS resolution - # between containers (e.g., hydra, postgres hostname resolution) - - name: Ensure ochami-internal Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-internal - register: create_internal_net - changed_when: "'ochami-internal' in create_internal_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Ensure ochami-jwt-internal Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-jwt-internal - register: create_jwt_net - changed_when: "'ochami-jwt-internal' in create_jwt_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Ensure ochami-cert-internal Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-cert-internal - register: create_cert_net - changed_when: "'ochami-cert-internal' in create_cert_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - - name: Ensure ochami-external Podman network exists - ansible.builtin.command: > - podman network create --ignore ochami-external - register: create_ext_net - changed_when: "'ochami-external' in create_ext_net.stdout" - failed_when: false - delegate_to: oim - delegate_facts: true - connection: ssh - - # Start Podman network services if they exist (from openchami RPM) - - name: Start OpenCHAMI internal network service - ansible.builtin.systemd: - name: openchami-internal-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Start OpenCHAMI external network service - ansible.builtin.systemd: - name: openchami-external-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Start OpenCHAMI cert internal network service - ansible.builtin.systemd: - name: openchami-cert-internal-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Start OpenCHAMI JWT internal network service - ansible.builtin.systemd: - name: openchami-jwt-internal-network.service - state: started - enabled: true - delegate_to: oim - delegate_facts: true - connection: ssh - failed_when: false - - - name: Wait for network services to initialize - ansible.builtin.pause: - seconds: 5 - - name: Start OpenCHAMI services with new images ansible.builtin.systemd: name: openchami.target diff --git a/upgrade/roles/upgrade_openchami/vars/main.yml b/upgrade/roles/upgrade_openchami/vars/main.yml index b122cae2de..5f0b9bca95 100644 --- a/upgrade/roles/upgrade_openchami/vars/main.yml +++ b/upgrade/roles/upgrade_openchami/vars/main.yml @@ -14,9 +14,7 @@ --- # File permissions -dir_permissions_700: "0700" dir_permissions_755: "0755" -file_permissions_600: "0600" file_permissions_644: "0644" # Manifest path for upgrade state tracking From d3a7f8526c2b646aeefa0a4cca4a4b42e8b1ac3b Mon Sep 17 00:00:00 2001 From: Jagadeesh N V <39791839+jagadeeshnv@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:22:10 +0530 Subject: [PATCH 8/8] Slurm backup during upgrade_provision rather than upgrade_slurm & omnia_config comments (#4660) * Upgrade backup moved from upgrade to provision also updated doc in input/omnia_config.yml Signed-off-by: Jagadeesh N V * slurm duplicate dir fix Signed-off-by: Jagadeesh N V --- input/omnia_config.yml | 130 ++++++++---------- provision/roles/slurm_config/tasks/main.yml | 6 + .../tasks/upgrade_conf_db_backup.yml | 78 +++++++++++ rollback/playbooks/rollback_slurm.yml | 63 +++++---- upgrade/playbooks/upgrade_slurm.yml | 60 ++++---- .../upgrade_slurm/tasks/slurm_backup.yml | 28 ---- 6 files changed, 204 insertions(+), 161 deletions(-) create mode 100644 provision/roles/slurm_config/tasks/upgrade_conf_db_backup.yml diff --git a/input/omnia_config.yml b/input/omnia_config.yml index 19fcc4c38a..de54fddfd2 100644 --- a/input/omnia_config.yml +++ b/input/omnia_config.yml @@ -31,35 +31,42 @@ # Storage name corresponding to the VAST storage to be used by slurm cluster # This should match with exactly with a entry in storage_config.yml # The following directories will be mounted on the VAST storage: -# - /scratch -# - /tmp -# - /home -# - /apps -# - /projects +# - /scratch +# - /tmp +# - /home +# - /apps +# - /projects +# +# -> Centralized repository for HPC tools (UCX, OpenMPI, CUDA, benchmarks) that are +# bind-mounted to /hpc_tools on compute and login nodes. This storage must be +# accessible from OIM during provisioning to copy hpc_tools content to the cluster. +# -> Must match the 'name' field of the VAST storage entry(mounts) in storage_config.yml +# -> The VAST server must be reachable from OIM to enable hpc_tools population during +# cluster provisioning. Ensure network connectivity and mount permissions are configured. # skip_merge -# Variable indicates whether a specific configuration file path -# under config_sources should be used as-is without merging -# If skip_merge is set to true for a configuration source path, -# that configuration file will be applied directly -# without merging with defaults or existing configurations -# It accepts true and false values -# Default value is false +# Variable indicates whether a specific configuration file path +# under config_sources should be used as-is without merging +# If skip_merge is set to true for a configuration source path, +# that configuration file will be applied directly +# without merging with defaults or existing configurations +# It accepts true and false values +# Default value is false # node_discovery_mode -# Controls how hardware specifications are discovered for Slurm compute nodes -# Options: "heterogeneous" or "homogeneous" -# - heterogeneous: Discovers each node individually via iDRAC (1 call per node) -# Best for: Mixed hardware environments with different node configurations -# - homogeneous: Groups nodes by hardware type for optimized discovery -# Best for: Standardized hardware groups (grp0-grp100 in pxe_mapping_file.csv) +# Controls how hardware specifications are discovered for Slurm compute nodes +# Options: "heterogeneous" or "homogeneous" +# - heterogeneous: Discovers each node individually via iDRAC (1 call per node) +# Best for: Mixed hardware environments with different node configurations +# - homogeneous: Groups nodes by hardware type for optimized discovery +# Best for: Standardized hardware groups (grp0-grp100 in pxe_mapping_file.csv) # Performance: 0 iDRAC calls (with specs) or 1 call per group (without specs) -# Default value is heterogeneous +# Default value is heterogeneous # node_hardware_defaults -# Optional: Pre-define hardware specifications for homogeneous node groups -# Only used when node_discovery_mode is set to "homogeneous" -# Key: GROUP_NAME from pxe_mapping_file.csv (e.g., grp0, grp1, grp2, etc.) +# Optional: Pre-define hardware specifications for homogeneous node groups +# Only used when node_discovery_mode is set to "homogeneous" +# Key: GROUP_NAME from pxe_mapping_file.csv (e.g., grp0, grp1, grp2, etc.) # Value: Hardware specifications for all nodes in that group # - sockets: Number of CPU sockets per node (integer, minimum 1) # - cores_per_socket: Number of CPU cores per socket (integer, minimum 1) @@ -103,64 +110,37 @@ # oci # topology # burst_buffer -# Thes files will be written into the slurm_config directory with .conf suffix +# +# These files will be written into the slurm_config directory with .conf suffix +# config_sources: +# slurm: +# SlurmctldTimeout: 60 +# SlurmdTimeout: 150 +# NodeName: +# - NodeName: newnode1 +# CPUs: 16 +# RealMemory: 64000 +# - NodeName: newnode2 +# CPUs: 16 +# RealMemory: 64000 +# cgroup: +# CgroupPlugin: autodetect +# ConstrainCores: True +# ConstrainDevices: True +# ConstrainRAMSpace: True +# ConstrainSwapSpace: True +# +# OR +# +# config_sources: +# slurm: /opt/omnia/input/project_default/slurm.conf +# cgroup: /opt/omnia/input/project_default/cgroup.conf +# slurmdbd: /opt/omnia/input/project_default/slurmdbd.conf slurm_cluster: - cluster_name: slurm_cluster - # nfs_storage_name: References the NFS storage defined in storage_config.yml for Slurm controller data nfs_storage_name: nfs_slurm - - # vast_storage_name: References the VAST high-performance NFS storage defined in storage_config.yml - # Purpose: Centralized repository for HPC tools (UCX, OpenMPI, CUDA, benchmarks) that are - # bind-mounted to /hpc_tools on compute and login nodes. This storage must be - # accessible from OIM during provisioning to copy hpc_tools content to the cluster. - # Configuration: Must match the 'name' field of the VAST storage entry in storage_config.yml - # Note: The VAST server must be reachable from OIM to enable hpc_tools population during - # cluster provisioning. Ensure network connectivity and mount permissions are configured. vast_storage_name: vast_storage - # skip_merge: true - - # Uncomment to enable homogeneous discovery mode - # node_discovery_mode: "homogeneous" - - # Uncomment to provide hardware specs for homogeneous groups - # node_hardware_defaults: - # grp1: - # sockets: 2 - # cores_per_socket: 64 - # threads_per_core: 2 - # real_memory: 512000 - # gres: "gpu:4" - # grp2: - # sockets: 2 - # cores_per_socket: 32 - # threads_per_core: 2 - # real_memory: 256000 - - # config_sources: - # slurm: - # SlurmctldTimeout: 60 - # SlurmdTimeout: 150 - # NodeName: - # - NodeName: newnode1 - # CPUs: 16 - # RealMemory: 64000 - # - NodeName: newnode2 - # CPUs: 16 - # RealMemory: 64000 - # cgroup: - # CgroupPlugin: autodetect - # ConstrainCores: True - # ConstrainDevices: True - # ConstrainRAMSpace: True - # ConstrainSwapSpace: True - - # OR - - # config_sources: - # slurm: /opt/omnia/input/project_default/slurm.conf - # cgroup: /opt/omnia/input/project_default/cgroup.conf - # slurmdbd: /opt/omnia/input/project_default/slurmdbd.conf # ----------------------------SERVICE K8S------------------------------------------------------ # For service k8s cluster below parameters are required,(List) diff --git a/provision/roles/slurm_config/tasks/main.yml b/provision/roles/slurm_config/tasks/main.yml index f300c5da5d..757d87bb32 100644 --- a/provision/roles/slurm_config/tasks/main.yml +++ b/provision/roles/slurm_config/tasks/main.yml @@ -32,6 +32,12 @@ ansible.builtin.include_tasks: read_slurm_hostnames.yml when: slurm_support +- name: Backup slurm conf if upgrade + ansible.builtin.include_tasks: upgrade_conf_db_backup.yml + when: + - slurm_support + - (hostvars['localhost']['upgrade_mode'] | default(false) | bool) + # This does not consider hierarchy of slurm nodes - name: Entering the slurm configuration only if slurm in nodes.yaml ansible.builtin.include_tasks: create_slurm_dir.yml diff --git a/provision/roles/slurm_config/tasks/upgrade_conf_db_backup.yml b/provision/roles/slurm_config/tasks/upgrade_conf_db_backup.yml new file mode 100644 index 0000000000..be9de46bac --- /dev/null +++ b/provision/roles/slurm_config/tasks/upgrade_conf_db_backup.yml @@ -0,0 +1,78 @@ +# Copyright 2026 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +- name: Read upgrade_manifest + ansible.builtin.include_vars: + file: "/opt/omnia/.data/upgrade_manifest.yml" + name: upgrade_manifest + register: upgrade_manifest_result + ignore_errors: true + +- name: Fail if upgrade_manifest is not found + ansible.builtin.fail: + msg: "Slurm backup: Reading of upgrade_manifest.yml failed: {{ upgrade_manifest_result.msg }}" + when: upgrade_manifest_result is not defined or upgrade_manifest_result is failed + +- name: Include variable file omnia_config.yml + ansible.builtin.include_vars: + file: "{{ input_project_dir }}/omnia_config.yml" + name: upgrade_omnia_config + +- name: Include storage vars + ansible.builtin.include_vars: + file: "{{ input_project_dir }}/storage_config.yml" + name: upgrade_storage_config + +- name: Set nfs storage name + ansible.builtin.set_fact: + up_nfs_storage_name: "{{ upgrade_omnia_config.slurm_cluster[0].nfs_storage_name }}" + +- name: Read the slurm mount point + ansible.builtin.set_fact: + up_slurm_nfs_mounted_path: "{{ (upgrade_storage_config.mounts | selectattr('name', 'equalto', up_nfs_storage_name) | first).mount_point }}" + +- name: Set path for slurm backup + ansible.builtin.set_fact: + up_slurm_backup_path: "{{ up_slurm_nfs_mounted_path }}/slurm_backups/preupgrade_{{ upgrade_manifest.source_version }}_backup" + +- name: Create backup directory structure + ansible.builtin.file: + path: "{{ up_slurm_backup_path }}/{{ item }}" + state: directory + owner: root + group: root + mode: '0755' + loop: + - "etc/slurm" + - "var/lib/mysql/slurm_acct_db" + +- name: Backup slurm etc/slurm and var/lib/mysql/slurm_acct_db directories + ansible.builtin.copy: + src: "{{ up_slurm_nfs_mounted_path }}/slurm/{{ ctld_list[0] }}/{{ item }}/" + dest: "{{ up_slurm_backup_path }}/{{ item }}/" + remote_src: true + mode: preserve + register: conf_backup_result + loop: + - "etc/slurm" + - "var/lib/mysql/slurm_acct_db" + ignore_errors: true + +- name: Backup completed for slurm + ansible.builtin.pause: + seconds: 2 + prompt: | + Slurm confs and db backup completed before upgrade of slurm. + Backup location: {{ up_slurm_backup_path }} + when: conf_backup_result is success diff --git a/rollback/playbooks/rollback_slurm.yml b/rollback/playbooks/rollback_slurm.yml index abec6bbbe6..0c404f30e0 100644 --- a/rollback/playbooks/rollback_slurm.yml +++ b/rollback/playbooks/rollback_slurm.yml @@ -42,42 +42,43 @@ file: "{{ rollback_manifest_path }}" name: manifest - - name: Initialize slurm_skip - ansible.builtin.set_fact: - slurm_skip: false + - name: Read software_config.json + ansible.builtin.include_vars: + file: "{{ rollback_manifest.backup_dir }}/input/project_default/software_config.json" + name: software_config - - name: Set slurm_skip when already completed + - name: Determine slurm_skip status ansible.builtin.set_fact: - slurm_skip: true - when: - - manifest.component_status[component_name] | default('pending') == 'completed' + slurm_skip: >- + {{ + (manifest.component_status[component_name] | default('pending') == 'completed') + or (software_config.softwares | selectattr('name', 'equalto', 'slurm_custom') | list | length == 0) + }} - - name: "Mark as skipped — BuildStream terminal gate active (C-24)" - ansible.builtin.copy: - content: >- - {{ manifest | combine({ - 'component_status': manifest.component_status | combine({ - component_name: 'skipped' - }) - }) | to_nice_yaml }} - dest: "{{ rollback_manifest_path }}" - mode: '0644' + - name: "Handle BuildStream terminal gate (C-24)" when: - - not slurm_skip - hostvars['localhost']['build_stream_terminal'] | default(false) | bool - manifest.component_status.build_stream | default('pending') == 'completed' + block: + - name: "Mark as skipped — BuildStream terminal gate active" + ansible.builtin.copy: + content: >- + {{ manifest | combine({ + 'component_status': manifest.component_status | combine({ + component_name: 'skipped' + }) + }) | to_nice_yaml }} + dest: "{{ rollback_manifest_path }}" + mode: '0644' + delegate_to: localhost + when: not slurm_skip - - name: "Set slurm_skip — BuildStream terminal gate active (C-24)" - ansible.builtin.set_fact: - slurm_skip: true - when: - - hostvars['localhost']['build_stream_terminal'] | default(false) | bool - - manifest.component_status.build_stream | default('pending') == 'completed' + - name: "Set slurm_skip — BuildStream terminal gate active" + ansible.builtin.set_fact: + slurm_skip: true - - name: "Skip — BuildStream terminal gate active (C-24)" - ansible.builtin.meta: end_play - when: - - hostvars['localhost']['build_stream_terminal'] | default(false) | bool + - name: "Skip — BuildStream terminal gate active" + ansible.builtin.meta: end_play - name: Block when slurm is already completed when: not slurm_skip @@ -118,11 +119,17 @@ slurm_previously_rebooted: [] when: not (_reboot_state_stat.stat.exists | default(false)) +# ============================================================================ +# Create OIM host group (needed for cloud-init/BSS update on OIM) +# ============================================================================ - name: Create OIM host group for cloud-init/BSS update ansible.builtin.import_playbook: ../../utils/create_container_group.yml vars: oim_group: true +# ============================================================================ +# Play 2: Update cloud-init and BSS from backup openchami_data +# ============================================================================ - name: Rollback cloud-init and BSS for slurm functional groups hosts: oim connection: ssh diff --git a/upgrade/playbooks/upgrade_slurm.yml b/upgrade/playbooks/upgrade_slurm.yml index 086ab2edcf..a56f5635a6 100644 --- a/upgrade/playbooks/upgrade_slurm.yml +++ b/upgrade/playbooks/upgrade_slurm.yml @@ -42,42 +42,42 @@ file: "{{ manifest_path }}" name: manifest - - name: Initialize slurm_skip - ansible.builtin.set_fact: - slurm_skip: false + - name: Read software_config.json + ansible.builtin.include_vars: + file: "{{ hostvars['localhost']['input_project_dir'] }}/software_config.json" + name: software_config - - name: Set slurm_skip when already completed + - name: Determine slurm_skip status ansible.builtin.set_fact: - slurm_skip: true - when: - - manifest.component_status[component_name] | default('pending') == 'completed' + slurm_skip: >- + {{ + (manifest.component_status[component_name] | default('pending') == 'completed') + or (software_config.softwares | selectattr('name', 'equalto', 'slurm_custom') | list | length == 0) + }} - - name: "Mark as skipped — BuildStream terminal gate active (C-24)" - ansible.builtin.copy: - content: >- - {{ manifest | combine({ - 'component_status': manifest.component_status | combine({ - component_name: 'skipped' - }) - }) | to_nice_yaml }} - dest: "{{ manifest_path }}" - mode: '0644' + - name: "Handle BuildStream terminal gate (C-24)" when: - - not slurm_skip - hostvars['localhost']['build_stream_terminal'] | default(false) | bool - manifest.component_status.build_stream | default('pending') == 'completed' + block: + - name: "Mark as skipped — BuildStream terminal gate active" + ansible.builtin.copy: + content: >- + {{ manifest | combine({ + 'component_status': manifest.component_status | combine({ + component_name: 'skipped' + }) + }) | to_nice_yaml }} + dest: "{{ manifest_path }}" + mode: '0644' + when: not slurm_skip - - name: "Set slurm_skip — BuildStream terminal gate active (C-24)" - ansible.builtin.set_fact: - slurm_skip: true - when: - - hostvars['localhost']['build_stream_terminal'] | default(false) | bool - - manifest.component_status.build_stream | default('pending') == 'completed' + - name: "Set slurm_skip — BuildStream terminal gate active" + ansible.builtin.set_fact: + slurm_skip: true - - name: "Skip — BuildStream terminal gate active (C-24)" - ansible.builtin.meta: end_play - when: - - hostvars['localhost']['build_stream_terminal'] | default(false) | bool + - name: "Skip — BuildStream terminal gate active" + ansible.builtin.meta: end_play - name: Block when slurm is already completed when: not slurm_skip @@ -128,12 +128,12 @@ oim_group: true # ============================================================================ -# Play 2: Update cloud-init and BSS for slurm_control_node_x86_64 on OIM +# Play 2: Update cloud-init and BSS for slurm on OIM # ============================================================================ # During upgrade_provision.yml, the provision flow runs with upgrade_mode=true. # Templates are re-rendered (BSS YAML, cloud-init group YAML) but ochami CLI # delete/set commands are skipped. This play applies those skipped operations -# for the slurm_control_node_x86_64 functional group using the +# for the slurm functional groups using the # update_cloud_init_bss utility role. # ============================================================================ - name: Update cloud-init and BSS for slurm functional groups diff --git a/upgrade/roles/upgrade_slurm/tasks/slurm_backup.yml b/upgrade/roles/upgrade_slurm/tasks/slurm_backup.yml index bcba44ee24..4d6934152a 100644 --- a/upgrade/roles/upgrade_slurm/tasks/slurm_backup.yml +++ b/upgrade/roles/upgrade_slurm/tasks/slurm_backup.yml @@ -137,31 +137,3 @@ ansible.builtin.fail: msg: "SLURM: MySQL datadir not found in nfs" when: not is_mysql_datadir - -- name: Create backup directory - when: backup_slurm_nfs_contents - block: - - name: Create backup directory structure - ansible.builtin.file: - path: "{{ slurm_nfs_mounted_path }}/slurm_21_nfs_backups/{{ item }}" - state: directory - owner: root - group: root - mode: '0755' - loop: - - "etc/slurm" - - "var/lib/mysql" - - - name: Backup etc/slurm directory - ansible.builtin.copy: - src: "{{ ctld_dir_nfs }}/etc/slurm/" - dest: "{{ slurm_nfs_mounted_path }}/slurm_21_nfs_backups/etc/slurm" - remote_src: true - mode: preserve - - - name: Backup var/lib/mysql directory - ansible.builtin.copy: - src: "{{ ctld_dir_nfs }}/var/lib/mysql/" - dest: "{{ slurm_nfs_mounted_path }}/slurm_21_nfs_backups/var/lib/mysql" - remote_src: true - mode: preserve