如何将 Ansible 调试消息发送到另一个文件?

如何将 Ansible 调试消息发送到另一个文件?

如果您执行以下操作:

- name: print to stdout
  command: echo "My log information"
  register: logdata

- debug: msg="{{ logdata.stdout }}"

注册logdata变量的内容将与完整的 ansible 日志一起显示。我希望将这些调试消息存储在另一个文件中。这有可能吗?

我想到的另一种方法是使用一个寄存器变量数组。最后使用模块copy将该数组的内容放入文件中。这不是最好的选择。如果可以将 stdout 重定向debug到另一个文件,那就太酷了。

答案1

在变量中捕获输出后,使用 local_action 如下:

- local_action: 
        module: copy 
        content: "{{ variable1 }}"
        dest: /tmp/whatever.out

答案2

您可以使用 lineinfile 模块吗?

- lineinfile: create=yes regexp="NONEXISTENTLINE" dest=/tmp/ansible.log line="{{logdata.stdout}}" state=present

我使用 regexp="NONEXISTENTLINE" 来允许多次记录同一条消息。也许你不需要这样做。

日志会保存在每个目标主机上。您可以拉取它,也可以不拉取。

或者,您可以使用 awk 或其他工具来解析输出。

答案3

如何将 Ansibledebug消息发送到另一个文件?

无需编写任何任务,只需通过配置和白名单添加其他任务即可重新实现已存在的功能回调插件, 看所有回调插件的索引,即log_plays回调 – 将剧本输出写入日志文件

ansible.cfg

[default]
stdout_callback         = yaml
callback_whitelist      = timer, profile_tasks, log_plays

[callback_log_plays]
log_folder              = /tmp/ansible/hosts

最小示例剧本

---
- hosts: test
  become: false
  gather_facts: false

  tasks:

  - debug:

stdout将导致

PLAY [test] *********************************************************************************************
Saturday 14 October 2023  12:45:15 +0200 (0:00:00.041)       0:00:00.041 ******

TASK [debug] ********************************************************************************************
ok: [test.example.com] =>
  msg: Hello world!

PLAY RECAP **********************************************************************************************
test.example.com  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Playbook run took 0 days, 0 hours, 0 minutes, 0 seconds
Saturday 14 October 2023  12:45:15 +0200 (0:00:00.068)       0:00:00.109 ******
===============================================================================

以及一个日志文件

~/test$ ll /tmp/ansible/hosts/
total 52
-rw-r--r--. 1 ansible_user users   314 Oct 14 12:45 test.example.com

有内容

~/test$ cat /tmp/ansible/hosts/test.example.com
Oct 14 2023 12:45:15 - log_plays.yml -  - debug - OK - {"msg": "Hello world!", "changed": false, "_ansible_verbose_always": true, "_ansible_no_log": false}

类似及进一步的问答

以及关于log_plays打回来用法

相关内容