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

时间:2016-05-05 17:49:07

标签: ansible

我在Ansible手册中有以下角色来确定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

问题/烦恼是Ansible将此步骤标记为“已更改”:

screenshot

我想收集这个事实,而不会将某些事情标记为已更改,以便我可以在我的剧本执行结束时可靠地知道,如果事实上有任何改变。

有没有更好的方法来解决我正在做的事情?

1 个答案:

答案 0 :(得分:21)

来自Ansible docs

  

覆盖版本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

在您的情况下,您需要:

---
#  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