ansible-playbook併發

第三章: playbook進階
playbook好文章
到目前爲止,我們只是簡單的運行了幾個模塊.其實ansible運行更多控制去執行playbook.使用這些技術,你能夠執行更加複雜的部署.

併發運行

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特性的

你有一個task需要運行很長的時間,這個task很可能會達到timeout.
你有一個任務需要在大量的機器上面運行
你有一個任務是不需要等待它完成的
當然也有一些場景是不適合使用polling特性的

你的這個任務是需要運行完後才能繼續另外的任務的
你的這個任務能很快的完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章