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