*openUBMC 支持单板上多主机的上下电灵活配置*

[TOC]

# 1.功能分析
## 1.1 功能背景

在新一代XX节点上，一个BCU主板上会有两个不同的ComputerSystem运行，每个ComputerSystem均有独立的上下电信号

## 1.2 功能描述

支持独立上下电以及全域上下电操作以及错峰上下电

## 1.3 功能场景

1.支持独立的ComputerSystem的上下电操作，上下电操作包括：上电、下电、强制下电、强制重启、安全下电再上电  
2.支持全域的上下电操作，其中全域包括计算域和交换域，上下电操作包括：全域下电、全域重启、全域下电再上电  
3.BMC的WEB首页右上角的电源按钮已经支持上下电菜单（产业已完成），需要针对上述的8个上下电操作匹配后端的上下电处理，其中：  
（1）上电、下电、强制下电、强制重启、安全下电再上电仅针对计算域，对计算域下的所有ComputerSystem执行对应的上下电操作  
（2）全域下电、全域重启、全域下电再上电操作针对全域，对节点上的计算域和交换域执行对应的上下电操作  
4.首次通电开机/AC后上电策略：默认是给计算域上电，上电采用错峰的方式进行上电（当前已支持通电开机策略以及错峰上电策略）  
5.对计算域进行整体下电操作时，需要支持错峰下电间隔（当前硬件使用的是同一个偏移的硬件信号），默认是无间隔，支持产业配置  
## 1.4 功能列表
| 需求类型 | 需求编号 | 需求标题 |需求描述|
| ------- | ------- | -------- | -------- |
| SR | SR20260109595138 | 支持单板上多主机的上下电灵活配置 |【简要说明】支持单板上多主机的上下电灵活配置<br>背景：在新一代xx节点上，一个BCU主板上会有两个不同的ComputerSystem运行，每个ComputerSystem均有独立的上下电信号<br>【系统用户】产业运维、社区运维<br>【前置条件】BMC运行正常<br>【主成功场景】<br>1.支持独立的ComputerSystem的上下电操作，上下电操作包括：上电、下电、强制下电、强制重启、安全下电再上电<br>2.支持全域的上下电操作，其中全域包括计算域和交换域，上下电操作包括：全域下电、全域重启、全域下电再上电<br>3.BMC的WEB首页右上角的电源按钮已经支持上下电菜单（产业已完成），需要针对上述的8个上下电操作匹配后端的上下电处理，其中：<br>（1）上电、下电、强制下电、强制重启、安全下电再上电仅针对计算域，对计算域下的所有ComputerSystem执行对应的上下电操作<br>（2）全域下电、全域重启、全域下电再上电操作针对全域，对节点上的计算域和交换域执行对应的上下电操作<br>4.首次通电开机/AC后上电策略：默认是给计算域上电，上电采用错峰的方式进行上电（当前已支持通电开机策略以及错峰上电策略）<br>5.对计算域进行整体下电操作时，需要支持错峰下电间隔（当前硬件使用的是同一个偏移的硬件信号），默认是无间隔，支持产业配置<br>【扩展场景(含异常场景)】<br>【约束】<br>【非功能需求】<br>（1）可靠性要求：不涉及<br>（2）可维护性要求：不涉及，当前上下电操作已有对应的日志记录<br>（3）可测试性要求：可以使用xx产业环境WEB进行对应的操作<br>（4）性能要求：不涉及<br>（5）兼容性要求(和以前版本及周边配套)：继承xx等多主机的上下电策略，并且在策略的默认值和现状保持一致，兼容历史版本和机型配置<br>（6）安全要求：不涉及<br>（7）韧性要求：不涉及|


# 2.功能设计
## 2.1 总体方案分析

### 2.1.1 方案详细设计
#### 2.1.1.1 方案概述
1-4点当前能力已支持，仅需实现第5点  
CSR中配置StaggeredPowerOffInterval属性，默认值为0，支持配置下电错峰时间间隔（单位：s）;  
参考错峰上电功能实现计算域整体错峰下电  

#### 2.1.1.2 开发视图

#### 2.1.1.3 运行视图
@startuml
actor User as 用户
participant "chassis_powerctrl_api" as A
participant "chassis_power_off" as B
participant "all_host_power_off" as C
participant "power_off_cq" as Queue
participant "create_power_off_task" as D

用户 -> A: 触发操作
activate A

A -> B: 调用
activate B

