我有一个使用 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(使用前将#替换为@)