ansible.builtin.stat
可以查看文件信息。
选项 | 类型 | 默认值 | 描述 |
path | str | null | 要检查的文件或目录的完整路径(必需)。 |
follow | bool | false | 如果是符号链接,是否跟随到目标路径上获取其状态。 |
get_attributes | bool | true | 是否返回扩展属性(如 SELinux 上的安全上下文、ACL 等),仅在底层文件系统支持时生效。 |
get_checksum | bool | true | 是否计算并返回文件的校验和。 |
checksum_algorithm | str | sha1 | 指定用于计算校验和的算法,如 |
get_mime | bool | true | 是否检测并返回文件的 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_time | str | null | 要设置的访问时间( |
access_time_format | str | %Y%m%d%H%M.%S | access_time 的时间格式,基于默认的 Python 格式(详见 |
attributes | str | null | 设置文件扩展属性(如 |
follow | bool | true | 如果 |
force | bool | false | 在两种情况下强制创建符号链接:源文件不存在(但稍后会出现);目标文件存在且为文件(因此,我们需要取消链接 |
group | str | null | 要设置的文件组。 |
mode | str | null | 要设置的权限模式,格式如 |
modification_time | str | null | 文件的修改时间。可设为 |
modification_time_format | str | %Y%m%d%H%M.%S | modification_time 的时间格式,基于默认 Python 格式(参见 time.strftime 文档)。 |
owner | str | null | 要设置的文件所有者。 |
path | str | null | 要操作的文件或目录路径,别名 |
recurse | bool | false | 是否递归设置目录及其子文件的权限、所有者等,仅用于目录。 |
selevel | str | null | SELinux 等级,通常用于细粒度 SELinux 策略控制。 |
serole | str | null | SELinux 角色。 |
setype | str | null | SELinux 类型。 |
seuser | str | null | SELinux 用户。 |
src | str | null | 当 |
state | str | null | 目标状态,如 |
unsafe_writes | bool | false | 避免创建临时文件后再移动,直接修改原文件。用于某些特殊场景,可能会影响原子性。 |
针对 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