ansible的異步執行


ansible任務的異步執行
96  茶客furu聲 關注
2016.07.12 01:40* 字數 458 閱讀 1777評論 0喜歡 4
ansible方便在於能批量下發,並返回結果和呈現。簡單、高效。
但有的任務執行起來卻不那么直接,可能會花比較長的時間,甚至可能會比ssh的超時時間還要長。這種情況任務是不是沒法執行了?
ansible考慮到了這種情況,官方文檔介紹了這個問題的解決方法,就是讓下發的任務執行的連接變為異步:任務下發之后,長連接不再保持,而是每隔一段時間輪詢結果,直到任務結束。
這是官網相關的介紹
他們在playbook的任務中加入兩個參數:async和poll。

async參數值代表了這個任務執行時間的上限值。即任務執行所用時間如果超出這個時間,則認為任務失敗。此參數若未設置,則為同步執行。
poll參數值代表了任務異步執行時輪詢的時間間隔。
官方給出例子:
  ----
    hosts: all
    remote_user: root
    tasks:
      - name: simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec
        command: /bin/sleep 15
        async: 45
        poll: 5
這時候已經不怕任務超時了。可以執行一個45s的任務,當然也可以根據需要自己設置。另外,如果poll為0,就相當於一個不關心結果的任務。

如果還想要更方便地看輪詢結果,ansible還提供了這個模塊async_status。

  ---
    # Requires ansible 1.8+
    - name: 'YUM - fire and forget task'
      yum: name=docker-io state=installed
      async: 1000
      poll: 0
      register: yum_sleeper

    - name: 'YUM - check on fire and forget task'
      async_status: jid={{ yum_sleeper.ansible_job_id }}
      register: job_result
      until: job_result.finished
      retries: 30
第一個job執行異步任務,並且注冊了一個名字叫yum_sleeper,用於提供給第二個job作為輪詢對象,並且poll設為0,它自己不再輪詢。
第二個job使用async_status模塊,進行輪詢並返回輪詢結果。准備檢查30次。結果如下:

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [cloudlab001]

TASK [YUM - fire and forget task] **********************************************
ok: [cloudlab001]

TASK [YUM - check on fire and forget task] *************************************
FAILED - RETRYING: TASK: YUM - check on fire and forget task (29 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (28 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (27 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (26 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (25 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (24 retries left).
changed: [cloudlab001]

PLAY RECAP *********************************************************************
cloudlab001                : ok=3    changed=1    unreachable=0    failed=0

 


免責聲明!

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



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