How to pause a playbook execution for a certain amount of time with Ansible?
Use Ansible pause (ansible.builtin.pause) to pause playbook execution for a set number of seconds or minutes, or until you press a key to continue.
Ansible pause execution
Today we're talking about the Ansible module pause.
This module is also supported for Windows targets.
The full name is ansible.builtin.pause, which means that is part of the collection of modules "builtin" with Ansible and shipped with it.
The default behavior is to pause with a prompt.
Pauses playbook execution for a set amount of time, or until a prompt is acknowledged.
Parameters
minutesstring - a positive number of minutessecondsstring - a positive number of secondspromptstring - "Text message"echoboolean - yes/no
All parameters are optional.
The default behavior is to pause with a prompt.
You could specify the amount of time using the parameters "minutes" and "seconds". Starting in Ansible 2.2, if you specify 0 or negative for minutes or seconds, it will wait for 1 second, previously it would wait indefinitely.
When minutes or seconds are specified, user input is not captured or echoed, regardless of the echo setting.
I'll cover the user input in another video.
Playbook
Let's jump in a real-life Ansible Playbook to pause a playbook execution.
code
- pause.yml
---
- name: pause module Playbook
hosts: all
vars:
wait_seconds: 10
tasks:
- name: pause for {{ wait_seconds | int }} second(s)
ansible.builtin.pause:
seconds: "{{ wait_seconds | int }}"
- name: message
ansible.builtin.debug:
msg: "The end"
output
$ ansible-playbook -i Playbook/inventory pause/pause.yml
PLAY [pause module Playbook] **************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [demo.example.com]
TASK [pause for 10 second(s)] *********************************************************************
Pausing for 10 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
ok: [demo.example.com]
TASK [message] ************************************************************************************
ok: [demo.example.com] => {
"msg": "The end"
}
PLAY RECAP ****************************************************************************************
demo.example.com : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
output with manual continue (CTRL+C and "C")
$ ansible-playbook -i Playbook/inventory pause/pause.yml
PLAY [pause module Playbook] **************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [demo.example.com]
TASK [pause for 10 second(s)] *********************************************************************
Pausing for 10 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
Press 'C' to continue the play or 'A' to abort
ok: [demo.example.com]
TASK [message] ************************************************************************************
ok: [demo.example.com] => {
"msg": "The end"
}
output with manual abort (CTRL+C and "A")
$ ansible-playbook -i Playbook/inventory pause/pause.yml
PLAY [pause module Playbook] **************************************************************************
TASK [Gathering Facts] ****************************************************************************
ok: [demo.example.com]
TASK [pause for 10 second(s)] *********************************************************************
Pausing for 10 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
Press 'C' to continue the play or 'A' to abort
fatal: [demo.example.com]: FAILED! => {"msg": "user requested abort!"}
NO MORE HOSTS LEFT ********************************************************************************
PLAY RECAP ****************************************************************************************
demo.example.com : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Conclusion
Now you know how to pause a playbook execution for certain amount of time with Ansible.