我正在编写一个ansible playbook来安装Elastic堆栈,堆栈的每个组件都分成一个单独的角色。在playbook执行期间,我使用unarchive模块从供应商处获取二进制文件并解压缩它。
就像是:
- name: Install | Get binary
unarchive:
src: "{{ elasticsearch_download_url }}"
dest: "{{ base_dir }}"
remote_src: yes
我遇到的问题是下载二进制文件时的幂等性。据我所知,在剧本运行期间真正的幂等性将是一堆“确定”的反应而没有“改变”的反应。
在确保下载二进制文件的幂等性方面是否有最佳实践?我在考虑使用when:key检查现有安装,但我不是100%。
谢谢您的帮助!
您的整体问题有几种可能的解决方案(取决于例如能够管理升级,解除下载和解除存档等的角色)。
在你的特殊情况下并且理所当然地认为你的elasticsearch_download_url
没有改变,你可以使用creates
的unarchive module选项轻松实现这一点:
- name: Install | Get binary
unarchive:
src: "{{ elasticsearch_download_url }}"
dest: "{{ base_dir }}"
remote_src: yes
creates: "{{ base_dir }}/elasticsearch-x.y.z"
我的示例中的目录完全弥补了这个场合,并且应该与创建的目录的确切名称相匹配。
如果您对处理nexus的版本检测和升级的稍微复杂的示例感兴趣,我碰巧保持一个角色,将所有这些实现为功能:https://github.com/ansible-ThoTeam/nexus3-oss/blob/master/tasks/nexus_install.yml
使用带有参数“checksum”的get_url。
从文档:
- name: Download file with check (sha256)
get_url:
url: http://example.com/path/file.conf
dest: /etc/foo.conf
checksum: sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c