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用法。 -
生成随机密码
passwordlookup可以生成随机密码,并将密码写入指定的文件中。以下示例展示了如何为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"运行结果:

-
读取配置文件
乐彼多用户商城系统LBMall(.net)下载乐彼多用户商城系统,采用ASP.NET分层技术和AJAX技术,运营于高速稳定的微软.NET+MSSQL 2005平台;完全具备搭建超大型网络购物多用户网上商城的整体技术框架和应用层次LBMall 秉承乐彼软件优秀品质,后台人性化设计,管理窗口识别客户端分辨率自动调整,独立配置的菜单操作锁,使管理操作简单便捷。待办事项1、新订单、支付、付款、短信提醒2、每5分钟自动读取3、新事项声音提醒 店铺管理1
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。参数说明如下:- 第一个参数指定一个名字,该名字必须出现在其所在行的第0列。如果名字在文件中多次出现,则匹配第一次出现的结果。
- 第二个参数指定csv文件的文件名。
- 第三个参数指定csv文件中条目的分隔符。
- 第四个参数指定要取得哪一列的值,这一列正是第一个参数所在行的那一列的值。
参数 默认值 描述 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') }}"
今天我们先介绍到这里,未完待续!
往期精选
- 手把手教你搭建MySQL主从经典架构搭建Amoeba实现MySQL主从数据库读写分离
- 高可用篇之Keepalived (HAProxy+keepalived 搭建高可用负载均衡集群)
- HAProxy负载均衡器用法详解
- Linux 集群总结 + LVS(负载均衡器)原理及配置
- Nginx可以做什么?看完这篇你就懂了!
参考资料:
- Ansible快速入门, 技术原理与实战。
- https://www.php.cn/link/29c4f178686891b4988c32f722acec62
希望此文对大家有所帮助,也希望大家持续关注转载。关注公众号获取相关资料请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的课程视频,需要其他视频可以联系小编。









