POST – 固件的分段式 HTTP 推送更新
此操作可通过将软件映像文件推送到 UpdateService.MultipartHttpPushUri 属性引用的 URI,对已装软件组件执行更新。在 XCC2 Redfish 服务中,UpdateService.MultipartHttpPushUri 属性值为“/mfwupdate”。
请求 URL
POST https://<BMC_IPADDR>/mfwupdate
请求正文
HTTP POST 操作应为认证提供用于访问 UpdateService 资源的足够权限。
响应
字段 | 类型 | 错误消息 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"
]将固件映像推送到 MultipartHttpPushUri 属性中的 URL。
下面是用于 BMC(备用)的分段式 HTTP 推送更新请求的示例 curl 命令。
curl -s -k -u USERID:PASSW0RD -F 'UpdateParameters={ "Targets":[ ],"@Redfish.OperationApplyTime":"OnStartUpdateRequest"};type=application/json' -F 'UpdateFile=@ lnvgy_fw_xcc_usx319b-0.99_anyos_comp.uxz ;type=application/octet-stream' https://192.168.1.216:443/mfwupdate
返回以下示例 JSON 响应。
{
"@odata.type": "#Task.v1_5_1.Task",
"@odata.id": "/redfish/v1/TaskService/Tasks/f9c172dc-8d25-41da-8ad1-b59b5e144209",
"TaskMonitor": "/redfish/v1/TaskService/570dfa36-f60b-4dda-b9db-4435f90c3e20",
"Messages": [],
"Description": "This resource represents a task for a Redfish implementation.",
"StartTime": "2023-01-04T07:48:51+00:00",
"@odata.etag": "\"1672818531928\"",
"PercentComplete": 0,
"HidePayload": true,
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"TaskState": "New",
"Id": "f9c172dc-8d25-41da-8ad1-b59b5e144209",
"Name": "Task f9c172dc-8d25-41da-8ad1-b59b5e144209"
}在响应正文中将包含新创建的任务资源。在 TaskMonitor 属性中将引用任务监控器资源。
属性“@ Redfish.OperationApplyTime”支持的值为“Immediate”、“OnReset”和“OnStartUpdateRequest”之一。如果请求属性“@Redfish.OperationApplyTime”为“OnStartUpdateRequest”,则客户端需要执行 StartUpdate 操作以使固件更新流程继续。
如果“@Redfish.OperationApplyTime”不是 OnStartUpdateRequest,请跳过此步骤。
POST URL 为:/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate
POST 正文为:
{}
客户端需要定期检查任务的 URI 以更新进度。
以下是用于持续检查任务资源的示例 JSON 响应。(任务 ID 为 f9c172dc-8d25-41da-8ad1-b59b5e144209)
任务总体进度为 100%。任务状态为“已完成”。
{
"@odata.type": "#Task.v1_5_1.Task",
"@odata.id": "/redfish/v1/TaskService/Tasks/f9c172dc-8d25-41da-8ad1-b59b5e144209",
"EndTime": "2023-01-04T07:51:14+00:00",
"TaskMonitor": "/redfish/v1/TaskService/570dfa36-f60b-4dda-b9db-4435f90c3e20",
"Messages": [
{
"@odata.type": "#Message.v1_1_2.Message",
"MessageId": "Update.1.0.OperationTransitionedToJob",
"MessageSeverity": "OK",
"Resolution": "Follow the referenced job and monitor the job for further updates.",
"Message": "The update operation has transitioned to the job at URI '/redfish/v1/JobService/Jobs/JobR000004-Update'.",
"MessageArgs": [
"/redfish/v1/JobService/Jobs/JobR000004-Update"
]
}
],
"Description": "This resource represents a task for a Redfish implementation.",
"@odata.etag": "\"1672818674540\"",
"StartTime": "2023-01-04T07:48:51+00:00",
"PercentComplete": 100,
"TaskStatus": "OK",
"HidePayload": true,
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"Name": "Task f9c172dc-8d25-41da-8ad1-b59b5e144209",
"Id": "f9c172dc-8d25-41da-8ad1-b59b5e144209",
"TaskState": "Completed"
}在响应正文中将包含新创建的 Job 资源。
客户端需要检查作业,直至其状态变为“Completed”或“Exception”。根据返回的作业消息处理异常。
下面是完整的作业响应示例。
{
"@odata.type": "#Job.v1_0_7.Job",
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000004-Update",
"EndTime": "2023-01-04T07:51:32+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 'lnvgy_fw_xcc_usx319b-0.99_anyos_comp.uxz'.",
"MessageArgs": [
"/redfish/v1/UpdateService/FirmwareInventory/BMC-Primary",
"lnvgy_fw_xcc_usx319b-0.99_anyos_comp.uxz"
]
}
],
"Description": "This resource is used to represent a job for a Redfish implementation.",
"StepOrder": [
"BMC-Primary"
],
"StartTime": "2023-01-04T07:51:14+00:00",
"Steps": {
"@odata.id": "/redfish/v1/JobService/Jobs/JobR000004-Update/Steps"
},
"@odata.etag": "\"1672818692407\"",
"PercentComplete": 100,
"@odata.context": "/redfish/v1/$metadata#Job.Job",
"JobState": "Completed",
"Id": "JobR000004-Update",
"Name": "JobR000004-Update"
}如果目标是 BMC(备用),还需要额外清除 HttpPushUriTargets。
如果未更新 BMC(备用)固件,请跳过此步骤。
PATCH 正文为:
{
"HttpPushUriTargets" : [ ]
}将 HttpPushUriTargetsBusy 更新为 false。
固件更新过程完成后,请将 HttpPushUriTargetsBusy 属性更改为 false,以便将服务释放给其他客户端进行固件更新。
PATCH 正文为:
{
"HttpPushUriTargetsBusy" : false
}