community.general.archive 模块 – 创建一个或多个文件或目录的压缩存档

注意

此模块是 community.general 集合 (版本 10.1.0) 的一部分。

如果您正在使用 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.general。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定: community.general.archive

概要

  • 创建或扩展存档。

  • 源和存档位于远程主机上,存档 *不会* 复制到本地主机。

  • 通过指定 remove=True,可以在存档后删除源文件。

要求

执行此模块的主机需要以下要求。

  • 如果使用 xz 格式,则需要 lzma(Python 3 的标准库)或 backports.lzma(Python 2)。

参数

参数

注释

attributes

别名:attr

字符串

结果文件系统对象应具有的属性。

要获取支持的标志,请查看目标系统上 chattr 的手册页。

此字符串应按 lsattr 显示的顺序包含属性。

= 运算符被假定为默认值,否则需要在字符串中包含 +- 运算符。

dest

路径

目标存档的文件名。父目录必须存在于远程主机上。

path 通过指定 glob、目录或列表中的多个路径来引用多个文件时,这是必需的。

如果目标存档已存在,它将被截断并覆盖。

exclude_path

列表 / 元素=路径

要从 path 列表和 glob 展开中排除的文件或文件的远程绝对路径、glob 或路径或 glob 列表。

使用 exclusion_patterns 来代替排除任何路径下的文件或子目录 path 列表。

默认值: []

exclusion_patterns

列表 / 元素=路径

在 community.general 3.2.0 中添加

用于从生成的存档中排除文件或目录的 glob 风格模式。

这与 exclude_path 不同,后者仅适用于 path 的源路径。

force_archive

布尔值

允许您强制模块将此视为存档,即使只指定了一个文件。

默认情况下,如果只指定一个文件,则只对其进行压缩(不进行存档)。

如果您想使用 ansible.builtin.unarchive 在使用此模块创建的单个文件的存档上,请启用此选项。

选项

  • false ← (默认)

  • true

format

字符串

要使用的压缩类型。

选项

  • "bz2"

  • "gz" ← (默认)

  • "tar"

  • "xz"

  • "zip"

group

字符串

应该拥有文件系统对象的组的名称,如同提供给chown

如果未指定,则使用当前用户的当前组,除非您是 root 用户,在这种情况下,它可以保留之前的拥有者。

mode(模式)

任意

生成的 文件系统对象应具有的权限。

对于习惯使用/usr/bin/chmod的用户,请记住模式实际上是八进制数。您必须向 Ansible 提供足够的信息才能正确解析它们。为了获得一致的结果,请引用八进制数(例如,'644''1777'),以便 Ansible 接收字符串并可以自行将字符串转换为数字。添加前导零(例如,0755)有时有效,但在循环和其他一些情况下可能会失败。

如果不遵循以上任一规则向 Ansible 提供数字,则最终会得到一个十进制数,这将产生意外的结果。

从 Ansible 1.8 开始,模式可以指定为符号模式(例如,u+rwxu=rw,g=r,o=r)。

如果未指定mode 并且目标文件系统对象**不存在**,则在为新创建的文件系统对象设置模式时,将使用系统上的默认umask

如果未指定mode 并且目标文件系统对象**存在**,则将使用现有文件系统对象的模式。

指定mode 是确保以正确的权限创建文件系统对象的最佳方法。有关详细信息,请参阅 CVE-2020-1736。

owner(所有者)

字符串

应该拥有文件系统对象的用户的名称,如同提供给chown

如果未指定,则使用当前用户,除非您是 root 用户,在这种情况下,它可以保留之前的拥有者。

指定数字用户名将被认为是用户 ID 而不是用户名。避免使用数字用户名以避免此混淆。

路径

列表 / 元素=路径 / 必需

要压缩或存档的文件或文件的远程绝对路径、通配符或路径或通配符列表。

remove(删除)

布尔值

添加到存档后删除任何添加的源文件和树。

选项

  • false ← (默认)

  • true

selevel(安全级别)

字符串

SELinux 文件系统对象上下文中的级别部分。

这是 MLS/MCS 属性,有时称为range

设置为_default时,如果可用,它将使用策略的level 部分。

serole(安全角色)

字符串

SELinux 文件系统对象上下文中的角色部分。

