跳到主要内容

POST – 固件的 HTTP 推送更新

此操作可通过将软件映像文件推送到 UpdateService.HttpPushUri 属性引用的 URI,对已安装的软件组件执行更新。在 XCC Redfish 服务中,UpdateService.HttpPushUri 属性值为“/fwupdate”。

请求 URL

POST https://<BMC_IPADDR>/fwupdate

请求正文

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 时返回。

客户端可以选择在 POST 请求中包含“Content-Length”标头以指示 POST 正文大小。XCC 检查此标头并验证固件更新是否支持此大小。如果文件大小超出此服务可以支持的大小,则将返回代码 413,其中包含指示文件大小过大的错误消息。

当分段式 HTTP 推送更新正在进行时,可能会拒绝 HTTP 推送更新并返回代码 503,反之亦然。

状态代码

HTTP 状态代码错误消息 ID
202Accepted
400BadRequest、ActionParamMissing、ActionParamTypeError、ActionParamFormatError
413RequestEntityTooLarge
500InternalError
503ServiceUnavailable

示例

以下使用 curl 命令的示例是 UEFI/BMC(备用)的 HTTP 推送更新过程。

  • 步骤 1. 将 HttpPushUriTargetsBusy 更新为 true。

客户端应首先检查 HttpPushUriTargetsBusy 属性。当此值为 false 时,请将 HttpPushUriTargetsBusy 属性更改为 True,以便声明固件更新占用了此服务。为避免干扰,其他客户端不应更新此服务器上的固件。

PATCH 正文为:

{
"HttpPushUriTargetsBusy" : true
}

  • 步骤 2. 如果客户端计划更新 BMC(备用),还需要额外提供 HttpPushUriTargets。

如果不更新 BMC(备用)固件,请跳过此步骤。

PATCH 正文为:

   "HttpPushUriTargets" : [
"/redfish/v1/UpdateService/FirmwareInventory/BMC-Backup"
]

  • 步骤 3. 将固件映像推送到 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 @/tmp/xcc/lnvgy_fw_xcc_cdi338d-2.70_anyos_noarch.uxz https://192.168.1.126:443/fwupdate

返回以下示例 JSON 响应。

{
"Id" : "a274a218-58bc-4100-9ec3-6843dfaa486c",
"Messages" : [],
"TaskState" : "New",
"@odata.etag" : "\"1577227530316\"",
"@odata.id" : "/redfish/v1/TaskService/Tasks/a274a218-58bc-4100-9ec3-6843dfaa486c",
"PercentComplete" : 0,
"@odata.type" : "#Task.v1_4_1.Task",
"StartTime" : "2019-12-24T22:45:30+00:00",
"Description" : "This resource represents a task for a Redfish implementation.",
"Name" : "Task a274a218-58bc-4100-9ec3-6843dfaa486c",
"HidePayload" : true,
"TaskMonitor" : "/redfish/v1/TaskService/d3883fd4-ed0b-45dc-8c21-f7ad45f81c5d"
}

在响应正文中将包含新创建的任务资源。在 TaskMonitor 属性中将引用任务监控器资源。

  • 步骤 4. 客户端需要定期检查任务的 URI 以更新进度。

以下是用于持续检查任务资源的示例 JSON 响应。(任务 ID 为 ef05579b-380c-4f23-a20d-d890073fb588)

首次检查,任务总体进度为 31%。客户端正在验证上传的映像。

{
"Id" : "ef05579b-380c-4f23-a20d-d890073fb588",
"Messages" : [
{
"MessageArgs" : [
"ef05579b-380c-4f23-a20d-d890073fb588",
"31"
],
"Resolution" : "None.",
"Message" : "The task with id ef05579b-380c-4f23-a20d-d890073fb588 has changed to progress 31 percent complete.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "TaskEvent.1.0.TaskProgressChanged",
"Severity" : "OK"
},
{
"MessageArgs" : [
"0"
],
"Resolution" : "None",
"Message" : "Verify 0 percent complete.",
"@odata.type" : "#Message.v1_0_7.Message",
"Severity" : "OK",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.UpdateVerifyInProgress"
}
],
"TaskState" : "Running",
"@odata.etag" : "\"1577225350164\"",
"@odata.id" : "/redfish/v1/TaskService/Tasks/ef05579b-380c-4f23-a20d-d890073fb588",
"PercentComplete" : 31,
"@odata.type" : "#Task.v1_4_1.Task",
"StartTime" : "2019-12-24T22:09:02+00:00",
"Description" : "This resource represents a task for a Redfish implementation.",
"Name" : "Task ef05579b-380c-4f23-a20d-d890073fb588",
"HidePayload" : true,
"TaskMonitor" : "/redfish/v1/TaskService/bf3cd02d-a77e-4ad4-8df8-f00802fc40e0"
}

