2015-03-19 81 views
1

我正在使用Ansible將一個框架(Git克隆,運行安裝腳本)部署到服務器。安裝步驟,用於運行install.sh這樣的腳本:如何確定腳本是否以前使用Ansible運行?

- name: Install Foo Framework 
    shell: ./install.sh 
    args: 
    chdir: ~/foo 

如何確定我是否已執行在Ansible上次運行這一步呢?我想爲此步驟添加一個when條件,該條件僅在install.sh腳本以前未運行時纔會執行。

install.sh腳本會執行一些操作(替換用戶主目錄中的某些文件),但是腳本以前是否只是查看這些文件並不明顯。 ~/foo.sh文件可能之前已存在,尚不清楚它是由安裝腳本替換還是之前存在。

Ansible中有一種方法可以在服務器上存儲一個值,讓我確定此特定任務是否已被執行過?或者,我應該在用戶的主目錄中創建一個標記文件(例如~/foo-installed),以便稍後調用這本playbook?

+0

做了一些進一步的研究,它看起來像'touch'和'creates'選項的組合應該做的伎倆,類似於這裏的答案︰http://stackoverflow.com/questions/26409164/ansible-ignore-運行一次配置任務 – nwinkler 2015-03-19 12:54:56

回答

3

下面是我最終解決問題的方法。指針使用creates選項幫助:

- name: Install Foo Framework 
    shell: ./install.sh && touch ~/foo_installed 
    args: 
    chdir: ~/foo 
    creates: ~/foo_installed 

使用這種方法,當安裝腳本完成沒有一個錯誤的~/foo_installed文件只創建。

2

我建議使用script模塊來代替。該模塊有一個creates參數:

一個文件名,當它已經存在時,這一步將不會運行。 (在Ansible 1.5中添加)

因此,您的腳本可以簡單地touch一個文件,它會阻止在後續調用中執行腳本。

+0

「〜/ .ansible」文件夾是放置該標記文件的好位置嗎?或者我應該避開這個? – nwinkler 2015-03-19 12:20:24

+0

也許這不是最好的想法,因爲Ansible人可以隨時決定擦掉它,在即將到來的更新Ansible 2.0。我更喜歡你控制的文件夾,比如你的home文件夾或者誤用'/ var/log'('/ var/lock'聽起來更適合這個,但是在重新啓動時會被擦掉) – udondan 2015-03-19 12:32:34

+1

BTW:我剛剛注意到'shell'模塊也有'created'參數:http://docs.ansible.com/shell_module.html – nwinkler 2015-03-19 12:53:52

相關問題