community.general.filesize 模块 – 创建具有给定大小的文件,或在文件已存在时调整其大小

注意

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

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

要安装它,请使用:ansible-galaxy collection install community.general。 您需要进一步的要求才能使用此模块,请参阅 要求 了解详细信息。

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

community.general 3.0.0 中的新增功能

概要

  • 此模块是 dd 的一个简单包装器,用于创建、扩展或截断文件,给定其大小。 它可用于管理交换文件(需要连续块)或可选地管理巨大的稀疏文件。

要求

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

  • PATH 中的 dd(数据复制器)

参数

参数

注释

attributes

别名:attr

字符串

生成的的文件系统对象应具有的属性。

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

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

默认情况下假定使用 = 运算符,否则需要在字符串中包含 +- 运算符。

blocksize

任意

块的大小,如果后面没有乘法后缀,则以字节为单位。

数值(单位之前)必须是整数(或者如果等于整数,则为 float)。

如果未设置,则块的大小会从操作系统中猜测,通常会导致 5124096 字节,该字节在模块内部使用,或者在 size 没有单位时使用。

force

布尔值

是否覆盖已存在的文件,换句话说,将其从 0 截断。 当 true 时,模块不是幂等的,这意味着它始终报告 changed=true

force=truesparse=true 互斥。

选择

  • false ←(默认)

  • true

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 而不是用户名。 避免使用数字用户名以避免混淆。

path

路径 / 必需

要创建或调整大小的常规文件的路径。

selevel

字符串

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

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

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

serole

字符串

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

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

setype

字符串

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

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

seuser

字符串

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

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

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

size

any / required

请求的文件大小。

该值是一个数字(可以是 intfloat),可以选择后跟一个乘法后缀,该后缀可以是 B(字节),KBkB (= 1000B),MBmB (= 1000kB),GBgB (= 1000MB),等等,对于 TPEZY;或者,可以是 KkKiB (= 1024B); MmMiB (= 1024KiB); GgGiB (= 1024MiB);等等。

如果未提供乘法后缀,则该值被视为每个 blocksize 字节的整数块数(浮点值四舍五入到最接近的整数)。

size 值等于当前文件大小时,不执行任何操作。

size 值大于当前文件大小时,来自 source 的字节(如果 sparse 不是 false)将被追加到文件而不截断它,换句话说,不修改文件的现有字节。

size 值小于当前文件大小时,它将被截断为请求的值,而不修改该值之前的字节。

这意味着可以将任意大小的文件扩展到任何其他任意大小,然后调整大小到其初始大小,而无需修改其初始内容。

source

path

提供输入数据以配置文件的设备或文件。

sparse=true 时,此参数将被忽略。

默认值: "/dev/zero"

sparse

布尔值

要创建的文件是否应该是稀疏文件。

此选项仅在新建文件或扩展文件时有效,仅对要追加的字节有效。

此选项在不支持稀疏文件的操作系统或文件系统上不受支持。

force=truesparse=true 互斥。

选择

  • false ←(默认)

  • true

unsafe_writes

布尔值

此选项会被静默忽略。此模块始终就地修改文件大小。

选择

  • false ←(默认)

  • true

属性

属性

支持

描述

check_mode

支持: 完全

可以在 check_mode 中运行,并返回已更改的状态预测,而无需修改目标。

diff_mode

支持: 完全

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

另请参阅

另请参阅

Linux 的 dd(1) 手册页

GNU/Linux 的 dd 实现(来自 GNU coreutils)的手册页。

IBM AIX 的 dd(1) 手册页

IBM AIX 的 dd 实现的手册页。

Mac OSX 的 dd(1) 手册页

Mac OSX 的 dd 实现的手册页。

Solaris 的 dd(1M) 手册页

Oracle Solaris 的 dd 实现的手册页。

FreeBSD 的 dd(1) 手册页

FreeBSD 的 dd 实现的手册页。

OpenBSD 的 dd(1) 手册页

OpenBSD 的 dd 实现的手册页。

NetBSD 的 dd(1) 手册页

NetBSD 的 dd 实现的手册页。

Linux 的 busybox(1) 手册页

GNU/Linux 的 busybox 的手册页,它提供了自己的 dd 实现。

示例

- name: Create a file of 1G filled with null bytes
  community.general.filesize:
    path: /var/bigfile
    size: 1G

- name: Extend the file to 2G (2*1024^3)
  community.general.filesize:
    path: /var/bigfile
    size: 2G

- name: Reduce the file to 2GB (2*1000^3)
  community.general.filesize:
    path: /var/bigfile
    size: 2GB

- name: Fill a file with random bytes for backing a LUKS device
  community.general.filesize:
    path: ~/diskimage.luks
    size: 512.0 MiB
    source: /dev/urandom

- name: Take a backup of MBR boot code into a file, overwriting it if it exists
  community.general.filesize:
    path: /media/sdb1/mbr.bin
    size: 440B
    source: /dev/sda
    force: true

- name: Create/resize a sparse file of/to 8TB
  community.general.filesize:
    path: /var/local/sparsefile
    size: 8TB
    sparse: true

- name: Create a file with specific size and attributes, to be used as swap space
  community.general.filesize:
    path: /var/swapfile
    size: 2G
    blocksize: 512B
    mode: u=rw,go=
    owner: root
    group: root

返回值

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

描述

cmd

字符串

执行以创建或调整文件大小的命令。

返回: 当更改或失败时

示例: "/usr/bin/dd if=/dev/zero of=/var/swapfile bs=1048576 seek=3072 count=1024"

filesize

字典

与文件大小相关的字典。

返回: 始终

blocks

整数

文件中的块数。

返回: 成功

示例: 500

blocksize

整数

块的大小(以字节为单位)。

返回: 成功

示例: 1024

bytes

整数

文件大小,以字节为单位,作为 filesize.blocksfilesize.blocksize 的乘积。

返回: 成功

示例: 512000

iec

字符串

文件大小,以人类可读的格式,遵循 IEC 标准。

返回: 成功

示例: "500.0 KiB"

si

字符串

文件大小,以人类可读的格式,遵循 SI 标准。

返回: 成功

示例: "512.0 kB"

path

字符串

如果文件是符号链接,则为文件的实际路径,否则与模块的参数相同。

返回: 始终

示例: "/var/swap0"

size_diff

整数

旧大小和新大小之间的差异(正或负),以字节为单位。

返回: 始终

示例: -1234567890

作者

  • quidame (@quidame)