Ansible:仅当 src 已更改时才重新下载档案

Ansible:仅当 src 已更改时才重新下载档案

我有以下任务:

- 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 并检查,如果它发生变化,则只下载文件(假设您的示例确实意味着应该替换相同的文件)。

相关内容