2015-04-27 2 views
30

При написании и отладки анзибля playbooks, типичный рабочий процесс выглядит следующим образом:Как продолжить выполнение неудавшейся задачи после исправления ошибки в playbook?

  1. ansible-playbook ./main.yaml
  2. Playbook терпит неудачу на некоторых задачах
  3. Fix эта задача и повторить строки 1, ожидая все предыдущие задачи снова выполнить. Это занимает много времени.

В идеале, я хотел бы возобновить выполнение неудавшейся задачи, имея инвентарь и все факты, собранные предыдущими задачами. Возможно ли это? Как ускорить запись/отладку плейбуков?

ответ

21

Посмотрите на http://docs.ansible.com/playbooks_startnstep.html. Если вы хотите, чтобы приступить к выполнению вашего Playbook на конкретной задаче, вы можете сделать это с помощью опции --start-at-task:

ansible-playbook playbook.yml --start-at-task="install packages" 

выше будет приступить к выполнению вашего Playbook в задаче с именем «установки пакетов».

С другой стороны, посмотрите на этот предыдущий ответ How to run only one task in ansible playbook?

Наконец, когда игра выходит из строя, как правило, дает вам что-то вдоль линий:

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @/home/user/site.retry 

Использование этой --limit команды, и он должен повторить от неудачной задачи.

+4

Спасибо за список вариантов. но AFAIK -limit сбрасывает зарегистрированные переменные и пользовательские факты, так что это хорошо, ограниченное использование –

+9

Файл '.retry' содержит только неработающие хосты, он не хранит то, где именно сбой каждого узла. –

+1

@FlorianBrucker Какой позор – igor

6

Будущие читатели:

--limit @/home/user/site.retry не помогли бы в таком сценарии .retry хранит только отказавшего хоста и больше ничего, так просто выполнить все задания против неудачных хостов.

Если вы используете последнюю версию (Ansible 2.x), то --start-at-task не работает для задач, определенных внутри roles.

Вы можете добиться аналогичного эффекта, используя только флаг --step, например: ansible-playbook playbook.yml --step. Шаг попросит вас выполнить все задачи, и вы можете выбрать (N)o/(y)es/(c)ontinue.

При таком подходе вы выборочно выполняете задачи, когда это необходимо, а также продолжайте с точки, где это произошло, после исправлений.

Смежные вопросы