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

时间:2016-02-01 16:54:05

标签: logging ansible ansible-playbook

我想在Ansible中运行每个playbook的单独日志文件,而不是log_path中定义的单个日志文件。

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

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

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

任何线索/想法?我认为是创建一个shell脚本,可以在某个剧本中调用,以某种方式提取"提取"来自主日志的相关条目并创建一个单独的条目。但我相信我太复杂了。

1 个答案:

答案 0 :(得分:5)

请务必在log_path注释掉ansible.cfg选项。

创建一个包装器shell脚本:ansible-playbook-wrapper.sh

#!/bin/bash

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

别名ansible-playbook来代替运行包装脚本:

alias ansible-playbook="/path/to/ansible-playbook-wrapper.sh"

创建一个日志目录并打开权限,以便所有用户(或可能是所有安全用户)都可以写入:

sudo mkdir /var/log/ansible
sudo chmod 777 /var/log/ansible

现在,当您运行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