По разным причинам/ограничениям я не могу создавать новые группы в файле инвентаря и вынужден использовать --limit/-l
для указания хостов.
Мне сказали сделать что-то вроде:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com server.2.com my-playbook.yml --check --diff
Это приводило к ошибке:
ERROR! the playbook: server.2.com could not be found
ИзДокументация Ansibleпо этому вопросу я обнаружил, что вы можете использовать отдельный файл для перечисления всех хостов, которые вы хотите ограничить. Что-то вроде:
ansible-playbook -i /path/to/my/inventory/file.ini -l @list-to-limit.txt my-playbook.yml
Однако мне нужно сделать все это в строке, не создавая дополнительный файл.
решение1
ОдинаковыйРаспространенные шаблоныприменить к параметру командной строки -l
. Цитата из примечания:
«Для разделения списка хостов можно использовать запятую (,) или двоеточие (:). Запятая предпочтительнее при работе с диапазонами и адресами IPv6».
Например, учитывая инвентарь
shell> cat hosts
[webservers]
test_01
test_02
[dbservers]
test_03
test_04
и книга пьес
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: inventory_hostname
Различные шаблоны хоста работают как и ожидалось. Например
- Все хосты в webservers плюс все хосты в dbservers
shell> ansible-playbook -i hosts pb.yml -l webservers:dbservers
...
ok: [test_01] =>
inventory_hostname: test_01
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_03] =>
inventory_hostname: test_03
ok: [test_04] =>
inventory_hostname: test_04
- Хозяева test_02 и test_04
shell> ansible-playbook -i hosts pb.yml -l test_02,test_04
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_04] =>
inventory_hostname: test_04
- Все хосты в веб-серверах, кроме хоста test_02
shell> ansible-playbook -i hosts pb.yml -l webservers:\!test_02
inventory_hostname: test_01
решение2
Вот как это сделать:
ansible-playbook ./your_playbook --limit "host1,host2,host3,host4"
решение3
Я был в растерянности и в тот момент думал, что смогу просто перечислить все хосты в строке и ansible-playbook
все пойму.
Я исправил свою проблему, просто добавив -l
перед каждым именем хоста в команде.
(Я понимаю, что это может быть не «лучшей практикой»)
Моя окончательная команда выглядела примерно так:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com -l server.2.com my-playbook.yml --check --diff