我正在为ansible使用ec2动态库存脚本,并创建了一个相当简单的概念证明。这是groups
文件的内容,它存在于ec2.py
和ec2.ini
旁边:
[tag_classification_server_type_1]
[app_servers:children]
tag_classification_server_type_1
[stage:children]
app_servers
[stage:vars]
environment_name = stage
当我使用该库存来ping标签组时,它按预期工作:
$>ansible -i inventory/stage/ec2.py tag_classification_server_type_1 -m ping --private-key ~/.ssh/foo.pem
12.345.67.89 | SUCCESS => {
"changed": false,
"ping": "pong"
}
但尝试使用已定义的组失败(我在这里显示stage
,但尝试与app_servers
组通信时输出相同):
$>ansible -i inventory/stage/ec2.py stage -m ping --private-key ~/.ssh/foo.pem
[WARNING]: Could not match supplied host pattern, ignoring: stage
[WARNING]: No hosts matched, nothing to do
我曾经在使用ec2的ansible中使用过群组,从来没有遇到过任何问题。我下载了全新的ec2.ini
和ec2.py
文件,以确保我没有意外修改它们。
当我检查库存ansible-inventory ec2.py --list
时,它确认我定义的组不存在。
有任何想法吗?
当然,如果你在一个小时内遇到问题,那么你将无处可去。但是发布在StackOverflow上,你会在5分钟内自己弄明白。
如果你想要尊重groups
,你必须传递包含ec2.py
和ec2.ini
以及groups
的整个文件夹 - 否则它会忽略它们。
所以正确的电话是:
$>ansible -i inventory/stage stage -m ping --private-key ~/.ssh/foo.pem
代替:
$>ansible -i inventory/stage/ec2.py stage -m ping --private-key ~/.ssh/foo.pem