ansible將jinja2模板系統用於模板檔案。ansible允許jinja2模板中使用if條件判斷和for迴圈,但是不允許在playbook中使用
1.}輸出變數值,會輸出自定義的變數值或facts
2.playbook檔案使用template模組
3.模板檔案裡面變數使用},比如}或使用facts
4.用於表示式或邏輯(如迴圈)
5.使用為注釋不會出現在最終檔案中。
}
1.編輯playbook
--
-- hosts: all,localhost
tasks:
- name: 複製檔案
template:
src: files/io.j2
dest:
/etc/hosts
2.準備io.j2模板
}}
結果如下:
[root@localhost ~
]# cat /etc/hosts
192.168
.10.129 localhost
[root@ansible jay]# cat /etc/hosts
192.168
.10.184 ansible
ps:包含jinja2模板的檔案不需要有任何特定的副檔名(如.j2)。但是,提供此類副檔名會讓你更容易記住它是模板檔案。
為避免系統管理員修改ansible部署的檔案,最好在模板頂部包含注釋,以指示不應手動編輯該檔案。
可使用ansible_managed指令中設定的"ansible managed"字串來執行此操作,ansible_managed指令在ansible.cfg檔案中設定:
ansible_managed = 這個模板由ansible管理請勿更改
效果如下:
}}
}
[root@localhost ~
]# cat /etc/hosts
192.168
.10.129 localhost
這個模板由ansible管理請勿更改
jinja2使用for語句來提供迴圈功能。
基本語法:
}
--
-- hosts: all
vars:
users:
- kennys
- s1mlpe
- magisk
tasks:
- name: get user
template:
src: files/io.j2
dest:
/etc/opt/user_test
2.準備模板檔案io.j2:
}-
}
3.受控機上檢視結果:
[root@localhost opt]# cat user_test
1- kennys
2- s1mlpe
3- magisk
jinja2使用if語句來提供條件控制。如果滿足某些條件,這允許使用者在已部署的檔案中放置一行。
基本語法:
}
例如:
1.編寫playbook:
--
-- hosts: all
tasks:
- name:
if template:
src: files/io.j2
dest:
/etc/opt/
if
2.準備模板檔案io.j2:
}
3.受控機上檢視結果:
[root@localhost opt]# cat if
192.168
.10.129
jinja2提供了過濾器,更改模板表示式的輸出格式(例如,輸出到果json)。有適用於yaml和json等語言的過濾器。to_json過濾器使用json格式化表示式輸出,to_yaml過濾器則使用yaml格式化表示式輸出。
基本語法:
}}
to_nice_json和to_nice_yaml過濾器,它們將表示式輸出格式化為json或yaml等人類可讀格式。
}}
from_json和from_yaml過濾器相應要求json或yaml格式的字串,並對它們進行解析。
}}
ansible基礎 Jinja2模版 測試
注 本文demo使用ansible2.7穩定版 jinja2的測試語句被用來評估乙個條件表示式,並且最終返回true或false,經常和 when 語句搭配使用。測試語句和過濾器的相同點 測試語句的條件表示式也在控制端執行,在目的主機端生效。測試語句和過濾器的不同點 測試語句的語法很簡單,寫法如下 ...
Flask中使用的jinja2模組語法
一 模組語法主要分為兩種 模組中的變數 檢視傳遞給模組的資料 前面定義出來的資料 變數不存在,預設忽略 模組中的標籤 控制邏輯 使用外部表示式 建立變數 巨集定義模組中的注釋二 結構標籤 block pass extends 續承後保留塊中的內容 include 包含,將其他html包含進來,體現的...
Jinja2在Ansible中常用項
過濾器 內容safe 渲染時值不轉義 capitialize 把值的首字母轉換成大寫,其他子母轉換為小寫 lower 把值轉換成小寫形式 upper 把值轉換成大寫形式 title 把值中每個單詞的首字母都轉換成大寫 trim 把值的首尾空格去掉 striptags 渲染之前把值中所有的html標籤...