Я работаю со сценарием динамической инвентаризации ec2 для ansible и создал довольно простое доказательство концепции. Это содержимое файла 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
Когда я использую этот инвентарь для проверки связи с группами тегов, он работает должным образом:
$>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
Раньше я использовал группы в ansible, используя ec2, и у меня никогда не было проблем. Я загрузил совершенно свежие файлы 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