Ansible中任务的执行控制方法

循环

循环迭代任务

1.简单循环

loop:
  - westosdir1
  - westosdir2   
  - westosdir3
  ...

迭代变量名称: {{item}}
实例:
在172.25.29.1中创建目录westosdir1、westosdir2、westosdir3
vim loop.yml

---
- name: loop
  hosts: 172.25.29.1
  tasks:
    - name: directory create
      file:
        name: /mnt/{{item}}
        state: directory
      loop:
        - westosdir1
        - westosdir2
        - westosdir3

运行结果
在这里插入图片描述

2、循环散列或字典列表

实例:将httpd服务重启,并将防火墙关闭

---
- name: loop
  hosts: 172.25.29.1
  tasks:
    - name: service control
      service:
        name: "{{item.service}}"
        state: "{{item.state}}"
      loop:
        - service: httpd
          state: restarted
        - service: firewalld
          state: stopped

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

条件控制

when:
  - 条件1
  - 条件2

条件判断

条件判断
=value == ”字符串“,value = 数字
<value < 数字
>value > 数字
<=value <= 数字
>=value >= 数字
!=value !=数字
is defined valuevalue is defined 变量存在
is not definedvalue is not defined 变量不存在
bool变量为truevalue value的值为true

实例1

---
- name: when
  hosts: 172.25.29.1
  tasks:
    - name: echo westos
      shell: echo westos
      register: echo_westos
      ignore_errors: yes

    - name: debug
      debug:
        msg: "{{echo_westos.rc}}"
      when: echo_westos.rc ==1

在这里插入图片描述

实例2

---
- name: when
  hosts: 172.25.29.1
  tasks:
    - name: debug
      debug:
        msg: "{{ansible_facts['br0']['ipv4']['address']}}"
      when: ansible_facts.br0.ipv4 is defined

在这里插入图片描述

触发器

notify和handlers

notify:触发器当遇到更改时触发handlers动作
handlers: 触发器触发后执行的动作
实例

---
- name: handlers
  hosts: 172.25.29.1
  tasks:
    - name: restart firewalld
      service:
        name: firewalld
        state: restarted
      notify:
        - debug ipv4
  handlers:
    - name: debug ipv4
      debug:
        msg: "{{ansible_facts['br0']['ipv4']['address']}} firewalld is restarted"

在这里插入图片描述

对照

---
- name: handlers
  hosts: 172.25.29.1
  tasks:
    - name: restart firewalld
      service:
        name: firewalld
        state: started
      notify:
        - debug ipv4
  handlers:
    - name: debug ipv4
      debug:
        msg: "{{ansible_facts['br0']['ipv4']['address']}} firewalld is restarted"

在这里插入图片描述

force_handlers

作用:当任务失败后play被终止也会调用触发器进程
实例

---
- name: handlers
  hosts: 172.25.29.1
  force_handlers: yes
  tasks:
    - name: restart firewalld
      service:
        name: firewalld
        state: restarted
      notify:
        - debug ipv4

    - name: error
      dnf:
        name: westos
        state: latest
  handlers:
    - name: debug ipv4
      debug:
        msg: "{{ansible_facts['br0']['ipv4']['address']}} firewalld is restarted"

在这里插入图片描述

changed_when

作用:控制任务在何时报告它已进行更改
实例

- name: change
  host: 192.168.43.33
  tasks: 
    - name: start
      service:
        name: firewalld
        start: started
      change_when: true
      notify:
        debug
  handlers:
    - name: debug
      debug:
        msg: "{{ansible_facts['ens160']['ipv4']['address']}}"

在这里插入图片描述

- name: change
  host: 192.168.43.33
  tasks: 
    - name: start
      service:
        name: firewalld
        start: started
      change_when: false
      notify:
        debug
  handlers:
    - name: debug
      debug:
        msg: "{{ansible_facts['ens160']['ipv4']['address']}}"

在这里插入图片描述

failed_when

作用: 当符合条件时强制任务失败

---
- name: failed
  hosts: all
  tasks:
     - name:
       shell: echo westos
       register: westos
       failed_when: "{{ansible_facts}} is not defined"

在这里插入图片描述

---
- name: failed
  hosts: all
  tasks:
     - name:
       shell: echo westos
       register: westos
       failed_when: "{{ansible_facts}} is defined"

在这里插入图片描述

block

block: 定义要运行的任务
rescue: 定义block句子中出现失败任务后运行的任务
always:定义最终独立运行的任务
实例

---
- name: block
  hosts: 
    192.168.43.33
    192.168.43.40
  tasks:
    - name: 192.168.43.33
      block: 
        - name dnf ansible
          dnf:
            name: ansible
            state: latest
      rescue:
        - name: show error
          debug: 
            msg: "{{ansible_facts['ens160']['ipv4']['address']}} is install error"
      always:
        - shell: echo westos

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值