我创建了https://github.com/eparis/ansible-inventory-bug来准确地展示我的意思,任何人都可以在本地运行的干净的复制器。 它具有“动态”库存和静态库存。
(对于“动态”,它实际上只是在一些 json 中进行分类,但它清楚地显示了问题)
使用静态库存文件when: inventory_hostname in {{ groups['group'] }}
工作得很好。 但是对于动态库存,它失败了,看起来像是一些 python 本地化/字符串处理混乱......
所以只是做了很多实验,发现
作品:
when: inventory_hostname in groups['group']
失败:
when: inventory_hostname in {{ groups['group'] }}
所以是额外的一组 {{ }} 导致了问题。 虽然我不知道为什么它适用于静态而不适用于动态。
你不应该在 when 中使用 {{ }} (我们实际上应该把它当作一个错误),静态/动态在这里工作有点不同的原因似乎是因为最终返回的对象类型,列表 vs unicode 字符串.
如上所述关闭
最有用的评论
所以只是做了很多实验,发现
作品:
when: inventory_hostname in groups['group']
失败:
when: inventory_hostname in {{ groups['group'] }}
所以是额外的一组 {{ }} 导致了问题。 虽然我不知道为什么它适用于静态而不适用于动态。