使用 Ansible 将多个文件夹归档在一个文件夹下

Archive multiple folders under a single folder using Ansible

我正在使用下面的 ansible-playbook 代码来存档 IBM 文件夹下的多个文件夹。

下面是我的绝对路径目录结构:

/app
   |-- /IBM
          |--/test
          |--/log
          |--/common
          |--/api
          |--/<unknown folders>

IBM folder 下的文件夹和文件数量未知,因此似乎无法在 exclude_path 属性下指定 IBM 下的所有文件/文件夹。

我希望构建一个只有 IBM 文件夹的存档 (gz),其中仅包含两个文件夹,即 commonapi 文件夹,同时忽略其余文件夹和文件。

因此,我编写了以下剧本:

- name: Creating the archive
  archive:
    path: 
    - /was/IBM/common
    - /was/IBM/api
    dest: /var/backup/mysetup.tar.gz
    exclude_path:
    - /was/IBM/common/log
    - /was/IBM/api/tmp
    format: gz

这给了我存档文件 mysetup.tar.gz

我希望 mysetup.tar.gz 文件有一个名为 IBM 的文件夹,它应该有两个文件夹 commonapi。因此,无论 IBM 文件夹下还有什么其他文件,我都希望 mysetup.tar.gz 中包含以下内容。

IBM
  |--/common
  |--/api

但是,mysetup.tar.gz 没有 IBM 文件夹,但有 commonapi 文件夹。

我没有具体说明,因此我的问题没有在这里得到解答:How to archive multiple folders under one folder using Ansible

能否请您指导我如何获得存档以在 mysetup.tar.gz 中包含 IBM 文件夹中的两个文件夹?

使用archive 模块无法直接满足您的要求。下面列出两个具体原因:

  1. 如果您指定 path/app/IBM,则 zip 文件的内容将在 IBM 之后具有类似于 common/api/ 的路径。要将 IBM 作为 tar.gz 文件内的根目录,您需要将 path 指定为 /app。这就引出了关于 exclude_path.
  2. 用法的下一点
  3. exclude_path 没有像您预期的那样工作。比如说,如果 path 定义为 /app 并且您想排除 /app/IBM/test,这将不起作用。 exclude_path 仅适用于定义的 path(带通配符)的直接子 folder/file,这意味着如果 path 定义为 [=26],则排除 /app/IBM/test 将起作用=] 但这不是预期的,并且带回了之前的观点。已经有关于此主题的 issue reported

所以你最好使用 command/shell 模块使用常规 tar 命令。