Ansible寄存器和。已更改。不工作
我有一个安装包的playbook,如果安装了包,则需要运行命令。我使用了register和.changed来实现这一点,但是,在Ansible 2.0中似乎不起作用,除非我做得不对。这是我的密码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
- 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