dell / iDRAC-Redfish-Scripting

Python and PowerShell scripting for Dell EMC PowerEdge iDRAC REST API with DMTF Redfish
GNU General Public License v2.0
600 stars 278 forks source link

Cannot set a Bootdevice using ChangeBiosBootOrderDMTF_REDFISH.py #157

Closed gilbo47 closed 3 years ago

gilbo47 commented 3 years ago

hi

wondering if anyone can help -

I'm using this script to set my raid vdisk as the boot device - it doesn't seem to like anything:

- Current boot order detected for BIOS boot mode "Bios" -

SequenceNumber: 0, DisplayName: NIC in Slot 2 Port 1 Partition 1: FlexBoot v3.5.701 (PCI 5E:00.0), Id: NIC.Slot.2-1-1

./ChangeBiosBootOrderDMTF_REDFISH.py -ip <> -u <> -p <> -c "HardDisk.List.1-1"

- FAIL, PATCH command failed to change Bios boot order sequence, status code is 400 {'cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, '_content': '{"error":{"@Message.ExtendedInfo":[{"Message":"Input source argument value for the boot device is incorrect or not found among the boot devices on the system.","MessageArgs":[],"MessageArgs@odata.count":0,"MessageId":"IDRAC.1.6.BOOT016","RelatedProperties":["BootOrder"],"RelatedProperties@odata.count":1,"Resolution":"Use the correct source argument value for the boot device and retry the operation.","Severity":"Warning"}],"code":"Base.1.2.GeneralError","message":"A general error has occurred. See ExtendedInfo for more information"}}\n', 'headers': {'content-length': '539', 'strict-transport-security': 'max-age=63072000; includeSubDomains; preload', 'server': 'Apache', 'connection': 'close', 'cache-control': 'no-cache', 'date': 'Thu, 25 Feb 2021 18:37:34 GMT', 'odata-version': '4.0', 'access-control-allow-origin': '*', 'content-type': 'application/json;odata.metadata=minimal;charset=utf-8', 'x-frame-options': 'DENY'}, 'url': u'https://<sname>/redfish/v1/Systems/System.Embedded.1', 'status_code': 400, '_content_consumed': True, 'encoding': 'utf-8', 'request': <PreparedRequest [PATCH]>, 'connection': <requests.adapters.HTTPAdapter object at 0x7f0ddaf75b10>, 'elapsed': datetime.timedelta(0, 0, 458814), 'raw': <urllib3.response.HTTPResponse object at 0x7f0ddaf7f1d0>, 'reason': 'Bad Request', 'history': []}

...and yet it 100% works with racadm:

racadm -r <> -u <>-p <> set BIOS.BiosBootSettings.BootSeq HardDisk.List.1-1

[Key=BIOS.Setup.1-1#BiosBootSettings] RAC1017: Successfully modified the object value and the change is in pending state. To apply modified value, create a configuration job and reboot the system. To create the commit and reboot jobs, use "jobqueue" command. For more information about the "jobqueue" command, see RACADM help.

racadm -r <> -u <>-p <> get BIOS.BiosBootSettings.BootSeq

[Key=BIOS.Setup.1-1#BiosBootSettings] BootSeq=NIC.Slot.2-1-1,NIC.Slot.2-2-1,HardDisk.List.1-1 (Pending Value=HardDisk.List.1-1,NIC.Slot.2-1-1,NIC.Slot.2-2-1)

and after job creation and reboot:

[Key=BIOS.Setup.1-1#BiosBootSettings] BootSeq=HardDisk.List.1-1,NIC.Slot.2-1-1,NIC.Slot.2-2-1

and that's exactly what i want....but i can't seem to be able to do it via the API.

Thanks for reading! Rich

texroemer commented 3 years ago

Hi @gilbo47

Script is failing because it doesn't detect a HD device in BIOS boot order. I see you executed the script with -g argument to get current boot order devices and it doesn't report a HD device, only reports NIC device. Can you run the script again and confirm -g returns HD device, then try to change the boot order and see if it now passes.

C:\Python39>ChangeBiosBootOrderDMTF_REDFISH.py -ip 192.168.0.120 -u root -p calvin -g y

- Current boot order detected for BIOS boot mode "Bios" -

SequenceNumber: 0, DisplayName: Internal SD: MassStorageClass, Id: Disk.SDInternal.1-1
SequenceNumber: 1, DisplayName: Hard drive C:, Id: HardDisk.List.1-1

C:\Python39>ChangeBiosBootOrderDMTF_REDFISH.py -ip 192.168.0.120 -u root -p calvin -c HardDisk.List.1-1

- PASS: PATCH command passed to change Bios boot order sequence
- PASS, job ID "JID_142988452901" successfully created to change Bios boot order sequence
- INFO: job status not scheduled, current status: New
- PASS, JID_142988452901 job id successfully scheduled, rebooting the server to apply config changes

- INFO, Current server power state: On
- PASS, Command passed to attempt gracefully power OFF server, status code 204 returned
- PASS, GET command passed to verify server is in OFF state
- PASS, Command passed to power ON server, status code 204 returned
- INFO, job status not complete, current status: "Task successfully scheduled."
- INFO, job status not complete, current status: "Task successfully scheduled."
- INFO, job status not complete, current status: "Task successfully scheduled."
- INFO, job status not complete, current status: "Task successfully scheduled."
- INFO, job status not complete, current status: "Job in progress."
- INFO, job status not complete, current status: "Job in progress."
- INFO, job status not complete, current status: "Job in progress."
- INFO, job status not complete, current status: "Job in progress."
- INFO, job status not complete, current status: "Job in progress."

- Final detailed job results -

 JobID = JID_142988452901
 Name = Configure: BIOS.Setup.1-1
 Message = Job completed successfully.
 PercentComplete = 100

- Current boot order detected for BIOS boot mode "Bios" -

SequenceNumber: 0, DisplayName: Hard drive C:, Id: HardDisk.List.1-1
SequenceNumber: 1, DisplayName: Internal SD: MassStorageClass, Id: Disk.SDInternal.1-1
gilbo47 commented 3 years ago

Hiya - Thanks for your response.

However I was using the wrong scripts - the DMTF method isn't what i needed it was the methods used in the ChangeBootOrderBootSourceStateREDFISH.py and the GetBiosBootOrderBootSourceStateREDFISH which was what i needed All Fixed and working

Thanks.