Удаление файлов старше x дней внутри папки папок

#ansible #delete-file

#ansible #удалить-файл

Вопрос:

Я хотел бы использовать ansible для удаления старых файлов. У меня есть папка журнала данных, внутри этой папки у меня есть несколько каталогов:

 /data/log/folder1/
/data/log/folder2/
....
 

Я пытался использовать этот сборник игр ansible :

 ---
- hosts: all
  tasks:
    - name: find all files that are older than 10 days
      find:
        paths: /data/log/*/
        age: 10d
        recursive: yes
      register: filesOlderThan10
    - name: remove older than 10
      file:
        path: "{{ item.path }}" 
        state: absent
      with_items: "{{ (filesOlderThan10.files }}"
 

Когда я запускаю playbook, ничего не удаляется, я не уверен, что смогу использовать этот синтаксис / data / log / */
Поэтому я ищу предложения по улучшению этого кода

Комментарии:

1. Согласно документации модуля, paths : «Список путей к каталогам для поиска. Все пути должны быть полностью указаны.», вероятно, ваше значение с подстановочным знаком неприемлемо. Есть ли у вас какие-нибудь пункты в filesOlderThan10 списке?

Ответ №1:

На данный момент я обнаружил три или четыре ошибки в сборнике воспроизведения

  1. Используйте become или убедитесь, что он установлен в config / inventory, если вам нужно удалить файлы, на которые у вас нет разрешения.
  2. пути: должен быть полный путь, и в пути не принимаются подстановочные знаки, я считаю, что это должны быть пути: /data/log
  3. «рекурсивный» — неправильный вариант с модулем поиска. Это должно быть ‘recurse’
  4. В последней строке есть ненужный ‘(‘.

Приведенный ниже код должен работать

 ---
- hosts: all
  tasks:
    - name: find all files that are older than 10 days
      find:
        paths: /data/log
        age: 10d
        recurse: yes
      register: filesOlderThan10
    - name: remove older than 10
      file:
        path: "{{ item.path }}" 
        state: absent
      with_items: "{{ filesOlderThan10.files }}"
 

Ответ №2:

Ранее я использовал cronjob с find и решил перейти на AWX, и после проверки здесь и других статей я пришел к следующему. Протестировано и работает, как мы говорим. Первая задача регистрирует все файлы старше 3 дней как matched_files_dirs. Вторая задача удаляет их. Выполняет эту работу, но медленнее, чем просто запуск cron в Linux.

 ---
- name: Cleanup
  hosts: linux
  gather_facts: false
  tasks:
  - name: Collect files
    shell: find /opt/buildagent/system*/target_directory -type f -mtime  3
    register: matched_files_dirs
    
  - name: Remove files
    become_user: root
    file: 
        path: "{{ item }}" 
        state: absent
    with_items: "{{ matched_files_dirs.stdout_lines }}"