Ansible playbook lookup

Ansible 有很多方式可以定義變量,如下幾種:
1、通過 Inventory 文件定義 
2、通過 /etc/ansible 下的文件定義主機以及組變量 
3、通過 ansible-playbook 命令行傳入 
4、通過在 playbook 文件內(nèi)使用 vars 
5、通過在 playbook 文件內(nèi)使用 vars_files 
6、使用 register 傳遞變量 
7、通過 vars_prompt 交互式傳入

但是這些變量都是靜態(tài)的,Ansible 還支持從外部數(shù)據(jù)拉取信息,比如我們可以從數(shù)據(jù)庫里讀取信息然后定義給一個變量的形式,這就是 Ansible 的 lookups 插件。

lookup file

file 是比較常用的一種 lookups 方式,它的原理就是使用 python 的 codecs.open 打開文件然后把結(jié)果返回給變量。
下面 playbook 通過讀取客戶端 /etc/sysconfig/network 文件的內(nèi)容,接著再打印出來:
格式:"{{ lookup('file','path') }}"
---
- hosts: 10.1.0.51
  gather_facts: False
  vars:
      value: "{{ lookup('file','/etc/sysconfig/network') }}" 【引用變量的形式{{ 調(diào)用lookup file }}】
  tasks:
      - name: display variable value
        debug: msg="value is {% for i in value.split("\n")%} {{ i }} {% endfor %}" 【調(diào)用dbug模塊,打印信息】

lookup password

password 也是常用的一種 lookups 方式,它會對傳入的內(nèi)容進行加密處理。下面 playbook 通過在 playbook 中定義的字符串進行
加密,然后再進行輸出,并且在當前目錄下保存一份密碼文件:
格式:"{{ lookup('password','密碼文件') }}"
---
- hosts: 10.1.0.51
  gather_facts: False
  vars:
      password: "{{ lookup('password','pAssW0rd') }}"  
  tasks:
      - name: display password
        debug: msg="password is {{ password }}"
【在當前腳本目錄對密碼pAssW0rd加密,并生成一個文件名稱為:pAssW0rd,該文件保存加密后的密文】

lookup pipe

pipe lookups 其實就是在控制機器上調(diào)用 subprocess.Popen 執(zhí)行命令,然后將獲取到的結(jié)果傳遞給變量,最后進行打?。?#!/usr/bin/ansible-playbook
---
- name: lookup_pipe
  hosts: local
  remote_user: root
  gather_facts: False
  vars:
    value: "{{ lookup('pipe','date +%F') }}"  【將`date +$F`命令的輸出結(jié)果打印】
  
  tasks:
    - name: lookup_pipe test
      debug: msg="value is {{ value }}"

lookup template

template 與 file 方式有點類似,都是讀取文件,但是 template 在讀取文件之前需要把 jinja 模板渲染完之后再進行讀取,當然,
gather_facts 參數(shù)需要設(shè)置為 True,不然無法獲取到主機的信息。

template 調(diào)用當前目錄下的 template.j2 文件并且進行渲染取值,再進行輸出,下面通過指定一個 jinja 模板文件:
template.j2 模板文件:
worker_processes {{ ansible_processor_cores }};
IPaddress {{ ansible_eth0.ipv4.address }};

---
- hosts: local
  remote_user: root
  gather_facts: True
  vars:
      value: "{{ lookup('template','./template.j2') }}"
  tasks:
      - name: display template.j2
        debug: msg="value is  {% for i in value.split("\n") %} {{ i }} {% endfor %}"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容