ansible-playbook --limit более одного хоста?

ansible-playbook --limit более одного хоста?

По разным причинам/ограничениям я не могу создавать новые группы в файле инвентаря и вынужден использовать --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

Различные шаблоны хоста работают как и ожидалось. Например

  1. Все хосты в 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
  1. Хозяева 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
  1. Все хосты в веб-серверах, кроме хоста 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

Связанный контент