我有一个使用aws_ec2模块的动态ansible库存。一般来说,它运作良好。但是,有一个问题。我已经尝试过多次使用'groups:'关键字创建组,但所有尝试均失败。文档有点稀疏-实际上这里是全部:
groups: (dictionary)
Default:{}
Add hosts to group based on Jinja2 conditionals.
我已经尝试了多种语法,Jinja2,条件,声明,到目前为止,还没有一个成功创建名为'foo'的组。一段时间以来,我认为可能需要传递一个返回true或false的小代码snibbet,从而包含或排除目标主机。似乎并非如此。我想知道这里是否有人使用过'groups:'关键字并且比我使用的更远。谷歌搜索时发现的很少。 FWIW,我在Linux上使用ansible 2.9.9。
一些不起作用的示例:
---
plugin: aws_ec2
### fails to create a group
groups:
foo: >-
tags.get('Name') if tags.get('Name') == 'foo-server'
### returns every host in the AWS account.
groups:
bar:
- "{{ tags.get('Name') == 'bar-server' }}"
而且,与此模块一起使用ansible的调试工具也很困难。尽管我发现许多工具(例如剧本调试器)似乎无法正常工作它们在其他情况下非常有用。您可能需要调试的任何提示在这种情况下,将不胜感激。
看起来你很亲密
与许多其他问题一样,权威的“文档”是源代码。具体来说,their use of the 'groups' option调用_add_host_to_composed_groups
,其中它们将_add_host_to_composed_groups
字典输入到包含所有hostvar的Jinja2评估上下文中。该表达式已插入groups:
,因此您不希望在表达式中包含{% if ... %}
标记,而只是“原始” jinja2表达式
{{
请注意,我没有方便的环境来测试清单脚本,但这是理论所在