module IDRAC::VirtualMedia
def set_one_time_virtual_media_boot
def set_one_time_virtual_media_boot # Check firmware version to determine which API to use firmware_version = get_firmware_version.split(".")[0,2].join.to_i if firmware_version >= 440 # Modern iDRAC # Check current boot configuration boot_response = authenticated_request(:get, "/redfish/v1/Systems/System.Embedded.1") if boot_response.status == 200 boot_data = JSON.parse(boot_response.body) enabled = boot_data['Boot']['BootSourceOverrideEnabled'] target = boot_data['Boot']['BootSourceOverrideTarget'] puts "Currently override is #{enabled} to boot from #{target}".yellow end # Set one-time boot to CD response = authenticated_request( :patch, "/redfish/v1/Systems/System.Embedded.1", body: { "Boot": { "BootSourceOverrideTarget": "Cd", "BootSourceOverrideEnabled": "Once" } }.to_json, headers: { 'Content-Type': 'application/json' } ) if response.status.between?(200, 299) puts "One-time boot to virtual media configured".green return true else error_message = "Failed to set one-time boot. 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 else # For older iDRAC, we need to use the iDRAC-specific method payload = { "ServerBoot.1#BootOnce": "Enabled", "ServerBoot.1#FirstBootDevice": "VCD-DVD" } response = authenticated_request( :patch, "/redfish/v1/Managers/iDRAC.Embedded.1/Attributes", body: payload.to_json, headers: { 'Content-Type': 'application/json' } ) if response.status.between?(200, 299) puts "One-time boot to virtual media configured".green return true else error_message = "Failed to set one-time boot. 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 end