問題のディレクトリが十分に古い場合(たとえば、30日以上)、Ansible操作をトリガーする方法は何ですか?

問題のディレクトリが十分に古い場合(たとえば、30日以上)、Ansible操作をトリガーする方法は何ですか?

問題のディレクトリが十分に古い場合(たとえば、30日以上)、Ansible操作をトリガーする方法は何ですか?

似たようなことをしたい

- name: backup biggest files 
  #get difference between currentdate & last backup
  register: age 

文字列または定義されたwhen句を取得できることを知っていますが、ここではどうするかわかりません。

たとえば、私の目標は、/mnt/backup.YYYYMMDD30日を超える場合はタスクリストを作成し、新しい日付ディレクトリを作成して直接バックアップすることです(同期方法は良いですか?)。

これをどうやって得ることができますか?

獲得段階:

  • 最後のバックアップ日を探す
  • 現在の日付を探す
  • それらの間の算術的な違い
  • 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いるかどうか/mnt123ここ3)。

ベストアンサー1

主な質問について

関連ディレクトリが十分に古い場合にのみAnsible操作をトリガーする方法は? ...私の目標はbackup.YYYYMMDD30日以上の場合...

与えられた命名規則に従って小さなディレクトリテストを設定しました。

$ 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'
    ...

あなたはできますブロックによるワークグループ化に基づいて条件文

おすすめ記事