Ansible(v2.9.6)有一个unarchive
任务它可以解压服务器上的 tar 文件(等等)到目标目录。是否可以告诉它删除目标目录中的任何文件,不是在档案文件中?
答案1
不是。文档中明确指出:
目标中不在存档中的现有文件/目录不会被触及。这与正常的存档提取行为相同。
我认为没有其他模块可以做到这一点。作为一种解决方法,您可以先删除目标目录。或者解压到临时目录,然后使用带delete
参数的同步模块从临时位置复制到目标目录。
答案2
我也有同样的问题。对于档案库中的少量文件,这种方法对我来说效果很好。
- name: Unarchive test
hosts: all
vars:
target_directory: /path/to/extract/files/to
tasks:
- name: List existing files
find:
paths: "{{ target_directory }}"
file_type: any
recurse: true
register: existingfiles
- name: extract tar file
unarchive:
src: input.tar.gz
dest: "{{ target_directory }}"
list_files: yes
register: newfiles
- name: Delete old files
file:
path: "{{ item }}"
state: absent
with_items: "{{ existingfiles.files | map(attribute='path') | difference(newfiles.files|replace('./',(target_directory ~ '/'))) }}"
when: newfiles.files is defined