Ansible 是什么?
Ansible架构相对比较简单,只需要使用ssh
协议连接就可以来进行系统管理,自动化执行命令,部署等任务
- 默认使用SSH协议对设备进行管理;
- 配置简单、功能强大、扩展性强;
- 通过 Playbooks 来定制强大的配置、状态管理;
- Playbook:编排模式,任务剧本,定义主机需要调用哪些模块来完成的功能,YAML\YML 格式;
- Inventory:Ansible管理主机的清单,记录由Ansible管理的主机信息,包括端口、密码、ip等;
- Modules:Ansible执行命令的功能模块;(核心功能)
配置 Ansible 对交换机配置自动备份
系统 | Python | 描述 |
CentOS7 | 2.6 | Ansible 管理节点 |
[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
[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文件通常用于定义要管理的主机的IP、变量等信息,例如:连接类型、 ssh登录用户名、密码等。可以同时操作一个组的多台主机,组与主机组之间的关系都是通过inventory文件定义。默认路径为:etc/ansible/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 #定义密码
Playbook的文件名后缀必须以.yml或.yaml结尾,读者可以根据自己习惯选择。
格式要求如下:
- 严格缩进 ,并且不能用 TAB 键缩进;
- 缩进级别必须一致,同样的缩进代表同样的级别,程序判断配置的级别是通过缩进结合换行来实现的;
- 同行使用" :"加空格分隔,换行写需要以 " - " 分割;
创建并配置交换机自动备份脚本:
[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
配置文件功能介绍:
backup:设置为yes,则会启用该模块的备份功能,会在运行Playbook的当前目录下自动创建一个backup目录,文件会以设备别名命名自动备份到该目录下;
[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目录,并且该目录下有以别名+日期时间为后缀的备份文件,说明备份成功。
-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
[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
00 01 * * * ansible-playbook /etc/ansible/backup.yml
# 配置每天早上1点自动执行backup.yml 脚本
[root@ansible ~]# crontab -l #查看定时任务
00 01 * * * ansible-playbook /etc/ansible/backup.yml
注:本文仅是开源技术分享,没有任何商业目的,如有版权问题请联系小编删除处理,我们并表示歉意