第二次检查,任务总体进度为 58%。客户端正在应用映像。

{
"Id" : "ef05579b-380c-4f23-a20d-d890073fb588",
"Messages" : [
{
"MessageArgs" : [
"ef05579b-380c-4f23-a20d-d890073fb588",
"58"
],
"Resolution" : "None.",
"Message" : "The task with id ef05579b-380c-4f23-a20d-d890073fb588 has changed to progress 58 percent complete.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "TaskEvent.1.0.TaskProgressChanged",
"Severity" : "OK"
},
{
"MessageArgs" : [
"1",
"/redfish/v1/UpdateService/FirmwareInventory/UEFI",
"UEFI-IVE1-6",
"48M-2.41",
"Unknown"
],
"Resolution" : "None",
"Message" : "Assignment 1: Resource /redfish/v1/UpdateService/FirmwareInventory/UEFI SoftwareID UEFI-IVE1-6 Version 48M-2.41 to Version Unknown.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.UpdateAssignment",
"Severity" : "OK"
},
{
"MessageArgs" : [
"1",
"36"
],
"Resolution" : "None",
"Message" : "Assignment 1: Apply 36 percent complete.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.PayloadApplyInProgress",
"Severity" : "OK"
}
],
"TaskState" : "Running",
"@odata.etag" : "\"1577225369708\"",
"@odata.id" : "/redfish/v1/TaskService/Tasks/ef05579b-380c-4f23-a20d-d890073fb588",
"PercentComplete" : 58,
"@odata.type" : "#Task.v1_4_1.Task",
"StartTime" : "2019-12-24T22:09:02+00:00",
"Description" : "This resource represents a task for a Redfish implementation.",
"Name" : "Task ef05579b-380c-4f23-a20d-d890073fb588",
"HidePayload" : true,
"TaskMonitor" : "/redfish/v1/TaskService/bf3cd02d-a77e-4ad4-8df8-f00802fc40e0"
}

下一次检查,任务总体进度为 74%。客户端正在进一步应用映像。

{
"Id" : "ef05579b-380c-4f23-a20d-d890073fb588",
"Messages" : [
{
"MessageArgs" : [
"ef05579b-380c-4f23-a20d-d890073fb588",
"74"
],
"Resolution" : "None.",
"Message" : "The task with id ef05579b-380c-4f23-a20d-d890073fb588 has changed to progress 74 percent complete.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "TaskEvent.1.0.TaskProgressChanged",
"Severity" : "OK"
},
{
"MessageArgs" : [
"1",
"/redfish/v1/UpdateService/FirmwareInventory/UEFI",
"UEFI-IVE1-6",
"48M-2.41",
"Unknown"
],
"Resolution" : "None",
"Message" : "Assignment 1: Resource /redfish/v1/UpdateService/FirmwareInventory/UEFI SoftwareID UEFI-IVE1-6 Version 48M-2.41 to Version Unknown.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.UpdateAssignment",
"Severity" : "OK"
},
{
"MessageArgs" : [
"1",
"61"
],
"Resolution" : "None",
"Message" : "Assignment 1: Apply 61 percent complete.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.PayloadApplyInProgress",
"Severity" : "OK"
}
],
"TaskState" : "Running",
"@odata.etag" : "\"1577225376926\"",
"@odata.id" : "/redfish/v1/TaskService/Tasks/ef05579b-380c-4f23-a20d-d890073fb588",
"PercentComplete" : 74,
"@odata.type" : "#Task.v1_4_1.Task",
"StartTime" : "2019-12-24T22:09:02+00:00",
"Description" : "This resource represents a task for a Redfish implementation.",
"Name" : "Task ef05579b-380c-4f23-a20d-d890073fb588",
"HidePayload" : true,
"TaskMonitor" : "/redfish/v1/TaskService/bf3cd02d-a77e-4ad4-8df8-f00802fc40e0"
}

下一次检查,任务总体进度为 100%。映像应用已完成。任务状态为“已完成”。

