本文件为项目通用概述,适合快速了解功能和上手使用。 Claude Code 专用实践请参考
CLAUDE.md;完整 Skill 定义请参考SKILL.md。
huawei-switch-skill 是一个企业级的华为 VRP 交换机 Console 自动化 Skill。
它封装了从串口连接、命令执行、配置备份、解析、模板渲染、部署到校验的完整生命周期能力,可被 Claude Code、Hermes 或其他上层 Agent 系统直接调用。
Skill 定位:提供华为交换机网络自动化运维的标准化能力封装,而非自主 Agent。
| 你要做什么 | 用什么 |
|---|---|
| 串口开局、改配置、模板部署 | Console(主路径) |
| 多台已纳管设备备份 / 跑命令 / 巡检 | SSH 批量管理 |
| 出厂首次登录改密 | SSHFirstConnect |
Console 与 SSH 只是连接方式不同,VRP 命令相同。当前配置能力做在 Console 上;SSH 面向后续批量运维。
当前版本:0.4.1(见 CHANGELOG.md / src.__version__)
已完成 agent.md(历史文档)路线图 第 1~7 阶段,并完成配置主路径正确性加固、SSH 批量骨架、部署后浅层校验与金样例测试。
| 阶段 | 模块 | 状态 |
|---|---|---|
| 1 | 串口通信层 (console) | ✅ 完成 |
| 2 | 命令执行引擎 (command) | ✅ 完成 |
| 3 | 配置采集模块 (backup) | ✅ 完成 |
| 4 | 配置解析器 (parser) | ✅ 完成 |
| 5 | 模板系统 (template) | ✅ 完成 |
| 6 | 自动部署模块 (deploy) | ✅ 完成 |
| 7 | 配置校验模块 (verify) | ✅ 完成 |
- 自动串口连接 + 登录 + 关闭分页
- 稳定命令执行(含 save 自动确认)
- 一键配置备份(按时间戳目录)
- 配置解析为结构化数据
- Jinja2 模板渲染
- 自动部署 + 回滚支持(含幂等性检查 + Dry-Run 模式 +
DeploymentPlanner步骤规划) - 配置一致性校验 + 报告生成
- 统一的
AgentAdapterSkill 调用入口
pip install -r requirements.txt这是使用本 Skill 的推荐方式,适用于 Claude Code、Hermes 或自定义 Agent 系统。
from src.agent import AgentAdapter, AgentRequest, DeviceInfo
adapter = AgentAdapter()
request = AgentRequest(
action="backup", # 或 "deploy", "command", "validate"
device=DeviceInfo(port="COM4", password="xxx"),
variables={"device_name": "SW-01"}
)
response = adapter.execute(request)注意:CLI 中的 deploy 子命令已弃用,请优先使用 AgentAdapter。
from src.console import Connection
with Connection(port="COM4", password="your_password") as conn:
print(conn.send_command("display version"))from src.console import Connection
from src.backup import ConfigCollector, ConfigExporter
from src.deploy import DeploymentEngine
with Connection(port="COM4", password="xxx") as conn:
# 备份
collector = ConfigCollector(conn)
data = collector.collect_all()
exporter = ConfigExporter()
exporter.export_backup("SW-01", data)
# 部署
engine = DeploymentEngine()
report = engine.deploy(
connection=conn,
template="access_switch.j2",
variables={"hostname": "SW-01", "vlan_list": "10 20 30", "admin_password": "YourStrongPass@2026"},
device_name="SW-01"
)
print(report)huawei-switch-skill/
├── SKILL.md # Skill 元数据定义(规范格式)
├── README.md
├── docs/archive/agent.md # 开发路线图(历史文档,已归档)
├── examples/ (9 个示例) # Skill 使用案例
│ ├── 01_connect_and_run_command.py
│ ├── 02_backup_config.py
│ ├── 03_using_agent_adapter.py
│ └── 04_template_deploy.py
├── src/
│ ├── console/ # 串口通信
│ ├── command/ # 命令执行
│ ├── backup/ # 配置采集与备份
│ ├── parser/ # 配置解析
│ ├── template/ # Jinja2 模板
│ ├── deploy/ # 自动部署
│ ├── verify/ # 配置校验
│ └── agent/ # Skill 统一调用入口 (AgentAdapter)
├── templates/ (4 个模板)
├── tests/
└── docs/ # 各模块详细文档
- 0.4.1:host key 环境变量真正生效;access 模板 PoE 默认关;接口别名幂等;verify trunk 假 pass 修复;备份先校验再落盘;CLI
src.cli+huawei-switch入口 - 0.4.0(中期):上联口保护、SSH host key、错误码矩阵、baudrate 接线、
pyproject.toml+ CI、依赖拆分 - 0.3.2:SSH 真下发默认禁用(需
allow_ssh_deploy=True或仅dry_run);版本/LICENSE/联调产物忽略对齐 - 0.3.1:Console 提示符/接口视图/description
##/netmiko 4.x 真机加固 - 部署引擎安全默认:
- 幂等:意图子集匹配(非整机全量相等)
- 危险命令默认
blocked(需allow_dangerous=True) - 上联/保护口默认
blocked(需allow_uplink_change=True) - 自动回滚默认关闭(实验性)
AgentResponse.success随status正确反映失败/阻断- 主路径经
CommandExecutor做错误检测
- 模板:
admin_password必填;access 模板端口范围可配(默认 1–16) - 测试覆盖失败路径与 SSH 探测启发式
项目已添加基础 Mock 测试,支持在无硬件环境下进行单元测试。
重要:本项目使用 .venv 虚拟环境,建议优先使用项目内的 Python 解释器运行命令。
# 推荐方式(直接使用项目 venv)
.\.venv\Scripts\python.exe -m pytest tests/ -v
# 或者先激活虚拟环境
.\.venv\Scripts\Activate.ps1
python -m pytest tests/ -v# 安装测试依赖(首次使用时)
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
# 运行所有测试
.\.venv\Scripts\python.exe -m pytest tests/ -v
# 只运行 Console 模块测试
.\.venv\Scripts\python.exe -m pytest tests/test_console.py -v目前已覆盖:
- Prompt 检测
- 分页处理
- 错误检测
- 命令解析
- Connection 上下文管理
更多测试用例正在持续添加中。
- 密码处理:请勿将密码硬编码在脚本中。CLI 支持环境变量
HUAWEI_CONSOLE_PASSWORD/HUAWEI_PASSWORD或交互输入;避免--password进 shell history。 - 部署操作具有破坏性,始终建议开启
backup=True。 - 生产 SSH:设置
HUAWEI_SSH_STRICT=1。
- 丰富 SSH 批量管理(并发、结果汇总、与 DeploymentEngine 统一命令通道)
- 继续完善
examples/与模板库 - 可选:图形界面
docs/00-overview.md— 项目整体概览docs/archive/agent.md— 完整开发路线图(历史文档)docs/— 各阶段详细 API 与用法示例(含 08-agent.md、09-ssh.md)