我在Ansible playbook中有以下角色来确定Packer的已安装版本,如果它与本地变量的版本不匹配,则有条件地安装它:
---
# detect packer version
- name: determine packer version
shell: /usr/local/bin/packer -v || true
register: packer_installed_version
- name: install packer cli tools
unarchive:
src: https://releases.hashicorp.com/packer/{{ packer_version }}/packer_{{ packer_version }}_linux_amd64.zip
dest: /usr/local/bin
copy: no
when: packer_installed_version.stdout != packer_version
Run Code Online (Sandbox Code Playgroud)
问题/烦恼是Ansible将此步骤标记为"已更改":
我想收集这个事实而不标记改变的东西,所以我可以在我的剧本执行结束时可靠地知道,如果事实上已经改变了.
有没有更好的方法去做我上面做的事情?
Mil*_*eek 24
来自Ansible文档:
覆盖1.3版本中新增的更改结果.
当shell /命令或其他模块运行时,它通常会根据它是否认为它影响了机器状态来报告"已更改"状态.
有时候,你会知道,根据返回代码或输出,它没有做任何改动,并希望覆盖"变"的结果,使得它不会出现在报表输出或不会导致处理火灾:
tasks:
- shell: /usr/bin/billybass --mode="take me to the river"
register: bass_result
changed_when: "bass_result.rc != 2"
# this will never report 'changed' status
- shell: wall 'beep'
changed_when: False
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你会想要:
---
# detect packer version
- name: determine packer version
shell: /usr/local/bin/packer -v || true
register: packer_installed_version
changed_when: False
- name: install packer cli tools
unarchive:
src: https://releases.hashicorp.com/packer/{{ packer_version }}/packer_{{ packer_version }}_linux_amd64.zip
dest: /usr/local/bin
copy: no
when: packer_installed_version.stdout != packer_version
Run Code Online (Sandbox Code Playgroud)