一、任務委托
默認情況下,ansible的所有任務都是在指定的機器上運行的,當在一個獨立的群集環境中配置時,但是只想操作其中的某一台主機,或者在特定的主機上運行,此時就需要用到ansible的任務委托功能。
使用delegate_to關鍵字可以配置任務在指定的機器上執行,二其他的任務還是在hosts關鍵字配置的機器上運行,到了這個關鍵字所在的任務時,就使用委托的機器運行。例如:
--- - hosts: zookeeper remote_user: root gather_facts: no tasks: - name: test shell: "echo 123 > /tmp/bb" - name: test delegate shell: "echo 1 > /tmp/aa" register: aa delegate_to: 192.168.4.50 - name: hhh debug: var: "{{ aa }}"
說明:zookeeper組里面是兩天主機:
192.168.4.50
192.168.4.46
如果想要在ansible服務器本地運行,除了將任務委托給127.0.0.1或者localhost,還可以使用local_action關鍵字完成,如下: tasks:
- name: test shell: "echo 123 > /tmp/bb" - name: test delegate shell: "echo 1 > /tmp/aa" register: aa delegate_to: 127.0.0.1
或者
tasks:
- name: test shell: "echo 123 > /tmp/bb" - name: test delegate local_action: shell "echo 1 > /tmp/aa" register: aa
二、任務暫停
當一些任務的運行需要等到一些狀態的恢復,比如某一台主機或者應用剛剛重啟,需要等待其某個端口開啟,這個時候就需要任務暫停。如下:
--- - hosts: hadoop remote_user: root gather_facts: no tasks: - name: test1 local_action: module: wait_for #模塊名字 port: 80 host: 192.168.4.50 delay: 10 timeout: 300 state: started
使用local_action配合wait_for模塊來完成任務的暫停操作。該任務每隔10s檢查主機上的80端口是否開啟,如果操作300s,80端口任未開啟,將返回失敗信息。