Lab Agent¶
Lab Agent(ops-lab)使用 ContainerLab 和 Nokia SR Linux 部署并配置虚拟网络实验室。它仅操作实验室基础设施 —— 无法访问生产设备。
功能声明
| ID | 声明 | 状态 |
|---|---|---|
| C-NE-28 | deploy_lab 从快照数据构建 ContainerLab 拓扑 |
🔶 Env-Blocked |
| C-NE-29 | Lab Agent 推送 SRL 配置并验证 BGP/OSPF 收敛 | 🔶 Env-Blocked |
| C-NE-30 | deploy_lab 自动处理 SRL topology.yml 问题和 veth 注入 |
🔶 Env-Blocked |
| C-NE-31 | Lab Agent 不含 execute_cli——无法访问生产设备 |
⬜ Pending |
适用场景¶
- "部署 R1-R4 的实验室副本,测试配置变更"
- "将 eBGP 配置推送到实验室并验证收敛"
- "在安全环境中模拟链路故障,确认后再上生产"
- "在应用到生产前,在 ContainerLab 中验证路由策略变更"
工具列表¶
| 工具 | 用途 |
|---|---|
run_python_simulation |
从快照数据生成拓扑 YAML |
deploy_lab |
部署 ContainerLab 拓扑 + 应用 SRL 变通处理 |
push_node_config |
向特定实验室节点推送 SR Linux CLI 配置 |
save_lab_config |
将节点配置保存到文件以供审查 |
exec_on_node |
在节点上执行只读命令进行验证 |
deploy_and_push_lab |
合并操作:原子性地部署拓扑并推送所有节点配置 |
不含 execute_cli
Lab Agent 不包含 execute_cli。它无法通过 SSH 访问生产设备(192.168.100.x)。所有操作仅针对 ContainerLab 服务器。
工作原理¶
步骤 1 — 生成拓扑¶
run_python_simulation 读取快照数据并生成 ContainerLab 拓扑 YAML:
run_python_simulation(
simulation_type="topology_from_snapshot",
snapshot_id="<最新>",
config={}
)
# 返回:{"yaml": "...", "nodes": [...], "links": [...]}
步骤 2 — 部署实验室¶
deploy_lab 将 YAML 发送到 ContainerLab API 并执行必要的部署后处理步骤:
deploy_lab(
yaml_content: str, # 来自 run_python_simulation 的拓扑 YAML
ssh_host: str, # 用于 veth 注入的 SSH 主机(默认:自动解析)
wait_seconds: int # 修复后等待秒数(默认:40)
)
内部执行三个步骤:
- POST /api/v1/labs — 通过 ContainerLab HTTP API 部署拓扑
- fix_srl_topology — 修复 SR Linux 中
topology.yml目录路径的已知问题 - create_srl_links — 通过 SSH 注入节点间 veth 对
步骤 3 — 推送配置¶
push_node_config 向特定节点推送 SR Linux CLI 配置:
push_node_config(
lab_name: str, # 例如 "r1-r4-ebgp-direct"
node: str, # 例如 "r1"、"r4"
config: str # SR Linux CLI 配置块
)
# 返回:{"status": "ok", "committed": true}
ContainerLab 服务器位于远程主机 192.168.100.12。工具通过 SSH 使用 docker exec —— 而非本地执行。
步骤 4 — 验证¶
exec_on_node 在节点上执行验证命令:
exec_on_node(
lab_name: str,
node: str,
command: str # 例如 "show network-instance default protocols bgp neighbor"
)
SRL 变通处理(C-NE-30)¶
Nokia SR Linux 有两个已知的 ContainerLab 部署问题,deploy_lab 会自动处理:
topology.yml 目录路径问题¶
ContainerLab 启动后,SR Linux 节点从拓扑文件名构造的路径查找其启动配置。fix_srl_topology 步骤会修正目录引用,确保 SR Linux 能找到其配置。
Veth 对注入¶
ContainerLab 的节点间链路需要为 SR Linux 节点手动创建 veth 对。create_srl_links 步骤:
- SSH 连接到 ContainerLab 服务器
- 从拓扑 YAML 识别所有节点间链路
- 在 SR Linux 容器命名空间之间创建
veth对 - 将网络接口移到正确位置
示例¶
Lab Agent 执行流程:
- 调用
run_python_simulation生成 4 节点 eBGP 拓扑 YAML - 调用
deploy_lab—— 部署拓扑,修复 SRL 问题,注入 veth 对 - 为每个节点调用
push_node_config推送 eBGP 配置 - 在每个节点调用
exec_on_node:show network-instance default protocols bgp neighbor - 报告收敛状态:会话状态、已建立数量、接收前缀数