跳转至

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)
)

内部执行三个步骤:

  1. POST /api/v1/labs — 通过 ContainerLab HTTP API 部署拓扑
  2. fix_srl_topology — 修复 SR Linux 中 topology.yml 目录路径的已知问题
  3. 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 步骤:

  1. SSH 连接到 ContainerLab 服务器
  2. 从拓扑 YAML 识别所有节点间链路
  3. 在 SR Linux 容器命名空间之间创建 veth
  4. 将网络接口移到正确位置

示例

olav --agent ops-lab "从最新快照部署 R1-R4 拓扑并验证 eBGP 对等"

Lab Agent 执行流程:

  1. 调用 run_python_simulation 生成 4 节点 eBGP 拓扑 YAML
  2. 调用 deploy_lab —— 部署拓扑,修复 SRL 问题,注入 veth 对
  3. 为每个节点调用 push_node_config 推送 eBGP 配置
  4. 在每个节点调用 exec_on_nodeshow network-instance default protocols bgp neighbor
  5. 报告收敛状态:会话状态、已建立数量、接收前缀数