如何在Ansible中排除EC2清单实例?

时间:2018-08-24 00:02:03

标签: amazon-ec2 ansible ansible-inventory

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

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

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

这就是为什么我想知道是否有办法减少这种情况的原因。

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

2 个答案:

答案 0 :(得分:0)

  

有一种排除实例的方法

仅出于完整性考虑,我想指出的是,用于ansible的“清单协议”非常易于实现,甚至还带有JSON Schema

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

$ printf 'somehost ansible_user=bob\n\n[some_group]\nsomehost\n' > sample
$ ansible-inventory -i ./sample --list

我的建议是,使您更幸运地制作一个自定义清单脚本,使他们了解您的本地业务惯例,而不是试图强迫ec2.py进行否定查询(据我所知,它不会这样做)。

要生成动态清单,只需制作一个可执行文件(据我所知,它可以是任何一种语言),然后将-i指向可执行脚本,而不是“普通”文件。 Ansible将调用该程序,并对清单输出作为JSON输出进行操作。有several examples个人以各种语言发布了要点。

如果您提出有关ec2.py的问题,我还是会喜欢的,因为您遇到的情况可以使错误报告以一种简单的“不适用于大批人”的方式为他们提供具体的报告库存”。但是与此同时,编写自己的清单提供商实际上比听起来少。

答案 1 :(得分:0)

我在ec2.ini中使用选项 pattern_exclude

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

hostname_variable = tag_Name