Sometimes when using Ansible there is the need to reboot a server and wait for it to return. This simple recipe will allow you to achieve that while also getting some nice feedback so you know what is going on. You can place these tasks into a role or just in your playbook:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
- name: Store target host and user set_fact: target_host: "{{ ansible_host }}" target_user: "{{ ansible_user }}" - name: Reboot the server shell: sleep 2 && shutdown -r now "Ansible package updates triggered" async: 1 poll: 0 ignore_errors: true - name: Wait for server to shutdown local_action: shell ssh -o BatchMode=yes -o ConnectTimeout=2 -o StrictHostKeyChecking=no "{{ target_user }}@{{ target_host }}" true register: result until: result.rc != 0 failed_when: result.rc == -1 retries: 200 delay: 1 - name: Wait for server to be ready local_action: shell ssh -o BatchMode=yes -o ConnectTimeout=2 -o StrictHostKeyChecking=no "{{ target_user }}@{{ target_host }}" true register: result until: result.rc == 0 retries: 200 delay: 3 |