2017-08-30 79 views
1

我已經加入了一個項目,該項目有大量的劇本和角色,並且大量使用include(通常以嵌套的方式),以便在現有劇本/角色中包含劇本/角色。 (不管這是好的還是壞的練習都應該被認爲是超出了這個問題的範圍,因爲它不是我可以立即改變的東西。還要注意的是,沒有使用include_role,因爲這些劇本在2.2出來之前寫得很好,並且仍然在)如何調試Ansible包含和依賴關係?

正常情況下,當runningansible-playbook時,輸出只顯示正在運行的每個任務,但它不顯示包含哪個拉入額外任務。這使得劇本之間的整體流動跳躍很難。相比之下,include_vars任務包括在輸出中。我猜這是因爲它是一個Ansible模塊,而include isn't really a module

因此,無需修改劇本,是否可以運行顯示以下內容的劇本?

  • include指令被觸發,並
  • (理想)也正在被包括在內,因爲它並不總是顯而易見的相對路徑如何轉換成絕對路徑的確切文件

我已經發現很多關於調試劇本的方法,但沒有任何實現這一點的建議。獎勵積分,如果它還顯示通過meta role dependencies包含角色時!

我知道有一些工具可以對劇本進行靜態分析,但我希望能夠在playbook運行時爲我選擇調用的任何劇本輸出信息。

如果目前不可能,這是否是一個合理的功能要求?

回答

4

嘗試執行ansible-playbook -vv,顯示「任務路徑」爲每一個執行的任務,像這樣:

TASK [debug] ********************************************* 
task path: /path/to/task/file.yml:5 
ok: [localhost] => { 
    "msg": "aaa" 
} 

所以,你可以輕鬆地跟蹤實際的文件(包括或不包括)路徑和行號。

至於includes,在當前的Ansible版本(2.2,2.3)中有不同類型的包含:靜態和動態。
靜態包括髮生在解析時間和關於他們的信息被打印(與-vv詳細)在劇本運行的一開始。
動態包含在運行時發生,您可以在輸出中看到青色的「包含」行。

+0

這個'任務路徑:'從1.9開始引入?我目前被迫使用這個古老的1.9版本,而我在使用'-vv'時看不到它。 –

+0

回答我自己的問題:我用2.2.1.0來看它,所以它一定是。即使這個答案對我沒有任何幫助,因爲我仍然不得不使用1.9,但我會接受它,因爲對於沒有瘋狂地運行舊版本的人來說,這足夠好。也就是說,我不確定它是否回答了問題的依賴部分。 –