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ù)。