Ansible игнорировать конфигурацию run_once по задаче

Я использую Ansible, и я хочу запустить задачу только один раз. Я следую документации о настройке и запускать задачу только один раз

- name: apt update
  shell: apt-get update
  run_once: true

Но когда я запускаю Ansible, он всегда выполняет эту задачу. Как запустить мою задачу только один раз.

Ответы

Ответ 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

Теперь это будет работать, только если кеш старше одного дня.