基于Ansible与ENSP的自动化网络运维实战
1. 为什么需要自动化网络运维如果你是一名网络工程师可能经常遇到这样的场景需要同时配置几十台交换机或者反复测试某个网络拓扑的性能。传统的手工操作不仅效率低下而且容易出错。我曾经在一个项目中因为手动配置IP地址时输错了一个数字导致整个网络瘫痪了半小时这种教训让我开始寻找更高效的解决方案。Ansible作为一款开源的自动化运维工具正好能解决这些问题。它采用SSH协议进行通信不需要在目标设备上安装客户端特别适合网络设备的批量管理。而华为的ENSP模拟器则为我们提供了零成本的实验环境可以安全地测试各种网络配置方案。将两者结合就能构建一个从设计到验证的完整自动化闭环。2. 实验环境搭建2.1 ENSP拓扑设计首先打开ENSP拖拽两台AR2220路由器和一台S3700交换机到工作区。建议按照以下方式连接R1的G0/0/0接口连接CloudR2的G0/0/0接口连接S3700的Ethernet0/0/1S3700的Ethernet0/0/2连接R1的G0/0/1Cloud配置是关键它相当于连接虚拟机和物理机的桥梁。在Cloud配置界面选择绑定信息选项卡勾选与虚拟机通信的网卡比如VMnet8在出端口选择UDP端口号随意比如20002.2 基础网络配置在R1上执行以下命令配置基础网络system-view sysname R1 interface GigabitEthernet 0/0/0 ip address 192.168.239.101 255.255.255.0 quit然后配置SSH登录这是Ansible连接的基础stelnet server enable rsa local-key-pair create aaa local-user huawei password cipher huawei123 local-user huawei privilege level 15 local-user huawei service-type ssh user-interface vty 0 4 authentication-mode aaa protocol inbound ssh测试连通性很重要先在R1上ping Cloud的IP192.168.239.1确保物理机和模拟器能正常通信。3. Ansible环境配置3.1 安装与版本选择这里有个大坑需要注意必须使用Ansible 2.9版本。我在2.10版本上浪费了半天时间因为它移除了对华为设备的原生支持。安装命令很简单pip install ansible2.9.0验证安装是否成功ansible --version应该能看到类似ansible 2.9.0的输出。3.2 主机清单配置编辑/etc/ansible/hosts文件添加你的网络设备[huawei] 192.168.239.101 ansible_ssh_userhuawei ansible_ssh_passhuawei123 [huawei:vars] ansible_connectionnetwork_cli ansible_network_osce创建ansible.cfg文件避免每次输入参数[defaults] host_key_checking False inventory ./hosts测试连接是否正常ansible all -m ping -o如果看到SUCCESS就说明配置正确。4. Playbook实战编写4.1 基础配置下发创建一个名为deploy_basic.yml的文件内容如下- name: 基础配置下发 hosts: huawei gather_facts: no tasks: - name: 配置主机名 ce_config: lines: sysname {{ inventory_hostname }} provider: {{ cli }} - name: 配置接口IP ce_config: lines: | interface GigabitEthernet0/0/0 ip address 192.168.239.101 255.255.255.0 provider: {{ cli }}执行命令ansible-playbook deploy_basic.yml4.2 批量收集信息创建collect_info.yml收集设备信息- name: 收集网络设备信息 hosts: huawei gather_facts: no vars: cli: host: {{ inventory_hostname }} username: {{ ansible_ssh_user }} password: {{ ansible_ssh_pass }} transport: cli tasks: - name: 获取版本信息 ce_command: commands: display version provider: {{ cli }} register: version - name: 打印结果 debug: varversion.stdout_lines这个Playbook会输出设备的软件版本等关键信息非常适合做资产盘点。5. 常见问题排查5.1 连接失败问题如果遇到连接问题可以按以下步骤排查确认ENSP设备已启动并完成基础配置检查Cloud绑定是否正确在物理机上ping设备IP看是否通尝试用SSH客户端手动连接查看Ansible的详细日志ansible-playbook playbook.yml -vvv5.2 模块不支持问题如果遇到module not found错误可能是使用了错误的Ansible版本必须2.9没有安装华为设备支持模块playbook中指定的network_os不正确6. 进阶技巧6.1 使用模板批量配置对于复杂配置可以使用Jinja2模板。比如创建一个acl.j2模板acl number {{ acl_num }} rule {{ rule_num }} permit ip source {{ src_ip }} 0 destination {{ dst_ip }} 0然后在playbook中调用- name: 应用ACL配置 template: src: acl.j2 dest: ./acl_config.txt vars: acl_num: 3000 rule_num: 5 src_ip: 192.168.1.0 dst_ip: 10.0.0.06.2 条件执行任务有时候需要根据设备类型执行不同操作- name: 根据设备类型配置 hosts: all tasks: - name: 配置路由器 include_tasks: router.yml when: AR in inventory_hostname - name: 配置交换机 include_tasks: switch.yml when: S in inventory_hostname这种自动化运维方式不仅适用于实验环境在实际工作中也能大幅提升效率。我团队现在所有网络变更都先通过ENSPAnsible验证确认无误后再应用到生产环境错误率降低了90%以上。