# Redfish 校验器工具使用指导

## 目录

- [概述](#概述)
- [Protocol 校验器](#protocol-校验器)
- [Interop 校验器](#interop-校验器)
- [Service 校验器](#service-校验器)
- [通用功能](#通用功能)
- [常见问题](#常见问题)

---

## 概述

本工具用于部署、执行和分析 DMTF Redfish 校验器测试结果，采用模块化架构设计。

### 支持的校验器

| 校验器 | 说明 | 状态 |
|--------|------|------|
| **redfish_protocol_validator** | 测试 HTTP 协议行为合规性 | ✅ 已支持 |
| **redfish_service_validator** | 验证器件接口与 Schema 的合规性 | ✅ 已支持 |
| **redfish_interop_validator** | 根据配置文件验证接口操作 | ✅ 已支持 |

### 主要功能

1. **deploy** - 通过 pip 安装 Redfish 校验器包
2. **validate** - 执行校验器并生成测试报告
3. **analyze** - 解析和分析校验器测试结果
4. **convert** - 将 TSV 文件转换为 CSV 或 XLSX 格式
5. **白名单过滤** - 灵活过滤不需要统计的 Assertion

---

## Protocol 校验器

### 快速开始

```bash
# 1. 安装校验器
python redfish_validator.py deploy -t protocol

# 2. 执行校验
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 --no-cert-check

# 3. 分析结果并过滤结果，白名单配置可参考工具目录下的whitelist.json文件
python redfish_validator.py analyze -t protocol -i reports -f html -o output -e path/to/whitelist.json
```

### 安装

```bash
# 安装最新版本
python redfish_validator.py deploy -t protocol

# 安装指定版本
python redfish_validator.py deploy -t protocol -v 1.3.0
```

### validate 命令

#### 基本用法

```bash
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100
```

#### 参数说明

| 参数 | 说明 | 必需 |
|------|------|------|
| `-t, --type` | 校验器类型，值为 `protocol` | 是 |
| `-u, --user` | 认证用户名 | 是 |
| `-p, --password` | 认证密码 | 是 |
| `-r, --rhost` | Redfish 服务地址（需包含协议） | 是 |

#### 日志控制

```bash
# 设置日志级别
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --log-level INFO

# 可选级别: DEBUG, INFO, WARNING, ERROR, CRITICAL
```

| 参数 | 说明 |
|------|------|
| `--log-level` | 日志级别（DEBUG/INFO/WARNING/ERROR/CRITICAL） |

#### 报告配置

```bash
# 生成 HTML 报告
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --report-type html --report-dir ./reports

# 生成 TSV 报告
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --report-type tsv --report-dir ./reports

# 同时生成两种格式
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --report-type both --report-dir ./reports
```

| 参数 | 说明 |
|------|------|
| `--report-dir` | 生成报告文件的目录 |
| `--report-type` | 报告类型（html/tsv/both） |

#### SSL/TLS 配置

```bash
# 禁用证书验证（用于测试环境）
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --no-cert-check

# 指定 CA 证书文件
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --ca-bundle /path/to/ca-bundle.crt

# 指定 CA 证书目录
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --ca-bundle /path/to/ca-dir
```

| 参数 | 说明 |
|------|------|
| `--no-cert-check` | 禁用主机 SSL 证书验证 |
| `--ca-bundle` | 包含受信任 CA 的文件或目录 |

#### HTTP 重定向控制

```bash
# 避免为不支持 HTTP 的服务生成 HTTP 重定向
python redfish_validator.py validate -t protocol -u admin -p password -r https://192.168.1.100 \
  --avoid-http-redirect
```

| 参数 | 说明 |
|------|------|
| `--avoid-http-redirect` | 避免为不支持 HTTP 的服务生成 HTTP 重定向 |

#### 完整示例

```bash
python redfish_validator.py validate -t protocol \
  -u admin \
  -p password \
  -r https://192.168.1.100 \
  --log-level INFO \
  --report-dir ./reports \
  --report-type html \
  --no-cert-check
```

### analyze 命令

Protocol 校验器支持 **TSV** 和 **HTML** 两种格式的分析。

```bash
# 分析 TSV 格式
python redfish_validator.py analyze -t protocol -i ./reports -f tsv -o ./output

# 分析 HTML 格式
python redfish_validator.py analyze -t protocol -i ./reports -f html -o ./output

# 使用白名单过滤
python redfish_validator.py analyze -t protocol -i ./reports -f html -o ./output -e exclude.json
```

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-i, --input` | 输入目录路径 | - |
| `-f, --format` | 输入文件格式（tsv/html） | tsv |
| `-o, --output` | 输出目录路径 | ./output |
| `-e, --exclude` | 白名单文件路径 | - |

### 白名单配置
1、白名单项必须要配置AssertionName，精准过滤某个测试行时，需要同时配置URI和Method
2、如果仅配置AssertionName，则过滤整个AssertionName对应的校验项
3、如果同时配置URI和Method，则精准过滤对应测试行
4、URI项支持正则表达式形式

```json
{
  "ExcludeRules": [
    {
      "Validator": "redfish_protocol_validator",
      "ExcludedAssertions": [
        {
          "AssertionName": "REQ_HEADERS_IF_MATCH"
        },
        {
          "AssertionName": "PROTO_HTTP_UNSUPPORTED_METHODS",
          "URI": "/redfish/v1/",
          "Method": "PATCH"
        }
      ]
    }
  ]
}
```

---

## Interop 校验器

### 快速开始

```bash
# 1. 安装校验器
python redfish_validator.py deploy -t interop

# 2. 准备 profile 文件
# 可以到官方的GitHub仓(仓名:HWMgmt-OCP-Profiles)中下载 Redfish Profile 文件（如 DSP8010_3.0.0.json）

# 3. 执行校验
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json

# 4. 分析结果并过滤结果，白名单配置可参考工具目录下的whitelist.json文件
python redfish_validator.py analyze -t interop -i logs -f html -o output -e path/to/whitelist.json
```

### 安装

```bash
# 安装最新版本
python redfish_validator.py deploy -t interop

# 安装指定版本
python redfish_validator.py deploy -t interop -v 1.3.0
```

### validate 命令

#### 基本用法

```bash
# 使用 profile 文件（位置参数）
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json

```

| 参数 | 说明 | 必需 |
|------|------|------|
| `-t, --type` | 校验器类型，值为 `interop` | 是 |
| `-u, --user` | 认证用户名 | 是 |
| `-p, --password` | 认证密码 | 是 |
| `-r, --rhost` | Redfish 服务地址 | 是 |
| `profile` | Profile 文件路径 | 是 |

#### 日志和配置

```bash
# 设置日志目录和详细输出
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --logdir ./logs \
  -v

# 更详细的输出
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  -vv

# 使用配置文件
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  -c config.json

# 启用调试模式
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --debugging
```

| 参数 | 说明 |
|------|------|
| `-v` | 增加详细输出级别（可累加：-v, -vv, -vvv） |
| `-c, --config` | 配置文件路径 |
| `--logdir` | 日志文件目录（默认: ./logs） |
| `--debugging` | 输出调试日志 |

#### 认证配置

```bash
# 使用 Token 认证
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --authtype Token --token "your-token"

# 使用 Basic 认证
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --authtype Basic

# 在非安全连接上强制认证
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --forceauth
```

| 参数 | 说明 |
|------|------|
| `--authtype` | 授权类型（None/Basic/Session/Token） |
| `--token` | Token（当 authtype 为 Token 时使用） |
| `--forceauth` | 在非安全连接上强制认证 |

#### Profile 和测试控制

```bash
# 禁用在线 profile 获取
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --no-online-profiles

# 对推荐项警告
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --warnrecommended

# 指定 required profiles 目录
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --required-profiles-dir /path/to/profiles

# 指定 Schema 文件
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --schema /path/to/schema.json

# 允许 WriteRequirement 检查
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --writecheck
```

| 参数 | 说明 |
|------|------|
| `--no-online-profiles` | 不自动获取在线配置文件 |
| `--warnrecommended` | 对推荐项警告 |
| `--required-profiles-dir` | required profiles 根目录 |
| `--schema` | Schema 文件路径 |
| `--writecheck` | 允许 WriteRequirement 检查 |

#### 负载和集合限制

```bash
# 设置验证负载模式
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --payload Minimal /redfish/v1

# 多个 payload
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --payload Minimal /redfish/v1 \
  --payload Full /redfish/v1/Systems

# 设置集合限制
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --collectionlimit Systems 10 Chassis 5
```

| 参数 | 说明 |
|------|------|
| `--payload` | 验证负载模式，格式: MODE VALUE（可多次使用） |
| `--collectionlimit` | 应用集合限制，格式: RESOURCE COUNT... |

#### 系统标识

```bash
# 添加系统描述
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --description "Test Server 01"
```

| 参数 | 说明 |
|------|------|
| `--description` | 系统描述，用于标识日志 |

#### OEM 检查控制

```bash
# 不检查 OEM 项
python redfish_validator.py validate -t interop \
  -u admin -p password -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --nooemcheck
```

| 参数 | 说明 |
|------|------|
| `--nooemcheck` | 不检查 OEM 项 |

#### 完整示例

```bash
python redfish_validator.py validate -t interop \
  -u admin \
  -p password \
  -r https://192.168.1.100 \
  profiles/DSP8010_3.0.0.json \
  --logdir ./logs \
  -vv \
  --debugging \
  --description "Production Server" \
  --warnrecommended \
  --no-online-profiles \
  --writecheck
```

### analyze 命令

Interop 校验器仅支持 **HTML** 格式的分析。

```bash
# 分析 HTML 报告
python redfish_validator.py analyze -t interop -i logs -f html -o output

# 使用白名单过滤
python redfish_validator.py analyze -t interop -i logs -f html -o output -e path/to/whitelist.json
```

### 白名单配置
1、白名单项必须要配置URI，精准过滤某个测试行时，需要同时配置Name
2、如果仅配置URI，则过滤整个URI对应的校验项
3、如果同时配置Name，则精准过滤对应测试行
4、URI项支持正则表达式形式
5、如果同时配置Ignore，则过滤对应的错误块，目前支持配置"error", "warning", "not_tested"三种

```json
{
  "ExcludeRules": [
    {
      "Validator": "redfish_interop_validator",
      "ExcludedAssertions": [
        {
          "URI": "/redfish/v1/Systems/[^/]+"
        },
        {
          "Name": ["Property"],
          "URI": "/redfish/v1/Chassis/[^/]+",
          "Ignore": ["error", "warning", "not_tested"]
        }
      ]
    }
  ]
}
```

---

## Service 校验器

### 快速开始

```bash
# 1. 安装校验器
python redfish_validator.py deploy -t service

# 2. 执行校验
# 这一步会去到redfish官方下载schema文件，如果因为网络原因下载失败，可以用--schema-directory指定本地的schema文件
python redfish_validator.py validate -t service -u admin -p password -r https://192.168.1.100

# 3. 分析结果并过滤结果，白名单配置可参考工具目录下的whitelist.json文件
python redfish_validator.py analyze -t service -i logs -f html -o output -e path/to/whitelist.json
```

### 安装

```bash
# 安装最新版本
python redfish_validator.py deploy -t service

# 安装指定版本
python redfish_validator.py deploy -t service -v 2.5.1
```

### validate 命令

#### 基本用法

```bash
python redfish_validator.py validate -t service -u admin -p password -r https://192.168.1.100
```

| 参数 | 说明 | 必需 |
|------|------|------|
| `-t, --type` | 校验器类型，值为 `service` | 是 |
| `-u, --user` | 认证用户名 | 是 |
| `-p, --password` | 认证密码 | 是 |
| `-r, --rhost` | Redfish 服务地址 | 是 |

#### 日志和配置

```bash
# 设置日志目录和详细输出
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --logdir ./logs \
  -v

# 使用配置文件
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  -c config.json

# 启用调试模式
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --debugging
```

| 参数 | 说明 |
|------|------|
| `-v` | 增加详细输出级别（可累加：-v, -vv, -vvv） |
| `-c, --config` | 配置文件路径 |
| `--logdir` | 日志文件目录（默认: ./logs） |
| `--debugging` | 输出调试日志 |

#### 代理配置

```bash
# 设置外部站点 HTTP 代理
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --ext-http-proxy http://proxy.example.com:8080

# 设置外部站点 HTTPS 代理
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --ext-https-proxy http://proxy.example.com:8443

# 设置服务代理
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --serv-http-proxy http://proxy.example.com:8080 \
  --serv-https-proxy http://proxy.example.com:8443
```

| 参数 | 说明 |
|------|------|
| `--ext-http-proxy` | 访问外部站点的 HTTP 代理 URL |
| `--ext-https-proxy` | 访问外部站点的 HTTPS 代理 URL |
| `--serv-http-proxy` | 访问服务的 HTTP 代理 URL |
| `--serv-https-proxy` | 访问服务的 HTTPS 代理 URL |

#### Schema 和本地资源

```bash
# 指定本地 Schema 目录
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --schema-directory /path/to/schemas

# 使用本地 mockup 资源
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --mockup /path/to/mockup
```

| 参数 | 说明 |
|------|------|
| `--schema-directory` | 本地 Schema 文件目录 |
| `--mockup` | 启用本地 mockup 资源 |

#### 请求配置

```bash
# 设置请求超时时间
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --requesttimeout 30

# 设置请求重试次数
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --requestattempts 3
```

| 参数 | 说明 |
|------|------|
| `--requesttimeout` | HTTP 请求响应超时时间（秒） |
| `--requestattempts` | HTTP 请求失败后的重试次数 |

#### URI 检查控制

```bash
# 允许对低于 RedfishVersion 1.6.0 的服务进行 URI 检查
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --uricheck
```

| 参数 | 说明 |
|------|------|
| `--uricheck` | 允许对低于 RedfishVersion 1.6.0 的服务进行 URI 检查 |

#### 集合限制

```bash
# 设置集合限制
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --collectionlimit Systems 10 Chassis 5
```

| 参数 | 说明 |
|------|------|
| `--collectionlimit` | 应用集合限制，格式: RESOURCE COUNT... |

#### OEM 检查控制

```bash
# 不检查 OEM 项
python redfish_validator.py validate -t service \
  -u admin -p password -r https://192.168.1.100 \
  --nooemcheck
```

| 参数 | 说明 |
|------|------|
| `--nooemcheck` | 不检查 OEM 项 |

#### 完整示例

```bash
python redfish_validator.py validate -t service \
  -u admin \
  -p password \
  -r https://192.168.1.100 \
  --logdir ./logs \
  -vv \
  --schema-directory /path/to/schemas \
  --requesttimeout 30 \
  --requestattempts 3 \
  --ext-https-proxy http://proxy.example.com:8443
```

### analyze 命令

Service 校验器支持 **HTML** 格式的分析。

```bash
# 分析 HTML 报告
python redfish_validator.py analyze -t service -i ./reports -f html -o ./output

# 使用白名单过滤
python redfish_validator.py analyze -t service -i ./reports -f html -o ./output -e exclude.json
```

### 白名单配置
1、白名单项必须要配置URI，精准过滤某个测试行时，需要同时配置Name
2、如果仅配置URI，则过滤整个URI对应的校验项
3、如果同时配置Name，则精准过滤对应测试行
4、URI项支持正则表达式形式
5、如果同时配置Ignore，则过滤对应的错误块，目前支持配置"error", "warning", "not_tested"三种

```json
{
  "ExcludeRules": [
    {
      "Validator": "redfish_service_validator",
      "ExcludedAssertions": [
        {
          "URI": "/redfish/v1/Systems/[^/]+"
        },
        {
          "URI": "/redfish/v1/Chassis/[^/]+",
          "Name": ["Property"],
          "Ignore": ["error", "warning", "not_tested"]
        }
      ]
    }
  ]
}
```

---

## 通用功能

### convert 命令

将 TSV 格式的校验结果转换为 CSV 或 XLSX 格式。

```bash
# 转换为 CSV
python redfish_validator.py convert -i report.tsv -f csv -o report.csv

# 转换为 XLSX
python redfish_validator.py convert -i report.tsv -f xlsx -o report.xlsx

# 不指定输出路径时自动生成同名文件
python redfish_validator.py convert -i report.tsv -f xlsx
# 生成 report.xlsx
```

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-i, --input` | 输入 TSV 文件路径 | - |
| `-f, --format` | 输出格式（csv/xlsx） | - |
| `-o, --output` | 输出文件路径 | 输入文件同名但扩展名不同 |

**依赖说明**：
- **CSV 格式**：使用 Python 内置 `csv` 模块
- **XLSX 格式**：需要安装 `openpyxl` 库

```bash
pip install openpyxl
```

### 类型简写

| 简写 | 完整形式 |
|------|----------|
| `protocol` | `redfish_protocol_validator` |
| `service` | `redfish_service_validator` |
| `interop` | `redfish_interop_validator` |

---

## 常见问题

### Q1: 如何获取 Redfish Profile 文件？

从 DMTF 官方仓库或网站下载：
- [DMTF Redfish Profile Repository](https://github.com/opencomputeproject/HWMgmt-OCP-Profiles)
- [DMTF Redfish Tools](https://www.dmtf.org/standards/redfish)

### Q2: 白名单格式如何确定？

参考不同校验器的白名单配置章节

### Q3: 如何验证白名单是否生效？

对比过滤前后的统计输出，查看 "过滤掉 X 个..." 确认。

### Q4: 各校验器支持的输入格式是什么？

- **Protocol**: TSV、HTML
- **Interop**: 仅 HTML
- **Service**: 仅 HTML

### Q5: 相关链接

- [DMTF Redfish Tools](https://www.dmtf.org/standards/redfish)
- [Redfish Protocol Validator](https://github.com/DMTF/Redfish-Protocol-Validator)
- [Redfish Service Validator](https://github.com/DMTF/Redfish-Service-Validator)
- [Redfish Interop Validator](https://github.com/DMTF/Redfish-Interop-Validator)

### Q6: Service 校验器报错 "No module named 'redfish_service_validator.RedfishServiceValidator'"

**问题原因**

最新版本的 `redfish_service_validator` 改变了模块结构，与当前工具不兼容。

**解决方案**

1. 检查当前版本：

   ```bash
   pip show redfish_service_validator
   ```

2. 使用已验证的 2.5.1 版本：

   ```bash
   # 卸载现有版本
   pip uninstall redfish_service_validator

   # 安装兼容版本
   python redfish_validator.py deploy -t service -v 2.5.1
   ```
