在确定变量的值时,不要将某些内容标记为已更改

Naf*_*Kay 10 ansible

我在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)