Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 754
אורן Oren שריד Sarid Avatar asked Nov 29 '17 09:11

אורן Oren שריד Sarid


1 Answers

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
like image 66
Konstantin Suvorov Avatar answered Oct 02 '22 15:10

Konstantin Suvorov