私はAnsibleを使用してログファイルを見つけて圧縮し、名前を変更しています。
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 }}"
これは上記の形式を提供します。
YYYY-MM-DD
上記のようにAnsibleの形式を標準形式に変換する方法はありますか?
同様の問題がたくさんあり、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