如果你还在用传统方式一台台登录华三交换机敲CLI命令,那这份指南就是为你准备的。我管理过上百台华三交换机的网络,曾经也靠手工配置熬到凌晨三点,直到用Ansible实现了批量操作才真正解脱。举个例子,去年我们需要给200多台交换机统一添加VLAN,手工操作至少要8小时,而用Ansible写完剧本后只用了3分钟。
Ansible的核心优势在于无代理架构和声明式语法。不需要在华三设备上安装任何客户端,只要设备支持SSH协议就能管理。通过YAML文件描述最终状态,比如"需要存在VLAN 10",而不是写一堆创建VLAN的具体命令。这种工作模式特别适合网络设备的批量配置,我实测下来配置效率能提升20倍以上。
华三官方提供的Ansible模块(hpe-cw7-ansible)封装了常用操作,比如VLAN管理、端口配置、ACL设置等。但要注意这个模块原本是为惠普设备开发的,所以需要做些适配修改才能用在华三设备上。接下来我会带你完整走通整个搭建过程,包括几个容易踩坑的关键点。
CentOS 7默认的Python 2.7根本跑不了新版Ansible,但直接替换系统Python又可能引发yum等工具异常。我的经验是编译安装Python 3.7到独立目录,这样既不影响系统组件,又能获得完整功能支持。这里推荐用pyenv管理多版本Python,不过为了简化流程,我们先采用手动编译方式:
bash复制# 安装编译依赖(比官方文档多加了libffi-devel)
yum install -y gcc make zlib-devel openssl-devel libffi-devel bzip2-devel readline-devel sqlite-devel
# 下载Python 3.7.4源码包
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
tar -zxvf Python-3.7.4.tgz
cd Python-3.7.4/
# 关键配置参数:指定独立安装路径
./configure --prefix=/usr/local/python3 --enable-optimizations
make -j 4 && make install
安装完成后需要建立软链接到PATH路径。这里有个细节:不要覆盖默认的python命令,只创建python3和pip3的链接:
bash复制ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
直接用pip安装可能会遇到SSL模块问题,建议先升级pip并指定国内镜像源:
bash复制pip3 install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
安装Ansible时要注意版本兼容性。经过多次测试,2.10.4版本与华三模块的兼容性最好。安装命令:
bash复制pip3 install ansible==2.10.4 -i https://mirrors.aliyun.com/pypi/simple/
验证安装是否成功:
bash复制ansible --version | grep "2.10.4"
官方模块需要几个特定版本的依赖库,版本不匹配会导致各种奇怪错误:
bash复制pip3 install ncclient==0.6.9 scp==0.13.3 textfsm==1.1.0 ipaddr==2.2.0 -i https://mirrors.aliyun.com/pypi/simple/
从GitHub下载的模块需要两个关键修改:
bash复制wget https://github.com/HPENetworking/hpe-cw7-ansible/archive/refs/heads/main.zip
unzip main.zip
cd hpe-cw7-ansible-main/
cp ./for-ncclient/rpc.py /usr/local/python3/lib/python3.7/site-packages/ncclient/operations/
cp ./for-ncclient/manager.py /usr/local/python3/lib/python3.7/site-packages/ncclient/
hp.com替换为h3c.combash复制find / -name namespaces.py | xargs sed -i 's/hp.com/h3c.com/g'
执行setup.py安装后,用这个命令测试模块是否可用:
bash复制ansible-doc -t module -l | grep comware
应该能看到comware_vlan等模块列表。
编辑/etc/ansible/ansible.cfg增加华三模块路径:
ini复制[defaults]
library = /root/hpe-cw7-ansible-main/library
host_key_checking = False
在/etc/ansible/hosts中定义设备组:
ini复制[h3c]
192.168.1.1 ansible_ssh_user=admin
192.168.1.2 ansible_ssh_user=admin
[h3c:vars]
ansible_ssh_pass=YourPassword
ansible_connection=local
创建vlan_config.yaml文件:
yaml复制---
- name: 批量配置华三交换机VLAN
hosts: h3c
gather_facts: no
connection: local
tasks:
- name: 创建Web服务器VLAN
comware_vlan:
vlanid: 10
name: WEB_Servers
descr: 前端服务器专用
state: present
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
hostname: "{{ inventory_hostname }}"
- name: 创建数据库VLAN
comware_vlan:
vlanid: 20
name: DB_Cluster
state: present
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
hostname: "{{ inventory_hostname }}"
执行剧本前,先用ping模块测试连通性:
bash复制ansible h3c -m ping
确认连通后执行配置:
bash复制ansible-playbook vlan_config.yaml
SSH连接超时:检查交换机是否开启SSH服务,ansible服务器能否解析设备主机名。我遇到过因为DNS解析失败导致的连接问题,解决方法是在/etc/hosts中添加设备IP映射。
模块执行失败:90%的问题出在ncclient版本不匹配。务必确认安装的是0.6.9版本,并检查是否成功覆盖了rpc.py和manager.py文件。
权限不足:华三设备需要配置足够权限的账户,建议专门创建ansible管理账号:
bash复制system-view
local-user admin class manage
password cipher YourComplexPassword
service-type ssh
authorization-attribute user-role level-15
quit
开启SSH长连接:在ansible.cfg中添加:
ini复制[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
使用异步任务:对于耗时操作,在任务中添加异步参数:
yaml复制async: 30
poll: 0
分组批量执行:在inventory中对设备按机房分组,通过--limit参数分批执行:
bash复制ansible-playbook vlan_config.yaml --limit @/tmp/retry_hosts.txt
这套环境在我们生产网络稳定运行了两年多,管理着300+台华三交换机。刚开始可能会觉得配置复杂,但一旦跑通第一个剧本,你就会发现之前的投入都是值得的。最近我们正在把更多日常操作Ansible化,比如定期配置备份、端口状态监控等,后续可以继续分享这些进阶玩法。