确保使用Ansible下载二进制文件具有幂等性的最佳实践是什么?

时间:2019-04-29 13:05:18

标签: elasticsearch ansible

我正在写一个有趣的剧本来安装Elastic stack,并将堆栈的每个组件分解为一个单独的角色。在执行剧本期间,我使用 unarchive 模块从供应商处获取二进制文件并将其解压缩。

类似的东西:

- name: Install | Get binary
  unarchive:
    src: "{{ elasticsearch_download_url }}"
    dest: "{{ base_dir }}"
    remote_src: yes


我遇到的问题是二进制文件下载中的幂等性。据我所知,在剧本运行过程中,真正的幂等性是一堆“确定” 的响应,而没有“改变” 的响应。

在确保二进制下载的幂等性方面是否存在最佳实践?我当时在想也许可以使用 when:键检查现有安装,但是我不是100%。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

对于您的总体问题,有几种可能的解决方案(取决于例如能够管理升级,解耦下载和取消存档的角色等)。

在您的特定情况下,并且理所当然地认为您的elasticsearch_download_url不变,您可以使用unarchive modulecreates选项轻松实现这一点:

- name: Install | Get binary
  unarchive:
    src: "{{ elasticsearch_download_url }}"
    dest: "{{ base_dir }}"
    remote_src: yes
    creates: "{{ base_dir }}/elasticsearch-x.y.z"

我的示例中的目录完全适合这种情况,并且应与创建的目录的确切名称匹配。

如果您对一个稍微复杂一些的示例感兴趣,该示例处理关系的版本检测和升级,我碰巧保留了一个将所有这些功能实现为功能的角色:https://github.com/ansible-ThoTeam/nexus3-oss/blob/master/tasks/nexus_install.yml

答案 1 :(得分:0)

get_url与参数“ 校验和”一起使用。

从文档中:

- name: Download file with check (sha256)
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    checksum: sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c