From 77bf1aa0b7e844c0d815a489fdfaa8c544911cfe Mon Sep 17 00:00:00 2001 From: SOWJANYAJAGADISH123 Date: Wed, 18 Mar 2026 16:37:31 +0530 Subject: [PATCH 1/2] defect fix aarch64 --- .../common_utils/en_us_validation_msg.py | 5 ++ .../validation_flows/provision_validation.py | 59 ++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) 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 e9af40c513..1d94f69877 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 @@ -171,6 +171,11 @@ "not a directory.") PXE_MAPPING_FILE_EXT_FAIL_MSG = ("File path is invalid. Please ensure that the file ends with " ".csv extension") +PXE_MAPPING_AARCH64_LOCAL_PATH_MSG = ("aarch64 nodes are present in pxe_mapping_file.csv but " + "local share path selected for omnia core container deployment. " + "aarch64 nodes require NFS share path. " + "Please redeploy omnia core container with NFS share path option or remove aarch64 nodes " + "from pxe_mapping_file.csv.") CLUSTER_OS_FAIL_MSG = "Cluster OS must be 'rhel' for RHEL Omnia Infrastructure Manager" # local_repo.yml 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 30a47ffd72..7986a5969d 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 @@ -733,6 +733,63 @@ def validate_admin_ips_against_network_spec(pxe_mapping_file_path, network_spec_ return errors +def validate_aarch64_local_path_compatibility(pxe_mapping_file_path, input_file_path, omnia_base_dir, project_name): + """ + Validates that aarch64 nodes are not present when using local share path. + + Args: + pxe_mapping_file_path (str): Path to the PXE mapping file. + input_file_path (str): Path to the input file. + omnia_base_dir (str): Base directory of Omnia. + project_name (str): Name of the project. + + Raises: + ValueError: If aarch64 nodes are found with local share path configuration. + """ + # Check metadata file for omnia_Share_option + metadata_path = "/opt/omnia/.data/oim_metadata.yml" + + # Default to Local if metadata doesn't exist or omnia_Share_option is not set + share_option = "Local" + + if os.path.isfile(metadata_path): + try: + with open(metadata_path, "r", encoding="utf-8") as f: + metadata = yaml.safe_load(f) or {} + + # Check omnia_share_option in metadata + share_option = metadata.get("omnia_share_option", "Local") + except Exception: + # If there's an error reading metadata, assume Local + pass + + # If share option is NFS, no need to check further + if share_option.lower() == "nfs": + return + + # Check for aarch64 nodes in PXE mapping file + 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()] + 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 + + aarch64_found = False + for row in reader: + fg_name = row.get(fg_col, "").strip() if row.get(fg_col) else "" + if fg_name and "aarch64" in fg_name.lower(): + aarch64_found = True + break + + if aarch64_found: + raise ValueError(en_us_validation_msg.PXE_MAPPING_AARCH64_LOCAL_PATH_MSG) + def validate_provision_config( input_file_path, data, logger, module, omnia_base_dir, module_utils_base, project_name ): @@ -811,6 +868,7 @@ def validate_provision_config( validate_functional_groups_separation(pxe_mapping_file_path) 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, input_file_path, omnia_base_dir, project_name) # Validate ADMIN_IPs against network_spec.yml ranges network_spec_path = create_file_path(input_file_path, file_names["network_spec"]) @@ -1112,4 +1170,3 @@ def _validate_ip_ranges(dynamic_range, network_type, netmask_bits): ) return errors - From b7828bda29d9443dc0f551782180a7f266f4e90a Mon Sep 17 00:00:00 2001 From: SOWJANYAJAGADISH123 Date: Wed, 18 Mar 2026 17:23:23 +0530 Subject: [PATCH 2/2] Update provision_validation.py --- .../validation_flows/provision_validation.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) 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 7986a5969d..1f75da8f61 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 @@ -733,20 +733,17 @@ def validate_admin_ips_against_network_spec(pxe_mapping_file_path, network_spec_ return errors -def validate_aarch64_local_path_compatibility(pxe_mapping_file_path, input_file_path, omnia_base_dir, project_name): +def validate_aarch64_local_path_compatibility(pxe_mapping_file_path): """ Validates that aarch64 nodes are not present when using local share path. Args: pxe_mapping_file_path (str): Path to the PXE mapping file. - input_file_path (str): Path to the input file. - omnia_base_dir (str): Base directory of Omnia. - project_name (str): Name of the project. Raises: ValueError: If aarch64 nodes are found with local share path configuration. """ - # Check metadata file for omnia_Share_option + # Check metadata file for omnia_share_option metadata_path = "/opt/omnia/.data/oim_metadata.yml" # Default to Local if metadata doesn't exist or omnia_Share_option is not set @@ -868,7 +865,7 @@ def validate_provision_config( validate_functional_groups_separation(pxe_mapping_file_path) 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, input_file_path, omnia_base_dir, project_name) + validate_aarch64_local_path_compatibility(pxe_mapping_file_path) # Validate ADMIN_IPs against network_spec.yml ranges network_spec_path = create_file_path(input_file_path, file_names["network_spec"])