Ansible检查文件是否存在的方法介绍
Ansible 是一种基础设施即代码工具,它允许单个控制节点监视和管理大量远程主机(服务器)。
Ansible 使用 playbook 定义远程主机要执行的各种任务,包括检查文件和文件夹是否存在。
本教程介绍如何使用 Ansible 中的模块stat
检查远程主机上是否存在文件和文件夹,包括相关的Ansible检查文件是否存在示例。
先决条件
- 访问命令行/终端窗口
- 安装和配置 Ansible(请参阅我们的在 Windows上安装 Ansible和在 Ubuntu上安装 Ansible的指南)
在 Ansible 中检查文件是否存在
Ansible如何检查文件是否存在?使用 Ansible 检查文件是否存在的最简单方法是使用stat
模块。
该stat
模块的目的是检索有关文件和文件夹的事实并将它们记录在寄存器中。stat 模块使用以下语法:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
...
其中:
stat:
声明我们正在使用 stat 模块。path:
声明我们要检查的文件或文件夹的路径。register:
提供 stat 模块保存文件和文件夹详细信息的寄存器的名称。
Ansible检查文件是否存在的方法:register中记录的值之一是exists
。将此值与debug
模块相结合,你可以显示一条消息,详细说明文件或文件夹是否存在:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists
1. 在示例Playbook中,第一个任务(检查文件是否存在)使用该stat
模块检索有关test.txt
位于远程主机上/home/example_folder 中的文件的事实。它将这些事实记录在一个名为 的寄存器中file_data
。
2. 第二个任务(如果文件存在则报告)使用该debug
模块显示一条消息。它检查file_data
寄存器并使用该exists
值作为显示消息的条件。如果exists
值为true,则模块显示消息“文件或目录存在”。
3. 第三个任务(报告丢失的文件)执行相同的操作,但如果值为false则显示消息“文件或目录不存在”。exist
运行 playbook 提供以下输出:
输出告诉我们该文件实际上不存在。
Ansible检查文件是否存在示例:如果你还想检查有问题的文件是否是常规文件而不是文件夹,请将isreg
值添加到debug
模块条件中:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isreg
注意:市场上有许多基础设施即代码 (IaC) 工具。Ansible、Terraform、Puppet和Pulumi都是流行的 IaC 工具。
检查 Ansible 中是否存在目录
使用 Ansible 检查目录是否存在与检查文件是否存在完全相同。唯一的区别是你使用该isdir
值来确认指定目录的路径:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isdir
根据文件和文件夹是否存在运行 Ansible 任务
Ansible如何检查文件是否存在?有时你想根据某些文件或文件夹是否存在来运行或跳过Playbook中的任务。
例如,如果你有一个旨在在每个远程主机上创建文件的Playbook,你希望跳过文件已经存在的那些主机以避免创建重复项。
Ansible检查文件是否存在的方法:为此,请使用stat
模块检索到的文件详细信息和when
参数来为运行任务创建条件:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
- name: Task name 2
file:
path: [path to the file you want to create]
state: touch
when: not register_name.stat.exists
...
1. 在上面的Ansible检查文件是否存在示例中,第一个任务(检查文件是否存在)使用该stat
模块来检索test.txt
位于远程主机上example_folder中的文件的详细信息。
2. 第二个任务(如果文件不存在则创建一个文件)首先检查exists
寄存器中的值。如果值为true,则跳过任务并结束Playbook。如果值为false,则执行任务并创建一个名为test.txt
.
结论
遵循本教程后,你应该具备使用 Ansiblestat
模块的工作知识。你可以使用此模块检索到的信息来检查文件和文件夹是否存在,甚至可以决定是执行还是跳过任务。