我们有一个使用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)?
发布于 2018-08-25 23:09:16
有什么方法可以代替排除实例吗?
为了完整起见,我想指出的是,ansible的“库存协议”实现起来非常简单,而且他们甚至有一个JSON模式。
通过运行带有ansible-inventory的新包含的--list脚本来查看它从.ini样式清单中生成的输出,您可以看到它期望的输出示例,然后使用它来发出您自己的输出:
$ printf 'somehost ansible_user=bob\n\n[some_group]\nsomehost\n' > sample
$ ansible-inventory -i ./sample --list我的建议是,您可能更幸运地创建了一个了解本地业务实践的自定义库存脚本,而不是试图强迫ec2.py运行一个否定查询(据我所知,它不会这么做)。
要生成动态清单,只需制作一个可执行文件--据我所知,它可以使用任何语言--然后将-i指向可执行脚本而不是“普通”文件。Ansible将调用该程序,并作为库存对JSON输出进行操作。有几个例子的人已经以各种语言作为专家发布了文章。
如果您能向ansible提交关于ec2.py的问题,我还是会很高兴的,因为您的情况可以使bug报告对他们来说是具体的,而简单的“对于大量库存不起作用”并不能捕捉到这种情况。但与此同时,编写自己的库存提供商实际上比听起来要少。
发布于 2020-04-13 22:43:13
我在ec2.ini中使用了pattern_exclude选项:
# If you want to exclude any hosts that match a certain regular expression
pattern_exclude = staging-*和
hostname_variable = tag_Namehttps://stackoverflow.com/questions/51995794
复制相似问题