B -> C: 调用
activate C

loop 循环添加host
    C -> Queue: 添加对象power_action
    note right: 多个power_action依次入队
end

C -> D: 调用
activate D

loop 直到队列为空
    D -> Queue: 尝试取出power_action
    alt 队列非空
        Queue --> D: 取出当前power_action
        D -> D: 对当前主机执行下电操作并延时
    else 队列为空
        Queue --> D: 无元素
        note right: 退出循环
    end
end

deactivate D
deactivate C
deactivate B
deactivate A
@enduml

### 2.1.2 内部依赖分析

不涉及

### 2.1.3 外部依赖分析

不涉及

### 2.1.4 北向接口分析

不涉及

### 2.1.5 兼容性分析

继承xx等多主机的上下电策略，并且在策略的默认值和现状保持一致，兼容历史版本和机型配置

### 2.1.6 定制化接口分析
不涉及

### 2.1.7 导入导出分析
不涉及导入导出配置变更

### 2.1.8 传感器分析
不涉及新增传感器

### 2.1.9 精准告警事件分析
不涉及

### 2.1.10 系统锁定分析
不涉及

### 2.1.11 用例场景分析
| 用例编号 | 描述 | 预置条件 | 测试步骤 | 用例预期 |
| ------- | ------- | ------- | ------- | ------- |
| Case1 | 独立ComputerSystem上下电操作 | BMC功能正常 | web端通过按钮执行上下电操作 | 上下电功能正常 |
| Case2 | 全域上下电操作 | BMC功能正常 | web端通过按钮执行上下电操作 | 上下电功能正常 |
| Case3 | 错峰上电验证 | BMC功能正常 | 执行AC操作 | 正常上电，间隔时间为1min |
| Case4 | 错峰下电验证 | BMC功能正常 | 配置下电错峰时间，计算域全域下电 | 正常下电，间隔时间为配置时间 |



## 2.2 非功能质量属性设计
### 2.2.1 扩展性分析

不涉及
### 2.2.2 重用性分析
不涉及

### 2.2.3 可测试性分析
可以使用xx的产业环境WEB进行对应的操作

### 2.2.4 资料分析
不涉及

### 2.2.5 资源使用分析
不涉及

### 2.2.6 可靠性分析(含SFMEA)

不涉及

### 2.2.7 安全性分析

| 安全合规项 | 是否涉及 | 现有的防护措施 |
| --- | --- | --- |
| 访问控制（通道、文件权限、用户权限、查询权限、配置权限、接口权限） | 否 | 不涉及 |
| 敏感数据 | 否 | 不涉及敏感数据处理 |
| 日志（操作日志、维护日志、安全日志、运行日志） | 是 | 1. 待下电主机队列为空时输出[fructrl proxy] power off queue is empty <br>2. 成功执行下电操作时输出[fructrl proxy] host %s call power off, cause: %s <br> |
| 文档 | 否 | 不涉及文档安全 |
| 加密及算法 | 否 | 不涉及加密算法 |
| 新增关键资源（密钥、证书、关键配置）备份、恢复 | 否 | 不涉及密钥证书管理 |
| 新增对外接口入参校验 | 否 | 不涉及新增对外接口 |
| 新增开源及三方软件引入 | 否 | 不涉及新的开源软件引入 |

# 3.功能实现

## 3.1 功能实现设计

all_host_power_off函数中将所有主机信息添加到power_off_cq队列中，调用create_power_off_task函数执行错峰下电任务  
create_power_off_task中从队列中循环取出主机信息并对其进行下电操作，同时根据错峰时间进行延时操作

## 3.2 功能详细设计



## 3.3 开发者测试

### 3.3.1 单元测试

### 3.3.2 集成测试
| 组件名 | 用例类型 |  描述 | 预置条件 | 测试步骤 | 用例预期 |
| --- | --- | --- | --- | --- |  --- |  
| fructrl | IT | 独立ComputerSystem上下电操作 | BMC功能正常 | 执行对应上下电操作 | 上下电功能正常 |
| fructrl | IT | 全域上下电操作 | BMC功能正常 | 执行对应上下电操作 | 上下电功能正常 |
| fructrl | IT | 错峰上电验证 | BMC功能正常 | 执行AC操作 | 正常上电，间隔时间为1min |
| fructrl | IT | 错峰下电验证 | BMC功能正常 | 配置下电错峰时间，计算域全域下电 | 正常下电，间隔时间为配置时间 |