Ansible lookup插件使用总结

前言

在这篇《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插件的内容,这些读取数据的方式在我们今后的工作中会经常用到的,建议把上面的代码在自己的测试环境都实现一遍,让自己更熟悉。


人生是个圆,有的人走了一辈子也没有走出命运画出的圆圈,其实,圆上的每一个点都有一条腾飞的切线。

f016f6b272dbaa5401f9daadc9ed013b.jpeg

玩代码、玩技术

长按识别二维码,关注“果冻想”

如果觉得还不错,可以点个“在看”哦~

posted @ 2020-10-29 08:23  ^_^果冻^_^  阅读(7)  评论(0编辑  收藏  举报  来源