前言
在这篇《Ansible Playbook中的变量与引用》这篇文章中,总结了变量的定义,但是在实际工作中,当定义的变量很多的时候,或者很复杂的时候,不管是哪种方式都不好管理,也不够灵活。好了,有了这些问题,我们就来看看这篇文章讲到的这个lookup
。
借助lookup
插件,我们可以从外部数据拉取信息,比如数据库读取信息、配置文件读取信息等等,接下来就总结一下lookup
插件的各种使用。
读取外部文件数据
Ansible可以通过file方式,将文件数据读取出来赋值给变量。现在有这样的一个文件,内容如下:
{
"website":"www.jellythink.com",
"author":"Yanggd"
}
我们现在通过lookup
的方式读取这个文件的内容:
---
- hosts: '192.168.5.3'
gather_facts: False
vars:
contents: "{{lookup('file', '/home/yanggd/ansible/yaml/vars/vars.json')}}"
tasks:
- name: lookup file
debug: msg="website is {{contents.website}}; author is {{contents.author}}"
这种通过lookup
的方式和vars_files
的方式很类似,并没有体现出lookup
方式的优势,请各位继续看,下面的方式就比较好用了。
读取Redis缓存数据
通过redis_kv
从Redis数据库中获取数据,我们先要安装python-redis
库。
---
- hosts: '192.168.5.3'
gather_facts: False
vars:
redisValue: "{{lookup('redis_kv', 'redis://127.0.0.1:6379, website')}}"
tasks:
- name: redis_kv
debug: msg="{{redisValue}}"
读取环境变量数据
env
类型的lookup可以读取Linux上的环境变量:
---
- hosts: '192.168.5.3'
gather_facts: False
vars:
pathValue: "{{lookup('env', 'PATH')}}"
tasks:
- name: pipe
debug: msg="{{pathValue}}"
上面代码将读取环境变量中的PATH
的值,并赋值给pathValue变量。
读取Linux命令执行结果数据
pipe
类型的lookup可以将Linux上命令的执行结果读取到Ansible中:
---
- hosts: '192.168.5.3'
gather_facts: False
vars:
pipeValue: "{{lookup('pipe', 'date')}}"
tasks:
- name: pipe
debug: msg="{{pipeValue}}"
上面代码将date
命令的执行结果赋值给pipeValue变量。
读取配置文件数据
lookup可以读取ini和Java properties两种类型的配置文件。现在有config.ini和config.properties两个配置文件。
config.ini内容:
[info]
website=www.jellythink.com
author=Yanggd
config.properties内容:info.website=www.jellythink.com
info.author=Yanggd
先看看怎么读取ini配置文件:
---
- hosts: '192.168.5.3'
gather_facts: False
vars:
iniValue: "{{lookup('ini', 'website section=info file=/home/yanggd/ansible/yaml/vars/info.ini')}}"
tasks:
- name: ini
debug: msg="{{iniValue}}"
在看看怎么读取properties配置文件:
---
- hosts: '192.168.5.3'
gather_facts: False
vars:
propertiesValue: "{{lookup('ini', 'info.website type=properties file=/home/yanggd/ansible/yaml/vars/info.properties')}}"
tasks:
- name: ini
debug: msg="{{propertiesValue}}"
读取properties时,需要说明type为properties。
总结
上面总结那么多关于lookup插件的内容,这些读取数据的方式在我们今后的工作中会经常用到的,建议把上面的代码在自己的测试环境都实现一遍,让自己更熟悉。
人生是个圆,有的人走了一辈子也没有走出命运画出的圆圈,其实,圆上的每一个点都有一条腾飞的切线。
玩代码、玩技术
长按识别二维码,关注“果冻想”
如果觉得还不错,可以点个“在看”哦~