在一本(相当长的)剧本中,我有一些条目会在日志文件中追加一行:
- name: LOG "Task done"
lineinfile:
dest: "{{ full_log_name }}"
line: "{{ tstamp.stdout }}, {{ inventory_hostname }}, Task done"
insertafter: EOF
delegate_to: localhost
多亏了这一点,我可以跟踪此剧本已经经历了多少台主机。
但是,我想在剧本开始时添加一行。如果我使用模板:
- name: LOG "Start"
template:
src: playbook_start.j2
dest: "{{ full_log_name }}"
delegate_to: localhost
它用这一行创建一个新的空文件,然后我的“ lineinfile”任务附加其自己的日志。我想将旧日志保存在同一文件中,因此我的剧本的两次运行将创建如下日志:
2019-08-19 11:34:56.63446, log.log, *** PLAYBOOK STARTED ***
2019-08-19 11:35:09.12405, Host1, First task done
2019-08-19 11:35:09.12299, Host2, First task done
2019-08-19 11:35:18.94610, Host1, Second task done
2019-08-19 11:35:18.95439, Host2, Second task done
2019-08-19 11:35:19.63446, log.log, *** PLAYBOOK STARTED ***
2019-08-19 11:35:20.33616, Host1, First task done
2019-08-19 11:45:25.84871, Host2, First task done
2019-08-19 11:45:25.83616, Host1, Second task done
2019-08-19 11:45:33.13359, Host2, Second task done
我也尝试过使用“ lineinfile”,但是它将为每个主机创建多个“ PLAYBOOK STARTED”行。
答案 0 :(得分:0)
我认为您可以使用 run_once:true 。像下面这样。我还没有测试。
- name: LOG "PLAYBOOK STARTED"
lineinfile:
dest: "{{ full_log_name }}"
line: "{{ tstamp.stdout }},log.log, *** PLAYBOOK STARTED***"
insertbefore: BOF
run_once: true
delegate_to: localhost
答案 1 :(得分:0)
run_once: true
将使您的lineinfile
达到目的。
但是,尽管如此,我还是觉得应该通过回调插件来实现。您应该查看log_plays
插件,看看如何根据需要对其进行自定义...