使用 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),其中仅包含两个文件夹,即 common
和 api
文件夹,同时忽略其余文件夹和文件。
因此,我编写了以下剧本:
- 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 的文件夹,它应该有两个文件夹 common
和 api
。因此,无论 IBM
文件夹下还有什么其他文件,我都希望 mysetup.tar.gz 中包含以下内容。
IBM
|--/common
|--/api
但是,mysetup.tar.gz 没有 IBM
文件夹,但有 common
和 api
文件夹。
我没有具体说明,因此我的问题没有在这里得到解答:How to archive multiple folders under one folder using Ansible
能否请您指导我如何获得存档以在 mysetup.tar.gz
中包含 IBM 文件夹中的两个文件夹?
使用archive
模块无法直接满足您的要求。下面列出两个具体原因:
- 如果您指定
path
说 /app/IBM
,则 zip 文件的内容将在 IBM 之后具有类似于 common/
、api/
的路径。要将 IBM 作为 tar.gz 文件内的根目录,您需要将 path
指定为 /app
。这就引出了关于 exclude_path
. 用法的下一点
exclude_path
没有像您预期的那样工作。比如说,如果 path
定义为 /app
并且您想排除 /app/IBM/test
,这将不起作用。 exclude_path
仅适用于定义的 path
(带通配符)的直接子 folder/file,这意味着如果 path
定义为 [=26],则排除 /app/IBM/test
将起作用=] 但这不是预期的,并且带回了之前的观点。已经有关于此主题的 issue reported。
所以你最好使用 command/shell 模块使用常规 tar 命令。
我正在使用下面的 ansible-playbook 代码来存档 IBM 文件夹下的多个文件夹。
下面是我的绝对路径目录结构:
/app
|-- /IBM
|--/test
|--/log
|--/common
|--/api
|--/<unknown folders>
IBM folder
下的文件夹和文件数量未知,因此似乎无法在 exclude_path
属性下指定 IBM 下的所有文件/文件夹。
我希望构建一个只有 IBM 文件夹的存档 (gz),其中仅包含两个文件夹,即 common
和 api
文件夹,同时忽略其余文件夹和文件。
因此,我编写了以下剧本:
- 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 的文件夹,它应该有两个文件夹 common
和 api
。因此,无论 IBM
文件夹下还有什么其他文件,我都希望 mysetup.tar.gz 中包含以下内容。
IBM
|--/common
|--/api
但是,mysetup.tar.gz 没有 IBM
文件夹,但有 common
和 api
文件夹。
我没有具体说明,因此我的问题没有在这里得到解答:How to archive multiple folders under one folder using Ansible
能否请您指导我如何获得存档以在 mysetup.tar.gz
中包含 IBM 文件夹中的两个文件夹?
使用archive
模块无法直接满足您的要求。下面列出两个具体原因:
- 如果您指定
path
说/app/IBM
,则 zip 文件的内容将在 IBM 之后具有类似于common/
、api/
的路径。要将 IBM 作为 tar.gz 文件内的根目录,您需要将path
指定为/app
。这就引出了关于exclude_path
. 用法的下一点
exclude_path
没有像您预期的那样工作。比如说,如果path
定义为/app
并且您想排除/app/IBM/test
,这将不起作用。exclude_path
仅适用于定义的path
(带通配符)的直接子 folder/file,这意味着如果path
定义为 [=26],则排除/app/IBM/test
将起作用=] 但这不是预期的,并且带回了之前的观点。已经有关于此主题的 issue reported。
所以你最好使用 command/shell 模块使用常规 tar 命令。