一、block任务块

1、可以通过block关键字,将多个任务组合在一起
2、可以将整个block任务组,一起控制是否要执行

举例:

# vim /tmp/block.yaml
---
 - hosts: web3
   tasks:
   - name: test block
     block:
     - name: add group
       group:
         name: block
         state: present
     - name: add user
       user:
         name: block
         group: block
         state: present
     when: ansible_hostname == "ansible2"

# ansible-playbook /tmp/block.yaml
当前主机名为ansible2,就会创建用户block,可以通过when约束整个block任务块的执行情况

二、rescue和always

block和rescue、always联合使用:
1、block中的任务都成功,rescue中的任务不执行
2、block中的任务出现失败 (failed) ,rescue中的任务执行
3、block中的任务不管怎么样,always中的任务总是执行

举例1:使block执行失败,rescue就会执行,always中的任务总是执行

---
 - hosts: web1
   gather_facts: no
   tasks:
   - name: block
     block:
     - name: block1
       shell: ls /tmp
     - name: block2
       shell: ls /test
     rescue:
     - debug:
         msg: "因为block1执行失败,所以rescue会执行"
     always:
     - debug:
         msg: "我总是执行"

# ansible-playbook /tmp/block2.yaml 

假设block1任务忽略失败,rescue会执行吗,答案是不会

 

举例2:使block执行成功,rescue不会执行,always中的任务总是执行

# vim /tmp/block3.yaml
---
 - hosts: web1
   gather_facts: no
   tasks:
   - name: block
     block:
     - name: block1
       shell: ls /tmp
     - name: block2
       shell: ls /etc
     rescue:
     - debug:
         msg: "因为block没有出现执行失败,所以rescue不会执行"
     always:
     - debug:
         msg: "我总是执行"

# ansible-playbook /tmp/block3.yaml 

 

总结:block任务块执行失败,rescue任务块就会执行,block任务块执行成功,rescue任务块就不会执行,always任务块总是执行