Ansible Jinja2 語法簡介及使用

1、Jinja2 介紹

  • Jinja2 是基于 python 的模板引擎,功能比較類似于 PHP 的 smarty,J2ee 的 Freemarker和velocity。它能完全支持unicode,并具有集成的沙箱執行環境,應用廣泛。

  • jinja2使用BSD授權

  • Jinja2的語法是由 variables(變量) 和 statement(語句) 組成,如下;

1、variables:可以輸出數據

?my_variables mysql_port 3307 ? ?{{ msyql_port | default('3306') }} ? ?# 默認變量
?{{ some_dudes_name | capitalize }}?

2、statements: 可以用來創建條件和循環等

if語句:
{% if my_conditional %}?
...
{% endif %}

for 語句:
{% for item in all_items %}
`item`?
……
{% endfor %}

  • jinja2 支持使用帶過濾器的Unix型管道操作符,有很多的內置過濾器可供使用。

  • 我們可以用簡單if和for就可以建立幾乎任何的常規配置文件,不過如果你有意更進一步,jinja2 documentation (http://jinja.pocoo.org/docs/dev/)包含了很多有趣的東西可供了解。

3、jinja2 使用實例
1、引用變量?
1、ansible 目錄結構

?[root@ansible-server ansible]# cd roles/template/
.
├── meta
│ ? └── main.yml
├── tasks
│ ? ├── template.yml ?
│ ? └── main.yml
├── templates
│ ? ├── order.j2
└── vars
? ? └── main.yml

?2、調度yml文件

[root@ansible-server ansible]# cat templates.yml
---
- hosts: 192.168.234.102
? user: root
? gather_facts: false
? roles:
? ?- role: template

  • 注意: 這里 - role: template 和 - template 是一樣的

3、其他yml文件
[root@ansible-server templates]# cat tasks/main.yml
- include: template.yml[root@ansible-server templates]# cat tasks/template.yml
- name: create {{ PROJECT }} directoryfile: dest=/data/{{ PROJECT }} state=directory
- name: template transfor {{ PROJECT }} dirtemplate: src=order.j2 dest=/data/{{ PROJECT }}/order.conf[root@ansible-server templates]# cat templates/order.j2
project: {{ PROJECT }}
switch: {{ SWITCH }}
dbport: {{ DBPORT }}[root@ansible-server templates]# cat vars/main.yml
PROJECT: "JAVA"
SWITCH: "ON"
DBPORT: "8080"

4、測試

[root@ansible-server ansible]# ansible-playbook templates.yml --syntax-check
playbook: templates.yml

?5、執行

[root@ansible-server ansible]# ansible-playbook templates.yml 
PLAY [192.168.234.102] **************************************************************
TASK [template : include] ***************************************************
included: /etc/ansible/roles/template/tasks/template.yml for 192.168.234.102
TASK [template : create JAVA directory] *************************************
changed: [192.168.234.102]
TASK [template : template transfor java dir] ********************************
changed: [192.168.234.102]
PLAY RECAP *********************************************************************
192.168.234.102                : ok=3    changed=2    unreachable=0    failed=0  

6、查看結果

[root@ansible-server ansible]# cat /data/JAVA/order.conf
project: JAVA
switch: ON
dbport: 8080
2、for 語句
  • 為遠程主機生成服務器列表,加入該列表從192.168.234.102 web01.test.com 到192.168.234.103?web11.test.com 結束,如果手動添加就很不科學了,這里需要使用jinja2語法的for循環通過模板批量生成對應的配置文件,如下:

1、ansible 目錄結構
[root@ansible-server ansible]# cd roles/test_hosts
[root@ansible-server test_hosts]# tree
.
├── meta
│   └── main.yml
├── tasks
│   ├── file1.yml
│   └── main.yml
├── templates
│   └── test1.j2
└── vars└── main.yml

2、調度yml文件

[root@ansible-server ansible]# cat test_hosts.yml
---
- hosts: 192.168.234.102user: rootgather_facts: falseroles:- role: test_hosts

3、各目錄下 yml文件內容:

[root@ansible-server test_hosts]# cat tasks/file1.yml 
- name: ansible jinja2 template for hosts configtemplate: src=test1.j2 dest=/tmp/httpd.conf.test[root@ansible-server test_hosts]# cat tasks/main.yml 
- include: file1.yml[root@ansible-server test_hosts]# cat templates/test1.j2 
{% for id in range(201,212) %}
192.168.234.{{ id }} web{{ "%02d" | format(id-200) }}.test.com
{% endfor %}# 解釋:
{{ id }} # 提取for循環中對應的變量id值
"%02d"   # 調用的是python內置的字符串格式化輸出(%d格式化整數)因為是01,02這種格式,所以是保留2位,故用02,然后將結果通過管道符 “|” 傳遞給format 函數做二次處理。

4、執行

[root@ansible-server ansible]# ansible-playbook test_hosts.yml

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64866.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud系列教程:微服務的未來 (五)枚舉處理器、JSON處理器、分頁插件實現

在現代 Java 開發中,我們常常需要處理各種通用的功能和需求,諸如枚舉的處理、JSON 數據處理,以及分頁查詢等。這些功能雖然看似簡單,但在實際開發中往往涉及到許多細節和優化。為了提高開發效率、減少重復代碼的編寫,我…

游戲引擎學習第69天

回顧碰撞響應時我們停留的位置 從昨天的討論開始,我們正準備處理碰撞響應的復雜性。具體來說,我們討論的是,當兩個實體在屏幕上發生碰撞時,如何回應這種情況。碰撞本身并不復雜,但要處理其后的反應和規則則更具挑戰性…

【Linux】信號處理

一、Linux系統信號 1、常見的系統信號 常見的Linux系統信號 信號值描述1SIGHUP掛起(hang up)進程2SIGINT中斷進(interrupt)程3SIGQUIT停止(stop)進程9SIGKILL無條件終止(terminate)…

開源模型應用落地-qwen2-7b-instruct-LoRA微調-Axolotl-單機多卡-RTX 4090雙卡(七)

一、前言 本篇文章將使用Axolotl去高效微調QWen2系列模型,通過閱讀本文,您將能夠更好地掌握這些關鍵技術,理解其中的關鍵技術要點,并應用于自己的項目中。 二、術語介紹 2.1. LoRA微調 LoRA (Low-Rank Adaptation) 用于微調大型語言模型 (LLM)。 是一種有效的自適應策略,…

數據結構與算法學習筆記----快速冪

數據結構與算法學習筆記----快速冪 author: 明月清了個風 first publish time: 2025.1.2 ps??快速冪的兩道模版題,快速冪,乘法逆元,費馬小定理 Acwing 875. 快速冪 [原題鏈接](875. 快速冪 - AcWing題庫) 給定 n n n組 a i , b i , p i…

爬蟲代碼中如何添加異常處理?

在編寫爬蟲代碼時,添加異常處理是非常重要的一步,因為它可以幫助我們處理網絡請求中可能出現的各種問題,比如網絡連接錯誤、超時、解析錯誤等。以下是如何在Python爬蟲代碼中添加異常處理的示例: import requests from bs4 impor…

MAC環境安裝(卸載)軟件

MAC環境安裝(卸載)軟件 jdknode安裝node,并實現不同版本的切換背景 卸載node從node官網下載pkg安裝的node卸載用 homebrew 安裝的node如果你感覺刪的不夠干凈,可以再細分刪除驗證刪除結果 jdk 1.下載jdk 先去官網下載自己需要的版…

本地LLM部署--llama.cpp

–圖源GitHub項目主頁 概述 llama.cpp是以一個開源項目(GitHub主頁:llamma.cpp),也是本地化部署LLM模型的方式之一,除了自身能夠作為工具直接運行模型文件,也能夠被其他軟件或框架進行調用進行集成。 其…

uniapp中使用ruoyiPlus中的加密使用(crypto-js)

package.json中添加 "crypto-js": "^4.2.0", "jsencrypt": "^3.3.2",但是vue2中使用 import CryptoJS from cryptojs; 這一步就會報錯 參照 參照這里:vue2使用CryptoJS實現信息加解密 根目錄下的js文檔中新增一個AESwork.…

go項目使用gentool生成model的gen.go問題

Gen Tool 是一個沒有依賴關系的二進制文件,可以用來從數據庫生成結構。 使用方法: go install gorm.io/gen/tools/gentoollatest在項目根目錄,執行連接的數據庫中指定某幾張表結構生成數據庫model層 gentool -dsn "root:123456tcp(localhost:330…

路由基本配置實驗

路由器用于實現不同類型網絡之間的互聯。 路由器轉發ip分組的基礎是路由表。 路由表中的路由項分為直連路由項、靜態路由項和動態路由項。 通過配置路由器接口的ip地址和子網掩碼自動生成直連路由項。 通過手工配置創建靜態路由項。 熱備份路由器協議允許將由多個路由器組…

產品原型設計

🤣🤣目錄🤣🤣 一、Axure原型設計(Axure RP 9 )1.1 軟件下載安裝1.2 產品原型展示1.3 產品原型下載1.4 視頻課程推薦 二、磨刀原型設計2.1 軟件下載安裝2.2 產品原型展示2.3 產品原型下載2.4 視頻課程推薦 什…

Android反編譯

安卓反編譯要用到三個工具, 工具1:apktool反編譯出來資源文件和源碼 工具2:d2j-dex2jar生成classes_dex2jar.jar文件工具3:jd-gui.exe 打開classes_dex2jar.jar文件查看java代碼一、 反編譯得到資源文件(工具1&#xf…

計算機網絡 (17)點對點協議PPP

一、PPP協議的基本概念 PPP協議最初設計是為兩個對等節點之間的IP流量傳輸提供一種封裝協議,它替代了原來非標準的第二層協議(如SLIP)。在TCP/IP協議集中,PPP是一種用來同步調制連接的數據鏈路層協議(OSI模式中的第二層…

Tailwind CSS 實戰:表單設計與驗證實現

在 Web 開發中,表單就像是一位盡職的接待員,負責收集和驗證用戶的輸入信息。記得在一個企業級項目中,我們通過重新設計表單交互流程,將表單的完成率提升了 42%。今天,我想和大家分享如何使用 Tailwind CSS 打造一個既美觀又實用的表單系統。 設計理念 設計表單就像是在設計一…

信息系統項目管理師——第8章章 項目整合管理 筆記

8 項目整合管理(最后反過來看) 項目整合過程:①制定項目章程(啟動過程)、②制訂項目管理計劃(規劃過程)、③指導和管理項目工作、管理項目知識(執行過程)、④監控項目工…

MLP、CNN、Transformer 的區別解析

親愛的小伙伴們😘,在求知的漫漫旅途中,若你對深度學習的奧秘、Java 與 Python 的奇妙世界,亦或是讀研論文的撰寫攻略有所探尋🧐,那不妨給我一個小小的關注吧🥰。我會精心籌備,在未來…

WebRTC線程的啟動與運行

WebRTC線程運行的基本邏輯: while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在執行函數內部,就是一個while死循環,只做兩件事,從隊列里Get取…

CSS 學習之 padding 與圖形繪制

padding 屬性和 background-clip 屬性配合,可以在有限的標簽下實現一些 CSS 圖形繪制效果,我這里舉兩個小例子,重在展示可行性。 例 1:不使用偽元素,僅一層標簽實現大隊長的“三道杠”分類圖標效果。此效果在移動端比較常見&…

yolov5核查數據標注漏報和誤報

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、誤報二、漏報三、源碼總結 前言 本文主要用于記錄數據標注和模型預測之間的漏報和誤報思想及其源碼 提示:以下是本篇文章正文內容,…