我们有一台使用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
的实例)?
答案 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