Ansible - 발견된 파일의 mtime을 YYYY-MM-DD 형식으로 변환

Ansible - 발견된 파일의 mtime을 YYYY-MM-DD 형식으로 변환

저는 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 }}"

이것은 위에서 언급한 형식을 제공합니다.

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

관련 정보