小技巧 - 執行指定的 task
要執行指定的 Tasks 時,可以藉著 tag 來幫助我們。
# Filename: install-app.yml
- name: Install application
hosts: dbservers
vars:
packages:
- postfix
- mariadb-server
tasks:
- name: Ensure that packages are installed
yum:
name: "{{ packages }}"
state: installed
tags:
- install
- name:
debug:
msg: "Debug message"
以上面的例子來說,Ensure that packages are installed
這個 task 就有加上 install 這個 tag
在執行的時候,就可以使用 -t install
來表明只執行這個 task:
ansible-playbook -i inventory -t install install-app.yml
如果沒有用 -t
指定 tag 時,這兩個 task 都會被執行到。
那麼,如果想要沒有指定 tag 時,兩個 task 都不給執行時的話,該怎麼辦呢?這時候我們可以使用關鍵字 never,使用了 never 之後,如果沒有指定 tag,就都不會執行。
我們舉另外一個例子來說明:
---
# Filename: running-selected-task.yml
- name: Running selected task example
hosts: localhost
gather_facts: false
tasks:
- debug:
msg: "AAA"
tags:
- never
- aaa
- debug:
msg: "BBB"
tags:
- never
- bbb
這個 playbook 裡有兩個 task,一個會顯示 AAA,加上了 never 與 aaa 這兩個 tag;另一個則顯示 BBB,加上了 never 與 bbb 這兩個 tag。
先不指定 tag 來執行看看:
$ ansible-playbook -i localhost, -c local running-selected-task.yml
PLAY [Running selected task example] *********************************************************************************************
PLAY RECAP ***********************************************************************************************************************
你會發現沒有任何 task 被執行。
接著來試試看加上 -t aaa
$ ansible-playbook -i localhost, -c local -t aaa running-selected-task.yml
PLAY [Running selected task example] *********************************************************************************************
TASK [debug] *********************************************************************************************************************
ok: [localhost] => {
"msg": "AAA"
}
PLAY RECAP ***********************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
的確就只顯示了 ‘AAA’。
然後試試看加上 -t bbb
$ ansible-playbook -i localhost, -c local -t bbb running-selected-task.yml
PLAY [Running selected task example] *********************************************************************************************
TASK [debug] *********************************************************************************************************************
ok: [localhost] => {
"msg": "BBB"
}
PLAY RECAP ***********************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最後,如果這兩個 task 都要執行的話呢?那就是用 -t aaa,bbb
囉
$ ansible-playbook -i localhost, -c local -t aaa,bbb running-selected-task.yml
PLAY [Running selected task example] *********************************************************************************************
TASK [debug] *********************************************************************************************************************
ok: [localhost] => {
"msg": "AAA"
}
TASK [debug] *********************************************************************************************************************
ok: [localhost] => {
"msg": "BBB"
}
PLAY RECAP ***********************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
透過 tag ,我們可以只執行 playbook 裡一部份的 task,而不需要執行全部,在先期的開發上有很大的幫助。看到這裡,相信你應該知道 tag 該怎麼應用了。