Назад | Перейти на главную страницу

Идемпотентность Ansible с командными и файловыми модулями

Я новичок в анзибле и пока не могу понять, как сделать идемпотентную задачу. Например. file. Просто нет creates или removes. В command модуль у него есть creates, но всякий раз, когда я запускаю средство обеспечения и файл (символическая ссылка) действительно существует, анзибль по-прежнему отмечает команду как «ок», а не как «пропущенную».

Вот command пример модуля

- name: Firefox | link
  command: ln -s /opt/firefox/firefox /usr/local/bin/firefox creates=/usr/local/bin/firefox

Всегда исполняется.

Как мне убедиться, что команда не будет выполнена> = 2 раза, если состояние узла уже выполнено при первом запуске?

Спасибо!

Это должно сработать.

На самом деле я проверил, и он в основном работает (см. Позже), вот полная книга, которую я использовал для ее тестирования (не с использованием firefox, но концепция такая же):

---
- hosts: localhost
  tasks:
  - name: Test | link & idempotency
    command: ln -s /tmp/ans/from /tmp/ans/to creates=/tmp/ans/to

Подробности:

  • Когда ссылка отсутствует, она создается правильно
  • Когда ссылка присутствует, ничего не меняется. Даже если ссылка указывает не на тот файл.

Однако вы получите предупреждение:

[WARNING]: Consider using file module with state=link rather than running ln

Если вы хотите быть уверенным, что ссылка верна, и изменяйте ее только при необходимости (т.е. идемпотентным) «правильным» способом, поскольку для предупреждения ansible является использование файлового модуля, вот пример:

---
- hosts: localhost
  tasks:
  - name: Test | link & idempotency
    file: src=/tmp/ans/from dest=/tmp/ans/to state=link