我正在尝试创建一个文件来表示已完成脚本/命令的执行
我知道我们应该避免脚本/命令,但在这里我不能
因此,为了防止重新执行,我创建了一个文件来表示它已被执行
这适用于后一项任务,但不适用于前者!
我想知道同一个处理程序是否可以使用两次
任务..
- 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
答案 0 :(得分:2)
处理程序是一次运行的任务:
functionName($your, $variables, $here);
任务(“notify”标志被重置,如果再次通知处理程序,它将再次运行)您的代码存在的问题是,在执行meta: flush_handlers
处理程序时,您的Done
变量的最后一个值为donefile
。
您可以添加任务:
donefile=ensure-npm-does-not-use-unicode
在更改- meta: flush_handlers
的值之前,以便对于给定值,将运行处理程序。唯一的问题是它没有多大意义 - 它可以是常规任务而不是处理程序。
处理程序的存在理由是防止它被执行多次,即使有几个任务可能会请求它。
如果您想运行一次,您可以使用常规任务或donefile
条件下的任务。