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

path / required

要创建或调整大小的普通文件的路径。

selevel

字符串

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

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

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

serole

字符串

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

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

setype

字符串

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

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

seuser

字符串

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

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

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

size

any / required

请求的文件大小。

该值是一个数字(intfloat),后面可以 optionally 加上一个乘法后缀,可以是 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

支持:完全支持

处于 diff 模式时,将返回有关已更改内容(或可能需要在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)

字符串

文件大小,采用 IEC 标准的可读格式。

返回值: 成功

示例: "500.0 KiB"

SI 单位 (si)

字符串

文件大小,采用 SI 标准的可读格式。

返回值: 成功

示例: "512.0 kB"

path

字符串

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

返回值: 始终返回

示例: "/var/swap0"

大小差异 (size_diff)

整数

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

返回值: 始终返回

示例: -1234567890

作者

  • quidame (@quidame)