在日常使用ansible playbook的過程中,我們有時候希望做一下補救性的操作,做一些判斷,
例如:
1
2
3
4
5
6
7
8
9
10
11
|
tasks:
- block:
- debug: msg='i execute normally'
- command: /bin/false
- debug: msg='i never execute, cause ERROR!'
rescue:
- debug: msg='I caught an error'
- command: /bin/false
- debug: msg='I also never execute :-('
always:
- debug: msg="this always executes"
|
如上的代碼,第一部分出錯后,會被rescue捕捉到,然后做一些補救性的工作,這個時候我們可以做一些有趣的任務例如:
1:我們要對httpd 的配置文件進行一些修改
如果http沒有安裝,我們肯定會報錯,沒有辦法正常運行,這個時候我們使用rescue
2: rescue里我們安裝httpd 然后 做一些修改
3: always 是無論時間時候都執行的,所以,我們一般第三步是把保證服務的狀態
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
tasks:
- block:
- name: Create {{ maildir_path }}
copy:
src: "{{ maildir }}"
dest: "{{ maildir_path }}"
mode: 0755
register: command_output
rescue:
- name: Install mail packages
yum:
name: "{{ item }}"
state: latest
with_items:
- "{{ mail_package }}"
- dovecot
always:
- name: start the mail service
service:
name: "{{ mail_service }}"
state: restarted
|