On 18. 12. 2023., at 03:33, Mike Maslenkin via groups.io <mike.maslenkin=gmail.com@groups.io> wrote:


Hi Nickle,

On 15. 12. 2023., at 04:53, Nickle Wang <nicklew@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.maslenkin@gmail.com>
Sent: Friday, December 15, 2023 8:04 AM
To: devel@edk2.groups.io
Cc: abner.chang@amd.com; Nickle Wang <nicklew@nvidia.com>;
igork@ami.com; Mike Maslenkin <mike.maslenkin@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.chang@amd.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Signed-off-by: Mike Maslenkin <mike.maslenkin@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 (#112611) | | Mute This Topic | New Topic
Your Subscription | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_