From a30ac176f440afdd40425420b72516607538c030 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Thu, 7 Jul 2022 16:23:29 +0000 Subject: [PATCH] Improve boot override handling for Dell --- bootstrap-daemon/pvcbootstrapd/lib/redfish.py | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/bootstrap-daemon/pvcbootstrapd/lib/redfish.py b/bootstrap-daemon/pvcbootstrapd/lib/redfish.py index 71ca9bf..de15a33 100755 --- a/bootstrap-daemon/pvcbootstrapd/lib/redfish.py +++ b/bootstrap-daemon/pvcbootstrapd/lib/redfish.py @@ -620,18 +620,42 @@ def set_boot_override(session, system_root, redfish_vendor, target): """ Set the system boot override to the desired target """ - try: - system_detail = session.get(system_root) - boot_targets = system_detail["Boot"]["BootSourceOverrideSupported"] - except KeyError: - return False + print(redfish_vendor) + system_details = session.get(system_root) - if target not in boot_targets: - return False + def set_boot_override_dell(): + # BootSourceOverrideEnabled': 'Disabled', 'BootSourceOverrideMode': 'UEFI', 'BootSourceOverrideTarget': 'None', 'UefiTargetBootSourceOverride': None, + try: + boot_targets = system_detail["Boot"]["BootSourceOverrideTarget@Redfish.AllowableValues"] + except KeyError: + logger.warn(f"Failed to set boot override, no BootSourceOverrideSupported key at {system_detail}") + return False - session.patch(system_root, {"Boot": {"BootSourceOverrideTarget": target}}) + if target not in boot_targets: + logger.warn(f"Failed to set boot override, key {target} not in {boot_targets}") + return False - return True + session.patch(system_root, {"Boot": {"BootSourceOverrideEnabled": "Enabled", "BootSourceOverrideMode": "UEFI", "UefiTargetBootSourceOverride": target}}) + return True + + def set_boot_override_generic(): + try: + boot_targets = system_detail["Boot"]["BootSourceOverrideSupported"] + except KeyError: + logger.warn(f"Failed to set boot override, no BootSourceOverrideSupported key at {system_detail}") + return False + + if target not in boot_targets: + logger.warn(f"Failed to set boot override, key {target} not in {boot_targets}") + return False + + session.patch(system_root, {"Boot": {"BootSourceOverrideTarget": target}}) + return True + + if redfish_vendor in ["dell", "Dell"]: + return set_boot_override_dell() + else: + return set_boot_override_generic() def check_redfish(config, data):