Как запустить ansible на конкретном хосте: ansible-playbook -i ,

#ansible

#ansible

Вопрос:

В документах указано, что я могу запустить свой playbook на определенном хосте, используя -i:

Шаблоны и флаги ansible-playbook

Вы можете изменить поведение шаблонов, определенных в playbooks, используя параметры командной строки. Например, вы можете запустить playbook, который определяет hosts: all на одном хосте, указав -i 127.0.0.2, . Это работает, даже если целевой хост не определен в вашем инвентаре. Вы также можете ограничить целевые хосты для конкретного запуска с помощью флага —limit:*

Тем не менее, я попытался запустить ansible-playbook <playbook> -i <new_hostname> -u <username> , и используемый инвентарь по-прежнему был моим по умолчанию. Как правильно это использовать?

Комментарии:

1. => -i <new_hostname>, . Кома в конце имеет значение.

Ответ №1:

Цитата из «man ansible»

-i, —inventory, —inventory-file укажите путь к хосту инвентаризации или список хостов, разделенных запятыми.

Чтобы указать один хост в качестве «списка хостов, разделенных запятыми», запятая по-прежнему необходима. Например, playbook

 shell> cat playbook.yml
- hosts: all
  gather_facts: false
  tasks:
    - debug:
        var: inventory_hostname
  

дает

 shell> ansible-playbook -i test_99, playbook.yml

PLAY [all] ****

TASK [debug] ****
ok: [test_99] => 
  inventory_hostname: test_99
  

Без запятой после хоста Ansible принимает аргумент как «путь к хосту инвентаризации».

 shell> ansible-playbook -i test_99 playbook.yml
[WARNING]: Unable to parse /scratch/test_99 as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'

PLAY [all] ****
skipping: no hosts matched