From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (NAM04-MW2-obe.outbound.protection.outlook.com [40.107.101.71]) by mx.groups.io with SMTP id smtpd.web10.25260.1683612400145727284 for ; Mon, 08 May 2023 23:06:40 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=EATWhhso; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.101.71, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IsPlm7wef9jWLFjtgNCz7hVGH/lJ577RqlJ3fKEXCFEFrezaautOzcArSEaCzDI5r2slG/Lkx+Zb0jAiYGxzXwM2y//7g2Bexv7kdhXPoAW3hsmDOJbzEGH5q5hZ5ohQO5OvYoJj+Cv8Fej3HpbyTXTDYfdM/QdhLmh2CCvEHG+GkWTIN8nMOzxoZt9SbY+W9UfsJ6rVRW+ZJDdYQI1KXmQLVVCdlJihWjs5aaTv32tuYZgFd7JUahiga3f3CJjUGQwHgRWbg0fm1sShtfg9dOEIVYy7pFmUPNWjfkrxo4NrGId6odBBVPoeL4Y3uoytZo6FhQFt5z/3ngc+S01KYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GjHkQ6Maix8QdeuVLVhAEArbWshzx6IzwcPs+SfNHHw=; b=XfgKO5ho2i408/bva3tiDKEkuwgFyrtZWGsGAfEadeRbUGDsNq7S4DoSSZTt0vnTQ/jXUbv0RcwM2UZ49fRuKYp1vIl/LU2rG2P2of70yEAEKYZ5ONJVhxUMqNB9+ajz4GEP4jMdp6F1Ano1KP/0SSTcV4fbzatYc6svTQtUIcIXR7q6xAi9/oUuY+HSA0gTzGhCEHFysnu9wpBBEzAfsXrTeE/gfgjJLh1LQxY2Q+ccSY/mo11iVkLOhjIfPcYjQu6ru+a3+/ecvfexYlLHtncIIB4nKJWRlmpqK0A9mVeVdKLH2QGh4FhP1PWtaDFu39JsdiCYaqtH2wVjMvj3Ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GjHkQ6Maix8QdeuVLVhAEArbWshzx6IzwcPs+SfNHHw=; b=EATWhhsoSPmCDQbuYvOp9Qw3bwgFiWmlwpcV1KSF0NCoqe3NonxWkCSOZ0OD4/tuTxjqbe1a8AELiJQr+8NMRpRghuOcAjoqXuVLZSz8JnEQBWLpjJ4nrwgJ5Z7f6ZXGP3eVZ8vUGey2ub/MRjT1+9uHgrlOvqhmb6Q+tX0EDDg= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by BN9PR12MB5065.namprd12.prod.outlook.com (2603:10b6:408:132::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.33; Tue, 9 May 2023 06:06:37 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::46f1:bdce:a4bc:29e3%3]) with mapi id 15.20.6363.032; Tue, 9 May 2023 06:06:37 +0000 From: "Chang, Abner" To: Nickle Wang , "devel@edk2.groups.io" CC: Igor Kulchytskyy Subject: Re: [edk2-redfish-client][PATCH 3/6] Tool/Redfish-Profile-Simulator: Update patch method of computer system Thread-Topic: [edk2-redfish-client][PATCH 3/6] Tool/Redfish-Profile-Simulator: Update patch method of computer system Thread-Index: AQHZgbynOUurkKM/6EeEHKS1bRUcjq9RdVew Date: Tue, 9 May 2023 06:06:37 +0000 Message-ID: References: <20230508145147.16771-1-nicklew@nvidia.com> In-Reply-To: <20230508145147.16771-1-nicklew@nvidia.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-05-09T06:06:36Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=3510a4e9-0962-4821-a287-ec3e11d07f47; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|BN9PR12MB5065:EE_ x-ms-office365-filtering-correlation-id: 269fd781-d37f-46f2-9af1-08db50538ccf x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: aNW4d5TsG9B/Xfio8gmyiYBAUF/ICcIjypDNcZQuyLUuyEwbuHAcEbt8h09eiVb1sX5BZZaF/yMdTQv+b9dZYYrY2n0Bg232LBAuA6UClAJr4uHtMqXJlqrCL591iaUarlddjX9W6y2edgoarAHpG8G2mKVN5PXHu/dhvBVWPcN8EaFgig9CueQJDBhinzzmy3T4SuPmopz7bXdVE4QxbwBBsItNppvYr5JSBZ1aRw8fflilfZetwm1E5Gxb4JpS3r+W2N5YWcdh60bPnyZo6uZjYiriMaSAd2bN+WSHgSnsE8U/I6pUvsa0kYMtGk7fZnT67PwwWZVzPqBv2Cx9obu5bPW//whnBdXxgYzDirW0ABNo+7AfBhnioX9IXJWfvpBcDZED7QBoqcH6v9fBT8YWWhtEPPoZCqqmv08sfpihtOuOq75lM5ytEgR6k3eii6fw170I6yNRvPPEBXJfmwc8NybUqg0vvKhv8HmhCGoRDJzIiyb4LKJ5tMU8WGBdzrZsHmRAGcQQHH7JpfXSDZLbi45uIMYSrx2xJpvcvgLlGoq50xBVhHdcdlsTa16K8/kGQ3ppbARpaP4MYl3tjjF+PuM/ywKoyBqm84M+GJXAg6zDTUQ7hrO82QQmxuZK x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(136003)(346002)(396003)(39860400002)(366004)(451199021)(38070700005)(4326008)(52536014)(316002)(5660300002)(41300700001)(38100700002)(66446008)(64756008)(86362001)(26005)(122000001)(71200400001)(53546011)(9686003)(66476007)(66556008)(66946007)(110136005)(15650500001)(6506007)(2906002)(76116006)(8936002)(19627235002)(8676002)(33656002)(186003)(7696005)(478600001)(83380400001)(55016003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?rK22zScgYGM/72CBJ5809m65XC8JRmLbs9VrJ6qxb7LqNO0iyLPlVDOLNLVB?= =?us-ascii?Q?xaztlLn2fU5CFyoTHantBu54/rp+gljtqKv1jjncsEaJwa0kuGK9fzl2Xfam?= =?us-ascii?Q?XcuHQEN9iXoB5iPVbTx6jMTljX0d2AJcGS4oAJ6nSY5JPcKp3Ejc5x+gdBx9?= =?us-ascii?Q?D/svu6w2h1Q6WdiswFymDorEUJ8hVJ1wbXtqwYCxN1CdL1SiYLdpizLDcPtM?= =?us-ascii?Q?kbxcsAhTC5SFwyWYMm63C3OeloIk2Orrw4bMgGDUQApwPKZoxLjBZif415wx?= =?us-ascii?Q?Tt/JRMxTg3kHc8kDcOqQ5W5QgZFkvr/oBTc2SfpfSc802VBTENg2jheieKuZ?= =?us-ascii?Q?Isp5tfgRQONDMB4w4NOeu6Ydw3Ups06NrzEdxU85wqRdpxlWkWKdgZo2NKp+?= =?us-ascii?Q?TC2d+Ko0Wsr7hhCPpSAwxatw6gxTVJHBFygcfZb131rwAGL1cMDEkxbUJvnT?= =?us-ascii?Q?UjDfrrzjz61mIGE3OpVA+JEiJeURdgH7ISa/NGET+FfRIglFEgKZ2bWzLpHO?= =?us-ascii?Q?swmaoteHCkaPa/aPBxarDZaRXt3TTxDM/t3kY09/Tr6HqoK7/Mndr92XEtEt?= =?us-ascii?Q?Kq9uMqYwW1XqBLnUU78F6bfo8ZD0LD8YO+YGM2ihq5qm8XWo5uZfxhxtoc4u?= =?us-ascii?Q?hDDXgfiEncik3qYEbON9GA8DczToUl1NnQnA8gMlU01H3lkP+WimorPDcTTZ?= =?us-ascii?Q?tigQFPJ6nG2oI1xYT3KPludKazViYnMVl/YKQdjyjvONeflyh9N1vAn2LVfm?= =?us-ascii?Q?BlN2V8eZOdtA4Miqk3kAuoW6u5tay1NSHigR5YLSAzv33+RmWvAq3H0sUu3C?= =?us-ascii?Q?F+qiLBwEWxCdSIN79u1Y/5LRqdeyjEzXWvxbXBF9fr2XKAm7Rzpe5zntRR9T?= =?us-ascii?Q?QrrInblqonOUtinRZ5vmoRd1lByD4f7iHVlt8B1HslEGT/LOONoDUuAhkg7Q?= =?us-ascii?Q?UDznES+n4uT291xy3+vC3Kq/ssKaQGUDBtZsageKMHV/PGKJr0qI/cX33/lA?= =?us-ascii?Q?Dl8IcuYC3FcdrDAyoFHHUMOZY5sNeiAMmhBsHrK6YGdhd96grI0QvsJBOc1O?= =?us-ascii?Q?YMsEz4pFZRQgnp7ubdgli87JiWZzPAeoRW7CVr+nyMjJFAp1RHc9I4Pb9JV/?= =?us-ascii?Q?AEFe03vhDNZExDKtYAI2zVSw3FRSKQ5DLhpXdgFCUqtrHZ2ExvECGTAKjpyb?= =?us-ascii?Q?MkBJmMoi2sW5NBVEGonZ/E4RO912soQIl3CAqu7Utjy8vNLHcb5Epl9wPkW3?= =?us-ascii?Q?9wwYd+jL3qlMvmfoOWGsCzA1QomLMCjrth0DrJ8TKBTl81y/04Pz4p7f3/pq?= =?us-ascii?Q?4XO26P+QUtcn71il23mdqyYhNYCjSzT42EXJUnMZewHB45Q6vFS/BMjkewpz?= =?us-ascii?Q?9dl7SkSfPLYD5fhi1YyRoPohv5nbemuMZBd3vA3YJVJ/ShTgpjNO334EuNFz?= =?us-ascii?Q?lJqeVFs64cfYMJ88rb+jMMWtiSAEwgopQNpfU5q3lYadk5dRvjPXm6s3tcNw?= =?us-ascii?Q?Xo1rS8ZsA+Y+ox9giXZR40w3SLZAC6w1aSsv8OWnA3H7U2F8tR2A0ussn5jd?= =?us-ascii?Q?dCWVDHLoQiKZEnHS9Nc=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 269fd781-d37f-46f2-9af1-08db50538ccf X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2023 06:06:37.7661 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: C7d+pPyap434IkYg6V1IEfaC4XKlZIB5TUAEFQQsapBKavmYWv6cgVNJRBMKz7kO6zZaZ+t411L1Mpng+05j2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5065 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Reviewed-by: Abner Chang > -----Original Message----- > From: Nickle Wang > Sent: Monday, May 8, 2023 10:52 PM > To: devel@edk2.groups.io > Cc: Chang, Abner ; Igor Kulchytskyy > > Subject: [edk2-redfish-client][PATCH 3/6] Tool/Redfish-Profile-Simulator: > Update patch method of computer system >=20 > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. >=20 >=20 > Remove attribute check during patch of computer system and return > content-type with JSON format in HTTP header. >=20 > Signed-off-by: Nickle Wang > Cc: Abner Chang > Cc: Igor Kulchytskyy > --- > .../v1sim/resource.py | 4 ++- > .../v1sim/systems.py | 28 +++++++------------ > 2 files changed, 13 insertions(+), 19 deletions(-) >=20 > diff --git a/Tools/Redfish-Profile-Simulator/v1sim/resource.py > b/Tools/Redfish-Profile-Simulator/v1sim/resource.py > index ca7541f1..e722d16a 100644 > --- a/Tools/Redfish-Profile-Simulator/v1sim/resource.py > +++ b/Tools/Redfish-Profile-Simulator/v1sim/resource.py > @@ -2,6 +2,7 @@ > # Copyright Notice: > # > # Copyright (c) 2019, Intel Corporation. All rights reserved.
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
> # SPDX-License-Identifier: BSD-2-Clause-Patent # # Copyright Notice: > @@ -47,6 +48,7 @@ class RfResource: > try: > # SHA1 should generate well-behaved etags > response =3D flask.make_response(self.response) > + response.mimetype =3D 'application/json' > etag =3D hashlib.sha1(self.response.encode('utf-8')).hexdige= st() > response.set_etag(etag) > return response > @@ -69,7 +71,7 @@ class RfResource: > else: > raise Exception("attribute %s not found" % key) >=20 > - resp =3D flask.Response(json.dumps(self.res_data,indent=3D4)) > + resp =3D flask.Response(json.dumps(self.res_data,indent=3D4), > + mimetype=3D"application/json") > return 0, 200, None, resp >=20 > def post_resource(self, post_data): > diff --git a/Tools/Redfish-Profile-Simulator/v1sim/systems.py > b/Tools/Redfish-Profile-Simulator/v1sim/systems.py > index de4b839a..6305a51e 100644 > --- a/Tools/Redfish-Profile-Simulator/v1sim/systems.py > +++ b/Tools/Redfish-Profile-Simulator/v1sim/systems.py > @@ -2,7 +2,7 @@ > # Copyright Notice: > # > # Copyright (c) 2019, Intel Corporation. All rights reserved.
-# (C) > Copyright 2021 Hewlett Packard Enterprise Development LP
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
> # SPDX-License-Identifier: BSD-2-Clause-Patent # # Copyright Notice: > @@ -63,15 +63,7 @@ class RfSystemObj(RfResource): > self.components[item] =3D RfBootOptionCollection(base_pa= th, > os.path.join(rel_path, item), parent=3Dself) >=20 > def patch_resource(self, patch_data): > - # first verify client didn't send us a property we cant patch > - for key in patch_data.keys(): > - if key !=3D "AssetTag" and key !=3D "IndicatorLED" and key != =3D "Boot" and > key !=3D "BiosVersion": > - return 4, 400, "Invalid Patch Property Sent", "" > - elif key =3D=3D "Boot": > - for prop2 in patch_data["Boot"].keys(): > - if prop2 !=3D "BootSourceOverrideEnabled" and prop2 = !=3D > "BootSourceOverrideTarget" and prop2 !=3D "BootNext" and prop2 !=3D > "BootOrder": > - return 4, 400, "Invalid Patch Property Sent", "" > - # now patch the valid properties sent > + # patch the valid properties sent > if "AssetTag" in patch_data: > print("assetTag:{}".format(patch_data["AssetTag"])) > self.res_data['AssetTag'] =3D patch_data['AssetTag'] @@ -100= ,7 +92,7 > @@ class RfSystemObj(RfResource): > if "BootOrder" in boot_data: > self.res_data['Boot']['BootOrder'] =3D boot_data['BootOr= der'] >=20 > - resp =3D flask.Response(json.dumps(self.res_data,indent=3D4)) > + resp =3D flask.Response(json.dumps(self.res_data,indent=3D4), > + mimetype=3D"application/json") > return 0, 200, None, resp >=20 > def reset_resource(self, reset_data): > @@ -150,7 +142,7 @@ class RfMemoryCollection(RfCollection): > post_data["@odata.etag"] =3D etag_str > self.elements[str(newMemoryIdx)] =3D post_data >=20 > - resp =3D flask.Response(json.dumps(post_data,indent=3D4)) > + resp =3D flask.Response(json.dumps(post_data,indent=3D4), > + mimetype=3D"application/json") > resp.headers["Location"] =3D newMemoryUrl > resp.headers["ETag"] =3D etag_str >=20 > @@ -163,7 +155,7 @@ class RfMemoryCollection(RfCollection): > patch_data["@odata.etag"] =3D etag_str >=20 > self.elements[str(Idx)] =3D {**self.elements[str(Idx)], **patch_= data} > - resp =3D flask.Response(json.dumps(self.elements[str(Idx)],inden= t=3D4)) > + resp =3D > + flask.Response(json.dumps(self.elements[str(Idx)],indent=3D4), > + mimetype=3D"application/json") > return 0, 200, None, resp >=20 > def get_memory(self, Idx): > @@ -172,7 +164,7 @@ class RfMemoryCollection(RfCollection): > def delete_memory(self, Idx): > print("in delete_memory") >=20 > - resp =3D flask.Response(json.dumps(self.elements[Idx],indent=3D4= )) > + resp =3D flask.Response(json.dumps(self.elements[Idx],indent=3D4= ), > + mimetype=3D"application/json") >=20 > self.elements.pop(Idx) > self.res_data["Members@odata.count"] =3D > self.res_data["Members@odata.count"] - 1 @@ -228,7 +220,7 @@ class > RfBiosSettings(RfResource): > return 4, 400, "Invalid Patch Property Sent", "" > else: > self.res_data["Attributes"][key] =3D patch_data["Attribu= tes"][key] > - resp =3D flask.Response(json.dumps(self.res_data,indent=3D4)) > + resp =3D flask.Response(json.dumps(self.res_data,indent=3D4), > + mimetype=3D"application/json") > return 0, 200, None, resp >=20 >=20 > @@ -297,13 +289,13 @@ class RfBootOptionCollection(RfCollection): > post_data["@odata.id"] =3D newBootOptUrl > self.bootOptions[str(newBootOptIdx)] =3D post_data >=20 > - resp =3D flask.Response(json.dumps(post_data,indent=3D4)) > + resp =3D flask.Response(json.dumps(post_data,indent=3D4), > + mimetype=3D"application/json") > resp.headers["Location"] =3D newBootOptUrl > return 0, 200, None, resp >=20 > def patch_bootOpt(self, Idx, patch_data): > self.bootOptions[str(Idx)] =3D {**self.bootOptions[str(Idx)], **= patch_data} > - resp =3D flask.Response(json.dumps(self.bootOptions[str(Idx)],in= dent=3D4)) > + resp =3D > + flask.Response(json.dumps(self.bootOptions[str(Idx)],indent=3D4), > + mimetype=3D"application/json") > return 0, 200, None, resp >=20 > def get_bootOpt(self, Idx): > @@ -312,7 +304,7 @@ class RfBootOptionCollection(RfCollection): > def delete_bootOpt(self, Idx): > print("in delete_bootOpt") >=20 > - resp =3D flask.Response(json.dumps(self.bootOptions[Idx],indent= =3D4)) > + resp =3D > + flask.Response(json.dumps(self.bootOptions[Idx],indent=3D4), > + mimetype=3D"application/json") >=20 > self.bootOptions.pop(Idx) > self.res_data["Members@odata.count"] =3D > self.res_data["Members@odata.count"] - 1 > -- > 2.17.1