ansible 的 file lookup 插件用于在控制节点读取本地文件内容并返回字符串,支持相对或绝对路径,推荐显式写法 ansible.builtin.file;可配合 from_yaml、from_json 或 lines 等处理结构化数据或多行文本。

在 Ansible 中,lookup 插件可用于在 playbook 或模板中动态读取外部文件内容,最常用的是 file lookup 插件。它不执行远程操作,只在控制节点(即运行 ansible 的机器)上读取本地文件。
使用 file lookup 读取本地文件内容
file lookup 是默认启用的插件,无需额外安装。它会把整个文件内容作为字符串返回(不含换行符自动处理,原样返回,包括换行符)。
- 确保文件存在于 Ansible 控制节点的本地路径(不是被控端)
- 路径可以是绝对路径,也可以是相对于 playbook 所在目录的相对路径
- Ansible 2.5+ 推荐使用
ansible.builtin.file显式写法,兼容性更好
示例:在 playbook 中读取 ./secrets/api_key.txt
- name: Read API key from file
debug:
msg: "API key is {{ lookup('ansible.builtin.file', 'secrets/api_key.txt') }}"
在 vars 或 set_fact 中使用 lookup 赋值
你不能直接在 vars: 区块里用 {{ lookup(...) }}(Jinja2 表达式在 vars 解析阶段不可用),但可在 set_fact 中安全使用:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- name: Load config as variable
set_fact:
db_config: "{{ lookup('ansible.builtin.file', 'config/db.yaml') | from_yaml }}"
注意:
- from_yaml 过滤器可将 YAML 字符串解析为 Ansible 数据结构(如 dict/list)
- 若读取的是 JSON,可用 | from_json
读取多行文件并按行处理
若需把文件每行当作列表项,可用 lines lookup(底层调用 file + 拆分):
- name: Read allowed IPs line by line
set_fact:
allowed_ips: "{{ lookup('ansible.builtin.lines', 'files/whitelist.txt') }}"
这会返回一个列表,例如:["192.168.1.10", "10.0.0.5"],适合配合 loop 使用。
常见问题与注意事项
使用时需留意以下几点:
-
路径是控制机上的路径:不是目标主机,也不能用
~或环境变量(如$HOME),建议用相对路径或{{ playbook_dir }}/xxx -
文件必须存在且有读权限:否则任务失败;如需容错,可结合
default过滤器(但 lookup 本身不支持 default,需用lookup(..., errors='ignore')—— 仅部分 lookup 支持,file不支持;稳妥做法是先用stat模块检查) -
敏感内容慎用:避免把密钥明文写进 playbook 日志,可配合
no_log: true或改用ansible-vault管理加密文件 -
不支持通配符或目录遍历:
file只读单个文件;如需批量读取多个文件,请用with_fileglob(已弃用)或community.general.fileglob查找路径后循环 lookup










