一、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任务块总是执行