[AMD Official Use Only - General] Yes, this is something we have to make it clear to support PUT, POST and PATCH for different scenarios. Agree we can just drop 4/4 for now, I will add this to the TODO list.
Thanks Abner From: M M <mike.maslen...@gmail.com> Sent: Monday, December 18, 2023 8:58 AM To: devel@edk2.groups.io; mike.maslen...@gmail.com Cc: Nickle Wang <nick...@nvidia.com>; Chang, Abner <abner.ch...@amd.com>; ig...@ami.com Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH 4/4] RedfishClientPkg: use POST method while provisioning new property. Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding. On 18. 12. 2023., at 03:33, Mike Maslenkin via groups.io<http://groups.io> <mike.maslenkin=gmail....@groups.io<mailto:mike.maslenkin=gmail....@groups.io>> wrote: Hi Nickle, On 15. 12. 2023., at 04:53, Nickle Wang <nick...@nvidia.com<mailto:nick...@nvidia.com>> wrote: Hi Mike, Per Redfish specification 7.9 POST(create) "The POST request is submitted to the resource collection to which the new resource will belong." If this is not a collection resource, we cannot use POST method. And /redfish/v1/Systems/SYS_ID/Bios is not a collection resource. The allowed method returned from BMC for BIOS resource is usually "GET" and "PUT". So, I think that the fourth parameter is still FALSE here. But I admit that the function header below is confusing and did not express above rule clearly. /** Provisioning redfish resource by given URI. @param[in] Schema Redfish schema information. @param[in] Uri Target URI to create resource. @param[in] InformationExchange Pointer to RESOURCE_INFORMATION_EXCHANGE. @param[in] HttpPostMode TRUE if resource does not exist, HTTP POST method is used. FALSE if the resource exist but some of properties are missing, HTTP PUT method is used. @retval EFI_SUCCESS Value is returned successfully. @retval Others Some error happened. **/ Below is my suggestion. @param[in] HttpPostMode TRUE if target resource is a member of collection resource, HTTP POST method is used. FALSE if target resource is non-collection resource, HTTP PUT method is used. Do you think this helps to explain the use-case of fourth parameter more clearly? Thanks, Nickle Seems like more comments need to be changed.... The idea behind this patch is the basis of the current implementation of RedfishClientPkg/Features/Bios/v1_0_9. The EdkIIRedfishResourceConfigProvisioning function calls the EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL::Provisioning function, this is RedfishResourceProvisioningResource() for this driver[1], then it calls RedfishProvisioningResourceCommon() where the logic of this flag is completely changed [2]. So, for the current implementation of this flag, it is not a choice between POST and PUT, but between POST and PATCH (see [1]). May be flag should not be inverted here [3]? The value of FALSE here (you expect PUT to be used) means the following ProvisioningBiosExistResource() function calls ProvisioningBiosProperties() with ProvisionMode == TRUE. This ProvisionMode == TRUE forces PropertyChanged set into TRUE, so finally ProvisioningBiosProperties() returns success even for elements that do not exist. Here I mean elements of /redfish/v1/Systems/{SystemID}/Bios/Attributes. I'm in situation when Attributes exists, but it is empty. Currently the PUT method is not used anywhere in RedfishClientPkg/Features/Bios and "PUT back to instance" actually performs the PATCH. I will drop this patch from the current PR until it becomes clear how this can be improved. Forgot to add the links: [1] https://github.com/tianocore/edk2-redfish-client/blob/main/RedfishClientPkg/Features/Bios/v1_0_9/Dxe/BiosDxe.c#L50 [2] https://github.com/tianocore/edk2-redfish-client/blob/main/RedfishClientPkg/Features/Bios/v1_0_9/Common/BiosCommon.c#L518 [3] https://github.com/tianocore/edk2-redfish-client/blob/main/RedfishClientPkg/Features/Bios/v1_0_9/Dxe/BiosDxe.c#L68 Regards, Mike. -----Original Message----- From: Mike Maslenkin <mike.maslen...@gmail.com<mailto:mike.maslen...@gmail.com>> Sent: Friday, December 15, 2023 8:04 AM To: devel@edk2.groups.io<mailto:devel@edk2.groups.io> Cc: abner.ch...@amd.com<mailto:abner.ch...@amd.com>; Nickle Wang <nick...@nvidia.com<mailto:nick...@nvidia.com>>; ig...@ami.com<mailto:ig...@ami.com>; Mike Maslenkin <mike.maslen...@gmail.com<mailto:mike.maslen...@gmail.com>> Subject: [edk2-redfish-client][PATCH 4/4] RedfishClientPkg: use POST method while provisioning new property. External email: Use caution opening links or attachments If EdkIIRedfishResourceConfigCheck fails according to the logic and comment: new resources should be provisioned, so the POST method must be used. Fourth parameter of EdkIIRedfishResourceConfigProvisioning is BOOLEAN HttpPostMode, so we pass TRUE here. Cc: Abner Chang <abner.ch...@amd.com<mailto:abner.ch...@amd.com>> Cc: Igor Kulchytskyy <ig...@ami.com<mailto:ig...@ami.com>> Cc: Nickle Wang <nick...@nvidia.com<mailto:nick...@nvidia.com>> Signed-off-by: Mike Maslenkin <mike.maslen...@gmail.com<mailto:mike.maslen...@gmail.com>> --- RedfishClientPkg/Features/Bios/v1_0_9/Common/BiosCommon.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RedfishClientPkg/Features/Bios/v1_0_9/Common/BiosCommon.c b/RedfishClientPkg/Features/Bios/v1_0_9/Common/BiosCommon.c index a26a1083cd74..4fd4845f3420 100644 --- a/RedfishClientPkg/Features/Bios/v1_0_9/Common/BiosCommon.c +++ b/RedfishClientPkg/Features/Bios/v1_0_9/Common/BiosCommon.c @@ -818,9 +818,9 @@ HandleResource ( // The target property does not exist, do the provision to create property. // DEBUG ((REDFISH_DEBUG_TRACE, "%a provision for %s\n", __func__, Uri)); - Status = EdkIIRedfishResourceConfigProvisioning (&SchemaInfo, Uri, Private- InformationExchange, FALSE); + Status = EdkIIRedfishResourceConfigProvisioning (&SchemaInfo, Uri, + Private->InformationExchange, TRUE); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a, failed to provision with GET mode: %r\n", __func__, Status)); + DEBUG ((DEBUG_ERROR, "%a, failed to provision with POST mode: + %r\n", __func__, Status)); } return Status; -- 2.32.0 (Apple Git-132) -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112634): https://edk2.groups.io/g/devel/message/112634 Mute This Topic: https://groups.io/mt/103181641/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-