Если на вас не нацеливается существующий файл инвентаризации при запуске Playbook, тогда ваша рабочая станция нацелена на Implicit Localhost .
Вы испытываете поведение, потому что глобальная переменная hosts
установлена в all
. Который, как вы, вероятно, знаете, указывает, что каждая задача должна выполняться на всех хостах в вашем инвентаре.
Если вы не хотите, чтобы перезагрузка запускалась на машине, на которой запущена Playbook, вам нужно убедиться, что она исключена из нее. Обычно это делается с помощью групп в файле инвентаризации.
Я относительно хорошо знаком с использованием Ansible файлов инвентаря и никогда не сталкивался с ситуацией, когда при использовании одного из них добавляются ограничения, которые вы описываете в последнем абзаце вашего описания.
Прежде всего, вот документация для Ansible файлов инвентаризации. Я знаю, что документация Ansible очень многословна. Но многие тонкие детали Ansible нюансированы, и если вы обычно просматриваете документы для получения конкретной c информации о реализации, вы можете пропустить много контекста. Я рекомендую вам прочитать весь документ, прежде чем продолжить, если вы этого еще не сделали.
После этого создайте файл инвентаризации следующим образом:
[hardware]
my.router.name
my.switch.name
my.computer.name
my.first.server
my.second.server
my.third.server
[networking]
my.router.name
my.switch.name
my.second.server
[servers]
my.first.server
my.second.server
my.third.server
[computers]
my.computer.name
wife.computer.name
[instances:children]
my.router.name
my.switch.name
my.computer.name
wife.computer.name
my.first.server
my.second.server
my.third.server
В этом примере вы определили всего 7 устройств. Они присутствуют в вашем children
разделе. Оттуда вы можете получить различные группы хостов. Например, здесь я создал группы hardware
, networking
, servers
, & computers
.
Допустим, вы хотели перезагрузить все свои персональные компьютеры с помощью Playbook. Затем вы должны установить строку 2 на hosts: computers
. Если вы хотите перезагрузить все ваши серверы и все ваше сетевое оборудование, то вы можете настроить его следующим образом: hosts: networking:servers
В случае, если вы хотите, чтобы все ваши устройства ЗА ИСКЛЮЧЕНИЕМ ЗА my.computer.name
чтобы пропатчить и перезагрузить, вы можете написать свою Playbook следующим образом:
- hosts: hardware:networking:servers:wife.computer.name
gather_facts: true
become: true
tasks:
- package:
name: "*"
state: latest
register: patchstatus
- reboot:
when: patchstatus is changed
Дайте мне знать, если это поможет или я пропустил ваш вопрос. Ansible забавно использовать, поэтому я всегда рад помочь, когда смогу.