如何在不触摸log_path和ANSIBLE_LOG_PATH的情况下单独存储ansunning运行日志

时间:2019-03-04 02:38:22

标签: logging ansible

我是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)

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法。如果您使用相同的终端,或者您是唯一使用它的用户,则此方法将起作用。如果有多个用户要运行ansible剧本,则每个用户都必须运行/设置以下命令。希望这可以帮助。

  1. 您可以在〜/ .bash_profile中设置环境变量(如果允许),也可以在终端中为每个会话进行设置。 例如:"export ANSIBLE_LOG_PATH=`date +%Y%m%d%H%M%S`.log"

  2. 另一个选项是在〜/ .bash_profile(如果允许您修改)中为ansible-playbook设置别名,或在终端中为每个会话设置别名。 例如:alias ansible-playbook="ANSIBLE_LOG_PATH=\`date +%Y%m%d%H%M%S\`.log ansible-playbook"