Skip to content

Commit

Permalink
fix: use throttle: 1 for localhost unarchive
Browse files Browse the repository at this point in the history
During the common install tasks, we download and unpack the binary to
install on localhost and eventually upload it to each host (among many
other things). Currently the "unpack" step, which extracts the gzipped
tar archive, is perform N times if there are N hosts in the inventory,
but the target directory (something like
/tmp/node_exporter-linux-arm64/1.8.2) is the same for every host with
the same architecture.

This means that all the unarchive tasks are extracting in parallel in an
unsynchronized manner to the same directory. It a miracle that this
works, but at least usually it like it does, but sometimes tar will
complain about a missing file, failing the install. I've confirmed
locally that this is due to the race described above.

To fix this, we use `throttle: 1` on the unpack task. This means that
the first task (for each architecture) will do the unpack and the other
tasks are effectively no-ops, they are reported as "ok" rather than
changed in the output.

Fixes #457.

Signed-off-by: Travis Downs <travis.downs@gmail.com>
  • Loading branch information
travisdowns committed Jan 24, 2025
1 parent 435495a commit 15c771c
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions roles/_common/tasks/install.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@
list_files: true
extra_opts: "{{ _common_binary_unarchive_opts | default(omit, true) }}"
check_mode: false
throttle: 1 # see prometheus-community/ansible#457

Check failure on line 121 in roles/_common/tasks/install.yml

View workflow job for this annotation

GitHub Actions / ansible-lint

yaml[comments]

Too few spaces before comment
when: __common_binary_basename is search('\.zip$|\.tar\.gz$')

- name: "Check existence of binary install dir"
Expand Down

0 comments on commit 15c771c

Please sign in to comment.