Ansible模块——文件属性查看,文件或目录创建和属性修改

ansible.builtin.stat 可以查看文件信息。

选项

类型

默认值

描述

pathstrnull

要检查的文件或目录的完整路径(必需)。

followboolfalse

如果是符号链接,是否跟随到目标路径上获取其状态。

get_attributesbooltrue

是否返回扩展属性(如 SELinux 上的安全上下文、ACL 等),仅在底层文件系统支持时生效。

get_checksumbooltrue

是否计算并返回文件的校验和。

checksum_algorithmstrsha1

指定用于计算校验和的算法,如 md5sha1sha224sha256sha384 和 sha512。仅在 get_checksum: true 时生效。

get_mimebooltrue

是否检测并返回文件的 MIME 类型

- name: Get stats of a file
  ansible.builtin.stat:
    path: /etc/foo.conf
  register: st
- name: Fail if the file does not belong to 'root'
  ansible.builtin.fail:
    msg: "Whoops! file ownership has changed"
  when: st.stat.pw_name != 'root'

- name: Get stats of the FS object
  ansible.builtin.stat:
    path: /path/to/something
  register: sym

- name: Print a debug message
  ansible.builtin.debug:
    msg: "islnk isn't defined (path doesn't exist)"
  when: sym.stat.islnk is not defined

- name: Print a debug message
  ansible.builtin.debug:
    msg: "islnk is defined (path must exist)"
  when: sym.stat.islnk is defined

- name: Print a debug message
  ansible.builtin.debug:
    msg: "Path exists and is a symlink"
  when: sym.stat.islnk is defined and sym.stat.islnk

- name: Print a debug message
  ansible.builtin.debug:
    msg: "Path exists and isn't a symlink"
  when: sym.stat.islnk is defined and sym.stat.islnk == False

- name: Get stats of the FS object
  ansible.builtin.stat:
    path: /path/to/something
  register: p
- name: Print a debug message
  ansible.builtin.debug:
    msg: "Path exists and is a directory"
  when: p.stat.isdir is defined and p.stat.isdir

- name: Do not calculate the checksum
  ansible.builtin.stat:
    path: /path/to/myhugefile
    get_checksum: no

- name: Use sha256 to calculate the checksum
  ansible.builtin.stat:
    path: /path/to/something
    checksum_algorithm: sha256

修改文件或目录属性(或创建文件\软链接)

ansible.builtin.file:设置文件、目录或符号链接及其目标的属性。或者,删除文件、符号链接或目录。

有些功能其他模块也能实现。

选项

类型

默认值

描述

access_timestrnull

要设置的访问时间(atime),格式由 access_time_format 指定。

access_time_formatstr%Y%m%d%H%M.%Saccess_time

 的时间格式,基于默认的 Python 格式(详见 time.strftime 文档)。

attributesstrnull

设置文件扩展属性(如 +i 只读、+a append-only)。

followbooltrue

如果 path 是符号链接,是否跟随到目标文件。

forceboolfalse

在两种情况下强制创建符号链接:源文件不存在(但稍后会出现);目标文件存在且为文件(因此,我们需要取消链接 path 文件并创建指向 src 文件的符号链接来代替它)。

groupstrnull

要设置的文件组。

modestrnull

要设置的权限模式,格式如 0644 或 u=rw,g=r,o=r

modification_timestrnull

文件的修改时间。可设为 preserve(保留原时间)、now(当前时间)或 YYYYMMDDHHMM.SS 格式。默认随 state 推断:touch 为 now,其他为 preserve

modification_time_formatstr%Y%m%d%H%M.%Smodification_time

 的时间格式,基于默认 Python 格式(参见 time.strftime 文档)。

ownerstrnull

要设置的文件所有者。

pathstrnull

要操作的文件或目录路径,别名 destname(必填)。

recurseboolfalse

是否递归设置目录及其子文件的权限、所有者等,仅用于目录。

selevelstrnull

SELinux 等级,通常用于细粒度 SELinux 策略控制。

serolestrnull

