Ansible

Ansible - 將找到的文件的 mtime 轉換為 YYYY-MM-DD 格式

  • July 7, 2021

我正在使用 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 Docs ( https://docs.ansible.com/ansible/devel/user_guide/playbooks_filters.html#handling-dates-and-times ),但一直沒有成功遠的。

任何幫助將不勝感激。

謝謝!

問:查找並重命名(壓縮)日誌文件。

答:使用過濾器strftime。請參閱處理日期和時間。例如,給定壓縮文件

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

引用自:https://unix.stackexchange.com/questions/657170