Я пытаюсь создать файл, чтобы обозначить, что выполнение скрипта/команды было сделаноМогу ли я использовать один и тот же обработчик Ansible дважды в одном исполнении для воспроизведения?
Я знаю, мы должны избегать скрипт/команду, но здесь я не могу
Таким образом, чтобы предотвратить повторное исполнение я есть создание файла для его обозначения уже выполнено
Это работает для последней задачи, но не для первых!
мне интересно, если тот же обработчик может быть использована дважды или не
задачи ..
- set_fact: donefile=nodesource_setup
- name: Ensure node install script executed
shell: ~/tmp/nodesource_setup.sh >> ~/tmp/nodesource_setup.log
args:
creates: ~/tmp/{{ donefile }}.done # Cannot one line this
notify: Done
- set_fact: donefile=ensure-npm-does-not-use-unicode
- name: Ensure npm does not use unicode
command: npm config set unicode false
args:
creates: ~/tmp/{{ donefile }}.done
notify: Done
Обработчики ..
- name: Done
copy:
content: "done"
dest: ~/tmp/{{ donefile }}.done
force: no
- meta: flush_handlers .. is awesome thx, сделал именно то, что я хотел. большие идеи. я предпочитаю обработчики для тривиальных задач уведомления над обычными задачами, потому что это уменьшает количество задач, выполняемых, когда обработчики не срабатывают. – danday74
Но в этом случае обработчик вызывается дважды, поэтому единственное, что вы сохраняете, - это четыре строки в вашем коде для плей-листов, которые будут действительно путать кого-то в будущем, который будет использовать обработчики, используемые в «пожаре» только один раз "метод. Если вы единственный, кто всегда будет управлять этим плейбуком, то это, вероятно, не имеет большого значения. Если есть шанс, что вы передадите это команде в операционную группу (или еще лучше уйдете на пенсию!), Я предлагаю вам придерживаться двух задач, а не обходного метода handler-plus-meta. –