Ansible清单:aws_ec2模块—寻找工作的'groups:'函数的示例

问题描述 投票:0回答:1

我有一个使用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的调试工具也很困难。尽管我发现许多工具(例如剧本调试器)似乎无法正常工作它们在其他情况下非常有用。您可能需要调试的任何提示在这种情况下,将不胜感激。

ansible jinja2 ansible-2.x ansible-inventory
1个回答
0
投票

看起来你很亲密

与许多其他问题一样,权威的“文档”是源代码。具体来说,their use of the 'groups' option调用_add_host_to_composed_groups,其中它们将_add_host_to_composed_groups字典输入到包含所有hostvar的Jinja2评估上下文中。该表达式已插入groups:,因此您不希望在表达式中包含{% if ... %}标记,而只是“原始” jinja2表达式

{{

请注意,我没有方便的环境来测试清单脚本,但这是理论所在

© www.soinside.com 2019 - 2024. All rights reserved.