ansible9:lookup插件

lookup插件

  循环章节简单提了一嘴lookup插件实现循环,但那不代表lookup插件只能实现循环,lookup类型的插件的主要作用是访问外部的数据源,比如,获取到外部数据并赋值给某个变量,以便后续调用。lookup插件的操作都是在ansible主机中进行的,与目标主机没有关系。

简单说明

  1. 查看lookup插件。

      0 15:57:43 root@ck-ansible,172.16.2.9:/server/ops_ansible # ansible-doc -t lookup -l
    ## -t:指定插件类型。
    ## -l:列出插件列表。
    
  2. 指定查询某个插件的用法。

      0 15:59:53 root@ck-ansible,172.16.2.9:/server/ops_ansible # ansible-doc -t lookup dict
    

常用插件

  1. 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
    
  2. 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') }}"
    
  3. 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) }}"
    
  4. 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') }}"
    
  5. 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) }}"
    
  6. 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') }}"
    


写作不易,转载请注明出处,谢谢~~

posted @ 2021-11-04 16:04  merlee  阅读(335)  评论(0编辑  收藏  举报