ansible- handlers用法
-
清單配置:
cat /etc/ansible/hosts [test] 18.18.23.102 ansible_become_pass='123.cn'
-
配置文件配置:
cat /etc/ansible/ansible.cfg [defaults] inventory = /etc/ansible/hosts
-
handlers介紹和用法
handlers是另一種'任務列表',handlers中的任務會被tasks中的任務進行調用。當tasks中的任務真正執行後,handlers中被調用的任務纔會執行。如果tasks中的任務並沒有做出真正的操作,handlers中的任務即使被調用,也並不會被執行。handlers可以有多個任務,並被tasks中不同的任務notify.
handlers和tasks是對齊的。通過notify關鍵字通知handlers中的任務。
所有task執行完畢後,纔會執行各個handler.
如果在執行完某些task以後立即執行對應的handler,需要使用meta模塊。
meta任務是一種特殊任務,meta任務可影響ansible的內部運行方式。meta:flush_handlers表示立即執行之前的task所對應handler.
例如: cat meta.yaml
---
- hosts: test
remote_user: yuan
tasks:
- name: task1
file:
path: /php7/osspull
state: touch
notify: handler1
- name: task2
file:
path: /php7/ossupload
state: touch
notify: handler2
- meta: flush_handlers
- name: task3
file:
path: /python/smtposs
state: touch
notify: handler3
handlers:
- name: handler1
file:
path: /php7/video.txt
state: touch
- name: handler2
file:
path: /php7/video2.txt
state: touch
- name: handler3
file:
path: /python/smtpemail.txt
state: touch
在每個task執行後立馬執行對應handlers,可以在每個任務後都添加一個meta任務,並將其值設置爲flush_handlers.
如果一次notify多個handler,需要藉助關鍵字: listen.
可將listen理解爲組名。 一次notify多個handler時,把多個handler分爲"一組",使用相同組名即可。
例如: cat listen.yaml
---
- hosts: test
remote_user: yuan
tasks:
- name: taskone
file:
path: /php7/wordpress.txt
state: touch
notify: handler group 1
handlers:
- name: handler1
listen: handler group 1
file:
path: /php7/wp1
state: touch
- name: handler2
listen: handler group 1
file:
path: /php7/wp2
state: touch
tags的用法
當你想要執行一個playbook腳本其中的一部分任務時,該怎麼辦呢?
這個時候tags就派上用場了。
tags可以對任務進行"打標籤", 根據標籤,我們可以指定哪些任務可以執行,哪些任務不執行。
例如:
cat tags.yaml
---
- hosts: test
remote_user: yuan
tasks:
- name: one
file:
path: /dockerfile/alpine-nginx
state: directory
tags: a1
- name: two
file:
path: /dockerfile/alpine-mysql
state: directory
tags: a2
- name: three
file:
path: /dockerfile/alpine-python
state: directory
tags: a3
只執行a2的任務:ansible-playbook -S -R root --tags=a2 tags.yaml
使用--tags選項指定某個標籤,當指定標籤後,標籤對應的任務就會被執行,其他任務則不會被執行。
也可以使用--skip-tags選項指定"不執行的任務".
可以爲每個任務添加多個標籤。如果不同的多個任務之間有關聯性,也可以使用相同的標籤。
語法示例:
語法1:
tags:
- n1
- nginx
語法2:
tags: n1,nginx
調用標籤時,可一次性指定多個標籤,調用多個標籤用逗號隔開。
查看tags.yaml中有哪些標籤,執行:ansible-playbook -S -R root --list-tags tags.yaml
-
ansible預置的5個特殊tag
- always : 這個任務總是會被執行。
- never : 這個任務從不執行。
- tagged: 表示只執行有標籤的任務。
- untagged : 表示只執行沒有標籤的任務。
- all : 表示所有任務會被執行,默認標籤.不用指定。
如果多個任務的tags標籤的值中,存在always關鍵字,會執行所有有always關鍵字對應的任務。
不執行標籤中包含always的任務,可以使用--skip-tags選項跳過。
例如:該命令跳過所有包含always關鍵字的任務: ansible-playbook -S -R root --skip-tags always tags.yaml 只執行有標籤的任務: ansible-playbook -S -R root --tags tagged tags.yaml 跳過包含標籤和always關鍵字的任務: ansible-playbook -S -R root --skip-tags tagged tags.yaml 只執行沒有標籤的任務,若包含always關鍵字,任務也會執行: ansible-playbook -S -R root --tags untagged tags.yaml