【已评审】并行升级新增资源协作接口及错误引擎

并行升级特性逻辑需要新增资源协助接口及错误引擎,具体内容如下:

评审点一:

背景:并行升级接口除了支持多个固件并行升级外,还需要支持一次接口调用批量下发请求,其redfish接口样例如下(待评审),为配合该接口实现,需要新增资源协作接口单次请求下发多个升级任务

URL: redfish/v1/UpdateService/Actions/Oem/Huawei/UpdateService.ParallelUpdate
请求参数:
    {
        "ActivatedImmediately": false/true, // 备用名称:ActivatedAutomatically
        "Packages": [
            {
                "TaskName": taskname, // BMC
                "ImageURI": filepath,
                "TransferProtocol": protocol,
                "BiosActiveMode": biosactivemode,
                "SystemId": systemid
            },
            {
                "TaskName": taskname, // CPLD
                "ImageURI": filepath,
                "TransferProtocol": protocol,
                "BiosActiveMode": biosactivemode,
                "SystemId": systemid
            }
        ]
    }
响应消息体举例:
    {
        "@odata.context": "/redfish/v1/$metadata#TaskService/Tasks/Members/$entity", 
        "@odata.type": "#Task.v1_0_2.Task", 
        "@odata.id": "/redfish/v1/TaskService/Tasks/1", 
        "Id": "1", 
        "Name": "Update Task"
        "TaskState": "Running", 
        "StartTime": "2016-11-28T10:36+00:00", 
        "Messages": [], 
        "SubTasks": {
            "@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks"
        }
        "Oem": { 
            "Huawei": { 
                "TaskPercentage": null
            } 
        } 
    }  

评审点:

UpdateService 资源协作接口新增方法:ParallelUpdate
path: /bmc/kepler/UpdateService
interface : bmc.kepler.UpdateService

方法说明:

项目
方法名称 ParallelUpdate
变化类型 新增
权限 BasicSetting
请求签名 a{ss}a(sa{ss})
请求参数 UpgradeOptions:签名为 a{ss},表征当前升级的扩展参数集合,具体见参数说明:UpgradeOptions
Packages:签名为 a(sa{ss}),表征当前升级请求的固件集合,具体见参数说明:Packages
响应签名 uau
响应参数 TaskId:签名为 u,表征当前升级请求的任务标识
SubTaskIds:签名为 au,表征当前升级请求中每个固件升级的子任务标识集合

参数说明:UpgradeOptions
UpgradeOptions 用于承载本次请求所有的升级配置,具体的取值如下:

参数名称 签名 参数属性名称 参数属性取值 取值说明
UpgradeOptions a{ss} ActivatedImmediately “false”/“true” 本次升级完成后是否立即进行生效

参数说明:Packages
Packages 用于承载本次请求中各个升级包的升级信息,具体的取值如下:

参数名称 签名 参数属性名称 参数属性取值 取值说明
Packages s FilePath 本次升级固件的路径
Packages a{ss} AdditionalOptions 本次升级请求的额外参数集合,具体见参数说明:AdditionalOptions

参数说明:AdditionalOptions

参数名称 签名 参数属性名称 参数属性取值 取值说明
AdditionalOptions a{ss} BiosActivatedScope “IMU”/“IMP”/ “IMF”/ “SCC” BIOS无感升级生效区域(仅对BIOS升级有效)

评审点二:

背景:对于不支持同时升级的固件,固件管理需要支持通用能力,通过CSR配置实现并行升级互斥:

评审点:

添加私有对象:

    // 模型定义:
    "MutuallyExclusiveFirmwares": {
        "CurrentFirmwareId": {
            "baseType": "String",
            "description": "正在升级的固件ID"
        },
        "ExclusiveFirmwareIds": {
            "baseType": "String[]",
            "description": "禁止升级的固件ID列表"
        }
    }

    // 配置样例:
    "MutuallyExclusiveFirmwares_BMC": {
        "CurrentFirmwareId": "0x0000001100000022",
        "ExclusiveFirmwareIds": [
            "0x0000003300000044",
            "0x0000005500000066"
        ]
    }

备注:
CurrentFirmwareIdExclusiveFirmwareIds 属性元素由组件的 固件标识(ComponentId) 以及 固件扩展标识(ComponentIdEx) 组成一个8字节的字符串,其中 固件标识 位于高4字节。
具体的 固件标识 以及 固件扩展标识 请参考社区文档中心:BMC支持升级固件信息

评审点三:并行升级相关错误引擎新增

场景1:并行升级特性要求对等待升级的任务数量做限制,超过最大支持的待升级任务后,再次调用并行升级接口要报错,新增如下错误引擎:
"ConcurrentReachedLimit": {
    "Description": "Indicates that an operation has been requested, but the operation failed because the number of concurrent operation exceeds the limit.",
    "Message": "The operation failed because the number of concurrent operation has reached the limit %1.",
    "Severity": "Warning",
    "NumberOfArgs": 1,
    "ParamTypes": [
        "string"
    ],
    "Resolution": "Try again later.",
    "HttpStatusCode": 503,
    "IpmiCompletionCode": "0xD5", // Cannot execute command. Command, or request parameter(s), not supported in present state.
    "SnmpStatusCode": 5,
    "TraceDepth": 0
}
场景2:固件统一生效任务不允许重入,即当前已经处于固件统一生效状态时,再次调用统一生效按钮要报错,新增如下错误引擎:
"ActivationInProgress": {
    "Description": "Indicates that activation is in progress",
    "Message": "An activation is in progress. Please wait.",
    "Severity": "Warning",
    "Resolution": "Wait until the activated operation is complete.",
    "HttpStatusCode": 400,
    "IpmiCompletionCode": "0xD5", // Cannot execute command. Command, or request parameter(s), not supported in present state.
    "SnmpStatusCode": 5,
    "TraceDepth": 0
}

评审结论

  • 评审点1:通过,同意 bmc.kepler.UpdateService 接口新增方法 ParallelUpdate
  • 评审点2:通过,同意新增MutuallyExclusiveFirmwares私有对象,同时需要做好对应的配置指导说明
  • 评审点3:通过,同意新增错误引擎:ConcurrentReachedLimitActivationInProgress

评审点3:使用类型进行抽象设计,然后使用多个实例根据不同的产品的硬件固件类型支持灵活配置。具体的配置实例样例如下:

MutexComponents_BMC: {
  FirmwareType: "BMC", 
  MutexComponents: ["CPLD_1", "CPLD_1"]
},
MutexComponents_BIOS: {
  FirmwareType: "BIOS_1", 
  MutexComponents: ["CPLD_1", "CPLD_1"]
}