module IDRAC::Boot
def ensure_uefi_boot
def ensure_uefi_boot response = authenticated_request(:get, "/redfish/v1/Systems/System.Embedded.1/Bios") if response.status == 200 begin data = JSON.parse(response.body) if data["Attributes"]["BootMode"] == "Uefi" puts "System is already in UEFI boot mode".green return true else puts "System is not in UEFI boot mode. Setting to UEFI...".yellow # Create payload for UEFI boot mode payload = { "Attributes": { "BootMode": "Uefi" } } # If iDRAC 9, we need to enable HddPlaceholder if get_idrac_version == 9 payload[:Attributes][:HddPlaceholder] = "Enabled" end response = authenticated_request( :patch, "/redfish/v1/Systems/System.Embedded.1/Bios/Settings", body: payload.to_json, headers: { 'Content-Type': 'application/json' } ) if response.status.between?(200, 299) puts "UEFI boot mode set. A system reboot is required for changes to take effect.".green # Check for job creation if response.headers["Location"] job_id = response.headers["Location"].split("/").last wait_for_job(job_id) end return true else error_message = "Failed to set UEFI boot mode. Status code: #{response.status}" begin error_data = JSON.parse(response.body) if error_data["error"] && error_data["error"]["@Message.ExtendedInfo"] error_info = error_data["error"]["@Message.ExtendedInfo"].first error_message += ", Message: #{error_info['Message']}" end rescue # Ignore JSON parsing errors end raise Error, error_message end end rescue JSON::ParserError raise Error, "Failed to parse BIOS response: #{response.body}" end else raise Error, "Failed to get BIOS information. Status code: #{response.status}" end end