
在当今真实的企业网络环境中,单一厂商通吃的局面几乎不存在。当你的网络同时包含Cisco、华为、Juniper等设备时,如何高效、统一地管理配置就成了一大挑战。此时,Ansible展现出的多厂商支持能力,便成为你将自身角色从“配置工具使用者”升级为“网络架构师”的关键。这不仅关乎“能不能用”,更关乎“能不能用得优雅”。
一、为什么多厂商联动是企业网络的必然要求?
1. 企业网络的真实图景(数据说话)
| 企业类型 |
厂商分布比例(2023) |
问题场景 |
| 金融/电信 |
50% Cisco + 30% Huawei + 20% Juniper |
配置策略割裂,运维成本高 |
| 互联网公司 |
60% 自研设备 + 40% Cisco |
无法统一管理,故障排查慢 |
| 中小企业 |
70% 华为 + 30% Cisco |
依赖人工,配置错误率高 |
2. 多厂商联动的核心价值
| 价值 |
传统方式(手动/分厂商) |
Ansible多厂商联动 |
| 配置一致性 |
低(不同厂商语法差异大) |
高(统一YAML模板) |
| 变更效率 |
低(需分别配置) |
高(1个Playbook) |
| 故障排查 |
难(需对比多厂商配置) |
易(统一日志) |
| 运维成本 |
高(需多技能团队) |
低(1个团队) |
对于寻求网络/系统一体化管理的团队而言,自动化是必然选择。
二、Ansible多厂商支持:网络模块生态全景
1. Ansible官方网络模块(支持RESTful API)
| 厂商 |
Ansible Collection |
模块名称 |
API 依赖 |
| Cisco |
cisco.ios |
ios_config |
RESTCONF/YANG |
| Huawei |
huawei.huaawei |
huawei_vrp_config |
NETCONF/XML |
| Juniper |
juniper.junos |
junos_config |
NETCONF/XML |
| Aruba |
arubanetworks.aos |
aos_config |
REST API |
✅ 关键优势:
- 模块化设计:每个厂商独立维护,互不干扰
- 统一接口:Playbook语法一致,只需替换模块名
- 社区支持:Ansible Galaxy 有100+网络模块
2. 安装多厂商模块(示例:Cisco + Huawei)
# 安装Cisco模块
ansible-galaxy collection install cisco.ios
# 安装华为模块
ansible-galaxy collection install huawei.huaawei
三、多厂商Inventory配置:设备的“统一地址簿”
1. 标准Inventory结构(支持多组设备)
# inventory.ini
[core_routers]
router-cisco1 ansible_host=10.0.0.1 ansible_user=admin ansible_password=cisco_secret
router-cisco2 ansible_host=10.0.0.2 ansible_user=admin ansible_password=cisco_secret
[core_routers_huawei]
router-huawei1 ansible_host=10.0.0.10 ansible_user=admin ansible_password=huawei_secret
router-huawei2 ansible_host=10.0.0.11 ansible_user=admin ansible_password=huawei_secret
[cloud_vpcs]
vpc-aliyun ansible_host=100.64.0.1 ansible_user=aliyun_user ansible_password=aliyun_secret
2. 为不同厂商设置变量(group_vars)
# group_vars/core_routers.yml
ansible_network_os: ios
ansible_connection: network_cli
ansible_user: “{{ admin_user }}”
ansible_password: “{{ admin_password }}”
ansible_port: 22
# group_vars/core_routers_huawei.yml
ansible_network_os: huaawei
ansible_connection: network_cli
ansible_user: “{{ admin_user }}”
ansible_password: “{{ admin_password }}”
ansible_port: 22
💡 关键技巧:
ansible_network_os :指定设备类型( ios / huaawei / junos )
ansible_connection: network_cli :使用Ansible的网络CLI连接(支持SSH)
- 密码加密:用
ansible-vault 加密变量( ansible-vault encrypt group_vars/ )
四、实战:批量配置BGP(Cisco + 华为联动)
场景:在Cisco和华为设备上配置相同BGP策略,实现云上VPC互通
步骤1:创建Playbook(bgp_multi_vendor.yml)
---
- name: Configure BGP on Multi-Vendor Network
hosts: all # 匹配所有设备组
gather_facts: no
vars:
local_asn: 65000
cloud_asn: 10000
cloud_ip: 100.64.0.1
local_network: 192.168.10.0/24
tasks:
- name: Configure BGP neighbor to cloud (Cisco)
when: inventory_hostname.startswith(‘router-cisco’)
cisco.ios.ios_config:
lines:
- router bgp {{ local_asn }}
- neighbor {{ cloud_ip }} remote-as {{ cloud_asn }}
- neighbor {{ cloud_ip }} update-source Loopback0
- network {{ local_network }}
commit: yes
register: cisco_result
- name: Configure BGP neighbor to cloud (Huawei)
when: inventory_hostname.startswith(‘router-huawei’)
huawei.huaawei.huawei_vrp_config:
lines:
- bgp {{ local_asn }}
- peer {{ cloud_ip }} as-number {{ cloud_asn }}
- peer {{ cloud_ip }} connect-interface Loopback0
- network {{ local_network }}
commit: yes
register: huawei_result
- name: Verify BGP neighbor (Cisco)
when: inventory_hostname.startswith(‘router-cisco’)
cisco.ios.ios_command:
commands:
- show ip bgp neighbors {{ cloud_ip }}
register: cisco_verify
- name: Verify BGP neighbor (Huawei)
when: inventory_hostname.startswith(‘router-huawei’)
huawei.huaawei.huawei_vrp_command:
commands:
- display bgp peer {{ cloud_ip }}
register: huawei_verify
- debug:
var: cisco_verify.stdout_lines if inventory_hostname.startswith(‘router-cisco’) else huawei_verify.stdout_lines
步骤2:执行Playbook
# 加密密码(生产环境必须!)
ansible-vault encrypt group_vars/core_routers.yml
ansible-vault encrypt group_vars/core_routers_huawei.yml
# 执行Playbook
ansible-playbook -i inventory.ini bgp_multi_vendor.yml -k # -k提示输入密码
预期输出:
PLAY [Configure BGP on Multi-Vendor Network] ****************
TASK [Configure BGP neighbor to cloud] ************************
ok: [router-cisco1]
ok: [router-cisco2]
ok: [router-huawei1]
ok: [router-huawei2]
TASK [Verify BGP neighbor (Cisco)] ****************************
ok: [router-cisco1]
ok: [router-cisco2]
TASK [Verify BGP neighbor (Huawei)] ***************************
ok: [router-huawei1]
ok: [router-huawei2]
TASK [debug] *************************************************
ok: [router-cisco1] => {
“cisco_verify.stdout_lines”: [
“BGP neighbor is 100.64.0.1, remote AS 10000, local AS 65000”
]
}
ok: [router-huawei1] => {
“huawei_verify.stdout_lines”: [
“Peer: 100.64.0.1, AS: 10000, State: Established”
]
}
✅ 效果:
- 10秒内完成2台Cisco + 2台华为的BGP配置
- 配置结果自动验证(无需手动
show )
- 统一日志输出(所有设备状态一目了然)
五、多厂商联动的进阶技巧
1. 变量管理:统一配置源
# group_vars/all.yml
# 全局变量(所有设备共享)
cloud_asn: 10000
cloud_ip: 100.64.0.1
# 设备专属变量(通过inventory设置)
# 例如:core_routers_huawei.yml 中设置
local_asn: 65000
2. 错误处理:避免单点故障
- name: Configure BGP
huawei.huaawei.huawei_vrp_config:
lines: …
ignore_errors: yes # 忽略单设备错误
register: config_result
- name: Check for errors
assert:
that: config_result.changed
fail_msg: “BGP config failed on {{ inventory_hostname }}”
3. 安全加固:密码加密与最小权限
- 密码加密:
ansible-vault (如上)
- 最小权限:为Ansible用户分配仅限配置的权限(如Cisco的
network-admin 角色)
六、避坑指南:多厂商联动的3大致命陷阱
| 陷阱 |
原因 |
解决方案 |
| 厂商API版本不兼容 |
设备OS版本低,不支持YANG模型 |
使用 ansible_network_os 指定版本 |
| 配置语法差异 |
Cisco的 neighbor vs 华为的 peer |
用条件任务( when )区分 |
| 并发配置冲突 |
多设备同时配置导致设备过载 |
设置 serial 参数( serial: 2 ) |
关键解决方案:设备版本管理
# inventory.ini
router-cisco1 ansible_host=10.0.0.1 ansible_network_os=ios
router-cisco2 ansible_host=10.0.0.2 ansible_network_os=ios17.0
- Ansible会自动匹配模块版本(如
ios17.0 使用新版模块)
七、多厂商联动的终极实践:云上VPC与本地IDC互通
场景:通过Ansible自动化配置本地设备 + 云上VPC路由
1. Playbook关键步骤
- name: Configure Cloud Interconnect
hosts: all
tasks:
# 1. 配置本地设备BGP(Cisco/华为)
- include_tasks: bgp_config.yml
# 2. 通过云API添加VPC路由(阿里云)
- name: Add VPC route to cloud
alibabacloud.alicloud.alicloud_vpc_route_entry:
region_id: “cn-hangzhou”
route_table_id: “vtb-xxx”
destination_cidr_block: “192.168.10.0/24”
next_hop_id: “hcc-xxx” # 高速通道实例ID
next_hop_type: “HighSpeedConnect”
when: inventory_hostname == “vpc-aliyun”
2. 效果验证
# 本地Cisco设备配置验证
router-cisco1# show ip bgp neighbors 100.64.0.1
BGP neighbor is 100.64.0.1, remote AS 10000, local AS 65000
# 云上VPC路由表验证
aliyun> aliyun vpc DescribeRouteTable
RouteEntries: [
{
DestinationCidrBlock: “192.168.10.0/24”,
NextHopType: “HighSpeedConnect”,
NextHopId: “hcc-xxx”
}
]
✅ 价值:
- 云上VPC与本地IDC路由自动同步(无需人工干预)
- 配置变更即生效(从分钟级→秒级)
- 业务连续性保障(故障时自动切换路由)
八、未来:多厂商联动的演进方向
-
统一YANG模型(OpenConfig)
-
AI驱动的多厂商策略生成
- 系统自动根据网络拓扑生成最优BGP策略(跨厂商统一)
-
云原生网络控制器集成
- Ansible作为控制器,与阿里云/华为云API联动(如自动配置VPC路由)
总结:多厂商联动不是“技术挑战”,而是“网络架构能力”
“在混合云时代,网络工程师的价值不在于‘会用多少厂商设备’,而在于‘能用同一套语言控制所有设备’。”
Ansible的多厂商支持,正是将网络从“碎片化”推向“一体化”的关键引擎,是实现高效运维/DevOps/SRE工作流的利器。
总结一句话:
“当你的网络配置还在按厂商分组时,你的竞争对手已经用Ansible实现了全球网络的‘一键配置’。”
附:快速上手资源包
- 多厂商Ansible Playbook模板
- OpenConfig统一模型指南
希望这篇关于跨厂商网络自动化配置的实践指南能为你带来启发。欢迎在云栈社区分享你的实践经验和遇到的挑战,共同探讨网络自动化的更多可能性。