前言
ansible是美国
redhat
公司研发的一款开源的自动化运维工具,可以非常高效且可靠的实现对被控制端(服务器、网络设备等被控制节点)进行运维工作。然而,也同样由于此,其对国产设备表现出来的友好性并不是那么足够,庆幸的是ansible预留了对其他设备的适配接口,可以通过这些接口是ansible能够支持原本并不支持的设备。
默认情况下,ansible底层使用ssh对网络设备进行操作控制,在某些情况下,还可以通过配置的方式使ansible采用其他的协议(例如: telnet)控制被控制端。
本博文主要通过华为路由器的例子,讲解ansible的国产设备的适配过程。由于篇幅有限,有些地方可能无法完全讲解透彻,有瑕疵之处欢迎指正,有不解之处欢迎提出。
网络设备厂商: 华为
,设备需要开通ssh权限,开通方法可参考我的另外一篇博客《配置华为设备ssh登录实现网络设备与VMWare虚拟机信息交互》
ansible版本: 2.8.1
, 截至本博客编辑,ansible最新版本已经迭代到4
版本,考虑到编者对2.8.1
的熟悉程度较高,本博文依然以2.8.1
版本进行演示,其他版本可另行尝试。关于ansible指定版本安装可参考我的另外一篇博客《CentOS安装指定版本ansible》。
控制端: CentOS 7.6
网络设备拓扑如下图所示
最终效果展示:
ansible脚本:
运行效果:
适配过程
适配过程主要是在ansible的plugins模块中添加新的适配文件即可,文件格式可参考已有的文件内容。
这里以适配华为的vrp操作系统为例,由于我先前已经适配好了vrp,这里另外在适配一个vrp2
以作演示。
在配置文件(/etc/ansible/ansible.cfg)中添加对应cliconf和terminal模块的路径,已保存自行适配的文件:
可直接复制ansible默认支持的原有文件到新文件名称并修改部分内容即可,
修改cliconf下的vrp2.py
文件,将其操作系统名称修改为vrp2
修改terminal下的vrp2.py
文件,修改terminal_stdout_re内容,使其符合华为设备的回显格式
修改on_open_shell
函数中ios设备的取消分行命令为华为命令
其他地方根据需要自行修改即可,本次演示
开始编写ansible脚本,内容如下:
---
- hosts: devices
vars:
ansible_connection: network_cli
ansible_ssh_user: huawei
ansible_ssh_pass: "Josen@12345"
ansible_network_os: vrp2
ansible_become: no
tasks:
- name: hello
cli_command:
command: "disp vers"
register: run
- name: debug
debug:
msg: "{{ run.stdout }}"
编写inventory文件,内容如下:
[devices]
10.0.1.1
10.0.2.2
10.0.3.3
[devices:vars]
ansible_ssh_user: huawei
ansible_ssh_pass: Josen@12345
验证效果
运行ansible脚本
ansible-playbook -i hosts hello.yml