如何使用ansible删除最早的目录。 假设我有以下树形结构
Parent Directory
-Dir2020-05-20
-Dir2020-05-21
-Dir2020-05-22
-Dir2020-05-23
现在每次运行ansible剧本时,它都应删除最旧的目录,例如,如果我们将其创建日期定为2020-05-20,则应在其首次运行中删除Dir2020-05-20。 文件模块的age属性没有帮助,因为我必须非常随机地运行此剧本,并且我想保持有限的数量。这些目录。
答案 0 :(得分:0)
只需将dirpath分配到所有这些目录都存在的“父目录”的路径中
---
- hosts: localhost
vars:
dir_path: "/home/harshit/ansible/test/" ##parent directory path, make sure it ends with a slash
tasks:
- name: find oldest directory
shell:
cmd: "ls `ls -tdr | head -n 1 `"
chdir: "{{dir_path}}"
register: dir_name_to_delete
- name: "delete oldest directory: {{dir_path}}{{dir_name_to_delete.stdout}}"
file:
state: absent
path: "{{dir_path}}{{dir_name_to_delete.stdout}}"
答案 1 :(得分:0)
考虑建议的做法是,在任何情况下都不要使用shell
或command
模块,对于这种情况,我建议使用纯ansible解决方案:
- name: Get directory list
find:
paths: "{{ target_directory }}"
file_type: directory
register: found_dirs
- name: Get the oldest dir
set_fact:
oldest_dir: "{{ found_dirs.files | sort(attribute='mtime') | first }}"
- name: Delete oldest dir
file:
state: absent
path: "{{ oldest_dir.path }}"
when:
- found_dirs.files | count > 3
有两种方法可以知道使用find
模块找到了多少文件-使用像matched
这样的return value when: found_dirs.matched > 3
或使用count
过滤器。我更喜欢后一种方法,因为我在很多其他情况下都使用此过滤器,所以这只是一种习惯。
供您参考,ansible具有whole bunch个有用的过滤器(例如,我在这里使用了count
和sort
,但有很多过滤器)。当然,无需记住这些过滤器名称,只需记住它们的存在,在许多情况下可能会有用。