2017-06-28 66 views
0

我有一個需要添加任務的可靠劇本。基本上我有一個目錄,在每個部署添加另一個子目錄。當有超過3個子目錄時,我想刪除最近3個目錄中的所有舊目錄。我正在努力爲它寫劇本。 我第一次嘗試讓所有的子目錄Ansible:根據目錄中是否存在多於3個子目錄,刪除超過特定mdate的目錄。

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

但在此之後,我想檢查是否有超過3項,如果是這樣得到修改日期的3項,並有修改刪除一切日期早於此。所有的

回答

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現在包含所有的舊目錄。

+0

'when'行只有一個小的錯字:'when:install_artifacts.matched> 3' – minusf

+0

@minusf謝謝! –