Я новичок в анзибле и пока не могу понять, как сделать идемпотентную задачу. Например. 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