#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:
На данный момент я обнаружил три или четыре ошибки в сборнике воспроизведения
- Используйте become или убедитесь, что он установлен в config / inventory, если вам нужно удалить файлы, на которые у вас нет разрешения.
- пути: должен быть полный путь, и в пути не принимаются подстановочные знаки, я считаю, что это должны быть пути: /data/log
- «рекурсивный» — неправильный вариант с модулем поиска. Это должно быть ‘recurse’
- В последней строке есть ненужный ‘(‘.
Приведенный ниже код должен работать
---
- 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 }}"