实用脚本能批量VLAN吗?

wen 实用脚本 53

本文目录导读:

实用脚本能批量VLAN吗?

  1. 使用 Python + Netmiko (推荐,适用于华为、思科、H3C等主流厂商)
  2. 使用 Shell + SSH + Expect (适用于 Linux 环境,无需安装 Python 库)
  3. 使用 Ansible (自动化运维利器,适合大规模集群)
  4. 使用厂商 API (最新趋势)
  5. 核心注意事项
  6. 总结与选择建议

当然可以,批量创建、修改或删除 VLAN 是网络运维中的高频需求,完全可以通过脚本实现自动化,从而避免手动逐条配置的低效与出错风险。

核心思路是利用网络设备的命令行接口(CLI),通过脚本(如 Python、Shell、Expect、Ansible)登录设备并执行批量命令。

下面提供几种主流厂商及通用场景的脚本方案。

使用 Python + Netmiko (推荐,适用于华为、思科、H3C等主流厂商)

Netmiko 是专门用于网络设备 SSH 连接的 Python 库,支持多厂商,它简化了 SSH 登录和命令执行的流程。

场景: 在华为交换机上批量创建 VLAN 10-50,并添加描述。

from netmiko import ConnectHandler
# 设备信息(请根据实际修改)
device = {
    'device_type': 'huawei',       # 思科用 'cisco_ios', H3C用 'hp_comware'
    'host': '192.168.1.100',
    'username': 'admin',
    'password': 'your_password',
    'port': 22,
    'secret': 'enable_password'    # 思科可能需要enable密码
}
# 连接设备
try:
    connection = ConnectHandler(**device)
    print(f"成功连接到 {device['host']}")
    # 进入系统视图(华为/H3C)或全局配置模式(思科)
    connection.send_command("system-view", expect_string=r'\[.*\]')  # 华为
    # 如果是思科,使用:connection.enable() connection.config_mode()
    # 批量创建VLAN 10 到 50
    vlan_start = 10
    vlan_end = 50
    for vlan_id in range(vlan_start, vlan_end + 1):
        command = f"vlan {vlan_id}"
        connection.send_command(command, expect_string=r'\[.*\]')
        description = f"VLAN_{vlan_id}_Auto"
        connection.send_command(f"description {description}", expect_string=r'\[.*\]')
        # 退回到系统视图,准备创建下一个VLAN
        connection.send_command("quit", expect_string=r'\[.*\]')
    print(f"已批量创建 VLAN {vlan_start} 到 {vlan_end}")
    # 保存配置(华为:save,思科:write memory)
    connection.send_command("save", expect_string=r'\[Y/N\]')
    connection.send_command("Y", expect_string=r'.*>')
    print("配置已保存。")
    connection.disconnect()
except Exception as e:
    print(f"发生错误: {e}")

优势:

  • 跨厂商:通过修改 device_type 参数即可适配不同品牌。
  • 健壮性:内置了超时、重试、正则匹配等待机制。
  • 可扩展:可轻松加入检查、日志、报表功能。

使用 Shell + SSH + Expect (适用于 Linux 环境,无需安装 Python 库)

Expect 可以模拟交互式登录,适合纯命令行环境。

场景: 在 Cisco 交换机上批量删除 VLAN 60-100。

#!/usr/bin/expect -f
set host "192.168.1.200"
set username "admin"
set password "cisco123"
set enable_pwd "enable123"
# 启动 SSH 会话
spawn ssh $username@$host
expect "assword:"
send "$password\r"
expect ">"
send "enable\r"
expect "assword:"
send "$enable_pwd\r"
expect "#"
send "configure terminal\r"
# 循环删除 VLAN 60 到 100
for {set i 60} {$i <= 100} {incr i} {
    expect "(config)#"
    send "no vlan $i\r"
}
expect "(config)#"
send "exit\r"
expect "#"
send "write memory\r"
expect "#"
send "exit\r"
expect eof

劣势:

  • 脚本可读性较差,调试困难。
  • 对命令输出变化的适应性差(比如提示符改变可能导致脚本卡住)。

使用 Ansible (自动化运维利器,适合大规模集群)

Ansible 是自动化配置管理工具,使用 YAML 编写 Playbook,对于网络设备,需要安装 ansible.netcommon 和对应厂商的 Collection(如 cisco.ioshuawei.cloud)。

场景: 在 3 台 Cisco 交换机上批量创建 VLAN 10, 100, 200。

---
- name: 批量配置 Cisco VLAN
  hosts: cisco_switches    # 定义主机组
  gather_facts: no
  tasks:
    - name: 创建 VLAN 10, 100, 200
      cisco.ios.ios_vlans:
        config:
          - vlan_id: 10
            name: Sales_Dept
          - vlan_id: 100
            name: R&D_Dept
          - vlan_id: 200
            name: Guest_Network
        state: merged    # merged 表示创建或更新,replaced 替换,deleted 删除
      register: result
    - name: 显示配置结果
      debug:
        var: result.commands

你需要一个 inventory 文件(定义设备 IP 和凭证)和 Ansible 控制节点。

使用厂商 API (最新趋势)

华为、思科、Aruba 等主流厂商的较新设备都支持 RESTCONF/NETCONF 协议,你可以通过 Python requests 库发送结构化的 XML/JSON 数据,这是最“高级”和规范的做法。

import requests
import json
# 华为 iMaster NCE-Campus 或 NETCONF 接口示例
# url = "https://192.168.1.100:8443/restconf/data/vlan"
# 需要处理 HTTP 头部、认证、证书等,代码略复杂

核心注意事项

  1. 安全第一绝对不要在脚本中硬编码密码! 建议使用:

    • 环境变量(os.environ.get('SSH_PASSWORD'))。
    • Ansible Vault 加密。
    • 专门的密钥管理工具(如 HashiCorp Vault)。
  2. 预检查:在批量执行前,建议先对一台设备进行测试,确认命令效果正确。

  3. 异常处理:务必加入 try-except,并记录日志,如果某条命令执行失败,脚本应该能够优雅地跳过或停止,而不是造成配置混乱。

  4. 配置备份:在批量修改或删除 VLAN 之前,强烈建议先执行 display current-configuration | include vlan(华为)或 show running-config | include interface Vlan(思科)等命令,将当前 VLAN 配置备份到本地文件,以便回滚。

  5. 分步执行:如果脚本执行过程中断(网络波动、设备CPU过高),你需要有回滚方案,最好将脚本设计为幂等的(即多次执行结果相同),或者使用类似“事务”的机制(如先配置,最后统一 commit)。

总结与选择建议

方案 适用场景 学习成本 推荐度
Python + Netmiko 日常运维、中小规模批量、需快速开发 ★★★★★ (首选)
Shell + Expect 纯Linux环境、无Python库、临时救急
Ansible 大规模集群、自动化平台、需与CI/CD集成 ★★★★☆ (大规模首选)
Restconf/NETCONF 新设备、数据中心、需与编排平台集成 ★★★★☆ (未来趋势)

直接推荐:如果你只是想快速完成一次性的批量VLAN操作,并且网络设备是华为、思科或H3C,直接使用 Python + Netmiko 方案,它是最平衡“开发效率”、“可靠性”和“可维护性”的选择。

如果你能提供设备厂商、型号、IOS版本以及VLAN的范围和具体配置命令,我可以为你提供更精准的片段。

抱歉,评论功能暂时关闭!