目录
[示例4:获取文件的 MD5 校验和](#示例4:获取文件的 MD5 校验和)
[示例5:获取文件的 MIME 类型](#示例5:获取文件的 MIME 类型)
[示例6:获取文件的 SHA256 校验和](#示例6:获取文件的 SHA256 校验和)
[示例5:获取文件的 MD5 校验和](#示例5:获取文件的 MD5 校验和)
[示例6:获取文件的 MIME 类型](#示例6:获取文件的 MIME 类型)
[示例7:获取文件的 SHA256 校验和](#示例7:获取文件的 SHA256 校验和)
Ansible 的 stat
模块用于获取文件或目录的状态信息。在执行任务之前检查文件或目录是否存在、获取文件的属性(如权限、所有者、大小、修改时间等)、验证路径是文件还是目录等方面非常有用。它可以用于条件检查、错误处理、决策分支等。
参数总结
-
path
:- 描述:要获取状态信息的文件或目录的路径。
- 类型:字符串
- 必需:是
-
follow
:- 描述:如果为
yes
,则跟随符号链接。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
get_md5
:- 描述:如果为
yes
,则计算文件的 MD5 校验和(仅适用于文件)。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
checksum_algorithm
:- 描述:指定用于计算校验和的算法(如果
get_checksum
为yes
)。 - 可选值:
md5
、sha1
、sha256
- 类型:字符串
- 默认值:
sha1
- 描述:指定用于计算校验和的算法(如果
-
get_checksum
:- 描述:如果为
yes
,则计算文件的校验和(默认算法为sha1
)。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
checksum
:- 描述:指定要使用的校验和算法的别名(仅适用于
md5
和sha1
),等价于checksum_algorithm
。 - 类型:字符串
- 默认值:无
- 描述:指定要使用的校验和算法的别名(仅适用于
返回值
stat
模块返回的结果是一个字典,包含了指定文件或目录的状态信息。常见的返回值包括:
exists
:如果文件或目录存在,则为true
,否则为false
。isdir
:如果指定路径是目录,则为true
,否则为false
。isfile
:如果指定路径是文件,则为true
,否则为false
。uid
:文件或目录的所有者的用户 ID。gid
:文件或目录的所有者的组 ID。size
:文件大小(以字节为单位)。mtime
:文件或目录的修改时间(时间戳)。atime
:文件或目录的访问时间(时间戳)。ctime
:文件或目录的创建时间(时间戳)。inode
:文件或目录的 inode 号。device
:文件或目录所在的设备号。
基础语法
bash
ansible <hostname or group> -m stat -a "path=<file_or_directory_path> <additional_arguments>" [options]
常见的命令行示例
示例1:检查文件是否存在
bash
ansible all -m stat -a "path=/tmp/sample.txt" --become
上述命令会检查 /tmp/sample.txt
文件是否存在,--become
选项用于以特权执行。
示例2:获取文件详细信息
bash
ansible all -m stat -a "path=/tmp/sample.txt" -v
-v
选项用于启用详细输出,以显示文件的详细状态信息。
示例3:检查目录是否存在
bash
ansible all -m stat -a "path=/tmp/sample_dir" --become
此命令会检查 /tmp/sample_dir
目录是否存在。
示例4:获取文件的 MD5 校验和
bash
ansible all -m stat -a "path=/tmp/sample.txt get_md5=yes" --become
此命令会获取 /tmp/sample.txt
文件的 MD5 校验和。
示例5:获取文件的 MIME 类型
bash
ansible all -m stat -a "path=/tmp/sample.txt get_mime=yes" --become
此命令会获取 /tmp/sample.txt
文件的 MIME 类型信息。
高级使用
结合多个参数完成更复杂的操作:
示例6:获取文件的 SHA256 校验和
bash
ansible all -m stat -a "path=/tmp/sample.txt checksum_algorithm=sha256" --become
此命令会获取 /tmp/sample.txt
文件的 SHA256 校验和。
带环境变量和特权操作
示例7:使用用户特权并设置环境变量
bash
ansible all -m stat -a "path=/tmp/sample.txt" --become --extra-vars "ansible_user=your_user ansible_password=your_password"
Playbook示例
示例1:检查文件是否存在
---
- name: Check if a file exists
hosts: all
tasks:
- name: Check file existence
stat:
path: /tmp/sample.txt
register: file_stat
- name: Display file existence
debug:
msg: "File exists: {{ file_stat.stat.exists }}"
示例2:检查目录是否存在
---
- name: Check if a directory exists
hosts: all
tasks:
- name: Check directory existence
stat:
path: /tmp/sample_dir
register: dir_stat
- name: Display directory existence
debug:
msg: "Directory exists: {{ dir_stat.stat.isdir }}"
示例3:获取文件详细信息
---
- name: Get file detailed information
hosts: all
tasks:
- name: Get file status
stat:
path: /tmp/sample.txt
register: file_stat
- name: Display file details
debug:
var: file_stat.stat
示例4:条件任务执行
根据文件的存在性执行条件任务:
---
- name: Conditional tasks based on file existence
hosts: all
tasks:
- name: Check if a file exists
stat:
path: /tmp/sample.txt
register: file_stat
- name: Create file if not exists
file:
path: /tmp/sample.txt
state: touch
when: not file_stat.stat.exists
示例5:获取文件的 MD5 校验和
---
- name: Get file MD5 checksum
hosts: all
tasks:
- name: Check file status with MD5
stat:
path: /tmp/sample.txt
get_md5: yes
register: file_stat
- name: Display MD5 checksum
debug:
msg: "File MD5 checksum: {{ file_stat.stat.md5 }}"
示例6:获取文件的 MIME 类型
---
- name: Get file MIME type
hosts: all
tasks:
- name: Get file status with MIME type
stat:
path: /tmp/sample.txt
get_mime: yes
register: file_stat
- name: Display MIME type
debug:
msg: "File MIME type: {{ file_stat.stat.mime_type }}"
示例7:获取文件的 SHA256 校验和
---
- name: Get file SHA256 checksum
hosts: all
tasks:
- name: Check file status with SHA256 checksum
stat:
path: /tmp/sample.txt
checksum_algorithm: sha256
register: file_stat
- name: Display SHA256 checksum
debug:
msg: "File SHA256 checksum: {{ file_stat.stat.checksum }}"
综合示例
结合多个参数和任务的示例:
---
- name: Comprehensive example of stat usage
hosts: all
tasks:
- name: Check if a file exists and get details
stat:
path: /tmp/sample.txt
get_md5: yes
get_mime: yes
checksum_algorithm: sha256
register: file_stat
- name: Display file details
debug:
var: file_stat.stat
- name: Create file if not exists
file:
path: /tmp/sample.txt
state: touch
when: not file_stat.stat.exists
- name: Display MD5 checksum if file exists
debug:
msg: "File MD5 checksum: {{ file_stat.stat.md5 }}"
when: file_stat.stat.exists
- name: Display MIME type if file exists
debug:
msg: "File MIME type: {{ file_stat.stat.mime_type }}"
when: file_stat.stat.exists
- name: Display SHA256 checksum if file exists
debug:
msg: "File SHA256 checksum: {{ file_stat.stat.checksum }}"
when: file_stat.stat.exists