lookup - template
lookup 是很方便的查詢函式,第一個參數是 ’template’ 的時候,可以把範本檔案放到第二個參數,然後 lookup 會把範本內容替換變數以後,再傳回字串。
一樣,舉個例子會比較容易理解。
現在有一個範本檔案:index.html.j2
<h1>Greeting</h1>
<p>Hello! {{ name }}</p>
<p>The date is {{ ansible_date_time.iso8601 }}</p>
<p>Hostname: {{ ansible_hostname }} {{ inventory_hostname }}</p>
然後撰寫 playbook 如下
# 檔名:test-lookup-template.yml
---
- name: lookup - template 的範例
hosts: all
tasks:
- name: 使用 lookup('template') 來處理範本檔案
vars:
name: John Doe
debug:
msg: "{{ lookup('template', 'index.html.j2') }}"
然後試著執行看看
ansible-playbook -i localhost, -c local test-lookup-template.yml
執行結果如下
PLAY [lookup - template 的範例] *************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [localhost]
TASK [使用 lookup('template') 來處理範本檔案] *****************************************************
ok: [localhost] => {
"msg": "<h1>Greeting</h1>\n<p>Hello! John Doe</p>\n<p>The date is 2021-03-08T21:54:49Z</p>\n<p>Hostname: my-demo-host localhost</p>\n"
}
PLAY RECAP *******************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
看看 msg ,你可以看到範本裡的變數 {{ name }}、{{ ansible_date_time.iso8601 }}、{{ ansible_hostname }}、{{ inventory_hostname }} 都已經替換掉。
- name 被替換為指定的 John Doe
- ansible_date_time.iso8601 被替換為 iso8601 格式的日期時間
- ansible_hostname 被替換為主機名稱,因為是連線到本機,這邊會看到本機的主機名稱。
- inventory_hostname 被替換為 inventory 裡所指定的主機名稱,指令裡是用
-i localhost,
,所以這邊會看到 localhost
lookup(’template’) 的作用跟 template
模組是一樣的,主要差別在於 lookup(’template’) 是處理過後,放到變數傳回來;而 template 模組是輸出到檔案。