Ansible 找到匹配的模式目录,删除所有但保留最后 3 个版本
Ansible find matched patterns directory, remove all but keep the last 3 versions
我浏览了 Whosebug 网站,但找不到任何与我想要实现的类似的东西,希望有人能指出我将不胜感激。
我有一个目录,用于存储所有工件 Release Candidate 和 Dev 版本,每当有 bamboo build 启动时。到目前为止,我可以弄清楚如何找到目录模式并验证要删除的结果。但无法过滤结果以排除我想保留的最后 3 个最新版本。
这是结构和代码
Structures
---
- name: Ansible find match directory, keep the last 3 version and remove all other
hosts: localhost
connection: local
vars:
base_dir: "/opt/repo/"
artifacts:
- "subject-mapper"
- "artemis-margin-api"
tasks:
- name: Find Release Candidate Directory Packages
become: yes
find:
paths: "{{ base_dir }}/{{ item }}"
patterns:
- "{{ item }}-[0-9]*.[0-9]*.[0-9]*$"
use_regex: yes
recurse: no
file_type: directory
loop: "{{ artifacts }}"
register: output
- debug:
msg: "{{ output }}"
- name: Filter out the Release Candidate results and keep the last 3 versions
set_fact:
files_to_delete: "{{ (files_to_delete|default([])) + (item['files'] | sort(attribute='mtime'))[:-3] }}"
loop: "{{ output['results'] }}"
- debug:
msg: "{{ files_to_delete }}"
- name: Delete the filtered results but keep the last 3 version
file:
path: "{{ item.path }}"
state: absent
loop: "{{ files_to_delete }}"
when: confirm|default(false)|bool
register: output_delete
- debug:
msg: "{{ output_delete }}"
这里
最简单的方法是从每个结果中弹出前三个匹配项:
- set_fact:
files_to_delete: "{{ (files_to_delete|default([])) + (item['files'] | sort(attribute='mtime'))[3:] }}"
loop: "{{ output['results'] }}"
我浏览了 Whosebug 网站,但找不到任何与我想要实现的类似的东西,希望有人能指出我将不胜感激。
我有一个目录,用于存储所有工件 Release Candidate 和 Dev 版本,每当有 bamboo build 启动时。到目前为止,我可以弄清楚如何找到目录模式并验证要删除的结果。但无法过滤结果以排除我想保留的最后 3 个最新版本。
这是结构和代码
Structures
---
- name: Ansible find match directory, keep the last 3 version and remove all other
hosts: localhost
connection: local
vars:
base_dir: "/opt/repo/"
artifacts:
- "subject-mapper"
- "artemis-margin-api"
tasks:
- name: Find Release Candidate Directory Packages
become: yes
find:
paths: "{{ base_dir }}/{{ item }}"
patterns:
- "{{ item }}-[0-9]*.[0-9]*.[0-9]*$"
use_regex: yes
recurse: no
file_type: directory
loop: "{{ artifacts }}"
register: output
- debug:
msg: "{{ output }}"
- name: Filter out the Release Candidate results and keep the last 3 versions
set_fact:
files_to_delete: "{{ (files_to_delete|default([])) + (item['files'] | sort(attribute='mtime'))[:-3] }}"
loop: "{{ output['results'] }}"
- debug:
msg: "{{ files_to_delete }}"
- name: Delete the filtered results but keep the last 3 version
file:
path: "{{ item.path }}"
state: absent
loop: "{{ files_to_delete }}"
when: confirm|default(false)|bool
register: output_delete
- debug:
msg: "{{ output_delete }}"
这里
最简单的方法是从每个结果中弹出前三个匹配项:
- set_fact:
files_to_delete: "{{ (files_to_delete|default([])) + (item['files'] | sort(attribute='mtime'))[3:] }}"
loop: "{{ output['results'] }}"