Ansible playbook允许用户使用自定义的变量,不过当变量过大,或者太复杂时,无论是在playbbok中通过vars定义,还是在单独的变量文件中定义,可读性都比较差,而且不够灵活。
有了lookup就可以解决这类难题,lookup既能够读取Ansible管理节点上文件系统的文件内容到Ansible变量中,也可以读取配置的数据库中的内容。
1. lookup读取ansible管理节点上的/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的用法。
2. lookup 生成随机的密码
password lookup会随机生成一个密码,并将这个密码写入到参数指定的文件中。如下示例,创建一个名为bob的mysql用户,并随机生成该用户的密码,并将密码写入到主控端的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
3. lookup读取环境变量
env类型的lookup可以读取Linux上的环境变量
---
- hosts: all
remote_user: root
tasks:
- debug: msg="{{ lookup('env','HOME')}} is $HOME result"
4. lookup读取Linux命令的执行结果
pipe类型的lookup可以将Linux上命令的执行结果读取到Ansible中:
---
- hosts: all
remote_user: root
tasks:
- debug: msg="{{ lookup('pipe','date')}} is the raw result of running this command"
运行结果:
5.lookup读取配置文件
lookup支持读取两种类型的配置文件:ini和Java的Properties
ini类型的lookup默认读取配置文件的类型是ini。
假设有ini类型的配置文件如下:
运行结果:
6.lookup读取CSV文件的指定单元
csvfile可以从.csv文件中读取一个条目。假设我们有如下示例的名为users.csv的文件:
username,emaillorin,lorin@test.comjohn,john@example.comsue,sue@exmaple.com
下面是一个使用csvfile lookkup提取sue的电子邮件地址的task示例:
- name: get sue's emaildebug: 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) |
7. lookup读取DNS解析的值
dig类型的lookup可以向DNS服务器查询指定域名的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 搭建高可用负载均衡集群)
参考资料:
Ansible快速入门, 技术原理与实战。
https://www.wumingx.com/linux/ansible-roles.html
希望此文对大家有所帮助,也希望大家持续关注转载。关注公众号获取相关资料请回复: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的课程视频,需要其他视频可以联系小编。