ansible自動化運維(四)jinjia2模板

Jinjia2模板

前面說到playbook組成的時候,有介紹到template模塊,而template模塊對模板文件進行渲染時,使用的就是jinja2模板引擎,jinja2本身就是基于python的模板引擎,所以下面先來了解一下jinjia2模板的一些用法

基礎語法

{{?? }} 用來裝載表達式,比如變量、運算表達式、比較表達式等。(%?? %)用來裝載控制語句,比如 if 控制結構,for循環控制結構。(#??? #)用來裝載注釋,模板文件被渲染后,注釋不會包含在最終生成的文件中。

該模板支持的一些數據類型和表達式

字符串:使用單引號或雙引號;數字:整數,浮點數;列表:[list1, list2, ...]元組:(item1, item2, ...)字典:{key1:value1, key2:value2, ...}布爾型:true/false算術運算:+, -, *, /, //, %, **比較操作:==, !=, >, >=, <, <=邏輯運算:and, or, not

條件判斷

Jinjia2模板本身就是基于python的,所以它if語句也支持多條件判斷,嵌套等

與python一樣,具有if(如果),elif(在如果),else(否則),只不過結尾變成了endif表示條件的結束

常見的縮進方式為4格,也可以使用 2 個空格或制表符,但要保持一致

單條件:{% if? 表達式 %}執行的內容{% endif %}
雙條件:{% if 表達式 %}執行內容{% else %}執行內容{% endif %}
多條件:{% if 表達式 %}執行內容{% elif 表達式 %}執行內容{% else %}
執行內容{% endif %}
嵌套:{% if??表達式 %}執行的內容{% if 表達式 %}執行內容{% else %}執行內容{% endif %}{% endif %}

循環

循環同樣也具有條件判斷的類似操作,這里就不過多舉例了。

可以使用{% for %}和{% endfor %}塊來實現一個基本的循環。

{% for i in 表達式 %}執行內容{% endfor %}

需要注意的是ansible默認不支持break(跳出循環)和continue(繼續)的。

其他控制結構

你會發現jinjia2模板沒有函數,但是,jinjia2模板有類似函數的用法,叫做宏,主要用于在模板渲染過程中生成動態的內容。一般有兩種用法定義{% macro %}和調用{% call %},jinjia2還支持其他的控制結構如{% include %}用于包含其他模板文件。

定義宏:{% macro one(text = '這是一段默認文本') %}{{ text }}{% endmacro %}

這里one是宏的名稱,text為參數,{{text}}則是宏輸出的內容

過濾器

Jinja2也支持過濾器,可以使用過濾器來對變量進行操作。

Lookup過濾器

在 Ansible 中,lookup過濾器是一種強大的工具,用于從外部數據源檢索數據。

語法格式:{{ lookup(‘插件名稱’, ‘插件參數’)}}

常用插件:

file: 用于讀取配置文件、腳本、密鑰文件等各種文件類型的內容。

env: 用于獲取環境變量的值

password: 用于從密碼存儲(如ansible-vault)中獲取密碼

#獲取/etc/testfile文件內容{{ lookup('file','/etc/testfile') }}#獲取PATH環境的變量值{{ lookup('env','PATH') }}
Default過濾器

default過濾器用于在變量未定義或者為假(例如空字符串、False、None、空列表等)的情況下提供一個默認值。

Set是用來設置變量的,想當于聲明一個變量

如果variable變量未定義,那么就會把”定義的變量”這個值賦予給它

set default_value=”定義的變量”database_host:{{ variable | default("default_value") }}

template模塊

?template模塊與copy模塊的用法十分類似,只是更多用于jinja2模板的渲染,也就是模板文件中可以引用變量,實現對不同主機有定制化的配置。

參數

解析

src

指定本地jinja2模板文件的位置

dest

指定目標遠程主機路徑

backup

指定是否備份,默認值no

mode

設置權限

user

設置用戶

group

設置用戶組

Jinjia2模板示例

jinjia2模板好用的地方在于它支持多種文件可以是html,xml,conf等等,這就極大的方便用template模塊使用jinjia2模板對一些服務的配置文件進行修改

安裝redis服務:

把需要修改的配置信息寫入模板中[root@web01 ansible]# cat redis.conf.j2bind {{ ansible_host }} 127.0.0.1? #? 引用了facts組件內置變量port {{ redis_port }}????????? ?#這是play文件里定義的變量protected-mode notcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /var/run/redis_6379.pidloglevel notice

編寫play文件

[root@web01 ansible]# cat redis.yml---- name: 部署redsi服務hosts: web01vars:redis_port: 6379 #指定redis的端口tasks:- name: install redisyum:name: redisstate: present- name: start redisservice:name: redisstate: startednotify: restart- name: upload redis.conftemplate:src: /etc/ansible/redis.conf.j2dest: /etc/redis.confhandlers:- name: restartservice:name: redisstate: restarted

執行命令

[root@web01 ansible]# ansible-playbook redis.yml

查詢配置文件是否修改

[root@web01 ansible]# grep [^a-Z$] /etc/redis.confbind 192.168.143.161 127.0.0.1port 6379protected-mode notcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /var/run/redis_6379.pidloglevel notice

可以看到此時配置文件和我們模板中寫的配置文件內容一致

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

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

相關文章

通過k-means對相似度較高的語句進行分類

本文介紹了如何使用K-Means算法對相似度較高的語句進行分類&#xff0c;并附上java案例代碼 import java.util.ArrayList; import java.util.List; import java.util.Random;public class KMeansTextClustering {public static void main(String[] args) {// 初始化語句數據集…

Oracle 19c rac 補丁升級,從19.7 to19.22-集群

1. 補丁包概述 數據庫環境 角色 數據庫 IP地址 數據庫版本 主機名 數據庫名稱 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 將以下補丁包上傳到/soft下 上傳到兩個節點的soft目錄下&#xff1a;p6880880_190000_Linux-x86-64.zip &#xff08;更新o…

Windows安裝Jira

下載 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理員身份安裝&#xff0c;否則彈出以下提醒 創建和配置MySQL數據庫&#xff1a;參照 Connecting Jira applicat…

uniapp - 微信小程序

一、background-image 大圖不顯示的問題 解決方法&#xff1a; 1、使用網絡地址&#xff1b;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

DETR: End-to-End Object Detection with Transformers論文學習

論文地址&#xff1a;https://arxiv.org/pdf/2005.12872 代碼地址&#xff1a;https://github.com/facebookresearch/detr 相關學習視頻&#xff1a;https://space.bilibili.com/94779326/lists?sid1531941 標題前言&#xff1a; DETR 是 Facebook 團隊于 2020 年提出的基于…

LeetCode 24反轉鏈表

單鏈表反轉&#xff1a;詳細解析與代碼實現 在數據結構的學習過程中&#xff0c;鏈表是一個非常重要且有趣的部分&#xff0c;而單鏈表的反轉操作更是常考的基礎知識點。今天就來和大家詳細講講如何實現單鏈表的反轉&#xff0c;并通過代碼示例來加深理解呀。 題目 給定單鏈…

Redis學習筆記之——學習計劃

Redis——Remote Dictionary Server&#xff0c;開源、基于內存、速度快、key-value... Redis做為一個高性能的鍵值存儲系統&#xff0c;廣泛應用于緩存、會話存儲、分布式鎖以及其他需要快速訪問的數據場景中。熟悉掌握redis&#xff0c;似乎已成為廣大碼農們必備的一項技能。…

網絡安全教學博客(二):常見網絡安全威脅剖析

在上一篇博客中&#xff0c;我們了解了網絡安全的基礎概念和重要性。今天&#xff0c;讓我們深入探討一下常見的網絡安全威脅&#xff0c;以便我們能夠更好地識別和防范它們。 惡意軟件&#xff08;Malware&#xff09; 病毒&#xff08;Virus&#xff09;&#xff1a;病毒是一…

Vue3狀態管理:Pinia架構設計分析

Vue3狀態管理:Pinia架構設計分析 介紹 在Vue.js開發中&#xff0c;狀態管理是一個非常重要的部分。隨著Vue3的發布&#xff0c;Pinia作為一種新的狀態管理架構也相繼問世。本文將對Pinia架構進行深入分析&#xff0c;幫助讀者了解其設計原理、特點以及在實際項目中的應用。 架構…

【IDEA】啟動報錯

今天啟動IDEA報錯 報錯信息&#xff1a; Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打開任務管理器&#xff0c;關掉進程ID5444的任務

socket編程UDP-實現停等機制(接收確認、超時重傳)

在下面博客中&#xff0c;我介紹了利用UDP模擬TCP連接、按數據包發送文件的過程&#xff0c;并附上完整源碼。 socket編程UDP-文件傳輸&模擬TCP建立連接脫離連接&#xff08;進階篇&#xff09;_udp socket發送-CSDN博客 下面博客實現的是滑動窗口機制&#xff1a; sock…

uniapp小程序的錨點定位(將頁面滾動到目標位置)

小程序中&#xff0c;a頁面跳轉到b頁面&#xff0c;跳轉后滾動定位到b頁面的特定位置。 1.uni.pageScrollTo傳遞一個scrollTop參數可以滾動到特定位置。2.可以通過 uni.createSelectorQuery()等獲取定位元素的位置信息。3.uni.getSystemInfoSync()獲取設備的導航欄和狀態欄高度…

php基礎:命名空間

1.PHP 命名空間可以解決以下兩類問題&#xff1a; 1.用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。 2.為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名&#xff08;或簡短&#xff09;的名稱&#xff0c;以提高源代碼的可讀…

分布式 CAP理論 總結

前言 相關系列 《分布式 & 目錄》《分布式 & CAP理論 & 總結》《分布式 & CAP理論 & 問題》 分布式 分布式的核心是將大型業務拆解成多個子業務以使之在不同的機器上執行。分布式是用于解決單個物理機容量&性能瓶頸問題而采用的優化手段&#xf…

python xpath解析筆記

與bs4的區別 bs4有很多屬性和方法&#xff0c;而xpath只有一個方法&#xff0c;是通過不同的xpath表達式實現很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 開頭的斜杠表示從根節點遍歷。 中間的斜杠表示層級。&#xff08;相當于bs4中的>…

Q學習(Q-Learning)詳解

?作者簡介&#xff1a;2022年博客新星 第八。熱愛國學的Java后端開發者&#xff0c;修心和技術同步精進。 &#x1f34e;個人主頁&#xff1a;Java Fans的博客 &#x1f34a;個人信條&#xff1a;不遷怒&#xff0c;不貳過。小知識&#xff0c;大智慧。 &#x1f49e;當前專欄…

樹狀數組詳解

概述 樹狀數組&#xff08;Binary Indexed Tree&#xff0c;簡稱BIT&#xff09;&#xff0c;是一種數據結構&#xff0c;用于處理區間查詢和更新問題。它是一種可以高效地在對數級別時間復雜度內進行單點更新和區間查詢的數據結構。樹狀數組通常用于解決以下兩類問題&#xf…

freeswitch(開啟支持MCU視頻會議,使用mod_av模塊)

親測版本centos 7.9系統–》 freeswitch1.10.9 本人freeswitch安裝路徑(根據自己的路徑進入) /usr/local/freeswitch/etc/freeswitch場景說明: 有些場景想使用視頻會議MCU融合畫面進行開會使用方法: 第一步:下載插件 yum install -y epel-release yum install

【大數據技術基礎】【記錄Ubuntu 16.04升級到18.04】Ubuntu的一個版本升級到另一個版本

在 Ubuntu 操作系統中進行軟件更新和系統升級 Ubuntu Kylin 16.04 LTS 系統進行系統升級到 Ubuntu 18.04.6 LTS 版本 升級提示&#xff1a;系統彈出提示框&#xff0c;告知用戶有新版本的 Ubuntu 可用&#xff0c;詢問用戶是否想要升級。 認證窗口&#xff1a;顯示了一個認證…

這是一個vue3 + scss的數字滾動效果

介紹: 當數字變化時&#xff0c;只改變變化的數字位&#xff0c;其余的不變&#xff0c;可以遞增、遞減、驟變、負數也可以&#xff0c;但是樣式要根據具體的項目需求去改&#xff1b; 效果1、增加數字&#xff1a; 效果2、減少數字&#xff1a; 使用方法&#xff1a; <te…