POST – 固件的 HTTP 推送更新
此操作可通过将软件映像文件推送到 UpdateService.HttpPushUri 属性引用的 URI,对已装软件组件执行更新。在 XCC2 Redfish 服务中,UpdateService.HttpPushUri 属性值为“/fwupdate”。
请求 URL
POST https://<BMC_IPADDR>/fwupdate
请求正文
HTTP POST 操作应为认证提供用于访问 UpdateService 资源的足够权限。
在通过 HTTP 推送更新执行固件更新之前,需要设置“HttpPushUriOptions/HttpPushUriApplyTime/ApplyTime”属性。
响应
字段 | 类型 | 错误消息 ID |
---|---|---|
Id | 字符串 | 创建的任务 ID。 |
Name | 字符串 | 任务名称。 |
Description | 字符串 | “This resource represents a task for a Redfish implementation.” |
TaskMonitor | 字符串 | 此任务的任务监控器的 URI。 |
StartTime | 字符串 | 上次启动任务的日期时间戳。 |
TaskState | 字符串 | 任务的状态。 |
Messages | 数组 | 这是与任务关联的消息数组。 |
PercentComplete | 整数 | 任务完成百分比。 |
HidePayload | 布尔 | 指示 Payload 对象为隐藏状态且不会在执行 GET 时返回。 |
当分段式 HTTP 推送更新正在进行时,可能会拒绝 HTTP 推送更新并返回代码 503,反之亦然。
状态代码
HTTP 状态代码 | 错误消息 ID |
---|---|
202 | Accepted |
400 | BadRequest、ActionParamMissing、ActionParamTypeError、ActionParamFormatError |
413 | RequestEntityTooLarge |
500 | InternalError |
503 | ServiceUnavailable |
示例
以下使用 curl 命令的示例是 UEFI/BMC(备用)的 HTTP 推送更新过程。
将 HttpPushUriTargetsBusy 更新为 true。
客户端应首先检查 HttpPushUriTargetsBusy 属性。当此值为 false 时,请将 HttpPushUriTargetsBusy 属性更改为 True,以便声明固件更新占用了此服务。为避免干扰,其他客户端不应更新此服务器上的固件。
PATCH 正文为:
{
"HttpPushUriTargetsBusy" : true
}如果客户端计划更新 BMC(备用),还需要额外提供 HttpPushUriTargets。
如果不更新 BMC(备用)固件,请跳过此步骤。
PATCH 正文为:
"HttpPushUriTargets" : [
"/redfish/v1/UpdateService/FirmwareInventory/BMC-Backup"
]将 HttpPushUriOptions/HttpPushUriApplyTime/ApplyTime 更新为“Immediate”或“OnReset”。
PATCH 正文为:
{
"HttpPushUriOptions": {
"HttpPushUriApplyTime": {
"ApplyTime": "Immediate"
}
}
}将固件映像推送到 HttpPushUri 属性中的 URL。
下面是用于 UEFI HTTP 推送更新请求的示例 curl 命令。
curl -s -k -u USERID:PASSW0RD --data-binary @/tmp/uefi/lnvgy_fw_uefi_ive148m-2.41_anyos_32-64.uxz https://192.168.1.126:443/fwupdate
注您可以将“-v”添加到 curl 命令以观察文件传输进度。下面是用于 BMC(备用)HTTP 推送更新请求的示例 curl 命令。
curl -s -k -u USERID:PASSW0RD --data-binary @lnvgy_fw_xcc_usx319b-0.99_anyos_comp.uxz https://192.168.1.126:443/fwupdate
返回以下示例 JSON 响应。
{
"@odata.type":"#Task.v1_5_1.Task",
"@odata.id":"/redfish/v1/TaskService/Tasks/c3f04c5f-3118-409c-a33d-5abc8a631009",
"TaskMonitor":"/redfish/v1/TaskService/f1874fd8-78d8-42b2-a64c-26f7bb31fa45",
"Messages":[],"Description":"This resource represents a task for a Redfish implementation.",
"StartTime":"2023-01-04T08:05:53+00:00",
"@odata.etag":"\"1672819553334\"",
"PercentComplete":0,
"HidePayload":true,
"@odata.context":"/redfish/v1/$metadata#Task.Task",
"TaskState":"New",
"Id":"c3f04c5f-3118-409c-a33d-5abc8a631009",
"Name":"Task c3f04c5f-3118-409c-a33d-5abc8a631009"
}在响应正文中将包含新创建的任务资源。在 TaskMonitor 属性中将引用任务监控器资源。
客户端需要定期检查任务的 URI 以更新进度。
以下是用于持续检查任务资源的示例 JSON 响应。(任务 ID 为 c3f04c5f-3118-409c-a33d-5abc8a631009)
任务总体进度为 100%。任务状态为“已完成”。
{
"@odata.type": "#Task.v1_5_1.Task",
"@odata.id": "/redfish/v1/TaskService/Tasks/c3f04c5f-3118-409c-a33d-5abc8a631009",
"EndTime": "2023-01-04T08:06:42+00:00",
"TaskMonitor": "/redfish/v1/TaskService/f1874fd8-78d8-42b2-a64c-26f7bb31fa45",
"Messages": [
{
"@odata.type": "#Message.v1_1_2.Message",
"MessageId": "Update.1.0.OperationTransitionedToJob",
"Resolution": "Follow the referenced job and monitor the job for further updates.",
"MessageSeverity": "OK",
"Message": "The update operation has transitioned to the job at URI '/redfish/v1/JobService/Jobs/JobR000005-Update'.",
"MessageArgs": [
"/redfish/v1/JobService/Jobs/JobR000005-Update"
]
}
],
"Description": "This resource represents a task for a Redfish implementation.",
"@odata.etag": "\"1672819602270\"",
"StartTime": "2023-01-04T08:05:53+00:00",
"PercentComplete": 100,
"TaskStatus": "OK",
"TaskState": "Completed",
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"HidePayload": true,
"Id": "c3f04c5f-3118-409c-a33d-5abc8a631009",
"Name": "Task c3f04c5f-3118-409c-a33d-5abc8a631009"
}
In the response body, a new created job resource is included.
}客户端需要检查作业,直至其状态变为“Completed”或“Exception”。根据返回的作业消息处理异常。
下面是包含异常的任务响应示例。
{
"@odata.type": "#Job.v1_0_7.Job",
"StepOrder": [
"BMC-Primary"
],
"EndTime": "2023-01-04T08:07:00+00:00",
"Messages": [
{
"@odata.type": "#Message.v1_1_2.Message",
"MessageId": "Update.1.0.UpdateSuccessful",
"MessageSeverity": "OK",
"Resolution": "None.",
"Message": "Device '/redfish/v1/UpdateService/FirmwareInventory/BMC-Primary' successfully updated with image 'upload_file'.",
"MessageArgs": [
"/redfish/v1/UpdateService/FirmwareInventory/BMC-Primary",
"upload_file"
]
}
],
"Description": "This resource is used to represent a job for a Redfish implementation.",
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000005-Update",
"StartTime": "2023-01-04T08:06:41+00:00",
"@odata.etag": "\"1672819620097\"",
"PercentComplete": 100,
"Steps": {
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000005-Update/Steps"
},
"@odata.context": "/redfish/v1/$metadata#Job.Job",
"JobState": "Completed",
"Id": "JobR000005-Update",
"Name": "JobR000005-Update"
}如果目标是 BMC(备用),还需要额外清除 HttpPushUriTargets。
如果未更新 BMC(备用)固件,请跳过此步骤。
PATCH 正文为:
{
"HttpPushUriTargets" : [ ]
}将 HttpPushUriTargetsBusy 更新为 false。
固件更新过程完成后,请将 HttpPushUriTargetsBusy 属性更改为 false,以便将服务释放给其他客户端进行固件更新。
PATCH 正文为:
{
"HttpPushUriTargetsBusy" : false
}