Amazon ec2 如何排除Ansible中EC2清单的实例?

Amazon ec2 如何排除Ansible中EC2清单的实例?,amazon-ec2,ansible,ansible-inventory,Amazon Ec2,Ansible,Ansible Inventory,我们有一台使用EC2动态资源清册的Ansible服务器: 但是,根据我们拥有的实例数量,运行/ec2.py--list或/ec2.py--refresh cache返回28000行JSON响应 我假设,这会导致它随机失败(返回Python堆栈跟踪),因为它在向AWS发送调用时只接收部分响应,但如果再次运行则可以 这就是为什么我想知道是否有办法减少这个 我知道有一种方法可以通过标记在ec2.ini中包含特定实例(即#instance_filters=tag:env=staging),但是

我们有一台使用EC2动态资源清册的Ansible服务器:

但是,根据我们拥有的实例数量,运行
/ec2.py--list
/ec2.py--refresh cache
返回28000行JSON响应

我假设,这会导致它随机失败(返回Python堆栈跟踪),因为它在向AWS发送调用时只接收部分响应,但如果再次运行则可以

这就是为什么我想知道是否有办法减少这个

我知道有一种方法可以通过标记在ec2.ini中包含特定实例(即
#instance_filters=tag:env=staging
),但是 我们的实例被标记的方式,有没有排除的方法 而不是实例(类似于:
#实例过滤器=标记:name=!dev

有没有办法排除实例

为了完整起见,我想指出ansible的“清单协议”实现起来非常简单,他们甚至有一个简单的方法

您可以通过使用
--list
运行新包含的脚本来查看它从
.ini
样式清单之一生成的输出,然后使用它来发出您自己的输出,从而查看它期望的输出示例:

$ printf 'somehost ansible_user=bob\n\n[some_group]\nsomehost\n' > sample
$ ansible-inventory -i ./sample --list
我的建议是,您可能会更幸运地创建一个定制的库存脚本,它确实了解您当地的业务实践,而不是试图强迫
ec2.py
运行一个否定查询(据我所知,这是行不通的)

要生成动态清单,只需制作一个可执行文件——据我所知,它可以是任何语言——然后将
-I
指向可执行脚本,而不是“普通”文件。Ansible将调用该程序,并将JSON输出作为清单进行操作。有人用各种语言贴出GIST的标签

如果您向ansible about
ec2.py
提交一个问题,我仍然会很高兴,因为您的情况可以使错误报告具体化,而简单的“它不适用于大量库存”无法捕获。但与此同时,编写自己的清单提供者实际上比听起来要省力。

我使用ec2.ini中的选项模式_exclude:

# If you want to exclude any hosts that match a certain regular expression
pattern_exclude = staging-*


我假设这会导致它随机失败(返回Python堆栈跟踪)。您是否打开了ansible显示该堆栈跟踪的问题?因为你可能解决了一个错误的问题--我可以理解一个巨大的JSON blob看起来很难看,但是对于一台计算机来说,它不应该是一个问题,特别是如果
cache\u max\u age
是一个合理的值,那么如果库存随机失败,我会支持@MatthewLDaniel的评论,这不是预期的行为,因此请将其报告给Ansible github存储库。
hostname_variable = tag_Name