2016-11-14 41 views
1

我正在尋找一種方法,以獲得來自Ansible模塊的更詳細的輸出,成功執行,但似乎實現的唯一示例是shell模塊,它允許註冊並稍後打印stdout和stderr。 雖然這將是一個解決方法,但如果內置Ansible模塊存在,那麼觸發shell並不是一個好的做法。Ansible:模塊的詳細輸出

舉個例子,當從一個模塊更詳細的輸出將是有益的:

- name: upgrade all packages 
    yum: name=* state=latest 

這將更新使用百勝模塊的所有包。但是,它不顯示更新(如果有的話)。

類似的行爲可以在其他模塊中觀察到。所以真正的問題是:是否有任何Ansible開關/設置可以在劇本中強制執行單個任務的更詳細的輸出? (我想櫻桃選擇我得到詳細的輸出,並避免其他任何噪音)。

回答

3

好,感謝@xeroqu,我可以回答我自己現在:

- name: upgrade all packages 
    yum: name=* state=latest 
    register: result 
    - name: Show output 
    when: result|succeeded 
    debug: msg="{{ result.results }}" 

的關鍵是{{result.results}},而不是{{result.stdout_lines}}。更確切地說,模塊出現返回與字典以下內容(至少):

ok: [localhost] => { 
    "msg": { 
     "changed": false, 
     "msg": "", 
     "rc": 0, 
     "results": [ 
      "Nothing to do here, all packages are up to date" 
     ] 
    } 
} 

這肯定給了我,我一直在尋找,可根據具體情況逐案進行應用的詳細程度。

2

一個想法是有另一個任務,如果成功,將打印上一個任務的輸出。我沒有測試,但這樣的事情可能工作:

- name: upgrade all packages 
    yum: name=* state=latest 
    register: result 
- name: Show output 
    when: result|succeeded 
    debug: msg="{{ result.stdout_lines }}" 
+1

這是*幾乎* spot,謝謝。我會給它一個upvote,因爲它讓我走向正確的方向。一會兒會回答我自己的問題。 – sysconfig

+0

我很高興它幫助@sysconfig。乾杯 – xeroqu