背景
部分异步任务可能存在子任务信息,为了便于用户查询子任务状态,提供redfish SubTasks机制。例如,通过redfish接口进行并行升级的操作时,需要提供查询并行升级子任务的能力,便于运维人员/系统实时感知各个升级任务的进度和状态。
整体方案
新增查询子任务集合资源和查询子任务资源信息的Redfish接口。在rackmount仓的ProcessingFlow配置中,映射类型为Task时,Destination下可以通过新增SubTaskIds配置将子任务对接到redfish任务管理流程,用户配置SubTaskIds后,根据配置的SubTaskIds来识别子任务,并通过查询子任务资源信息的接口获取各个升级任务的进度和状态。
SubTaskIds配置示例
"ProcessingFlow": [
{
"Type": "Task",
"Path": "xxx",
"Interface": "xxx",
"Name": "xxx",
"Params": [
],
"Destination": {
"TaskId": "TaskId",
"SubTaskIds": "SubTaskIds"
},
...
}
]
评审点
一、查询指定任务资源信息的Redfish接口/redfish/v1/TaskService/Tasks/{TaskId},响应体新增标准属性SubTasks
二、新增查询子任务集合资源的Redfish标准接口:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks
三、新增查询子任务资源信息的Redfish标准接口:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks/{TaskId2}
四、在rackmount仓的ProcessingFlow配置中,映射类型为Task时,Destination下新增SubTaskIds的配置。
详细描述
一、查询指定任务资源信息的Redfish接口/redfish/v1/TaskService/Tasks/{TaskId},响应体新增标准属性SubTasks
URI:/redfish/v1/TaskService/Tasks/{TaskId}
操作类型: GET
应用场景:查询任务的信息
详细描述:
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 是否频繁变化并需要屏蔽变化事件 | 操作权限 | 描述 |
|---|---|---|---|---|---|---|
| SubTasks | object | NA | NA | 否 | ReadOnly | 指向该任务的子任务集合链接。如果不存在子任务,则不展示该属性。 |
| @odata.id | string | NA | NA | 否 | ReadOnly | 子任务集合链接 |
响应样例
{
...
"SubTasks": {
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks"
}
...
}
SubTasks的标准schema
"SubTasks": {
"$ref": "http://redfish.dmtf.org/schemas/v1/TaskCollection.json#/definitions/TaskCollection",
"description": "The link to a collection of sub-tasks for this task.",
"longDescription": "This property shall contain a link to a resource collection of type `TaskCollection`. This property shall not be present if this resource represents a sub-task for a task.",
"readonly": true,
"versionAdded": "v1_5_0"
}
二、新增查询子任务集合资源的Redfish标准接口:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks
URI:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks
操作类型: GET
应用场景:查询子任务集合资源
详细描述:
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 是否频繁变化且 需要屏蔽变化事件 |
操作权限 | 描述 |
|---|---|---|---|---|---|---|
| @odata.context | string | NA | “/redfish/v1/$metadata#TaskCollection.TaskCollection” | 否 | ReadOnly | 子任务集合资源的OData描述信息 |
| @odata.type | string | NA | “#TaskCollection.TaskCollection” | 否 | ReadOnly | 子任务集合资源schema版本号 |
| @odata.id | string | NA | NA | 否 | ReadOnly | 子任务集合资源URI的访问路径 |
| Name | string | NA | “SubTasks Collection” | 否 | ReadOnly | 子任务集合资源名称 |
| Members@odata.count | integer | NA | NA | 否 | ReadOnly | 子任务资源的成员个数 |
| Members | array | NA | NA | 否 | ReadOnly | 子任务资源的成员链接数组 |
| @odata.id | string | NA | NA | 否 | ReadOnly | 子任务资源的成员链接 |
响应样例
{
"@odata.context": "/redfish/v1/$metadata#TaskCollection.TaskCollection",
"@odata.type": "#TaskCollection. ",
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks",
"Name": "SubTasks Collection",
"Members@odata.count": 2,
"Members": [
{
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks/1"
},
{
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks/2"
}
]
}
三、新增查询子任务资源信息的Redfish标准接口:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks/{TaskId2}
URI:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks/{TaskId2}
操作类型: GET
应用场景:查询子任务资源信息
详细描述:
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 是否频繁变化且 需要屏蔽变化事件 |
操作权限 | 描述 |
|---|---|---|---|---|---|---|
| @odata.context | string | NA | “/redfish/v1/$metadata#Task.Task” | 否 | ReadOnly | 子任务的OData描述信息 |
| @odata.type | string | NA | NA | 否 | ReadOnly | 子任务的schema版本号 |
| @odata.id | string | NA | NA | 否 | ReadOnly | 子任务URI的访问路径 |
| Id | string | NA | NA | 否 | ReadOnly | 子任务的ID |
| Name | string | NA | NA | 否 | ReadOnly | 子任务的名称 |
| Description | string | NA | NA | 否 | ReadOnly | 子任务的描述 |
| TaskState | string | NA | NA | 否 | ReadOnly | 子任务的状态,取值如下。 New Starting Running Suspended Interrupted Pending Stopping Completed Killed Exception Service |
| TaskStatus | string | NA | NA | 否 | ReadOnly | 子任务的完成状态。 OK Warning Major Critical |
| StartTime | string | NA | NA | 否 | ReadOnly | 子任务的起始时间。 |
| EndTime | string | NA | NA | 否 | ReadOnly | 子任务完成的日期和时间。此属性仅在任务完成后才会显示。 |
| EstimatedDuration | string | NA | NA | 否 | ReadOnly | 预估子任务完成总时间。当前仅并行升级的子任务支持该属性。 取值类型为字符串,格式满足正则表达式: ^P(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$ 比如PT4M表示预估完成时间为4分钟 |
| Messages | object | NA | NA | 否 | ReadOnly | 子任务相关消息 |
| @odata.type | string | NA | NA | 否 | ReadOnly | 子任务相关消息的schema版本号 |
| MessageId | string | NA | NA | 否 | ReadOnly | 子任务相关消息的信息编号 |
| RelatedProperties | array | NA | NA | 否 | ReadOnly | 子任务属性描述 |
| Message | string | NA | NA | 否 | ReadOnly | 子任务信息 |
| MessageArgs | array | NA | NA | 否 | ReadOnly | 子任务的详细信息 |
| Severity | string | NA | NA | 否 | ReadOnly | 子任务状态: OK Warning Critical |
| Resolution | string | NA | NA | 否 | ReadOnly | 解决子任务状态的处理建议 |
| MessageSeverity | string | NA | NA | 否 | ReadOnly | 子任务状态: OK Warning Critical |
| PercentComplete | integer | NA | NA | 否 | ReadOnly | 子任务完成的百分比进度。 |
| Oem | object | NA | NA | 否 | ReadOnly | 自定义属性 |
| openUBMC | object | NA | NA | 否 | ReadOnly | 厂商标志 |
| TaskPercentage | string | NA | NA | 否 | ReadOnly | 子任务完成进度。 |
任务进行中的响应样例
{
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"@odata.type": "#Task.v1_7_4.Task",
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks/1",
"Id": "1",
"Name": "Test SubTask Name",
"Description": "",
"TaskState": "Running",
"TaskStatus": "OK",
"StartTime": "2026-01-04T11:37:31+00:00",
"EstimatedDuration": "PT6M",
"Messages": [],
"PercentComplete": 10,
"Oem": {
"openUBMC": {
"TaskPercentage": "10%"
}
}
}
任务完成时的响应样例
{
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"@odata.type": "#Task.v1_7_4.Task",
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks/1",
"Id": "1",
"Name": "Test SubTask Name",
"Description": "",
"TaskState": "Completed",
"TaskStatus": "OK",
"StartTime": "2026-01-04T11:37:31+00:00",
"EndTime": "2026-01-04T11:38:35+00:00",
"EstimatedDuration": "PT6M",
"Messages": {
"@odata.type": "#Message.v1_0_0.Message",
"MessageId": "iBMC.1.0.TestSubTaskOK",
"RelatedProperties": [],
"Message": "Successfully SubTask.",
"MessageArgs": [],
"Severity": "OK",
"Resolution": "None",
"MessageSeverity": "OK"
},
"PercentComplete": 100,
"Oem": {
"openUBMC": {
"TaskPercentage": "100%"
}
}
}
四、在rackmount仓配置ProcessingFlow中,映射类型为Task时,Destination新增SubTaskIds的配置
当ProcessingFlow的映射类型为Task时,如果存在子任务,可以在Destination新增配置:SubTaskIds
配置示例
"ProcessingFlow": [
{
"Type": "Task",
"Path": "xxx",
"Interface": "xxx",
"Name": "xxx",
"Params": [
],
"Destination": {
"TaskId": "TaskId",
"SubTaskIds": "SubTaskIds"
},
...
}
]
评审结论
一、同意redfish接口/redfish/v1/TaskService/Tasks/{TaskId}的响应体新增标准属性SubTasks
二、同意新增查询子任务集合资源的Redfish标准接口:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks
三、同意新增查询子任务资源信息的Redfish标准接口:/redfish/v1/TaskService/Tasks/{TaskId}/SubTasks/{TaskId2}
四、同意在rackmount仓配置ProcessingFlow中,映射类型为Task时,可以通过Destination增加SubTaskIds配置来讲子任务对接到redfish 任务管理流程中
具体接口信息见详细描述
遗留问题
1、需要在资源协作接口的规范中注明:异步执行方法,响应体需要返回TaskId;若是含有子任务,则还需要返回子任务Id的数组:SubTaskIds。
结论:已闭环
SubTaskIds说明
