ansible - Ansible 库存:aws_ec2 模块——寻找工作“组:”函数的示例
问题描述
我有一个使用 aws_ec2 模块的动态 ansible 库存。一般来说,它工作得很好。但是,有一个问题。我曾多次尝试使用 'groups:' 关键字创建组,但所有尝试都失败了。文档有点稀疏——事实上,它是完整的:
groups: (dictionary)
Default:{}
Add hosts to group based on Jinja2 conditionals.
我尝试了许多语法,Jinja2、条件、声明,但到目前为止,还没有一个成功创建名为“foo”的组。有一段时间我想也许我需要传递一个返回真或假的小代码片段,从而包括或排除目标主机。情况似乎并非如此。我想知道这里是否有人使用过'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 的调试工具。许多,比如剧本调试器,似乎不能正常工作,尽管我发现它们在其他情况下非常有用。在这种情况下,您可能对调试有任何提示,我们将不胜感激。
解决方案
看起来你很接近
与许多事情一样,权威的“文档”是源代码。特别是他们使用“组”选项,该选项调用_add_host_to_composed_groups
其中他们将groups:
字典输入到包含所有主机变量的 Jinja2 评估上下文中。表达式已插入,{% if ... %}
因此您不想{{
在表达式中包含标记,只是“原始”jinja2 表达式
groups:
foo: tags.get('Name') == 'foo-server'
请注意,我没有方便的环境来测试该库存脚本,但这就是理论
推荐阅读
- javascript - 使用 Django 框架在 JavaScript 中调用 .php 文档
- c# - 反/协方差和嵌套泛型
- firebase - Firebase 关系删除
- java - 如何使用查询字符串/参数在 HTTP GET 方法中检索数据?
- c# - 滚动到 WPF MVVM 上 ItemControls 上的特定项目
- google-apps-script - Google AppScript 中 PDF 的 OCR 无法正常工作
- python - 使用特定的 python 版本创建 conda env,并预先下载该 python 包
- html - 嵌入样式何时优先于链接或导入的样式?
- elasticsearch - Elasticsearch 索引测量单元有和没有空格一致
- android - 如何在 Android AVD 中访问使用 USB 连接的网络摄像头