Ashar
Ashar

Reputation: 3251

Check if a file is 20 hours old in ansible

I'm able to get the timestamp of a file using Ansible stat module.

- stat:
    path: "/var/test.log"
  register: filedets

- debug:
    msg: "{{ filedets.stat.mtime }}"

The above prints mtime as 1594477594.631616 which is difficult to understand.

I wish to know how can I put a when condition check to see if the file is less than 20 hours old?

Upvotes: 4

Views: 5313

Answers (2)

β.εηοιτ.βε
β.εηοιτ.βε

Reputation: 39129

You can also achieve this kind of tasks without going in the burden to do any computation via find and its age parameter:

In your case, you will need a negative value for the age:

Select files whose age is equal to or greater than the specified time. Use a negative age to find files equal to or less than the specified time. You can choose seconds, minutes, hours, days, or weeks by specifying the first letter of any of those words (e.g., "1w").

Source: https://docs.ansible.com/ansible/latest/modules/find_module.html#parameter-age

Given the playbook:

- hosts: all
  gather_facts: no
  
  tasks:
    - file:
        path: /var/test.log
        state: touch

    - find:
        paths: /var
        pattern: 'test.log'
        age: -20h
      register: test_log

    - debug:
        msg: "The file is exactly 20 hours old or less"
      when: test_log.files | length > 0 

    - file:
       path: /var/test.log
       state: touch
       modification_time: '202007102230.00'

    - find:
        paths: /var
        pattern: 'test.log'
        age: -20h
      register: test_log

    - debug:
        msg: "The file is exactly 20 hours old or less"
      when: test_log.files | length > 0 

This gives the recap:

PLAY [all] **********************************************************************************************************

TASK [file] *********************************************************************************************************
changed: [localhost]

TASK [find] *********************************************************************************************************
ok: [localhost]

TASK [debug] ********************************************************************************************************
ok: [localhost] => {
    "msg": "The file is exactly 20 hours old or less"
}

TASK [file] *********************************************************************************************************
changed: [localhost]

TASK [find] *********************************************************************************************************
ok: [localhost]

TASK [debug] ********************************************************************************************************
skipping: [localhost]

PLAY RECAP **********************************************************************************************************
localhost                  : ok=5    changed=2    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0  

Upvotes: 10

- stat:
    path: "/var/test.log"
  register: filedets

- debug:
    msg: "{{ (ansible_date_time.epoch|float - filedets.stat.mtime ) > (20 * 3600) }}"

Upvotes: 7

Related Questions