背景
当BMC自身硬件发生故障需要更换备件时,更换后需要恢复BMC的客户配置,因此支持了一键导出/导入配置包功能。但当前新增配置包内容或导入导出操作,都需要侵入式修改资源协作接口实现,不利于后续拓展,因此需要新增支持配置包导入导出灵活拓展配置项,支持拓展配置包内容和操作的同时不影响导入导出配置包的实现。
相关评审链接
关联ISSUE
整体方案
需要新增导入导出配置包拓展配置项的组件,需要新增资源协作接口,支持配置包导入导出灵活拓展配置项。
评审点
- 新增资源协作接口及接口下属性、方法,供配置包导入/导出接口获取操作必要参数。
详细描述
评审点1:新增资源协作接口及接口下属性,供配置包导入/导出接口获取操作必要参数。
需要新增导入导出配置包拓展配置项的组件,实现以下两个资源协作接口,供配置包导入/导出框架发现并编排调用。
接口一:ImportBundleOperation(导入配置包阶段的操作)
方案A(参考JobService):
资源Path:/bmc/kepler/ConfigurationService/ConfigurationOperations/:OperationName
资源Interface:bmc.kepler.ConfigurationService.ImportBundleOperation
方案B(参考Configuration对象)
资源Path:/bmc/kepler/Managers/:ManagerId/Configurations/ConfigurationOperations/:OperationName
资源Interface:bmc.kepler.Managers.Configurations.ImportBundleOperation
变化类型:新增接口
属性:
| 属性名称 | 类型 | 读写 | 描述 | 示例 |
|---|---|---|---|---|
| ConfigurationType | String | 只读 | 配置操作类型,标识该操作对应的配置项类型 | ImagePreference |
| MaxExecutionTime | U32 | 只读 | 操作最大执行时间,超时将自动判定为执行失败,单位:秒 | 300 |
| Privilege | String | 只读 | 操作需要的权限 | [“BasicSetting”, “UserMgmt”] |
方法:
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 |
|---|---|---|---|---|---|
| Validate | a{ss}s | Context: 方法调用上下文(a{ss});Content: 编排文件配置内容(s) | b | Result: 配置校验结果,true表示校验通过,false表示校验不通过 | 对编排文件配置内容在进行校验 |
| Run | a{ss}s | Context: 方法调用上下文(a{ss});Content: 编排文件配置内容(s) | u | TaskId: 执行操作返回的task_id(u),立即执行完成的操作返回0 | 执行导入操作,导入配置内容从内部固定路径获取 |
JSON定义:
{
"bmc.kepler.ConfigurationService.ImportBundleOperation": {
"properties": {
"ConfigurationType": {
"baseType": "String",
"readOnly": true,
"options": {
"emitsChangedSignal": "false"
},
"description": "配置操作类型,标识该操作对应的配置项类型",
"example": "ImagePreference"
},
"MaxExecutionTime": {
"baseType": "U32",
"readOnly": true,
"options": {
"emitsChangedSignal": "false"
},
"description": "操作最大执行时间,超时将自动判定为执行失败,单位:秒",
"example": 300
},
"Privilege": {
"baseType": "String[]",
"readOnly": true,
"options": {
"emitsChangedSignal": "false"
},
"description": "操作需要的权限",
"example": ["BasicSetting", "UserMgmt"]
}
},
"methods": {
"Validate": {
"description": "对编排文件配置内容进行校验",
"req": {
"Content": {
"baseType": "String",
"description": "编排文件配置内容"
}
},
"rsp": {
"Result": {
"baseType": "Boolean",
"description": "配置校验结果,true表示校验通过,false表示校验不通过"
}
}
},
"Run": {
"description": "执行导入操作",
"req": {
"Content": {
"baseType": "String",
"description": "编排文件配置内容"
}
},
"rsp": {
"TaskId": {
"baseType": "U32",
"description": "执行操作返回的task_id,立即执行完成的操作返回nil"
}
}
}
}
}
}
接口二:ExportBundleOperation(导出配置包阶段的操作)
方案A(参考JobService):
资源Path:/bmc/kepler/ConfigurationService/ConfigurationOperations/:OperationName
资源Interface:bmc.kepler.ConfigurationService.ExportBundleOperation
方案B(参考Configuration对象):
资源Path:/bmc/kepler/Managers/:ManagerId/Configurations/ConfigurationOperations/:OperationName
资源Interface:bmc.kepler.Managers.Configurations.ExportBundleOperation
变化类型:新增接口
属性:
| 属性名称 | 类型 | 读写 | 描述 | 示例 |
|---|---|---|---|---|
| ConfigurationType | String | 只读 | 配置操作类型,标识该操作对应的配置项类型 | ImagePreference、Firmware等 |
| MaxExecutionTime | U32 | 只读 | 操作最大执行时间,超时将自动判定为执行失败,单位:秒 | 300 |
| Privilege | String | 只读 | 操作需要的权限 | [“BasicSetting”, “UserMgmt”] |
方法:
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 |
|---|---|---|---|---|---|
| Run | a{ss} | Context: 方法调用上下文(a{ss}) | u | TaskId: 执行操作返回的task_id(u),立即执行完成的操作返回0 | 执行导出操作,导出文件路径为内部固定路径 |
JSON定义:
{
"bmc.kepler.ConfigurationService.ExportBundleOperation": {
"properties": {
"ConfigurationType": {
"baseType": "String",
"readOnly": true,
"options": {
"emitsChangedSignal": "false"
},
"description": "配置操作类型,标识该操作对应的配置项类型",
"example": "ImagePreference"
},
"MaxExecutionTime": {
"baseType": "U32",
"readOnly": true,
"options": {
"emitsChangedSignal": "false"
},
"description": "操作最大执行时间,超时将自动判定为执行失败,单位:秒",
"example": 300
},
"Privilege": {
"baseType": "String[]",
"readOnly": true,
"options": {
"emitsChangedSignal": "false"
},
"description": "操作需要的权限",
"example": ["BasicSetting", "UserMgmt"]
}
},
"methods": {
"Run": {
"description": "执行导出操作",
"req": {},
"rsp": {
"TaskId": {
"baseType": "U32",
"description": "执行操作返回的task_id,立即执行完成的操作返回nil"
}
}
}
}
}
}
是否准备好AI预审
否