문제의 디렉터리가 충분히 오래된 경우(예: 30일 이상)에만 Ansible 작업을 트리거하는 방법은 무엇입니까?
비슷한 일을하고 싶다
- name: backup biggest files
#get difference between currentdate & last backup
register: age
문자열이나 정의된 when 절을 얻을 수 있다는 것을 알고 있지만 여기서는 어떻게 하는지 모르겠습니다.
예를 들어 , 내 목표는 /mnt/backup.YYYYMMDD
30일이 넘은 경우 작업 목록을 만들어 새 날짜 디렉터리를 만들고 직접 백업하는 것입니다(동기화 방법이 좋을까요?).
이것을 어떻게 얻을 수 있나요?
획득 단계:
- 마지막 백업 날짜 찾기
- 현재 날짜 찾기
- 그들 사이의 산술적 차이
- yaml 파일의 작업에 when 문으로 차이점을 적용합니다.
- name: Check the last backup date
shell: |
#or find module
register: lastone
- name: Get current date for arithmetics
shell: |
echo $(date +%s)
register: currentdate
- name: Find ideal path to create new backup if last one is too old
# define & create new directory if currentdate - lastone is over a numeric value (suffisant difference)
when: "{{ currentdate | int - lastone | int }}" > 40000
여기서는 돼지 스타일 더미 시작 테스트를 위한 솔루션을 완성했습니다.
---
- hosts: localhost
become: true
become_method: sudo
become_user: francois
tasks:
- name: Check the last backup date
shell: |
date +%s -r $(find /mnt{1,2,3}/ -type d -name "backup.*[0-9]" 2> /dev/null | sort | tail -1)
args:
executable: /bin/bash
register: lastone
- name: Get current date for arithmetics
shell: |
date +%s
register: currentdate
- set_fact:
difference: "{{ currentdate.stdout | int - lastone.stdout | int }}"
- name: Find ideal path to create new backup if last one is too old
shell: |
find /mnt{1,2,3}/ -type d -name "backup.*[0-9]" 2> /dev/null | sort -n | tail -1 | sed "s/\.[0-9].*/\.$(date +%Y%m%d)/"
args:
executable: /bin/bash
register: rep
when:
- difference | int > 4000
- name: Create path
file:
path: "{{ rep.stdout }}"
state: directory
mode: "0755"
when:
- rep is defined
- difference | int > 4000
이렇게 하면 디렉토리가 설치 backup.20210630
되어 있든 /mnt1
(2
3
여기 3).
답변1
주요 질문에 대해
관련 디렉토리가 충분히 오래된 경우에만 Ansible 작업을 트리거하는 방법은 무엇입니까? ...내 목표는
backup.YYYYMMDD
30일 이상이면...
주어진 명명 규칙에 따라 작은 디렉터리 테스트를 설정했습니다.
$ ls -l
drwxr-xr-x. 2 user group 4096 Jan 2 00:00 backup.20220102
drwxr-xr-x. 2 user group 4096 Jan 9 00:00 backup.20220109
drwxr-xr-x. 2 user group 4096 Jan 16 00:00 backup.20220116
drwxr-xr-x. 2 user group 4096 Jan 23 00:00 backup.20220123
drwxr-xr-x. 2 user group 4096 Jan 30 00:00 backup.20220130
drwxr-xr-x. 2 user group 4096 Feb 6 00:00 backup.20220206
게다가mtime
디렉토리 변경통과하다 touch -t YYMMDDHHMM.SS backup.YYYYMMDD
.
$ stat backup.20220102/
File: ‘backup.20220102/’
Size: 4096 Blocks: 8 IO Block: 4096 directory
...
Access: (0755/drwxr-xr-x) Uid: (1234/user) Gid: (1234/group)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-01-02 00:00:00.000000000 +0100
Modify: 2022-01-02 00:00:00.000000000 +0100
Change: 2022-02-06 09:00:00.000000000 +0100
Birth: -
[am]time
속성이나 이름 접미사를 기준으로 비교가 가능합니다 YYYYMMDD
. 당신은부터 시작할 수 있습니다find
기준 치수.
---
- hosts: test
become: false
gather_facts: false
tasks:
- name: Find directories older than 30 days
find:
paths: "/home/{{ ansible_user }}"
file_type: directory
age: 30d
register: result
- name: Show result
debug:
msg: "{{ item[0] }}"
loop:
- "{{ result.files | flatten(levels=1) }}"
loop_control:
extended: yes
label: "{{ ansible_loop.index0 }}"
그 다음에loop
결과를 초과하다변하기 쉬운그리고데이터 필터링. 이 stat
모듈을 확인해 볼 수도 있습니다.파일 또는 파일 시스템 상태 검색.
현재 날짜를 "찾으려면" 다음을 볼 수 있습니다.Ansible 사실.
---
- hosts: test
become: false
gather_facts: true
tasks:
- name: Show Gathered Facts
debug:
msg: "{{ ansible_facts }}"
왜냐하면 일반적으로 이미 수집되어 있기 때문입니다.
TASK [Show Gathered Facts] ******
ok: [test.example.com] =>
msg:
...
date_time:
date: '2022-02-06'
day: '06'
epoch: '1644142041'
hour: '11'
iso8601: '2022-02-06T10:07:21Z'
iso8601_basic: 20220206T110721823347
iso8601_basic_short: 20220206T110721
iso8601_micro: '2022-02-06T10:07:21.823347Z'
minute: '07'
month: '02'
second: '21'
time: '11:07:21'
tz: CET
tz_offset: '+0100'
weekday: Sunday
weekday_number: '0'
weeknumber: '05'
year: '2022'
...
당신은 할 수블록으로 작업 그룹화기반으로조건문.