問題のディレクトリが十分に古い場合(たとえば、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'
...
あなたはできますブロックによるワークグループ化に基づいて条件文。