ansible任務(wù)的異步執(zhí)行

ansible方便在于能批量下發(fā),并返回結(jié)果和呈現(xiàn)。簡單、高效。
但有的任務(wù)執(zhí)行起來卻不那么直接,可能會(huì)花比較長的時(shí)間,甚至可能會(huì)比ssh的超時(shí)時(shí)間還要長。這種情況任務(wù)是不是沒法執(zhí)行了?
ansible考慮到了這種情況,官方文檔介紹了這個(gè)問題的解決方法,就是讓下發(fā)的任務(wù)執(zhí)行的連接變?yōu)楫惒剑喝蝿?wù)下發(fā)之后,長連接不再保持,而是每隔一段時(shí)間輪詢結(jié)果,直到任務(wù)結(jié)束。
這是官網(wǎng)相關(guān)的介紹
他們在playbook的任務(wù)中加入兩個(gè)參數(shù):async和poll。

  • async參數(shù)值代表了這個(gè)任務(wù)執(zhí)行時(shí)間的上限值。即任務(wù)執(zhí)行所用時(shí)間如果超出這個(gè)時(shí)間,則認(rèn)為任務(wù)失敗。此參數(shù)若未設(shè)置,則為同步執(zhí)行。
  • poll參數(shù)值代表了任務(wù)異步執(zhí)行時(shí)輪詢的時(shí)間間隔。
    官方給出例子:
  ----
    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

這時(shí)候已經(jīng)不怕任務(wù)超時(shí)了??梢詧?zhí)行一個(gè)45s的任務(wù),當(dāng)然也可以根據(jù)需要自己設(shè)置。另外,如果poll為0,就相當(dāng)于一個(gè)不關(guān)心結(jié)果的任務(wù)。

如果還想要更方便地看輪詢結(jié)果,ansible還提供了這個(gè)模塊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

第一個(gè)job執(zhí)行異步任務(wù),并且注冊了一個(gè)名字叫yum_sleeper,用于提供給第二個(gè)job作為輪詢對象,并且poll設(shè)為0,它自己不再輪詢。
第二個(gè)job使用async_status模塊,進(jìn)行輪詢并返回輪詢結(jié)果。準(zhǔn)備檢查30次。結(jié)果如下:

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ansible 系統(tǒng)架構(gòu) ansible簡介ansible是新出現(xiàn)的自動(dòng)化運(yùn)維工具,ansible是一個(gè)配置管理和...
    運(yùn)維阿文閱讀 9,847評論 1 53
  • 在項(xiàng)目中有很多地方用到ansible。最初使用ansible只是為了方便代碼部署和模板配置,畢竟手動(dòng)去30+臺機(jī)器...
    __七把刀__閱讀 10,930評論 6 79
  • 默認(rèn)情況下playbook中的任務(wù)執(zhí)行時(shí)會(huì)一直保持連接,直到該任務(wù)在每個(gè)節(jié)點(diǎn)都執(zhí)行完畢.有時(shí)這是不必要的,比如有些...
    lework閱讀 4,460評論 0 2
  • 1. 什么是Ansible,它有什么用? Ansible它是個(gè)集配置管理和應(yīng)用部署于一體的自動(dòng)化運(yùn)維工具。 應(yīng)用情...
    午覺不眠Orz閱讀 1,723評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139

友情鏈接更多精彩內(nèi)容