На игровом уровне мы должны serial: 1
разрешить запускать всю игру по одному хосту за раз. Но я не нашел простого способа сделать это для одной задачи. Это особенно актуально, если рассматриваемая задача не выполняет надлежащую блокировку (по какой-либо причине).
Один очевидный ответ - поставить задачу в свою игру. Но это не помогает с ролями. (Необходимость поставить serial: 1
пьесу с использованием роли не очень интуитивно понятна.)
serial: 1
позвольте мне поставить его на игру по крайней мере. Но я только хочу поставить его на подпункт пьесы (какое бы правильное имя это ни было. Я думал, это было «задание», но приведенный выше комментарий, похоже, не согласен).serial: 1
делает что-то совершенно другое: это похоже на запуск playbook для каждого хоста по очереди, ожидание завершения завершения playbook перед тем, как перейти к следующему хосту.forks=1
означает запуск первой задачи в игре на одном хосте до запуска той же задачи на следующем хосте, поэтому первая задача будет запускаться для каждого хоста до того, как будет затронута следующая задача. Итак, вы хотитеforks=1
всего одну игру; к сожалению, в настоящее время это невозможно.Существует обходной путь для этой проблемы - можно передать список хостов (или группу)
with_items
, а затем использоватьdelegate_to
с этим списком. Таким образом, задача будет выполняться хост за хостом.Например:
источник
run_once: true
там, попробуйте вынуть его. Вам не понравится то, что происходит. (так много повторений, аааахххх)Если вы выполняете его на одной машине, то возникает проблема исключительных блокировок для более чем одного хоста. Так что вы должны выполнить один за другим для всех хостов. Для этого вам нужно
--forks=1
быть настроенным при вызове команды ansible playbook. Для примера:ansible-playbook webserver.yml --forks=1
где webserver.yml имеет app01 и app02 внутри вашего[webserver]
источник
Думай что хочешь
run_once: true
источник
Для команд, которые могут выполняться локально, используйте цикл для перебора всех хостов в игре. Это ТОЛЬКО работает, если команда может быть запущена локально. Таким образом, вы также можете запустить команду с ssh на удаленных машинах одну за другой, если ключи настроены, но это становится трудным, когда речь идет об эскалации.
НАПРИМЕР:
источник
inventory_hostname
, иначе цикл не имеет смысла.