Ansible - 見つかったファイルのmtimeをYYYY-MM-DD形式に変換する

Ansible - 見つかったファイルのmtimeをYYYY-MM-DD形式に変換する

私は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

おすすめ記事