Назад | Перейти на главную страницу

ansible-playbook - ограничить более одного хоста?

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

Однако мне нужно сделать все это в режиме онлайн, не создавая дополнительный файл.

Такой же Общие шаблоны применить к параметру командной строки -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. Все хосты на веб-серверах плюс все хосты в 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

Я делал интервалы, и в то время я полностью думал, что могу просто перечислить все встроенные хосты и 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