How do I force ansible to retry an 'apt' task if it fails?

I have an ansible playbook running on many machines. In that playbook I have a few packages I am trying to install using apt, but occasionally they fail, either because other playbooks are running, a periodic update or any other apt instance running in parallel and grabbing the lock.

I basically want to add a retry loop before giving up but failed to do so as retries is not supported for apt, apparently: I looked into the apt module page in ansible's documentation, and even tried to actually use it even though it is not there (which obviously failed).

Anyway - I need an idea on how to get ansible to retry for let's say 3 times, with 30 seconds delay, but only on failures to install the package.

Upvotes: 14

Views: 13682

Answers (1)

Konstantin Suvorov
Konstantin Suvorov

Reputation: 68339

There are universal task results tests, so you can use:

- apt:
    name: build-essential
    state: present
  register: apt_res
  retries: 5
  until: apt_res is success

With Ansible 2.4 and earlier use the filter syntax - this was deprecated in Ansible 2.5 and will be removed from 2.9

until: apt_res | success

Upvotes: 21

Related Questions