Ansible寄存器和。已更改。不工作

Ansible寄存器和。已更改。不工作,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,我有一个安装包的playbook,如果安装了包,则需要运行命令。我使用了register和.changed来实现这一点,但是,在Ansible 2.0中似乎不起作用,除非我做得不对。这是我的密码 - name: install syncthing (arch) pacman: name=syncthing state=latest when: ansible_distribution in ['Archlinux', 'Manjaro Linux'] register: syncth

我有一个安装包的playbook,如果安装了包,则需要运行命令。我使用了register和.changed来实现这一点,但是,在Ansible 2.0中似乎不起作用,除非我做得不对。这是我的密码

- name: install syncthing (arch)
  pacman: name=syncthing state=latest
  when: ansible_distribution in ['Archlinux', 'Manjaro Linux']
  register: syncthing

- name: enable syncthing
  command: systemctl enable syncthing@jay.service
  when: syncthing.changed
发生的情况是第一个块安装syncthing包,并提供以下输出:

已更改:[myhost]

然后应该执行下一个块,因为上一步注册了更改,但不幸的是,它没有:

跳过:[10.10.99.193]


我希望有一个简单的解决方案,从我阅读的文档以及下面的帖子来看,我似乎做得很正确:

你能打印剧本之间的同步并发布结果吗?-debug:var=syncthing这是个好主意。但我刚才试过的一件事是在Debian主机上扮演相同的角色。它工作得非常好。显然,Arch Linux是唯一一个有问题的。我尝试了您的调试命令,得到了以下结果:syncthing:变量未定义!同样,这只适用于ArchLinux。看起来Ansible和Arch Linux有一个bug。我已决定从现在起停止在Arch Linux中使用Ansible,使用Ansible管理滚动版本太麻烦了。如果您放弃when标准会发生什么?如果没有这些标准,它将按预期工作。
- name: install syncthing (arch)
  pacman: name=syncthing state=latest
  when: ansible_distribution in ['Archlinux', 'Manjaro Linux']
  register: syncthing

- name: enable syncthing
  command: systemctl enable syncthing@jay.service
  when: ansible_distribution in ['Archlinux', 'Manjaro Linux'] and syncthing is defined and syncthing.changed