我有一个ansible playbook,我需要添加一个任务。基本上我有一个目录,在每个部署上添加另一个子目录。当有超过3个子目录时,我想删除3个最新目录之后的所有旧目录。我正在努力为它写剧本。 我首先尝试获取所有子目录
- name: Get all install artifacts
find:
paths: "{{ home_path }}/install/"
file_type: directory
recurse: no
register: install_artifacts
但在此之后,我试图检查是否有超过3个项目,如果有,请获取第3项修改日期,并删除所有修改日期之前的所有项目。
答案 0 :(得分:3)
- block:
- name: Determine old directories
set_fact:
old_dirs: "{{ (install_artifacts.files|sort(attribute='mtime', reverse=True))[3:] }}"
- name: Remove old directories
file:
path: "{{ item.path }}"
state: absent
with_items: "{{ old_dirs }}"
when: install_artifacts.matched > 3
首先,install_artifacts.files|sort(attribute='mtime', reverse=True)
将按mtime
降序排序。 [3:]
表示从列表中删除前3个项目,这是最近的3个目录。所以old_dirs
现在包含所有旧目录。