Ansible Playbook 使用 block 对 Play 进行分组
Playbook 可以通过 block
来对 Play 进行分组,不仅仅是分组,block
还可以处理 block
执行过程中的任务错误。
block
处理错误的方式有两种:
rescue
:在block
中有任务返回 failed 状态时才会执行rescue
的任务always
:无论block
是否有任务执行失败都会执行
- name: block
hosts: webserver
gather_facts: true
tasks:
- name: System initialization task block
when: ansible_os_family == 'RedHat'
become: true
block:
- name: install packages
ansible.builtin.dnf:
name: "{{ packages_list }}"
state: present
vars:
packages_list:
- vim
- bash-completion
- name: disable selinux
ansible.builtin.selinux:
policy: targeted
state: permissive
rescue:
- name: print error
ansible.builtin.debug:
msg: "Task execution failed, please check!"
always:
- name: create data directory
ansible.builtin.file:
path: /data
state: directory
mode: '0755'
如果
block
执行有执行失败的任务,但是rescue
中的任务执行成功(相当于救援回来了),那么这个节点不会被踢出 Playbook 的执行队列,后续的任务会继续在这个节点执行。
block
可以通过以下两个变量来查看失败任务的信息:
ansible_failed_task
(可以用ansible_failed_task.name
来获取失败任务名字)ansible_failed_result
(类似于给失败任务设置register
获取的变量)
- name: print ansible_failed_task.name
ansible.builtin.debug:
var: ansible_failed_task.name
- name: print ansible_failed_result
ansible.builtin.debug:
var: ansible_failed_result