ansible 任務流程控制


一、任務委托

  默認情況下,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端口任未開啟,將返回失敗信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM