Ansible inventory:aws_ec2 模块——寻找工作“groups:”函数的示例

2024-04-05

我有一个使用 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 的东西一样,权威的“文档”就是源代码。具体来说他们对“群组”选项的使用 https://github.com/ansible/ansible/blob/v2.9.9/lib/ansible/plugins/inventory/aws_ec2.py#L568哪个调用_add_host_to_composed_groups https://github.com/ansible/ansible/blob/v2.9.9/lib/ansible/plugins/inventory/__init__.py#L367他们在那里喂养groups:dict 到包含所有主机变量的 Jinja2 评估上下文中。表达式被插入{% if ... %}所以你不想包括{{表达式中的标记,只是“原始”jinja2 表达式

groups:
  foo: tags.get('Name') == 'foo-server'

请预先警告,我没有方便的环境来测试该库存脚本,但这就是理论

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible inventory:aws_ec2 模块——寻找工作“groups:”函数的示例 的相关文章

随机推荐