Ansible 网络自动化:自动备份 Cisco 交换机配置_mono






自动备份 Cisco 交换机配置






Ansible 是什么?

Ansible 简介




Ansible是开源的自动化配置工具。基于python模块开发,实现了批量系统配置、批量程序部署、批量运行命令的功能。


Ansible架构相对比较简单,只需要使用​​ssh​​协议连接就可以来进行系统管理,自动化执行命令,部署等任务


Ansible 特点



-  部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;




-  默认使用SSH协议对设备进行管理;


-  配置简单、功能强大、扩展性强;


- 通过 Playbooks 来定制强大的配置、状态管理;



Ansible 常用组成结构



-  Ansible:Ans ible的命令工具, 核心执行工具;一次性或临时执行的操作都是通过该命令执行;




-  Playbook:编排模式,任务剧本,定义主机需要调用哪些模块来完成的功能,YAML\YML 格式;


-  Inventory:Ansible管理主机的清单,记录由Ansible管理的主机信息,包括端口、密码、ip等;


-  Modules:Ansible执行命令的功能模块;(核心功能)



好啦,介绍完 Ansible 后,接下来到了本文的重点内容,麻烦小伙伴们拿出小本本记笔记了!





配置 Ansible 对交换机配置自动备份

环境准备



系统

Python

描述

CentOS7

2.6

Ansible 管理节点


Ansible 安装




配置 EPEL 源

[root@ansible ~]# yum -y install epel-release

Installed:

 epel-release.noarch 0:7-11

Complete!


安装 Ansible

[root@ansible ~]# yum -y install ansible

Installed:

 ansible.noarch 0:2.7.7-1.el7

Complete!

# 查看 Ansible 版本

[root@ansible ~]# ansible --version

ansible 2.7.7



修改配置文件




进入 Ansible 目录

[root@ansible ~]# cd /etc/ansible/

[root@ansible ~]# ll

-rw-r--r--. 1 root root  6月    ansible.cfg

-rw-r--r--. 1 root root  6月    hosts


编辑系统配置文件

[root@ansible ~]# vi ansible.cfg

host_key_checking = False #跳过第一次连接检测询问是否登陆的提示(YES/NO),避免执行报错,disable SSH key host checking



定义 inventory(主机清单)



Inventory文件通常用于定义要管理的主机的IP、变量等信息,例如:连接类型、 ssh登录用户名、密码等。可以同时操作一个组的多台主机,组与主机组之间的关系都是通过inventory文件定义。默认路径为:etc/ansible/hosts


编辑 hosts 文件



[root@ansible ~]# cd /etc/ansible/

[root@ansible ~]# vi hosts


[cisco_switchs] #定义主机组名

cisco_2960X_01 #主机别名    ansible_host=192.168.1.10 #主机IP

cisco_2960X_02 #主机别名     ansible_host=192.168.1.11 #主机IP


[cisco_switchs:vars] #定义变量并关联主机组

ansible_network_os=ios #定义系统类型,Cisco交换机为IOS

ansible_connection=network_cli #定义连接方式

ansible_ssh_user=admin #定义用户名

ansible_ssh_pass=Admin@123 #定义密码



创建 Playbooks





Playbook的文件名后缀必须以.yml或.yaml结尾,读者可以根据自己习惯选择。


格式要求如下:

-  以 " --- "(三个减号)开始,必须首行;




-  严格缩进 ,并且不能用 TAB 键缩进;




-  缩进级别必须一致,同样的缩进代表同样的级别,程序判断配置的级别是通过缩进结合换行来实现的;


-  同行使用" :"加空格分隔,换行写需要以 " - " 分割;


创建并配置交换机自动备份脚本:

[root@ansible ~]# cd /etc/ansible/



[root@ansible ~]# touch backup.yml

[root@ansible ~]# vi backup.yml


---

- hosts: cisco_switchs

 gather_facts: false

 tasks:

 - name: save config

   ios_config:

     save_when: modified

 - name: backup switch config

   ios_config:

     backup: true


配置文件功能介绍:

hosts :指定需要操作的主机,这里配置的是我们先前定义好的组名;



gather_facts:默认Ansible会自动收集远端设备的信息,这个操作会消耗很长时间,一般没有特殊需求就设置为false 关闭



tasks: 定 义任务;



name:定义任务名称;



ios_config:这是一个Ansible的模块,用来对Cisco的IOS设备进行配置的修改、备份;



save_when:设置为modified,当检测到运行配置和配置文件不一致时,会执行保存指令;



backup:设置为yes,则会启用该模块的备份功能,会在运行Playbook的当前目录下自动创建一个backup目录,文件会以设备别名命名自动备份到该目录下;



运行 Playbooks





[root@ansible ~]# cd /etc/ansible/



[root@ansible ~]# ansible-playbook backup.yml #使用ansible-playbook运行之前配置好的脚本文件


PLAY [all] ************************


TASK [save config] ************************

changed: [cisco_2960X_01]

changed: [cisco_2960X_02]


TASK [backup switch config] ************************

ok: [cisco_2960X_01]

ok: [cisco_2960X_02]


PLAY RECAP ************************

cisco_2960X_01      : ok=2    changed=1    unreachable=0    failed=0

cisco_2960X_02      : ok=2    changed=1    unreachable=0    failed=0



验证结果


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

[root@ansible ~]# ll



-rw-r--r--. 1 root root 104 Jul 6 20:01 ansible.cfg

-rw-r--r--. 1 root root 217 Jul 6 20:41 backup

-rw-r--r--. 1 root root 113 Jul 6 20:10 hosts

-rw-r--r--. 1 root root 151 Jul 6 20:01 roles

-rw-r--r--. 1 root root 179 Jul 6 20:35 backup.yml

[root@ansible ~]# cd backup

[root@ansible ~]# ll

-rw-r--r--. 1 root root 30169 Jul 6 20:41 cisco_2960X_01_config.2020-7-06@20:41:33
-rw-r--r--. 1 root root 29584 Jul 6 20:41 cisco_2960X_01_config.2020-7-06@20:41:33



运行 Playbooks





[root@ansible ~]# cd /etc/ansible/



[root@ansible ~]# ansible-playbook backup.yml #使用ansible-playbook运行之前配置好的脚本文件


PLAY [all] ************************


TASK [save config] ************************

changed: [cisco_2960X_01]

changed: [cisco_2960X_02]


TASK [backup switch config] ************************

ok: [cisco_2960X_01]

ok: [cisco_2960X_02]


PLAY RECAP ************************

cisco_2960X_01      : ok=2    changed=1    unreachable=0    failed=0

cisco_2960X_02      : ok=2    changed=1    unreachable=0    failed=0



配置定时任务



[root@ansible ~]# crontab -e #进入定时任务编辑模式



00 01 * * * ansible-playbook /etc/ansible/backup.yml

# 配置每天早上1点自动执行backup.yml 脚本


[root@ansible ~]# crontab -l #查看定时任务

00 01 * * * ansible-playbook /etc/ansible/backup.yml