ansible 的“unarchive”删除目标目录中不存在的文件

ansible 的“unarchive”删除目标目录中不存在的文件

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

相关内容