From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web12.4649.1626937414190099448 for ; Thu, 22 Jul 2021 00:03:34 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=D45s+JdO; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=08370df290=abner.chang@hpe.com) Received: from pps.filterd (m0148664.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 16M6vie8006483; Thu, 22 Jul 2021 07:03:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version; s=pps0720; bh=UOxGgcQzqhSdxFyMNRDGGBWKhlskhwP8MhA4DjswQwc=; b=D45s+JdODey7yq9HQrdVMOqqnrEs72BmjZMW4gnpDGVbW6fhiQRbAtDSupC7lJVmN/br Tan3TN/dYdXD9FIe3iqYQhrJKoeGx+GSOiaii93xleyRkEyf0/71xOeP2nR7hwbd0dQM fnK+W0lzncAShkSif5IJnwAK3k6gsUVXh0rxo2NJfpMTmilC928WPyNimCJt+kkxQlMv gbaPiGGCFb/hiKoLV3zXJ0LYDDJ6CTW91Hg4wAjssMjoYgyVAFHeaJiJ+9V0VGhyGmU8 fq5cP9k7UnkXftqedDpLVyGiAC2WXv44Sv+hM7XED/DvTakJq7D+dQs2M9ziv/1jrL8l bw== Received: from g4t3427.houston.hpe.com (g4t3427.houston.hpe.com [15.241.140.73]) by mx0b-002e3701.pphosted.com with ESMTP id 39xysjsmpd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jul 2021 07:03:28 +0000 Received: from g9t2301.houston.hpecorp.net (g9t2301.houston.hpecorp.net [16.220.97.129]) by g4t3427.houston.hpe.com (Postfix) with ESMTP id F09DF6F; Thu, 22 Jul 2021 07:03:27 +0000 (UTC) Received: from abner-virtual-machine.asiapacific.hpqcorp.net (abner-virtual-machine.asiapacific.hpqcorp.net [15.119.210.153]) by g9t2301.houston.hpecorp.net (Postfix) with ESMTP id 0D5A467; Thu, 22 Jul 2021 07:03:26 +0000 (UTC) From: "Abner Chang" To: devel@edk2.groups.io Cc: Nickle Wang , Liming Gao Subject: [staging/edk2-redfish-client Tools PATCH 4/6] RedfishClientPkg/Redfish-Profile-Simulator: HTTP methods on Memory Collection Date: Thu, 22 Jul 2021 14:08:15 +0800 Message-Id: <20210722060817.18564-5-abner.chang@hpe.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210722060817.18564-1-abner.chang@hpe.com> References: <20210722060817.18564-1-abner.chang@hpe.com> X-Proofpoint-GUID: srBuJ5vRFI38XZB1ViBGcUQ_dnW1_RWH X-Proofpoint-ORIG-GUID: srBuJ5vRFI38XZB1ViBGcUQ_dnW1_RWH X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-07-22_03:2021-07-22,2021-07-22 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 impostorscore=0 phishscore=0 adultscore=36 clxscore=1015 bulkscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 mlxscore=0 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2107220042 Add POST and PATCH methods on Memory collection and resource. Signed-off-by: Abner Chang Cc: Nickle Wang Cc: Liming Gao --- .../v1sim/redfishURIs.py | 25 +++++++++++ .../v1sim/systems.py | 43 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py index 3c912f7ce1..35d3794cc6 100644 --- a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py +++ b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py @@ -1,6 +1,7 @@ # # Copyright Notice: # Copyright (c) 2019, Intel Corporation. All rights reserved.
+# (C) Copyright 2021 Hewlett Packard Enterprise Development LP
# SPDX-License-Identifier: BSD-2-Clause-Patent # # Copyright Notice: @@ -308,6 +309,30 @@ def rfApi_SimpleServer(root, versions, host="127.0.0.1", port=5000, cert="", key else: return err_string, status_code + @app.route("/redfish/v1/Systems//Memory", methods=['POST']) + @auth.rfAuthRequired + def rf_computer_memory_post(system_id): + print ("in POST memory collection") + rdata = json.loads(request.data,object_pairs_hook=OrderedDict) + print("rdata:{}".format(rdata)) + rc, status_code, err_string, resp = root.components['Systems'].get_element(system_id).components['Memory'].post_resource(rdata) + if rc == 0: + return resp, status_code + else: + return err_string, status_code + + @app.route("/redfish/v1/Systems//Memory/", methods=['PATCH']) + @auth.rfAuthRequired + def rf_computer_memory_patch(system_id, MemoryIdx): + print ("in PATCH memory[%s] resource" % MemoryIdx) + rdata = json.loads(request.data,object_pairs_hook=OrderedDict) + print("rdata:{}".format(rdata)) + rc, status_code, err_string, resp = root.components['Systems'].get_element(system_id).components['Memory'].patch_memory(MemoryIdx, rdata) + if rc == 0: + return resp, status_code + else: + return err_string, status_code + def resolve_path(service, path): parts = path.split('/') result = service diff --git a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py index b8b3788054..690101fb10 100644 --- a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py +++ b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py @@ -2,6 +2,7 @@ # Copyright Notice: # # Copyright (c) 2019, Intel Corporation. All rights reserved.
+# (C) Copyright 2021 Hewlett Packard Enterprise Development LP
# SPDX-License-Identifier: BSD-2-Clause-Patent # # Copyright Notice: @@ -123,9 +124,50 @@ class RfSystemObj(RfResource): # subclass Logs Collection class RfMemoryCollection(RfCollection): + def final_init_processing(self, base_path, rel_path): + self.maxIdx = self.res_data["Members@odata.count"] + def element_type(self): return RfMemory + def post_resource(self, post_data): + print("Members@odata.count:{}".format(self.res_data["Members@odata.count"])) + print("Members:{}".format(self.res_data["Members"])) + print("post_data:{}".format(post_data)) + + self.res_data["Members@odata.count"] = self.res_data["Members@odata.count"] + 1 + self.maxIdx = self.maxIdx + 1 + newMemoryIdx = self.maxIdx + newMemoryUrl = self.res_data["@odata.id"] + "/" + str(newMemoryIdx) + self.res_data["Members"].append({"@odata.id":newMemoryUrl}) + + post_data["@odata.id"] = newMemoryUrl + self.elements[str(newMemoryIdx)] = post_data + + resp = flask.Response(json.dumps(post_data,indent=4)) + resp.headers["Location"] = newMemoryUrl + return 0, 200, None, resp + + def patch_memory(self, Idx, patch_data): + self.elements[str(Idx)] = {**self.elements[str(Idx)], **patch_data} + resp = flask.Response(json.dumps(self.elements[str(Idx)],indent=4)) + return 0, 200, None, resp + + def get_memory(self, Idx): + return json.dumps(self.elements[Idx],indent=4) + + def delete_memory(self, Idx): + print("in delete_memory") + + resp = flask.Response(json.dumps(self.elements[Idx],indent=4)) + + self.elements.pop(Idx) + self.res_data["Members@odata.count"] = self.res_data["Members@odata.count"] - 1 + + newMemoryUrl = self.res_data["@odata.id"] + "/" + str(Idx) + self.res_data["Members"].remove({"@odata.id":newMemoryUrl}) + return 0, 200, None, resp + class RfMemory(RfResource): pass @@ -267,3 +309,4 @@ class RfBootOptionCollection(RfCollection): return 0, 200, None, resp class RfBootOption(RfResource): + pass -- 2.17.1