Ansible role with a reboot fails

I’ve trying to write an Ansible role that upgrades Github. The command to upgrade the server “ghe-upgrade github-2.13.1.pkg” for example, reboots the server, and when that happens, I get, the following connection because my ssh connection drops of course.

`

TASK [github : Upgrade github1.company.com with version 2.13.1] **********
fatal: [github1.company.com]: UNREACHABLE! => {“changed”: false, “msg”: "Failed to connect to the host via ssh: ", “unreachable”: true}
to retry, use: --limit @/build/workspace/team_SCSCM/github/github-upgrade.retry

`

I tried the ideas from ansible-reboot-and-wait.yml exmaple, and others with similar approach, to no avail. So my tasks look like

`

This command will reboot the node

  • name: Upgrade Github host
    command: “ghe-upgrade {{ pkg_dir }}/{{ pkg_name }} --yes”

(It craps out after above task)

Now we will run a local ‘ansible -m ping’ on this host until it returns.

This works with the existing ansible hosts inventory and so any custom ansible_ssh_hosts definitions are being used

  • local_action: shell ansible -u {{ ansible_ssh_user }} -m ping github1.company.com
    register: result
    until: result.rc == 0
    retries: 30
    delay: 10

`

Any pointers on how I can make this work? Thanks!

Sorry, ignore my last post… I can see that is exactly what you did

I tried the ideas from ansible-reboot-and-wait.yml exmaple
<https://gist.github.com/infernix/a968f23c4f4e1d6723e4&gt;, and others with

That's over 4 years old, in this profession that is a lifetime.

similar approach, to no avail. So my tasks look like

# This command will reboot the node
- name: Upgrade Github host
  command: "ghe-upgrade {{ pkg_dir }}/{{ pkg_name }} --yes"

(It craps out after above task)

# Now we will run a local 'ansible -m ping' on this host until it returns.
# This works with the existing ansible hosts inventory and so any custom
ansible_ssh_hosts definitions are being used
- local_action: shell ansible -u {{ ansible_ssh_user }} -m ping
github1.company.com
  register: result
  until: result.rc == 0
  retries: 30
  delay: 10

Any pointers on how I can make this work? Thanks!

If it's possible to make ghe-upgrade not reboot the server that would be easiest I guess.
The reason is you don't not how long the upgrade process will take and make it hard to find a value for the delay bellow.

The reboot is as simple as

- name: reboot server
   shell: sleep 2 && reboot
   async: 1
   poll: 0

- name: Wait for server
   wait_for_connection:
     delay: 60

The delay must be at least as long it takes for the server to shutdown ssh, it not it will be able to connect again and the play continues.

Not quite exactly - there was no pause task in the OP’s version.

The linked webpage says that the pause is needed to prevent the existing control connection being used.

Regards, K.

Thanks all. Yes there should’ve been a pause between the two tasks. And yes there is an option to not reboot during the ghe-upgrade procedure, but I still would need to reboot twice after the command, once for Github to finish its upgrade, and another for the upgrade to take effect. So I still would to use the tricks mentioned here.