专栏首页洁癖是一只狗自动化运维 | Ansible lookup

自动化运维 | Ansible lookup

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

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

lookup使用案例

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。说明如下:

  • 第一个参数指定一个名字,该名字必须出现在其所在行的第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记录,包括正向查询和反向查询。

- 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的课程视频,需要其他视频可以联系小编。

本文分享自微信公众号 - 洁癖是一只狗(rookie-dog),作者:小土豆Yuki

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux常用命令(一)

    cat /proc/cpuinfo 显示CPU信息 ( 截图只截取了部分命令输出结果)

    小土豆Yuki
  • Mysql为什么会抖一下呢

    在之前我们说过酒店记账的故事,其中酒店掌柜记账的的黑板就类似我们的redo log,而掌柜的记账本就是数据文件,掌柜的记忆就是内存。

    小土豆Yuki
  • 并发编程原子性问题

    原子性的问题是因为线程切换,如果能够禁用线程那不就可以解决问题了吗,而操作系统做线程切换是依赖CPU中断,所以禁止CPU发生中断就可以禁止线程切换

    小土豆Yuki
  • Redis集群实现分布式锁的正确方式

    上文我们介绍的 Redis实现分布式锁的正确方式 是 redis 单机的方式,所以本篇要基于 redis 集群做分布式锁,我们使用 Redisson

    胖虎
  • 打卡群刷题总结0920——打家劫舍 II

    链接:https://leetcode-cn.com/problems/house-robber-ii

    木又AI帮
  • MyBatis学习总结(一)——ORM概要与MyBatis快速入门

    程序员应该将核心关注点放在业务上,而不应该将时间过多的浪费在CRUD中,多数的ORM框架都把增加、修改与删除做得非常不错了,然后数据库中查询无疑是使用频次最高、...

    张果
  • 微软已确认收购 GitHub!网友们这样说……

    GitHub 倾向于将公司出售给上市公司,之所以选择微软,是因为对其 CEO Satya Nadella 印象深刻。去年 8 月份,GitHub 的联合创始人兼...

    华章科技
  • 物体计数--Learning To Count Objects in Images

    Learning To Count Objects in Images NIPS 2010 http://www.robots.ox.ac.uk/~v...

    用户1148525
  • UNSAFE和Java 内存布局

    在看CAS中经常会遇到unsafe.compareAndSwapInt(this, stateOffset, expect, update);很久很久以前看着就...

    一滴水的眼泪
  • 马斯克又给特斯拉自动驾驶涨价了!还给车主讲了难以拒绝的理由

    2019年就已经两连涨, 2019年5月,FSD价格自5000美元升至6000美元。

    量子位

扫码关注云+社区

领取腾讯云代金券