SELinux 角色。

setypestrnull

SELinux 类型。

seuserstrnull

SELinux 用户。

srcstrnull

当 state=link 或 state=hard 时,指定链接到的文件的路径。

statestrnull

目标状态,如 filedirectorylinkabsenttouchhard

unsafe_writesboolfalse

避免创建临时文件后再移动,直接修改原文件。用于某些特殊场景,可能会影响原子性。

针对 state 补充一下:

  • 如果设置为 absent,将递归删除目录,或取消链接文件和符号链接。对于目录,若启用了 diff,在结果中会显示被删除的文件和子目录,列于 path_contents 字段中。需要注意的是:如果指定的 path 不存在,此状态不会导致 ansible.builtin.file 任务失败,因为状态本身未发生变化。

  • 如果设置为 directory,则会创建指定目录及其所有不存在的中间父目录。从 Ansible 1.7 起,这些目录将使用指定的权限(如 mode)创建。

  • 如果设置为 file 且未指定其他参数,则该任务会返回 path 的当前状态而不会进行更改。如果指定了权限等参数(如 mode),且文件存在,则会修改该文件。但如果文件不存在,则不会自动创建文件。若希望在文件不存在时创建,可使用 touch 状态,或改用 ansible.builtin.copy 或 ansible.builtin.template 模块。

  • 如果设置为 hard,将创建或更新一个硬链接,指向由 src 指定的路径。

  • 如果设置为 link,将创建或更新一个符号链接(软链接),目标路径由 src 指定。

  • 如果设置为 touch(Ansible 1.4 引入),将模拟命令行中的 touch 行为:若文件不存在,则创建一个空文件;若文件或目录已存在,则更新其访问时间和修改时间。

  • 默认行为:如果文件已存在,默认使用该文件的当前类型。如果设置了 recurse: yes,默认状态为 directory;否则为 file

- name: Change file ownership, group and permissions
  ansible.builtin.file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    mode: '0644'

- name: Give insecure permissions to an existing file
  ansible.builtin.file:
    path: /work
    owner: root
    group: root
    mode: '1777'

- name: Create a symbolic link
  ansible.builtin.file:
    src: /file/to/link/to
    dest: /path/to/symlink
    owner: foo
    group: foo
    state: link

- name: Create two hard links
  ansible.builtin.file:
    src: '/tmp/{{ item.src }}'
    dest: '{{ item.dest }}'
    state: hard
  loop:
    - { src: x, dest: y }
    - { src: z, dest: k }

- name: Touch a file, using symbolic modes to set the permissions (equivalent to 0644)
  ansible.builtin.file:
    path: /etc/foo.conf
    state: touch
    mode: u=rw,g=r,o=r

- name: Touch the same file, but add/remove some permissions
  ansible.builtin.file:
    path: /etc/foo.conf
    state: touch
    mode: u+rw,g-wx,o-rwx

- name: Touch again the same file, but do not change times this makes the task idempotent
  ansible.builtin.file:
    path: /etc/foo.conf
    state: touch
    mode: u+rw,g-wx,o-rwx
    modification_time: preserve
    access_time: preserve

- name: Create a directory if it does not exist
  ansible.builtin.file:
    path: /etc/some_directory
    state: directory
    mode: '0755'

- name: Update modification and access time of given file
  ansible.builtin.file:
    path: /etc/some_file
    state: file
    modification_time: now
    access_time: now

- name: Set access time based on seconds from epoch value
  ansible.builtin.file:
    path: /etc/another_file
    state: file
    access_time: '{{ "%Y%m%d%H%M.%S" | strftime(stat_var.stat.atime) }}'

- name: Recursively change ownership of a directory
  ansible.builtin.file:
    path: /etc/foo
    state: directory
    recurse: yes
    owner: foo
    group: foo

- name: Remove file (delete file)
  ansible.builtin.file:
    path: /etc/foo.txt
    state: absent

- name: Recursively remove directory
  ansible.builtin.file:
    path: /etc/foo
    state: absent
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见火星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值