我想使用ansible删除旧文件。我有一个数据日志文件夹,在这个文件夹里我有多个目录:
/data/log/folder1/
/data/log/folder2/
....
我试着使用这个易理解的剧本:
---
- 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 }}"
当我启动剧本时,没有任何内容被删除,我不确定我是否可以使用此语法/data/log/*/
因此,我正在寻找改进此代码的建议
到目前为止,我在战术手册中发现了三到四个错误
- 如果您需要删除您没有权限的文件,请使用"成为"或确保其在配置/库存中设置
- 路径:应该是完全合格的路径,我相信路径中不接受通配符它应该是路径:/data/log
- "recursive"不是查找模块的正确选项。它应该是"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 }}"
我之前一直在find中使用cronjob,并决定转到AWX,在查看了这里和其他文章后,我得出了以下结论。在我们说话的时候经过测试和工作。第一个任务将所有超过3天的文件注册为matched_files_dirs。第二个任务删除它们。完成这项工作,但比在linux上运行cron慢。
---
- 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 }}"