如何在 Ansible 中为每个剧本登录一个单独的文件 [英] How to log in a separate file per playbook in Ansible

查看:18
本文介绍了如何在 Ansible 中为每个剧本登录一个单独的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Instead of the single log file defined in log_path, I want to have separate log files per playbook run in Ansible.

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

As far as I know there is no built-in way to do that. So I am looking for clever "hacks".

更具体地说,我希望在运行剧本后以 [剧本名称].[日期].log 格式生成一个日志文件

More specifically, I want after a playbook is ran a log file to be generated in the format [playbook name].[date].log

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

I found this thread in SO but it doesn't meet my needs. The alias would be a solution if I could pass somehow the playbook name dynamically, not only the date. The lookup solution would be ok if I could copy only the relevant part from the main log file without all the history up until the moment of the copy. Additionally, if you have many playbooks running in parallel I don't know how good this method will work.

任何线索/想法?我的想法是创建一个 shell 脚本,该脚本将在剧本中调用,以某种方式从主日志中提取"相关条目并创建一个单独的条目.但我相信我把它弄得太复杂了.

Any clues / ideas? What I thought is creating a shell script that would be called inside a playbook to somehow "extract" the relevant entries from the main log and create a separate one. But I believe I am making it too complex.

推荐答案

一定要注释掉 ansible.cfg 中的 log_path 选项.

Be sure to comment out the log_path option in ansible.cfg.

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

create a wrapper shell script: 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 to run the wrapper script instead:

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

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

create a log directory and open up permissions so all users (or perhaps all ansible users) can write to it:

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

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

Now when you run ansible-playbook dns_server.yml -u cobra -k you will see the following:

[cobra@ansible ~]$ ls /var/log/ansible
playbook-dns_server.log
playbook-some_other_playbook.log
playbook-even_more_plays.log

这篇关于如何在 Ansible 中为每个剧本登录一个单独的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