【已评审】Redfish支持串/并行升级暂存机制

背景

在当前BMC管理的设备部件中,由于硬件形态越来越复杂,部件越来越多,对于现网运维来说,需要在保证业务不中断的情况下进行升级诉求很高。因此BMC规划提供固件升级暂存机制,允许客户升级固件时,不立即生效固件(在业务许可的情况下将固件应用到具体的设备)

满足最新的 Redfish 规范中对于暂存固件的支持,构筑领先友商的运维体验,作为竞标引导项

关联ISSUE

暂无

整体方案

  1. Redfish 升级接口支持升级暂存选项
  2. Redfish接口支持升级暂存生效
  3. Redfish提供弃用暂存固件的接口
  4. Redfish接口支持升级暂存任务查询/固件是否支持升级暂存

评审点一 Redfish 升级接口支持升级暂存选项

详细描述

串行升级支持固件暂存
URI: /redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate
操作类型:POST
操作权限: BasicSetting
变更类型:请求中新增标准属性参数Stage
请求参数:

{
    …
    “ImageURI”: “/tmp/BIOS.hpm”,  // 固件URI
    “Stage”: true // 表征当前固件不升级,仅暂存
    …
}

响应参数:保持不变,使用Task进行返回

参数 类型 取值 可选/必选 备注
Stage boolean true/false 可选 指示固件是否暂存,暂存后可通过“FirmwareInventory”资源的“Activate”操作进行激活(见评审点二)

并行升级支持固件暂存
URI: /redfish/v1/UpdateService/Actions/Oem/Huawei/UpdateService.ParallelUpdate
操作类型:POST
操作权限: BasicSetting
变更类型:请求中新增请求参数,参数为标准属性Stage
请求参数:

{ 
    “Packages”:[
        {
            …
            “ImageURI”: “/tmp/BMC.hpm”,  // 固件URI
            “Stage”: false // 表征当前固件升级
            …
        },
        { 
            “ImageURI”: “/remote/sftp://remote/BIOS.hpm”,  // 固件URI
            “Stage”: true // 表征当前固件不升级,仅暂存
            …
        }
    ]
}

响应参数:保持不变,使用 Task / SubTasks 进行返回

参数 类型 取值 可选/必选 备注
Stage boolean true/false 可选 指示固件是否暂存,暂存后可通过“FirmwareInventory”资源的“Activate”操作进行激活(见评审点二)

评审点二 Redfish提供激活生效暂存固件的接口

详细描述

URI: /redfish/v1/UpdateService/Actions/UpdateService.Activate
操作类型:POST
操作权限: BasicSetting
变更类型:新增标准 Action 资源
请求参数:

{ 
    “Targets”:[
        {
            “@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/CPLD.hpm”,  // 缓存固件URI
        },
        { 
            “@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/BIOS.hpm”,  // 缓存固件URI
        }
    ]
}

响应参数:
成功:HTTPCode:202,按照 Task/SubTask 进行返回
失败:
如果是找不到激活生效的固件URI:HTTPCode:400 (Invalid Request)
如果激活生效失败:HTTPCode:500,返回 Redfish 错误消息(按照实际情况返回)

评审点三 Redfish提供弃用暂存固件的接口

详细描述

URI: /redfish/v1/UpdateService/Actions/Oem/{OemIdentifier}/UpdateService. DiscardStagedFirmwares
操作类型:POST
操作权限: BasicSetting
变更类型:新增OEM Action 资源
请求参数:

{ 
    “Targets”:[
        {
            “@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/CPLD.hpm”,  // 缓存固件URI
        },
        { 
            “@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/BIOS.hpm”,  // 缓存固件URI
        }
    ]
}

响应参数:
成功:HTTPCode:202,按照 Task/SubTask 进行返回
失败:
如果是找不到暂存的固件URI:HTTPCode:400 (Invalid Request)
如果弃用暂存失败:HTTPCode:500,返回 Redfish 错误消息(按照实际情况返回)

评审点四 Redfish提供查询暂存固件接口

详细描述

URI: /redfish/v1/UpdateService/FirmwareInventory/:FirmwareId
操作类型:GET
操作权限:ReadOnly
变更类型:响应中新增标准属性参数Staged
请求参数:保持现状
响应参数:

{
    …
    “SoftwareId”: “BIOS-BIOS”,  // 固件的唯一标识
    “Staged”: true // 表征当前固件是否为暂存固件
    …
}
参数 类型 取值 备注
Staged boolean true/false 当前固件是否为暂存固件

评审点五 Redfish提供查询允许暂存的固件的接口

详细描述

URI: /redfish/v1/UpdateService/UpdateServiceCapabilities
操作类型:GET
操作权限:ReadOnly
变更类型:新增标准资源
请求参数:无
响应参数:

{
    "@odata.type": "#UpdateServiceCapabilities.v1_0_0.UpdateServiceCapabilities",
    "Id": "UpdateServiceCapabilities",
    "Name": "Update Service Capabilities",
    "AllowableStaging": [
        "/redfish/v1/Managers/BMC",
        "/redfish/v1/Systems/437XR1138R2"
    ],
    "@odata.id": "/redfish/v1/UpdateService/UpdateServiceCapabilities"
}
参数 类型 取值 备注
AllowableStaging array (string) - 当前支持暂存的固件设备

评审结论

通过,具体结论如下:

  1. 同意 Redfish Action /redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate 请求中增加参数 Stage,表征当前升级的固件是否暂存,可选参数,默认值为 false
  2. 同意 Redfish Action /redfish/v1/UpdateService/Actions/Oem/Huawei/UpdateService.ParallelUpdate 请求 Packages 中的每个元素增加参数 Stage,表征当前升级的固件是否暂存,可选参数,默认值为 false
  3. 同意 Redfish 新增 Action /redfish/v1/UpdateService/Actions/Oem/{OemIdentifier}/UpdateService. DiscardStagedFirmwares,表征弃用已经暂存的固件,接口操作类型为 POST,操作权限为 BasicSetting;请求参数为 Targets,是弃用的固件 FirmwareInventory 资源的具体链接;响应参数为 Task/SubTask
  4. 同意 Redfish 资源 /redfish/v1/UpdateService/FirmwareInventory/:FirmwareId 中新增标准属性 Staged,属性类型为 boolean,表征当前资源表征的固件是否是暂存固件
  5. 同意新增 Redfish 标准资源 /redfish/v1/UpdateService/UpdateServiceCapabilities,对应资源版本为 v1.0;资源下新增属性 AllowableStaging,属性类型为 array(string),表征支持暂存固件的设备资源

遗留问题