2017-10-20 103 views
-1

我所針對的計算機理論上應該爲每個單獨的客戶端運行一個名爲「marketaccess {client_name}」的進程,並且我希望確保此進程正在運行。對於檢查流程是否正在運行,Ansible證明是非常具有挑戰性的。下面是我試圖用來查看給定機器上是否有進程運行的劇本。我打算在'stdout'上運行一個條件,並說如果它不包含客戶的名字,那麼針對該客戶運行一個重新啓動進程腳本。問題是,當我運行這個劇本時,它告訴我字典對象沒有屬性'stdout',但是當我刪除'.stdout'時它運行正常,我可以清楚地看到service_status的stdout值。檢查Ansible進程的狀態

- name: Check if process for each client exists 
    shell: ps aux | grep {{ item.key|lower }} 
    ignore_errors: yes 
    changed_when: false 
    register: service_status 
    with_dict: "{{ customers }}" 

- name: Report status of service 
    debug: 
    msg: "{{ service_status.stdout }}" 

回答

0

您的問題是service_status是一個環形任務的結果,所以它有service_status.results列表包含每次迭代的結果。

要查看stdout每次迭代,你可以使用:

- name: Report status of service 
    debug: 
    msg: "{{ item.stdout }}" 
    with_items: "{{ service_status.results }}" 

但是你可能需要閱讀this note約冪等殼任務,並用乾淨的單任務重寫代碼。

+0

嗨康斯坦丁,感謝您的建議。你能否推薦一個更好的方式來編寫這個劇本,以便可以在一個簡單的單一任務中單獨檢查流程? –