Ansible:根据目录中是否有超过3个子目录,删除超过某个mdate的目录

时间:2017-06-28 06:16:20

标签: ansible ansible-2.x

我有一个ansible playbook,我需要添加一个任务。基本上我有一个目录,在每个部署上添加另一个子目录。当有超过3个子目录时,我想删除3个最新目录之后的所有旧目录。我正在努力为它写剧本。 我首先尝试获取所有子目录

- name: Get all install artifacts find: paths: "{{ home_path }}/install/" file_type: directory recurse: no register: install_artifacts

但在此之后,我试图检查是否有超过3个项目,如果有,请获取第3项修改日期,并删除所有修改日期之前的所有项目。

1 个答案:

答案 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现在包含所有旧目录。