lookup插件
循环章节简单提了一嘴lookup插件实现循环,但那不代表lookup插件只能实现循环,lookup类型的插件的主要作用是访问外部的数据源,比如,获取到外部数据并赋值给某个变量,以便后续调用。lookup插件的操作都是在ansible主机中进行的,与目标主机没有关系。
简单说明
-
查看lookup插件。
0 15:57:43 root@ck-ansible,172.16.2.9:/server/ops_ansible # ansible-doc -t lookup -l ## -t:指定插件类型。 ## -l:列出插件列表。
-
指定查询某个插件的用法。
0 15:59:53 root@ck-ansible,172.16.2.9:/server/ops_ansible # ansible-doc -t lookup dict
常用插件
-
file:获取指定文件的文件内容(需要在ansible控制机使用)。
# 举例1: 0 16:13:14 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test1.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('file','/root/file1') }}" # 举例2: 获取多个文件内容,添加多个文件即可。 0 16:13:15 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test2.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('file','/root/file1','/root/file2','/root/file3') }}" # 举例3:根据举例2的结果可以发现,ansible默认会将多个文件的内容放在一个字符串里返回,如果想要返回的是一列表则需要借助wantlist参数 0 16:11:23 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test2.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('file','/root/file1','/root/file2','/root/file3',wantlist=true) }}" 0 16:11:24 root@ck-ansible,172.16.2.9:/server/ops_ansible # ansible-playbook test2.yaml # 举例4:在ansible 2.5的版本中引入一个叫“query”的jinja2函数,该函数也可以调用lookup插件,通过该函数调用lookup插件时,默认会返回一个列表,也就是说下面这种写法与举例3作用是一样的。 0 16:17:07 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test4.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ q('file','/root/file1','/root/file2','/root/file3',errors='ignore') }}" # query可以简写为q
-
env:获取ansible主机中指定变量的值(需要在ansible控制机使用)。
0 16:22:00 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test5.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('env','PATH') }}"
-
first_found:获取列表中第一个找到的文件(需要在ansible控制机使用)。
0 16:25:26 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test6.yaml --- - hosts: ck-node1 tasks: - vars: testlist: - /root/file1 - /root/file2 - /root/file3 - skip: true # 表示如果列表中的所有文件都没有找到,则跳过当前任务,不报错。 debug: msg: "{{ lookup('first_found',testlist) }}"
-
ini:查找ini文件中对应key的值(需要在ansible控制机使用)。
0 16:31:21 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test.ini [A] A1=aaa A2=bbb [B] B1=111 0 16:31:23 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test7.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('ini','A2 section=A file=/server/ops_ansible/test.ini') }}"
-
dig:获取指定域名的IP地址(需要在ansible控制机使用)。
# 此插件依赖dnspython库。 0 16:38:37 root@ck-ansible,172.16.2.9:/server/ops_ansible # pip install dnspython 0 16:38:55 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test8.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('dig','www.baidu.com',wantlist=true) }}"
-
password:生成随机密码并保存在指定文件中(需要在ansible控制机使用)。
0 16:43:41 root@ck-ansible,172.16.2.9:/server/ops_ansible # cat test9.yaml --- - hosts: ck-node1 tasks: - debug: msg: "{{ lookup('password','/root/testpwd') }}"
写作不易,转载请注明出处,谢谢~~