HewlettPackard / ilo-ansible-collection

Ansible Collection and Sample Playbooks for HPE iLO
Apache License 2.0
40 stars 21 forks source link

SetBootOrder returns HTTP error 400 #9

Closed QCU87Z closed 1 year ago

QCU87Z commented 2 years ago

I am having issues using this collection trying to get the boot order.

When I try the following

- name: Set boot order
  community.general.redfish_config:
    category: Systems
    command: SetBootOrder
    boot_order:
      - Boot000E
      - Boot0022
      - Boot001B
    baseuri: ilo.bla
    auth_token: token.bla

I get back FAILED msg: HTTP Error 400 on PATCH request to 'https://ilo.bla/redfish/v1/Systems/1/ extended message: '[{MessageArgs': ['BootOrder', '1', '22', '22'], 'MessageId': 'iLO.2.14.ArrayPropertyOutOfBound'}]'

I have been able to set other bios settings with out issue. Effectivity I want to set the boot order to USB, PCI IPv4 PXE, Local drive

How do I use this collection to change and set the boot order.

donzef commented 2 years ago

Reproduced using ilorest rawpatch, hence bypassing Ansible. iLOrest is version 3.5.1 and iLO 5 fw is 2.70.

I suggest you submit a case at HPE support.

image

QCU87Z commented 2 years ago

Cheers for confirming the issue. I have submitted a case with HPE support will see what they say.

QCU87Z commented 2 years ago

Troubleshooting with HPE, I was able to get the ilorest tool to update the bios order, using it in interactive mode. I wonder if the libary the Ansible collection is using needs to be up dated to a later version?

donzef commented 2 years ago

Glad you could progress using iLOrest.

Then, a close look at what iLOrest does shows that it does not use the standard Redfish way, but a proprietary Oem extension to modify the boot order.

The following screenshot shows a PATCH with a non-standard and strange move operation, in the proprietary context of HpeServerBootSettings . This method for changing the boot order is documented here. The Redfish standard allows such Oem extension. It allows as well to omit the implementation of some actions.

However, my 2cts is that it should return an explicit server error 501 "Not implemented" and not a 400 error insinuating that you (or the Ansible redfish_config module) performed something wrong.

Said differently, and this is my personal opinion, the Ansible redfish_config module is Ok and the iLO Redfish service is faulty.

image

donzef commented 2 years ago

Found a way to successfully change the Boot order. Not tested with Ansible but working fine with Postman and raw PATCH.

The trick is to PATCH with the exact same number of boot entries contained in a just issued GET. Hence the sequence of would be:

NOTE: After a reboot of the server, the number of boot entries may change. Hence you cannot skip the first GET to count the number of boot entries before the GET.

Hope this helps.

Bhavya06 commented 1 year ago

Hi @QCU87Z and @donzef Thank you for your inputs. We have currently removed the playbook SetBootOrder from our collection due to some execution issues. We have taken the issue under enhancement and will implement a playbook soon. Thanks

rajeevkallur commented 1 year ago

We have updated our collection to fix this.

QCU87Z commented 1 year ago

We have updated our collection to fix this.

Looking at was has been changed in your commits. I dont believe this has been fixed at all. You removed some plays about rebooting, and fixed linting based issues.

I believe @Bhavya06 stated it will be fixed in the future.

So the issue still stands.