我有以下任务:
- name: Download foobar tool
unarchive:
src: https://github.com/foobar/releases/download/v1.0/foobar.zip
dest: /usr/local/bin/
remote_src: yes
creates: /usr/local/bin/foobar
当的新版本foobar
发布时,我想更新它,因此我更改src
:
- name: Download foobar tool
unarchive:
src: https://github.com/foobar/releases/download/v2.0/foobar.zip
dest: /usr/local/bin/
remote_src: yes
creates: /usr/local/bin/foobar
问题是,由于/usr/local/bin/foobar
已经存在,Ansible 不会运行该任务。我可以删除该creates
选项,但每次运行剧本时都下载相同的存档感觉不对。
src
有没有办法仅在更改时下载档案?
答案1
有几种选择。我猜,您说的“更改”是指内容更改而不是版本更改。对于版本控制,我会说 - 使用“get_url”并在目标文件名中定义正确的版本。
首先 - 您应该使用 get_url 下载文件本身,并将服务器的最后修改标头存储在目标的某个位置。此信息应该是幂等的。然后,您可以向新 URL 发出 HEAD 请求,以查明此时间戳是否不同,并且仅在时间戳不同时下载文件。
第二 - 大多数存储库还存储 SHA 等校验和。您也可以使用该文件(始终下载)并进行比较。
第三 - 您也可以只存储 URL 并检查,如果它发生变化,则只下载文件(假设您的示例确实意味着应该替换相同的文件)。