1. 课程导入与Nexus自动化全景
在传统数据中心里,网络工程师习惯通过 SSH 登录每一台交换机,逐条敲入 interface、vlan、vpc 等命令完成配置。当设备规模从十几台增长到几百台时,这种"逐台手工操作"的方式会迅速暴露三个问题:配置一致性难以保证、变更窗口被拉长、故障回滚依赖个人记忆。本课程要解决的核心问题,就是如何把 Cisco Nexus 平台上的配置管理从"手工操作"升级为"可编程、可版本化、可验证"的自动化体系。
学习目标
完成本课程后,你应当能够:
- 理解 NX-OS 可编程性的演进路径,说清 CLI、NX-API、模型驱动(Model-Driven)三种接口的适用边界;
- 使用 Python 与 NX-API 完成 Nexus 设备的配置下发与状态采集;
- 用 Ansible、Terraform 等工具组织多设备、多站点的配置管理流程;
- 建立配置版本化、变更审计、幂等校验的工程习惯;
- 在实验环境中独立完成一次"采集—变更—验证—回滚"的完整闭环。
NX-OS 可编程性的演进
理解自动化,先要理解设备对外暴露的"接口"是什么。NX-OS 的可编程能力大致经历了三个阶段。
第一阶段:CLI 与脚本化。 早期自动化本质是"把命令写进脚本"。工程师用 Python 的 paramiko 或 netmiko 建立 SSH 会话,把 CLI 命令逐条发送,再解析回显文本。这种方式门槛低,但输出是"给人看的文本",格式随版本变化,解析脆弱,且每次执行都需要重新判断当前状态,难以保证幂等。
第二阶段:NX-API 与结构化数据。 NX-OS 提供 NX-API,把 CLI 或 NX-OS 数据模型通过 HTTP/HTTPS 暴露出来,返回 JSON 或 XML。相比 SSH 文本,结构化输出让程序可以稳定地读取字段,例如直接取 interface 的 admin_state 与 oper_state,而不必用正则去匹配一段回显。NX-API 支持 cli_show、cli_conf 等消息类型,是当前 Nexus 自动化最常用的入口之一。
第三阶段:模型驱动与声明式。 在支持 Model-Driven Telemetry 与 YANG 模型的平台上,设备可以按"期望状态"被描述,工具负责计算差异并下发。工程师不再写"先删后加"的步骤,而是声明"这个 VLAN 应该存在、这个接口应该属于它",由工具保证最终一致。这一阶段是配置管理体系走向工程化的关键。
这三者不是替代关系,而是并存:简单一次性任务用 CLI 脚本最快,批量结构化采集用 NX-API 最稳,长期多设备管理用声明式工具最省心。
自动化与配置管理体系的价值
自动化不等于"写个脚本跑一下"。真正产生价值的是围绕配置建立的体系,它至少包含四层能力:
- 采集层: 能稳定获取设备当前状态,作为变更前基线与变更后验证依据;
- 变更层: 把配置意图表达为可重复执行的代码或模板,而非一次性命令;
- 版本层: 配置与代码进入 Git,每次变更可追溯、可对比、可回滚;
- 验证层: 变更后自动检查关键指标(接口 up、VPC 一致、路由邻居建立),失败即告警或回滚。
这四层合起来,才让"配置管理"从个人技能变成团队可复用的工程能力。下面这张图展示了从设备到管理体系的整体关系,也是本课程后续章节的骨架。
整体课程框架
本课程按"认知—接口—工具—体系—实战"的顺序展开,共 30 章,可归为五个板块:
| 板块 | 主要内容 | 对应能力 |
|---|---|---|
| 基础认知 | NX-OS 架构、可编程性演进、实验环境搭建 | 知道设备能提供什么接口 |
| 接口与数据 | NX-API 调用、JSON/XML 解析、Telemetry 采集 | 能稳定拿到结构化状态 |
| 工具与模板 | Python 脚本、Ansible Playbook、Jinja2 模板 | 能把意图写成可复用代码 |
| 配置管理体系 | Git 版本化、幂等设计、变更审计、回滚策略 | 能把自动化变成工程流程 |
| 综合实战 | 多设备批量变更、VPC/VXLAN 场景、故障排查 | 能独立完成闭环任务 |
实验环境说明
本课程所有示例均可在以下环境中复现,建议提前准备:
- 设备镜像: Nexus 9000v(NX-OS 10.2 或以上),可在 EVE-NG、CML 或 DevNet Sandbox 中运行;
- 管理网络: 为每台设备配置
mgmt0地址,并开启feature nxapi; - 控制节点: 一台 Linux 主机,安装 Python 3.9+、
requests、ansible、git; - 版本控制: 本地 Git 仓库,用于存放 Playbook、模板与变量文件。
以开启 NX-API 为例,登录设备后执行:
configure terminal
feature nxapi
nxapi http port 80
nxapi https port 443
end
copy running-config startup-config
验证接口是否可用,可在控制节点执行:
curl -k -X POST https://10.0.0.11/ins \
-H "Content-Type: application/json" \
-d '{"ins_api":{"version":"1.0","type":"cli_show",
"chunk":"0","sid":"1","input":"show version",
"output_format":"json"}}'
若返回 JSON 中包含 body 与 host_name 字段,说明 NX-API 已正常工作。这个"用一条命令确认接口可用"的动作,本身就是后续所有自动化的第一步——先确认通道,再谈变更。
show running-config 或 NX-API 采集一份基线并提交到 Git;二是变更后用脚本断言关键状态(如接口 oper_state 为 up、VPC 状态为 peer-ok),而不是凭肉眼判断。这两个习惯会在后续章节反复出现。