我是Ansible的新手,并且对Ansible运行日志有要求。有人可以帮忙吗?谢谢。 我说的是运行日志,而不是剧本日志。 例如:
2019-02-28 01:39:59,819 p=23627 u=peterqi | PLAY [create log file] *******************************************************************************************************>
2019-02-28 01:39:59,830 p=23627 u=peterqi | TASK [Gathering Facts] *******************************************************************************************************>
2019-02-28 01:40:01,129 p=23627 u=peterqi | ok: [localhost]
2019-02-28 01:40:01,213 p=23627 u=peterqi | TASK [rename log file] *******************************************************************************************************>
2019-02-28 01:40:01,570 p=23627 u=peterqi | changed: [localhost -> localhost]
2019-02-28 01:40:01,577 p=23627 u=peterqi | PLAY [cat test2 log] *********************************************************************************************************>
2019-02-28 01:40:01,583 p=23627 u=peterqi | TASK [Gathering Facts] *******************************************************************************************************>
2019-02-28 01:40:01,682 paramiko.transport starting thread (client mode): 0x5517250L
2019-02-28 01:40:01,683 paramiko.transport Local version/idstring: SSH-2.0-paramiko_2.4.1
2019-02-28 01:40:01,690 paramiko.transport Remote version/idstring: SSH-2.0-OpenSSH_6.6.1
客户有一些可运行的剧本,只有他们有权更新ansible.cfg 我还将开发一些剧本,但我必须使用coutomer的配置,包括ansible.cfg(log_path)和变量ANSIBLE_LOG_PATH。
现在,我想将ansible运行日志保存在单独的日志文件中 (对于我开发的所有剧本,我都不会影响客户的剧本) 另外一个限制是剧本可以同时执行。
我尝试了很多,但是我发现几乎是不可能的。
我的第一次尝试是在每个剧本的开头添加一个任务:
- name: create log file
hosts: localhost
tasks:
- name: rename log file
shell: /bin/bash -l -c "touch {{ lookup('env','ANSIBLE_LOG_PATH') }};mv {{ lookup('env','ANSIBLE_LOG_PATH') }} {{ lookup('env','ANSIBLE_LOG_PATH') }}-{{ lookup('pipe','date +%Y%m%d%H%M%S') }}"
delegate_to: localhost
become: yes
become_user: "{{ lookup('env', 'USER') }}"
首先运行良好,但是如果同时运行多个剧本,则只有第一个日志文件具有所有日志,其他则为空。
我正在考虑创建一个模块,但是我不知道模块是否会成为我的解决方案。
有什么建议吗? 我也不能使用插件,因为插件会影响所有剧本,包括客户的剧本。
非常感谢您提出任何建议。 最好的祝福, 秦琴(Peter Qin)
答案 0 :(得分:0)
您可以尝试以下方法。如果您使用相同的终端,或者您是唯一使用它的用户,则此方法将起作用。如果有多个用户要运行ansible剧本,则每个用户都必须运行/设置以下命令。希望这可以帮助。
您可以在〜/ .bash_profile中设置环境变量(如果允许),也可以在终端中为每个会话进行设置。
例如:"export ANSIBLE_LOG_PATH=`date +%Y%m%d%H%M%S`.log"
。
另一个选项是在〜/ .bash_profile(如果允许您修改)中为ansible-playbook设置别名,或在终端中为每个会话设置别名。
例如:alias ansible-playbook="ANSIBLE_LOG_PATH=\`date +%Y%m%d%H%M%S\`.log ansible-playbook"
。