我希望能夠保證在給定主機上成功執行長時間運行的shell命令後,它不會在該主機上的後續劇本運行中執行。如何確保每個主機只執行一次Ansible shell命令?
我很高興獲悉了Ansible shell任務的creates
選項(請參閱http://docs.ansible.com/ansible/shell_module.html);使用這個我可以創建一個文件,一個shell命令運行成功後,並沒有該命令在以後運行時執行:
- name: Install Jupiter theme
shell: wp theme install ~/downloads/jupiter-theme.zip --activate
&& touch ~/ansible-flags/install-jupiter-theme
args:
creates: ~/ansible-flags/install-jupiter-theme
正如你所看到的,我有一個目錄ansible-flags
在我主動的主目錄,這些控制文件用戶(deploy
)。
但是,這是一個相當混亂。有一個更好的方法嗎?
此外,當我需要以不同的用戶身份運行一個步驟時,情況會變得更加複雜;在這種情況下,我無法訪問deploy
主目錄及其子目錄。當然,我可以授予訪問權限,但這增加了更多的複雜性。你會如何推薦我處理這個問題?
我提供的示例的WordPress主題,出於某種原因,我認爲主題將安裝在數據庫中,而不是文件系統;這就是爲什麼我創建了一個人造的控制文件,但是您是對的,我可以查找在主題安裝期間創建的主題目錄。 (回想起來,即使它存儲在數據庫中,我也應該試圖找到一種方法來查詢數據庫中的那條信息。) –
謝謝您花時間回答我的問題。我現在看到,對於無法使用「創建」的情況,確實沒有更簡單的方法來執行我想要的操作。 –