如果在线文件已更改为ansible,我该如何运行命令

时间:2017-03-24 21:34:54

标签: 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

我如何在我的ansible剧本中做到这一点?

编辑:为了清楚起见,我希望只有在上面的url文件版本发生变化时才会触发该命令。因此,在每种情况下,每次构建工具都支持新版本的Minecraft。

1 个答案:

答案 0 :(得分:0)

最后,我找到了一种优雅的方式来做我想要的事情:

来自get_url模块中force参数的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上下载的文件与服务器上的原始文件不同,或者第一次下载文件时,才会运行Update BuildTools任务。