跳到主要内容

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

客户端可以选择在 POST 请求中包含“Content-Length”标头以指示 POST 正文大小。XCC2 检查此标头并验证固件更新是否支持此大小。如果文件大小超出此服务可以支持的大小,则将返回代码 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. 将 HttpPushUriOptions/HttpPushUriApplyTime/ApplyTime 更新为“Immediate”或“OnReset”。

    PATCH 正文为:

    {
    "HttpPushUriOptions": {
    "HttpPushUriApplyTime": {
    "ApplyTime": "Immediate"
    }
    }
    }

  4. 将固件映像推送到 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 属性中将引用任务监控器资源。

  5. 客户端需要定期检查任务的 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.
    }

  6. 客户端需要检查作业,直至其状态变为“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"
    }

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

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

    PATCH 正文为:

    {
    "HttpPushUriTargets" : [ ]
    }

  8. 将 HttpPushUriTargetsBusy 更新为 false。

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

    PATCH 正文为:

    {
    "HttpPushUriTargetsBusy" : false
    }