我正在編寫一個創建Docker鏡像的手冊,僅在我的辦公室內使用。我的一個要求是允許其他開發人員在Docker鏡像構建之前輕鬆運行自己的代碼。爲此,我允許他們添加他們自己的yml文件,並在變量設置爲False時運行它。我要求他們的文件名爲{{account}}。yml,其中account是另一個必須設置的變量。Ansible包含可能不存在的文件?
對於不想在構建圖像之前運行自定義遊戲的用戶,不會有{{account}}。yml文件。我想通過添加條件錯誤不會發生,因爲我不會試圖導入文件,但即使包含應該被忽略,我仍然得到一個錯誤,告訴我該文件不存在。
- name: Custom provisioning
include: '{{account}}.yml'
when: default_prebuild_provision == 'False' or generic == 'False'
我知道我的工作條件,因爲如果我把它更改爲類似
- name: Custom provisioning
shell: echo Hello World
when: default_prebuild_provision == 'False' or generic == 'False'
,因爲條件不滿足,我不會得到任何輸出。
有沒有人有解決方案來解決這個問題?我也應該爲此打開一張票,因爲它似乎是一個錯誤?
AFAIK這不建議使用,但如果找不到更優雅的方式,可以在該特定任務中添加「ignore_errors:yes」。 – Mxx 2014-11-04 04:19:54
無論推薦與否,使用ignore_errors:true都會使用最少的代碼來完成'文件存在'的情況,如果是,則執行'code block'會執行的命令。我會高興地使用ignore_errors而不是在這種情況下自己創建一個評估案例包裝器 – PhillipHolmes 2015-01-30 23:55:44
這不會起作用。見Leitos的答案。 '包括'不是正常的任務。無論條件或ignore_errors的其他語句如何,在劇本執行開始之前,所有'include'都得到解決。所以文件必須在那裏或不管是什麼。 – udondan 2015-01-31 08:30:20