我正在使用 Ansible 查找、压缩和重命名日志文件,并希望将压缩日志的名称附加其时间戳(mtime)来重命名,如下所示:
log.log
---> log-2021-07-06.log
。
Ansible 允许我按以下格式提取 mtime:
log.log
--->log-1575048603.1364305.log
我使用该模块查找日志find
:
- name: Locate Logs
find:
paths: /some/path
file_type: file
recurse: yes
patterns: '*some-log-pattern.log*'
age_stamp: mtime
register: found_logs
并显示 Ansible 发现的 mtime,如下所示:
- name: Show found mtime
debug:
msg: "Will rename {{ item.path | basename }}.gz to {{item.path | basename}}-{{ item.mtime }}.gz"
with_items: "{{ found_logs.files }}"
这给了我上面提到的格式。
有没有办法将 Ansible 的格式转换为标准YYYY-MM-DD
格式,如上所示?
我遇到过很多类似的问题,以及 Ansible 文档(https://docs.ansible.com/ansible/devel/user_guide/playbooks_filters.html#handling-dates-and-times),但迄今为止尚未成功。
任何帮助将不胜感激。
谢谢!
答案1
问:”查找并重命名(压缩)日志文件。”
答:使用过滤器时间。看处理日期和时间。例如,给定压缩文件
shell> ls -1 some/path/
logA.log.gz
logB.log.gz
任务
- name: Locate Logs
find:
paths: some/path
file_type: file
recurse: yes
patterns: 'log*'
age_stamp: mtime
register: found_logs
- name: Show found mtime
debug:
msg: "Rename
{{ item.path }} to
{{ _arr.0 }}.{{ _arr.1 }}-{{ _date }}.{{ _arr.2 }}"
loop: "{{ found_logs.files }}"
loop_control:
label: "{{ item.path }}"
vars:
_arr: "{{ item.path.split('.') }}"
_name: "{{ _arr.0 }}"
_ext1: "{{ _arr.1 }}"
_ext2: "{{ _arr.2 }}"
_date: "{{ '%Y-%m-%d'|strftime(item.mtime) }}"
给出
msg: Rename some/path/logB.log.gz to some/path/logB.log-2021-07-06.gz
msg: Rename some/path/logA.log.gz to some/path/logA.log-2021-07-06.gz