Ответ 1
Параметр run_once будет запускаться каждый раз, когда запускается ваш Playbook/tasks, но будет запускаться только один раз во время конкретного запуска. Поэтому каждый раз, когда вы запускаете игру, она запускается, но только на первом хосте в списке. Если вы ищете способ выполнить эту команду только один раз, период, вам нужно будет использовать аргумент create. Используя ваш пример, это может быть достигнуто с помощью следующего:
- name: apt update
shell: apt-get update && touch /root/.aptupdated
args:
creates: /root/.aptupdated
В этом случае создается файл /root/.aptupdated. Теперь задача проверяет, существует ли это, и если это произойдет, она не будет запущена.
В отношении связанной заметки, если задача, которую вы пытаетесь запустить, является обновлением apt-get, вы можете захотеть использовать собственный модуль apt. Затем вы можете сделать что-то вроде этого -
- name: apt update
apt: update_cache=yes cache_valid_time=86400
Теперь это будет работать, только если кеш старше одного дня.