Ansible—将每个远程主机的标准输出行记录到本地服务器上的单个文件
在运行Ansible—将每个远程主机的标准输出行记录到本地服务器上的单个文件,ansible,Ansible,在运行ansible playbook的服务器上,是否有一种简单的方法将多个远程主机的输出记录到单个文件中 我有一个名为validate的变量,它存储在每台服务器上执行的命令的输出。我想使用validate.stdout\u行并将来自每个主机的行本地放到一个文件中 以下是我写的但不起作用的片段之一: - name: Write results to logfile blockinfile: create: yes path: "/var/log/ansible/log"
ansible playbook
的服务器上,是否有一种简单的方法将多个远程主机的输出记录到单个文件中
我有一个名为validate
的变量,它存储在每台服务器上执行的命令的输出。我想使用validate.stdout\u行
并将来自每个主机的行本地放到一个文件中
以下是我写的但不起作用的片段之一:
- name: Write results to logfile
blockinfile:
create: yes
path: "/var/log/ansible/log"
insertafter: BOF
block: "{{ validate.stdout }}"
delegate_to: localhost
当我执行上面提到的playbook时,它只能捕获来自一个远程主机的输出。我想捕获单个/var/log/ansible/log文件中所有主机的行 您应该做的一件事是向
块填充添加标记
,以将来自每个主机的结果包装在一个唯一的块中
第二个问题是任务将并行运行(即使使用委托给:localhost
,因为这里的循环是由Ansible引擎实现的),其中一个任务有效地覆盖了另一个的/var/log/Ansible/log
文件
作为一种快速解决方法,您可以连续播放整个剧本:
- hosts: ...
serial: 1
tasks:
- name: Write results to logfile
blockinfile:
create: yes
path: "/var/log/ansible/log"
insertafter: BOF
block: "{{ validate.stdout }}"
marker: "# {{ inventory_hostname }} {mark}"
delegate_to: localhost
上面产生了预期的结果,但是如果串行执行是一个问题,您可能会考虑为这个单一任务编写自己的循环(供参考)。
说到其他方法,有两个任务:您可以将结果连接到一个列表中(并行执行没有问题,但请注意),然后使用copy
module(请参阅)写入文件。谢谢techraf!利用你的推荐信,我想出了一个解决办法,我把它附在了你的回复之后。