如何在 Ansible 日志文件中附加日期和时间戳?
目前我有它
log_path=/var/ansible-playbooks/ansible.log
在
ansible.cfg
。
每次运行时,我都需要将此日志与时间戳一起保存到文件中
ansible-20160808142400.log
如果您在基于 UNIX 的系统上运行,您可以利用 inode 的行为。在 ansible.cfg 中定义日志路径。我在 $HOME/.ansible 中创建了一个目录。
log_path = $HOME/.ansible/log/ansible.log
在您的剧本中创建前置任务部分并包含以下任务:
- name: Create the log file for this run
shell: /bin/bash -l -c "mv {{ lookup('env', 'HOME') }}/.ansible/log/ansible.log {{ lookup('env', 'HOME') }}/.ansible/log/ansible.log-{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
delegate_to: localhost
become: yes
become_user: "{{ lookup('env', 'USER') }}"
当 ansible 开始运行 playbook 时,它会创建日志文件并开始写入。然后日志文件被重命名为 ansible.log-YYYYmmddHHMMSS 并且 ansible 进程继续写入它,因为即使日志文件的名称已更改,与之关联的 inode 也没有更改。
更进一步......
假设我想要执行上述操作,将 shell 行转换为变量,然后使用邮件模块引用它以发送所述旋转日志文件的附加副本? Ansible 能够遵循它吗?
最终,我目前正在编写一个基于环境变量的静态 ANSIBLE_LOG_FILE,附加/邮寄它,并在运行后删除它,以便在下次执行时为干净的文件让路。我更愿意存档所述文件而不是删除它。