Ansible基础学习
1.centos 中安装
yum install -y ansible
2. 安装完成后在/etc/ansible目录中生成三个文件
3. hosts配置示列
hotsts相关配置参数
测试创建的主机组连接
ansible all -m ping #通过ping模块对hosts中所有设备进行连接测试
ansible CiscoNexus -m ping #通过ping模块对hosts中的CiscoNexus组设备进行连接测试
4.获取设备详细信息
ansible CiscoNexus/1.1.1.1 -m setup #根据设备组或者设备地址拉取其对应的信息
ansible 1.1.1.1 -m setup -a 'filter="ansible_all_ipv4_address"' 对拉取得结果进行过滤
5. Ad-Hoc介绍
Ad-Hoc临时的,在Ansible中指快速执行单个任务,并且不需要对操作进行保存
ansible-doc -l #查看ansible所有模块
ansible-doc -l | grep Cisco #查看cisco设备的模块
ansible-doc cli_command #查看cli_command的使用方法
其中减号为可选参数等于号为必选参数
将官网示列的playbook配置翻译成Ac-hoc 格式示列,以ios_config模块示列
6. PlayBook介绍
通过playbook创建配置任务示列:
a. 创建认证的用户名与密码的creds.yaml
b. 创建配置模板customer_config.yaml
c. 创建任务yaml
- hosts: CiscoNexus #定义主机
gather_facts: false #不收集信息
connection: local #本地发起连接
vars_files: #导入变量文件
- creds.yaml
- customer_config.yaml
vars: #定义参数
creds: #创建一个变量creds,用户设备登录
username: "{{ username }}"
password: "{{ password }}"
tasks: #定义任务
- name: config interface #创建第一个任务,配置接口
nxos_config:
provider: "{{ creds }}" #认证参数
lines:
- ip address {{ item.ip }} {{ item.netmask }} #配置IP
parents:
- interface {{ item.port }} #进入接口
save_when: modified #当配置变动了则保存
with_items: "{{ interfaces }}" #循环customer_config.yaml中的interfaces变量
when: (item.switch == inventory_hostname) #如果当前主机IP与循环的交换机地址一致则配置
- name: show interface
nxos_command:
provider: "{{ creds }}"
commands:
- show version
- show ip interfaces
wait_for: #只有当满足输出条件才退出
- result[0] contains Cisco
- result[1] contains Lo1
d. 运行playbook剧本
7. 配置比对示列:
- hosts: CiscoNexus #定义主机 gather_facts: false #不收集信息 connection: local #本地发起连接 vars_files: #导入变量文件 - creds.yaml - customer_config.yaml vars: #定义参数 creds: #创建一个变量creds,用户设备登录 username: "{{ username }}" password: "{{ password }}" tasks: #定义任务 - name: check config change #配置文件与当前设备配置比对 nxos_config: provider: "{{ creds }}" #认证参数 diff_against: intended intended_config: "{{ lookup('file', 'master.cfg') }}" #master.cfg这个为比对的配置文件 register: config_change #如果配置有变化,变化的值会赋值给config_change变量,这是个布尔值 - name: Mail Changed mail: host: smtp.gmail.com port: 587 username: "{{ mail }}" password: "{{ mailpass }}" to: QINKE <aaa@gmail.com> subject: Ansible_report body: "{{ inventory_hostname }} hos changed" delegate_to: localhost when: config_change.changed #当配置变更了发邮件
ansible-playbook config_task.yaml --diff #执行配置比对任务