3. ZTP零接触部署配置与验证

ZTP零接触部署配置与验证 学习卡片

ZTP 自动部署链路与关键配置点

ZTP(Zero Touch Provisioning)让新交换机在出厂状态下上电后,通过管理口自动完成“获取地址 → 下载脚本 → 拉取镜像 → 应用配置 → 重启进入目标版本”的闭环。整条链路依赖 DHCP 服务器、HTTP/TFTP 文件服务器和 EOS 内置的 ZTP 客户端协同工作。下图给出各环节的交互顺序与关键参数位置,便于对照排查。

新 Arista 交换机 出厂状态 / 无配置 Ma1 管理口 ZTP 客户端 DHCP 服务器 Option 67: bootfile Option 66: TFTP/HTTP 地址 Option 1: 子网掩码 Option 3: 默认网关 HTTP / TFTP 文件服务器 /ztp/ztp-script.py /images/EOS-4.29.2F.swi /configs/base-template.cfg /configs/switch-01.cfg 1 2 3 4 5 DHCP Discover Offer + Option 67 GET ztp-script.py 返回脚本 / 镜像 / 配置 执行脚本 加载 EOS 镜像 应用基础配置模板 重启进入目标版本 ZTP 脚本关键逻辑 1. 读取 DHCP Option 67 获取脚本 URL 2. 下载并执行 ztp-script.py 3. 校验当前 EOS 版本与目标版本 4. 若版本不符,下载 .swi 并安装 5. 下载 base-template.cfg 并应用 6. 根据序列号匹配 switch-01.cfg 7. 保存配置并重启 验证命令: show ztp status show version | include image

DHCP 服务器配置要点

ZTP 的第一步是让交换机通过 DHCP 拿到管理地址和引导文件路径。以 ISC DHCP 为例,需要在 dhcpd.conf 中为管理网段定义 Option 66(TFTP/HTTP 服务器地址)和 Option 67(引导脚本文件名)。Arista 交换机默认使用 Ma1 口发起 DHCP 请求,因此地址池必须覆盖管理网段。

subnet 10.10.10.0 netmask 255.255.255.0 {
  range 10.10.10.100 10.10.10.200;
  option routers 10.10.10.1;
  option domain-name-servers 10.10.10.2;
  option tftp-server-name "10.10.10.50";
  option bootfile-name "http://10.10.10.50/ztp/ztp-script.py";
  default-lease-time 600;
  max-lease-time 7200;
}

关键点:bootfile-name 必须指向可访问的 HTTP 或 TFTP 路径。若使用 HTTP,需确保文件服务器返回正确的 Content-Type,且脚本文件具有可执行权限(Python 脚本需以 #!/usr/bin/env python 开头)。

ZTP 脚本编写与镜像加载

ZTP 脚本是整条链路的“大脑”,负责判断版本、下载镜像、应用配置。以下是一个可直接使用的脚本模板,适配 EOS 4.29.2F 目标版本:

#!/usr/bin/env python
import os
import sys
from time import sleep

TARGET_VERSION = "4.29.2F"
IMAGE_URL = "http://10.10.10.50/images/EOS-4.29.2F.swi"
BASE_CONFIG = "http://10.10.10.50/configs/base-template.cfg"
SWITCH_CONFIG = "http://10.10.10.50/configs/switch-01.cfg"

def get_current_version():
    out = os.popen("show version | include image").read()
    return out.strip()

def install_image():
    os.system(f"copy {IMAGE_URL} flash:")
    os.system(f"install source flash:/EOS-4.29.2F.swi")
    os.system("reload now")

def apply_config():
    os.system(f"copy {BASE_CONFIG} running-config")
    os.system(f"copy {SWITCH_CONFIG} running-config")
    os.system("write memory")

if __name__ == "__main__":
    current = get_current_version()
    if TARGET_VERSION not in current:
        install_image()
    else:
        apply_config()
        os.system("reload now")

脚本执行后,交换机会自动下载镜像、安装并重启。重启完成后,再次进入 ZTP 流程时会检测到版本已匹配,转而应用配置模板并保存。

验证 ZTP 部署结果

交换机重启完成后,通过 Console 或 SSH 登录,执行以下命令确认 ZTP 是否成功:

  • show ztp status:查看 ZTP 当前状态,成功时显示 ZTP completed successfully。
  • show version | include image:确认运行镜像为 EOS-4.29.2F。
  • show running-config | include hostname:确认主机名已按模板设置。
  • show ip interface brief:确认管理口地址与 DHCP 分配一致。
若 show ztp status 显示 ZTP failed,优先检查 DHCP Option 67 是否可达、HTTP 服务器是否返回 200、脚本首行 shebang 是否正确。可在交换机上执行 show ztp log 查看详细错误。

常见问题与排查路径

现象可能原因排查命令
交换机未发起 DHCPMa1 口未启用或管理网线未连接show interfaces Ma1
DHCP 获取到地址但未下载脚本Option 67 未配置或 URL 不可达show dhcp client
脚本下载后未执行脚本无执行权限或 shebang 缺失检查文件服务器权限
镜像安装失败flash 空间不足或镜像损坏show flash
配置未应用模板路径错误或语法不兼容show ztp log
ZTP 过程中交换机可能多次重启,属于正常现象。请勿在 ZTP 未完成时手动中断电源或修改配置,否则可能导致部署状态不一致。