我可以在一次剧本执行中使用同一个Ansible处理程序两次吗?
我试图创建一个文件来表示脚本/命令的执行已经完成 我知道我们应该避免使用脚本/命令,但在这里我不能 所以为了防止重新执行,我创建了一个文件来表示它已经被执行了 这适用于后一项任务,但不适用于前一项任务 我想知道同一个处理器是否可以使用两次 任务我可以在一次剧本执行中使用同一个Ansible处理程序两次吗?,ansible,ansible-2.x,Ansible,Ansible 2.x,我试图创建一个文件来表示脚本/命令的执行已经完成 我知道我们应该避免使用脚本/命令,但在这里我不能 所以为了防止重新执行,我创建了一个文件来表示它已经被执行了 这适用于后一项任务,但不适用于前一项任务 我想知道同一个处理器是否可以使用两次 任务 - set_fact: donefile=nodesource_setup - name: Ensure node install script executed shell: ~/tmp/nodesource_setup.sh >>
- 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
处理程序是运行一次的任务:
- 运行所有其他任务后(默认)
- 在
任务上(重置“notify”标志,如果处理程序再次收到通知,它将再次运行)meta:flush_handlers
代码的问题是,在执行
Done
处理程序时,donefile
变量的最后一个值为donefile=确保npm不使用unicode
您可以添加任务:
- meta: flush_handlers
在更改donefile
的值之前,将运行给定值的处理程序。唯一的问题是它没有多大意义——它可以是一个常规任务,而不是处理程序
处理程序存在的理由是防止它被多次执行,即使有多个任务可能会请求它
如果要运行一次,您可以只运行一次常规任务,或者在条件下运行一次任务。处理程序是一个运行一次的任务:
- 运行所有其他任务后(默认)
- 在
任务上(重置“notify”标志,如果处理程序再次收到通知,它将再次运行)meta:flush_handlers
代码的问题是,在执行
Done
处理程序时,donefile
变量的最后一个值为donefile=确保npm不使用unicode
您可以添加任务:
- meta: flush_handlers
在更改donefile
的值之前,将运行给定值的处理程序。唯一的问题是它没有多大意义——它可以是一个常规任务,而不是处理程序
处理程序存在的理由是防止它被多次执行,即使有多个任务可能会请求它
如果您想运行一次,您可以只运行一个常规任务或一个带有
条件的任务。-meta:flush\u handlers。。是很棒的thx,做了我想要的。伟大的洞察力。与普通任务相比,我更喜欢琐碎通知任务的处理程序,因为它减少了处理程序不启动时执行的任务数量,处理程序被调用了两次,因此您要保存的唯一内容是playbook代码中的四行,这将使将来使用“fire only one”方法中使用的处理程序的用户感到困惑。如果你是唯一一个管理这个剧本的人,那么这可能没什么大不了的。如果你有可能把这件事交给运营团队(或者最好是退休!),我建议你坚持这两项任务,而不是处理程序加元解决方案。-元:刷新处理程序。。是很棒的thx,做了我想要的。伟大的洞察力。与普通任务相比,我更喜欢琐碎通知任务的处理程序,因为它减少了处理程序不启动时执行的任务数量,处理程序被调用了两次,因此您要保存的唯一内容是playbook代码中的四行,这将使将来使用“fire only one”方法中使用的处理程序的用户感到困惑。如果你是唯一一个管理这个剧本的人,那么这可能没什么大不了的。如果你有可能把这件事交给一个运营团队(或者最好是退休!),我建议你坚持这两个任务,而不是处理程序加元解决方案。