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   #执行配置比对任务

posted @ 2020-03-25 10:21  啊行啊  阅读(271)  评论(0编辑  收藏  举报