{
"Id" : "ef05579b-380c-4f23-a20d-d890073fb588",
"Messages" : [
{
"MessageArgs" : [
"ef05579b-380c-4f23-a20d-d890073fb588"
],
"Resolution" : "None.",
"Message" : "The task with id ef05579b-380c-4f23-a20d-d890073fb588 has completed.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "TaskEvent.1.0.TaskCompletedOK",
"Severity" : "OK"
},
{
"MessageArgs" : [
null
],
"Resolution" : "None",
"Message" : "Successfully Completed Request",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "Base.1.5.Success",
"Severity" : "OK"
},
{
"MessageArgs" : [
"1",
"/redfish/v1/UpdateService/FirmwareInventory/UEFI",
"UEFI-IVE1-6",
"48M-2.41",
"48M-2.41"
],
"Resolution" : "None",
"Message" : "Assignment 1: Resource /redfish/v1/UpdateService/FirmwareInventory/UEFI SoftwareID UEFI-IVE1-6 Version 48M-2.41 to Version 48M-2.41.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.UpdateAssignment",
"Severity" : "OK"
},
{
"MessageArgs" : [
"1"
],
"Resolution" : "None",
"Message" : "Assignment 1: Apply complete",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.PayloadApplyCompleted",
"Severity" : "OK"
}
],
"TaskState" : "Completed",
"@odata.etag" : "\"1577225382166\"",
"@odata.id" : "/redfish/v1/TaskService/Tasks/ef05579b-380c-4f23-a20d-d890073fb588",
"TaskStatus" : "OK",
"PercentComplete" : 100,
"@odata.type" : "#Task.v1_4_1.Task",
"StartTime" : "2019-12-24T22:09:02+00:00",
"EndTime" : "2019-12-24T22:09:42+00:00",
"Description" : "This resource represents a task for a Redfish implementation.",
"Name" : "Task ef05579b-380c-4f23-a20d-d890073fb588",
"TaskMonitor" : "/redfish/v1/TaskService/bf3cd02d-a77e-4ad4-8df8-f00802fc40e0",
"HidePayload" : true
}

  • 步骤 5. 客户端需要检查该任务,直至其状态变为“Completed”或“Exception”。根据返回的任务消息处理异常。

下面是包含异常的任务响应示例。

{
"Id" : "afaef595-c15e-4085-b985-7c6c10f10812",
"Messages" : [
{
"MessageArgs" : [
"afaef595-c15e-4085-b985-7c6c10f10812"
],
"Resolution" : "None.",
"Message" : "The task with id afaef595-c15e-4085-b985-7c6c10f10812 has completed with warnings.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "TaskEvent.1.0.TaskCompletedWarning",
"Severity" : "Warning"
},
{
"MessageArgs" : [
"7",
"(0007): Error verifying image transferred to IMM applies to this system."
],
"Resolution" : "Resubmit the request. If the problem persists, consider resetting the service.",
"Message" : "Verify failed, return code=7 - return message: (0007): Error verifying image transferred to IMM applies to this system.",
"@odata.type" : "#Message.v1_0_7.Message",
"MessageId" : "LenovoFirmwareUpdateRegistry.1.0.UpdateVerifyFailed",
"Severity" : "Warning"
}
],
"TaskState" : "Exception",
"@odata.etag" : "\"1577224625433\"",
"@odata.id" : "/redfish/v1/TaskService/Tasks/afaef595-c15e-4085-b985-7c6c10f10812",
"TaskStatus" : "Warning",
"PercentComplete" : 31,
"@odata.type" : "#Task.v1_4_1.Task",
"StartTime" : "2019-12-24T21:56:55+00:00",
"EndTime" : "2019-12-24T21:57:05+00:00",
"Description" : "This resource represents a task for a Redfish implementation.",
"Name" : "Task afaef595-c15e-4085-b985-7c6c10f10812",
"TaskMonitor" : "/redfish/v1/TaskService/5254c31b-1491-40cd-bd94-cb7d9639b5d4",
"HidePayload" : true
}

XCC 保留已完成/异常任务资源用于状态检查。客户端可访问任务监控器资源(步骤 3 中返回的 TaskMonitor 引用),而 XCC 会删除相应的任务。

  • 步骤 6. 如果目标是 BMC(备用),还需要额外清除 HttpPushUriTargets。

如果未更新 BMC(备用)固件,请跳过此步骤。

PATCH 正文为:

{
"HttpPushUriTargets" : [ ]
}

  • 步骤 7. 将 HttpPushUriTargetsBusy 更新为 false。

固件更新过程完成后,请将 HttpPushUriTargetsBusy 属性更改为 false,以便将服务释放给其他客户端进行固件更新。

PATCH 正文为:

{
"HttpPushUriTargetsBusy" : false
}