ansible版本

[root@test ansible]# ansible --version
ansible 2.9.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

inventory清单创建

在使用ansible之前,测试一下ssh连接网络设备,保证网络设备的ssh协议开启,账号密码正确
创建inventory文件:
inventory文件用来存放设备的相关信息,如ip地址、用户名、密码等。
文件名字可以叫inventory,也可以叫任何其它的名字,不加后缀。
文件内容如下:

  1. 创建一个switches组,包含两台交换机, 第一列是交换机名(名字随便起),第二列的ansible_host是设备ip地址;
  2. vars下面配置了switches组通用的变量,ansible_connection是连接方式,之后是操作系统类型ios,最后是登录的用户名
[root@test ansible_network]# cat inventory 
[switches]
C2960-01   ansible_host=xx.xx.xx.xx
C2960-02   ansible_host=xx.xx.xx.xx
[switches:vars]
ansible_connection=network_cli
ansible_network_os=ios
ansible_user=xxxx

创建playbook

playbook的文件名后缀必须以.yaml结尾。
内容如下:
name:playbook的名字,一般用于描述整个playbook的作用即可;
connection:连接方式,cisco ios必须用network_cli;
gather_facts:ansible会自动收集远端设备的信息,这个操作会消耗很长时间,一般没有特殊需求就设置为false关闭;
hosts:指定主机范围,这里是all,所有主机;
tasks:真正执行的任务都在这下面;
ios_config:这是一个ansible的模块,用来对cisco的ios设备进行配置的修改、备份。
backup:设置为yes,则会启用该模块的备份功能,会在运行playbook的当前目录下自动创建一个backup目录,配置会自动备份到该目录下。

[root@test ansible_network]# cat cisco_backup_playbook.yaml 
---
- name: Network Getting Started First Playbook
  connection: network_cli
  gather_facts: false
  hosts: all
  tasks:
    - name: backup ios devices
      ios_config:
        backup: yes
[root@test ansible_network]# ansible-playbook --syntax-check cisco_backup_playbook.yaml 
playbook: cisco_backup_playbook.yaml

运行playbook

ansible-playbook -i inventory -k -e ansible_network_os=ios cisco_backup_playbook.yaml 

ansible-playbook 是可执行程序,用于执行playbook文件;
-i 调用inventory文件,这是之前配置的存放设备信息的文件;
-k 运行时提示输入密码。推荐使用这个参数,不要在inventory里存放设备密码,都是明文的,不安全;
-e 是extra的意思,额外参数。这里指定了设备操作系统版本ios(此处不是必须的,只是为了演示这个参数的用法);
最后一个参数是playbook文件的名字,此处是first_playbook.yml
[root@test ansible_network]# ansible-playbook -i inventory -k -e ansible_network_os=ios cisco_backup_playbook.yaml 
SSH password: 
PLAY [Network Getting Started First Playbook] ***********************************************************
TASK [backup ios devices] *******************************************************************************
changed: [C2960-01]
changed: [C2960-02]
PLAY RECAP **********************************************************************************************
C2960-01         : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
C2960-02       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[root@test ansible_network]#

查看当前目录,可以看到ansible自动创建了backup目录,并且该目录下有以日期时间为后缀的备份文件,说明备份成功。

[root@test ansible_network]# pwd
/etc/ansible/ansible_network
[root@test ansible_network]# tree
.
├── backup
│   ├── C2960-01_config.2020-11-07@13:53:40
│   └── C2960-02_config.2020-11-07@13:53:41
├── cisco_backup_playbook.yaml
└── inventory

1 directory, 4 files
[root@test ansible_network]#