如何在Ansible中为每个剧本登录单独的文件

Cob*_*ojo 3 logging ansible ansible-playbook

我希望在Ansible中运行的每个剧本都具有单独的日志文件,而不是log_path中定义的单个日志文件。

据我所知,没有内置的方法可以做到这一点。所以我正在寻找聪明的“ hacks”。

更具体地说,我想在运行一个剧本之后以[剧本名称]。[date] .log的格式生成一个日志文件。

我在SO中找到了线程,但它不能满足我的需求。如果我能以某种方式动态传递剧本名称,而不仅仅是日期,那么别名将是一个解决方案。如果我只能从主日志文件中复制相关部分,而没有所有历史记录,直到复制的那一刻,查找解决方案就可以了。另外,如果您有许多并行运行的剧本,我不知道这种方法的效果如何。

有任何线索/想法吗?我想创建一个外壳脚本,该脚本将在剧本内部调用,以某种方式从主日志中“提取”相关条目并创建一个单独的脚本。但是我相信我使它变得太复杂了。

Dav*_*ier 7

确保注释掉中的log_path选项ansible.cfg

创建包装器外壳脚本:ansible-playbook-wrapper.sh

#!/bin/bash

export ANSIBLE_LOG_PATH=/var/log/ansible/playbook_$(echo $1 | cut -d . -f 1).log
ansible-playbook $@
Run Code Online (Sandbox Code Playgroud)

别名ansible-playbook改为运行包装器脚本:

alias ansible-playbook="/path/to/ansible-playbook-wrapper.sh"
Run Code Online (Sandbox Code Playgroud)

创建一个日志目录并打开权限,以便所有用户(或也许所有ansible用户)都可以写入该目录:

sudo mkdir /var/log/ansible
sudo chmod 777 /var/log/ansible
Run Code Online (Sandbox Code Playgroud)

现在,当您运行时ansible-playbook dns_server.yml -u cobra -k,将看到以下内容:

[cobra@ansible ~]$ ls /var/log/ansible
playbook-dns_server.log
playbook-some_other_playbook.log
playbook-even_more_plays.log
Run Code Online (Sandbox Code Playgroud)