ansible playbook提供了使用自定义变量的功能,但当变量内容庞大或复杂时,无论是在playbook中通过vars定义,还是在单独的变量文件中定义,都会导致可读性降低,且不够灵活。
利用lookup可以解决这些问题,lookup不仅能从Ansible管理节点上的文件系统读取文件内容到变量中,还可以从配置的数据库中读取内容。
lookup使用案例
读取Ansible管理节点上的文件内容
通过lookup可以读取管理节点上的/root/testfile文件内容,并将其赋值给contents变量。
- hosts: all
remote_user: root
tasks:
- vars:
contents: "{{ lookup('file','/root/testfile') }}"
tasks:
- debug:
msg: "the content of file /root/testfile is {{ contents }}"运行结果:


上述示例中,contents: "{{ lookup('file','/root/testfile') }}"使用了file类型的lookup,这是最简单的lookup用法。
生成随机密码
password lookup可以生成随机密码,并将密码写入指定的文件中。以下示例展示了如何为MySQL用户bob创建随机密码,并将密码写入管理节点的bob-password.txt文件中:
- hosts: all
remote_user: root
tasks:
- name: create deploy mysql user
mysql_user:
name: bob
password: "{{ lookup('password', 'bob-password.txt') }}"
priv: '*.*:ALL'
state: present读取环境变量
env类型的lookup可以读取Linux系统上的环境变量。
- hosts: all
remote_user: root
tasks:
- debug:
msg: "{{ lookup('env','HOME') }} is $HOME result"
读取Linux命令的执行结果
pipe类型的lookup可以将Linux命令的执行结果读取到Ansible中:
- hosts: all
remote_user: root
tasks:
- debug:
msg: "{{ lookup('pipe','date') }} is the raw result of running this command"运行结果:

读取配置文件
lookup支持读取两种类型的配置文件:ini和Java的Properties。默认情况下,ini类型的lookup读取配置文件。
假设有以下ini类型的配置文件:

运行结果:

读取CSV文件的指定单元
csvfile可以从.csv文件中读取特定条目。假设我们有一个名为users.csv的文件:
username,email lorin,lorin@test.com john,john@example.com sue,sue@exmaple.com
以下是提取sue的电子邮件地址的示例:
- name: get sue's email
debug:
msg: "{{ lookup('csvfile', 'sue file=users.csv delimiter=, col=1') }}"向插件传递了四个参数:sue, file=users.csv, delimiter=, col=1。参数说明如下:
| 参数 | 默认值 | 描述 |
|---|---|---|
| file | ansible.csv | 要加载的文件名称 |
| col | 1 | 要输出的列,索引从0开始 |
| delimiter | TAB | 文件的分隔符 |
| default | empty string | 如果key不在csv文件中,则为默认返回值 |
| encoding | utf-8 | 使用的CSV文件的编码(字符集)(added in version 2.1) |
读取DNS解析的值
dig类型的lookup可以向DNS服务器查询指定域名的DNS记录,包括正向查询和反向查询。
- debug:
msg: "The IPv4 address for example.com. is {{ lookup('dig', 'example.com.') }}"
- debug:
msg: "The TXT record for example.org. is {{ lookup('dig', 'example.org.', 'qtype=TXT') }}"
- debug:
msg: "The TXT record for example.org. is {{ lookup('dig', 'example.org./TXT') }}"今天我们先介绍到这里,未完待续!
往期精选
参考资料:
希望此文对大家有所帮助,也希望大家持续关注转载。关注公众号获取相关资料请typescript,springcloud,springboot,nodejs,nginx,mq,javaweb,java并发实战,java并发高级进阶,实战java并发,极客时间dubbo,kafka,java面试题,ES,zookeeper,java入门到精通,区块链,java优质视频,大数据,kotlin,瞬间之美,HTML与CSS,深入体验java开发,web开发CSS系列,javaweb开发详解,springmvc,java并发编程,spring源码,python,go,redis,docker,即获取相关资料。回复001,获取价值1w的课程视频,需要其他视频可以联系小编。
以上就是自动化运维 | Ansible lookup的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号