设置为_default时,如果可用,它将使用策略的role 部分。

setype(安全类型)

字符串

SELinux 文件系统对象上下文中的类型部分。

设置为_default时,如果可用,它将使用策略的type 部分。

seuser(安全用户)

字符串

SELinux 文件系统对象上下文中的用户部分。

默认情况下,它使用system策略(如果适用)。

设置为_default时,如果可用,它将使用策略的user 部分。

unsafe_writes(不安全写入)

布尔值

影响何时使用原子操作来防止数据损坏或目标文件系统对象的不一致读取。

默认情况下,此模块使用原子操作来防止数据损坏或目标文件系统对象的不一致读取,但有时系统的配置方式或损坏方式会阻止这种情况。一个例子是 docker 挂载的文件系统对象,无法从容器内部以原子方式更新,只能以不安全的方式写入。

此选项允许 Ansible 在原子操作失败时回退到不安全的文件系统对象更新方法(但是,它不会强制 Ansible 执行不安全写入)。

重要!不安全写入容易出现竞争条件,并可能导致数据损坏。

选项

  • false ← (默认)

  • true

属性

属性

支持

描述

check_mode

支持:完全支持

可以在check_mode 中运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:不支持

处于差异模式时,将返回有关已更改内容(或可能需要在check_mode 中更改的内容)的详细信息。

备注

注意

  • 可以生成gzipbzip2lzmazip 压缩文件或存档。

  • 此模块在目标主机上使用tarfilezipfilegzipbz2 包来创建存档。这些是 Python 2 和 3 的 Python 标准库的一部分。

另请参阅

另请参阅

ansible.builtin.unarchive

(可选)从本地机器复制后解压缩存档。

示例

- name: Compress directory /path/to/foo/ into /path/to/foo.tgz
  community.general.archive:
    path: /path/to/foo
    dest: /path/to/foo.tgz

- name: Compress regular file /path/to/foo into /path/to/foo.gz and remove it
  community.general.archive:
    path: /path/to/foo
    remove: true

- name: Create a zip archive of /path/to/foo
  community.general.archive:
    path: /path/to/foo
    format: zip

- name: Create a bz2 archive of multiple files, rooted at /path
  community.general.archive:
    path:
    - /path/to/foo
    - /path/wong/foo
    dest: /path/file.tar.bz2
    format: bz2

- name: Create a bz2 archive of a globbed path, while excluding specific dirnames
  community.general.archive:
    path:
    - /path/to/foo/*
    dest: /path/file.tar.bz2
    exclude_path:
    - /path/to/foo/bar
    - /path/to/foo/baz
    format: bz2

- name: Create a bz2 archive of a globbed path, while excluding a glob of dirnames
  community.general.archive:
    path:
    - /path/to/foo/*
    dest: /path/file.tar.bz2
    exclude_path:
    - /path/to/foo/ba*
    format: bz2

- name: Use gzip to compress a single archive (i.e don't archive it first with tar)
  community.general.archive:
    path: /path/to/foo/single.file
    dest: /path/file.gz
    format: gz

- name: Create a tar.gz archive of a single file.
  community.general.archive:
    path: /path/to/foo/single.file
    dest: /path/file.tar.gz
    format: gz
    force_archive: true

返回值

常见返回值已在此处记录,以下是此模块特有的字段

描述

archived(已存档)

列表 / 元素=字符串

任何已压缩或添加到存档的文件。

返回:成功

arcroot(存档根目录)

字符串

存档根目录。

返回:始终返回

dest_state(目标状态)

字符串

在 community.general 3.4.0 中添加

dest 文件的状态。

文件不存在时为absent

该文件为存档时为archive

该文件已压缩但不是存档时为compress

该文件为存档但找不到path 下的一些文件时为incomplete

返回:成功

expanded_exclude_paths(已展开的排除路径)

列表 / 元素=字符串

来自 exclude_path 参数的匹配排除路径列表。

返回:始终返回

expanded_paths(已展开的路径)

列表 / 元素=字符串

来自 paths 参数的匹配路径列表。

返回:始终返回

missing(缺少)

列表 / 元素=字符串

源中缺少的任何文件。

返回:成功

state(状态)

字符串

输入path 的状态。

返回:始终返回

作者

  • Ben Doherty (@bendoh)