Reboot and wait for reboot to complete in Ansible playbook

Jeff Geerling shares a handy tip on how to implement the configure-reboot-configure pattern in an Ansible playbook.

---
- name: Do something that requires a reboot when it results in a change.
  ...
  register: task_result

- name: Reboot immediately if there was a change.
  shell: "sleep 5 && reboot"
  async: 1
  poll: 0
  when: task_result is changed

- name: Wait for the reboot to complete if there was a change.
  wait_for_connection:
    connect_timeout: 20
    sleep: 5
    delay: 5
    timeout: 300
  when: task_result is changed

...

One thought on “Reboot and wait for reboot to complete in Ansible playbook”


  1. While looks good, I am using a bit more extended version:

    – pause:
    prompt: Should we reboot? Press ‘y’ to allow
    register: state_user_prompt
    when: not reboot_allowed

    – name: Reboot the system
    shell: sleep 2 && shutdown -r now “Ansible triggered reboot”
    async: 1
    poll: 0
    ignore_errors: true
    when: reboot_allowed or (state_user_prompt and state_user_prompt.user_input == ‘y’)

    – name: Wait for system to come back
    wait_for_connection:
    delay: 15
    timeout: 300
    when: reboot_allowed or (state_user_prompt and state_user_prompt.user_input == ‘y’)

    First of all I have an inventory var “reboot_allowed” which is false by default, so that I don’t accidentally reboot something I don’t need. But during the run, if reboot is disabled, ansible will interactivly prompt me if I still want to do it.

    The second difference is that instead of plain “reboot” command, I am using “shutdown -r now” with a comment, that you can then see in the logs :-)

Leave a Comment