Есть ли у ansible какая-либо функция, позволяющая выполнять отладку/приостановку?
Я хотел бы запустить свой ansible playbook против удаленной тестовой машины, но в качестве способа тестирования я хотел бы проверить между каждым шагом, что то, что я ожидал сделать, было сделано.
Я хотел бы добавить, более или менее, задачу "пауза" после каждой команды задачи, но фактически не помещая ее в мой сценарий yaml. Есть ли у ansible какой-либо режим "отладки", который позволил бы это сделать?
Я использую ansible 1.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