使用 Ansible 归档单个文件夹下的多个文件夹
Posted
技术标签:
【中文标题】使用 Ansible 归档单个文件夹下的多个文件夹【英文标题】:Archive multiple folders under a single folder using Ansible 【发布时间】:2020-07-14 14:56:37 【问题描述】:我正在使用下面的 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
您能否指导我如何获取存档以将 IBM 文件夹中的两个文件夹都放在 mysetup.tar.gz
中?
【问题讨论】:
【参考方案1】:使用archive
模块无法直接实现您的要求。下面列出了两个具体原因:
-
如果您指定
path
,比如/app/IBM
,那么压缩文件的内容将具有IBM 之后的路径,例如common/
、api/
。要将 IBM 作为 tar.gz 文件中的根目录,您需要将 path
指定为 /app
。这就引出了关于exclude_path
用法的下一点。
exclude_path
无法正常工作。比如说,如果path
被定义为/app
并且您想排除/app/IBM/test
,这将不起作用。 exclude_path
仅适用于定义的 path
(带通配符)的直接子文件夹/文件,这意味着如果 path
定义为 /app/IBM/*
,则排除 /app/IBM/test
将起作用,但这不是预期的并带回上一点。已有关于此主题的 issue reported。
因此,您最好使用命令/shell 模块使用常规 tar 命令。
【讨论】:
感谢您的解释,但我希望更新存档模块以帮助满足要求。以上是关于使用 Ansible 归档单个文件夹下的多个文件夹的主要内容,如果未能解决你的问题,请参考以下文章