当前位置: 首页 > 知识库问答 >
问题:

Ansible-log从每个远程主机到本地服务器上单个文件的stdout行

齐夕
2023-03-14

是否有一种简单的方法可以将多个远程主机的输出记录到运行Ansible-Playbook的服务器上的单个文件中?

我有一个名为validate的变量,它存储在每个服务器上执行的命令的输出。我想接受validate.stdout_lines并将每个主机的行放到本地的一个文件中。

- name: Write results to logfile
  blockinfile:
    create: yes
    path: "/var/log/ansible/log"
    insertafter: BOF
    block: "{{ validate.stdout }}"
  delegate_to: localhost

共有1个答案

贺君浩
2023-03-14

您应该做的一件事是向blockinfile添加标记,以便将每个主机的结果封装在一个唯一的块中。

第二个问题是,这些任务将并行运行(即使使用delegate_to: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模块写入文件(请参见Ansible中的将变量写入文件)。

 类似资料:
  • 我正在尝试使用以下模块本地更新XLSX文件:https://github.com/mohameosam/open_excel 任务[Update predepchk]*******************************************************************************************************************致命

  • 我有一个test.sh文件,我想把这个文件从本地计算机复制到远程服务器。我怎么能做到这一点?我尝试使用,但它不起作用。也许我做错了什么。

  • 我希望使用运行测试,但只能针对主机服务器1。有办法做到这一点吗?

  • 问题内容: 我们将Jenkins服务器用于日常构建过程,并通过SSH在远程主机上执行一些bash脚本。该脚本在远程主机上生成html日志文件。 我们正在使用“ 复制到从属”插件来复制从属计算机上的文件,并使用“ 通过ssh插件进行发布”来管理构建过程中的SSH会话。 现在的问题是,我们要将一些文件(脚本的日志文件)从远程ssh主机复制到Jenkins服务器。这将是可能的并且是相同的更好的选择(如果

  • 我试图远程评测运行在64位linux服务器上的alfresco,该服务器运行1.8 JVM和Apache Tomcat 7。xx来自我的测试代码,但不知道如何通过编程触发快照。 我想做的是连接到远程服务器,开始分析,并从用Java编写的测试代码中将该服务器性能的快照保存到本地机器上。 我已经在linux服务器上安装了JProfiler 9.2,可以通过JProfiler GUI连接并拍摄快照。为了

  • 我想上传一个文件到不同的服务器使用卷曲。我读过许多类似的问题,但我没有得到任何解决我的问题。下面是我现在得到的代码: 当我运行此脚本时,它将保持运行200秒,并以以下方式响应: Sep 17 20:56:58 xxxxx vsftpd[2613]:[user]确定登录:客户端“yyyyy” Sep 17 20:56:58 xxxxx vsftpd[2618]:[用户]FTP响应:客户端“YYYYY