Есть ли у ansible какая-либо функция, позволяющая выполнять отладку/приостановку?


Я хотел бы запустить свой ansible playbook против удаленной тестовой машины, но в качестве способа тестирования я хотел бы проверить между каждым шагом, что то, что я ожидал сделать, было сделано.

Я хотел бы добавить, более или менее, задачу "пауза" после каждой команды задачи, но фактически не помещая ее в мой сценарий yaml. Есть ли у ansible какой-либо режим "отладки", который позволил бы это сделать?

Я использую ansible 1.5, но открыт для ответов, которые используют функции в более новых версиях.

3 5

3 ответа:

Да, у ansible есть "шаговый" режим, который заставит его останавливаться перед каждой задачей и ждать подтверждения пользователя для выполнения задачи.

Просто вызовите свой playbook с флагом шага:

ansible-playbook ... --step

Start-at-task

Чтобы выиграть время, вы можете использовать --start-at-task для выполнения только последних команд, которые, вероятно, являются теми, кто прослушивает. Но для этого вы должны назвать свою задачу:

Эта shell задача не имеет названия

- shell: vagrant provision; vagrant up;
  args:
    chdir: /vm/vagrant

Этот делает:

- name: start vagrant
  shell: vagrant provision; vagrant up;
  args:
    chdir: /vm/vagrant

Затем выполните:

ansible-playbook playbook.yml --start-at-task="start vagrant" 

Теги

Еще один полезный совет-использовать теги. Например, вы хотите попробовать только одну команду

- shell: vagrant provision; vagrant up;
  args:
    chdir: /linux/{{item.name}}
  tags: [shell, debug]

Теперь вы можете отладить это делать :

ansible-playbook playbook.yml --tags="debug"

И он будет запускать только те задачи, которые получили тег debug.

Многословный

И если вы хотите больше информации, вы можете попросить Ansible быть более подробным, используя -v, - vv, - vvv или -vvvvv

ansible-playbook -vvvv playbook.yml --tags="debug"

Это расскажет вам все, что он может по заданной задаче

Я не думаю, что ansible предоставляет такую функцию. Один из способов сделать это-поставить паузу между пьесами и сделать ее условной. Когда вы выполняете playbook, определите переменную, которая решает, делать паузу или нет.

- pause:
  when: PAUSE is defined

Когда вы выполняете playbook, не определяйте паузу, если вы не хотите делать паузу. Но если вы хотите сделать паузу между воспроизведениями, то определите ее.

ansible-playbook -v .... --extra-vars "PAUSE=yes" ... myplay.yml