iT邦幫忙

0

Ansible 如何強制跳過沒反應或執行超出時間的節點

  • 分享至 

  • xImage

各位大大好 小小寫了一個playbook控制300多個節點,某個節點因為安全性比較高導致ansible任務就卡在那台機器不動了,只要刪掉那個節點整個playbook就又可以順順的跑完,請問大大Ansible有甚麼方法可以自動強制跳過沒反應或執行超出時間的節點嗎? 不然每次出狀況小小我就要找半天問題節點在哪?300個節點真是找到想哭,先感謝大大了!!!

kk999 iT邦新手 2 級 ‧ 2022-11-22 15:10:23 檢舉
找到方法了
kk999 iT邦新手 2 級 ‧ 2023-03-09 13:43:57 檢舉
ansible 2.10 以後多了task 層級的新關鍵字timeout
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
zyman2008
iT邦大師 6 級 ‧ 2022-01-21 12:02:47
最佳解答

要用非同步的方式執行task
下為一個範例,第一個task預計要花100秒.但是不想等,要直接執行第二個task.

---
- hosts: host1
   tasks:
     - name: ping google 100
       shell: "ping 8.8.8.8 -c 100 > google.log"
       async: 100 # 允許 task 最久執行多長時間(秒)
       poll: 0 #多久polling一次執行結果,直到async時間到. 設為 0 就是射後不理,不用等直接跑下一個task.以後再用async_status查最後結果.
       register: ping_google_100
       ignore_errors: yes
 
     - name: ping hinet 10
       shell: "ping 168.95.1.1 -c 10 > hinet.log"
       async: 10
       poll: 0
       register: ping_hinet_10
       ignore_errors: yes

執行 playbook, 每個task會有對應的 ansible_job_id
$ ansible-playbook playbook.yml -v
...
...
TASK [ping google 100] *********************************************************************************
changed: [host1] => {"ansible_job_id": "385415241435.27801", "changed": true, "finished": 0, "results_file": "/root/.ansible_async/385415241435.27801", "started": 1}
...
...

等過了最常允許執行時間後,再用 ansible_job_id 取得task最終執行結果.
$ ansible host1 -m async_status -a "385415241435.27801"

kk999 iT邦新手 2 級 ‧ 2022-01-21 16:18:44 檢舉

感謝大大的說明!但程式還是卡住,特定去看了一下open source的 script (win_get_url.ps1)不過看不出所以然,特地去抓新版的ps1 script還是卡,不過大大給了一個重要方向透過register留下log再從ansible_job_id找答案

我要發表回答

立即登入回答