ansible之並行運行


ansible之並發運行

轉載 2016年07月14日 12:33:39
ansible默認只會創建5個進程,所以一次任務只能同時控制5台機器執行.那如果你有大量的機器需要控制,或者你希望減少進程數,那你可以采取異步執行.ansible的模塊可以把task放進后台,然后輪詢它.這使得在一定進程數下能讓大量需要的機器同時運作起來.


使用async和poll這兩個關鍵字便可以並行運行一個任務. async這個關鍵字觸發ansible並行運作任務,而async的值是ansible等待運行這個任務的最大超時值,而poll就是ansible檢查這個任務是否完成的頻率時間.


如果你希望在整個集群里面平行的執行一下updatedb這個命令.使用下面的配置


- hosts: all
    tasks:
      - name: Install mlocate
        yum: name=mlocate state=installed


      - name: Run updatedb
        command: /usr/bin/updatedb
        async: 300
        poll: 10
        
你會發現當你使用上面的例子控制超過5台機器的時候,command.在上面yum模塊會先在5台機器上跑,完成后再繼續下面的機器.而上面command模塊的任務會一次性在所有機器上都執行了,然后監聽它的回調結果


如果你的command是控制機器開啟一個進程放到后台,那就不需要檢查這個任務是否完成了.你只需要繼續其他的動作,最后再使用wait_for這個模塊去檢查之前的進程是否按預期中開啟了便可.只需要把poll這個值設置為0,便可以按上面的要求配置ansible不等待job的完成.


最后,或者你還有一種需求是有一個task它是需要運行很長的時間,那你需要設置一直等待這個job完成.這個時候你把async的值設成0便可.


總結來說,大概有以下的一些場景你是需要使用到ansible的polling特性的


1、你有一個task需要運行很長的時間,這個task很可能會達到timeout.
2、你有一個任務需要在大量的機器上面運行
3、你有一個任務是不需要等待它完成的


當然也有一些場景是不適合使用polling特性的
1、你的這個任務是需要運行完后才能繼續另外的任務的

2、你的這個任務能很快的完成



免責聲明!

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



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