我正在写一个有趣的剧本来安装Elastic stack,并将堆栈的每个组件分解为一个单独的角色。在执行剧本期间,我使用 unarchive 模块从供应商处获取二进制文件并将其解压缩。
类似的东西:
- name: Install | Get binary
unarchive:
src: "{{ elasticsearch_download_url }}"
dest: "{{ base_dir }}"
remote_src: yes
我遇到的问题是二进制文件下载中的幂等性。据我所知,在剧本运行过程中,真正的幂等性是一堆“确定” 的响应,而没有“改变” 的响应。
在确保二进制下载的幂等性方面是否存在最佳实践?我当时在想也许可以使用 when:键检查现有安装,但是我不是100%。
感谢您的帮助!
答案 0 :(得分:2)
对于您的总体问题,有几种可能的解决方案(取决于例如能够管理升级,解耦下载和取消存档的角色等)。
在您的特定情况下,并且理所当然地认为您的elasticsearch_download_url
不变,您可以使用unarchive module的creates
选项轻松实现这一点:
- 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