2017-03-24 13 views
0

我在ansible劇本以下任務:如何運行一個命令只有一個在線文件中已經改變ansible

- name: download last buildtools 
    get_url: 
    url: https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar 
    dest: ~/buildtools/BuildTools.jar 

我想下面的命令只有在BuildTools.jar文件運行已更改:

java -jar BuildTools.jar --rev latest 

我該如何在我的劇本中做到這一點?

編輯:只是要清楚,我只想在上述url的文件版本發生變化時才觸發命令。因此,在這種情況下,每次構建工具都支持新版本的Minecraft。

+0

可能重複的[如何檢查文件是否已經下載在可靠](http://stackoverflow.com/questions/22469880/how-can-i-check-if-file-has-been-downloaded-在-ansible) – techraf

回答

0

最後,我發現了一種優雅的方式做我想要的東西:

從GET_URL模塊中的力參數的doc

如果是和dest是不是一個目錄,將下載每次更新文件並在內容更改時替換文件。

所以我的配置,現在是:

- name: Download the last buildtools 
    get_url: 
    url: https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar 
    dest: ~/buildtools/BuildTools.jar 
    force: yes 
    register: buildtools 

- name: Update BuildTools 
    command: java -jar BuildTools.jar --rev latest 
    args: 
    chdir: ~/buildtools/ 
    when: buildtools.changed 

所以更新編譯工具的任務只是運行,如果在URL下載的文件是在服務器上的原始文件的不同,或者如果它是第一個該文件被下載的時間。

相關問題