前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动化运维 | Ansible lookup

自动化运维 | Ansible lookup

作者头像
小土豆Yuki
发布2020-08-28 18:07:01
3.6K0
发布2020-08-28 18:07:01
举报
文章被收录于专栏:洁癖是一只狗

Ansible playbook允许用户使用自定义的变量,不过当变量过大,或者太复杂时,无论是在playbbok中通过vars定义,还是在单独的变量文件中定义,可读性都比较差,而且不够灵活。

有了lookup就可以解决这类难题,lookup既能够读取Ansible管理节点上文件系统的文件内容到Ansible变量中,也可以读取配置的数据库中的内容。

lookup使用案例

1. lookup读取ansible管理节点上的/root/testfile文件的内容, 并将其内容赋值给contents变量。

代码语言:javascript
复制
---
- 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中:

代码语言:javascript
复制
---
- 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上的环境变量

代码语言:javascript
复制
---
- hosts: all
  remote_user: root
  tasks:
     - debug: msg="{{ lookup('env','HOME')}} is $HOME result"

4. lookup读取Linux命令的执行结果

pipe类型的lookup可以将Linux上命令的执行结果读取到Ansible中:

代码语言:javascript
复制
---
- 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的文件:

代码语言:javascript
复制
username,emaillorin,lorin@test.comjohn,john@example.comsue,sue@exmaple.com

下面是一个使用csvfile lookkup提取sue的电子邮件地址的task示例:

代码语言:javascript
复制
- name: get sue's emaildebug: 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)

7. lookup读取DNS解析的值

dig类型的lookup可以向DNS服务器查询指定域名的DNS记录。它可以查询任何DNS记录,包括正向查询和反向查询。

代码语言:javascript
复制
- 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.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的课程视频,需要其他视频可以联系小编。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洁癖是一只狗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • lookup使用案例
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档