Saltstack_使用指南12_配置管理-jinja模板

来源:https://www.cnblogs.com/zhanglianghhh/archive/2019/05/07/10828207.html
-Advertisement-
Play Games

1. 說明 下文的案例是根據上一篇文章進行的修改。因此請優先讀取上一章博文內容《Saltstack_使用指南11_配置管理-狀態之間依賴關係》 2. 主機規劃 salt 版本 salt jinja 文檔 Jinja2 文檔 註意事項 修改了master或者minion的配置文件,那麼必須重啟對應的服 ...


 

1. 說明

下文的案例是根據上一篇文章進行的修改。因此請優先讀取上一章博文內容《Saltstack_使用指南11_配置管理-狀態之間依賴關係

 

2. 主機規劃

 

salt 版本

1 [root@salt100 ~]# salt --version
2 salt 2018.3.3 (Oxygen)
3 [root@salt100 ~]# salt-minion --version
4 salt-minion 2018.3.3 (Oxygen)

 

salt jinja 文檔

https://docs.saltstack.com/en/latest/topics/jinja/index.html

 

Jinja2 文檔

1 http://docs.jinkan.org/docs/jinja2/    
2 http://docs.jinkan.org/docs/jinja2/templates.html

 

註意事項

修改了master或者minion的配置文件,那麼必須重啟對應的服務。

 

3. jinja 用法

1 # 註意有空格
2 這裡有兩種分隔符: {% ... %} 和 {{ ... }} 。前者用於執行諸如 for 迴圈 或賦值的語句,後者把表達式的結果列印到模板上。
3 {# ... #} 為註釋語法

 

jinja 在 狀態中的使用

 1 3步走:
 2     1、告訴File模塊,你要使用jinja
 3         - template: jinja
 4     2、列出參數列表
 5         - defaults:
 6             HttpPort: 88
 7     3、模板引用
 8         {{ HttpPort }}
 9 
10 模板裡面支持:salt 遠程執行、grains 和 pillar 進行賦值

 

4. 案例

對上一章案例內容進行改造。

添加 jinja 信息。

 

添加了 jinja 的好處:

1、  可以把 mariadb.sls 也規整到 init.sls;

2、  這樣就是一個 SLS 文件對外,而不是多個 SLS;

3、  在執行 SLS 的時候,直接整體/分批執行,而不是選定某個或某些 minion 執行;不需要指定 minion 目標,減少人為出錯的可能性;

4、  後期維護方便

 

4.1. 部署架構

 

4.2. 本章涉及的 pillar 的信息

可參見:《Saltstack_使用指南05_數據系統-Pillar

 1 [root@salt100 pillar]# pwd
 2 /srv/pillar
 3 [root@salt100 pillar]# cat top.sls 
 4 base:
 5   '*':
 6     - web_pillar.service_appoint
 7 
 8 # 下麵的跟本章節無關,可以不管
 9   # 使用通配符
10   'salt0*':
11     - web_pillar.apache
12     - web_pillar.user # 引用
13   # 指定具體minion
14   'salt03':
15     - web_pillar.apache
16     - web_pillar.user # 引用
17 [root@salt100 pillar]# cat web_pillar/service_appoint.sls  # pillar 的 SLS
18 {% if (grains['ip4_interfaces']['eth0'][0] == '172.16.1.11' and grains['host'] == 'salt01') 
19    or (grains['ip4_interfaces']['eth0'][0] == '172.16.1.12' and grains['host'] == 'salt02')
20    or (grains['ip4_interfaces']['eth0'][0] == '172.16.1.13' and grains['host'] == 'salt03')
21 %}
22 # 註釋信息 需要頂格書寫
23 service_appoint: www
24 {% elif grains['ip4_interfaces']['eth0'][0] == '172.16.1.100' %}
25 service_appoint: mariadb
26 {% endif %}

 

使 pillar 生效

 1 [root@salt100 pillar]# salt '*' saltutil.refresh_pillar  # 刷新
 2 [root@salt100 pillar]# salt '*' pillar.item service_appoint  # 查看 pillar 中 service_appoint 的信息
 3 salt03:
 4     ----------
 5     service_appoint:
 6         www
 7 salt02:
 8     ----------
 9     service_appoint:
10         www
11 salt100:
12     ----------
13     service_appoint:
14         mariadb
15 salt01:
16     ----------
17     service_appoint:
18         www

 

4.3. 配置文件 httpd.conf 修改

 1 [root@salt100 file]# pwd
 2 /srv/salt/lamp2/file
 3 [root@salt100 file]# vim httpd.conf
 4 # Listen 80
 5 # 下麵的是本次修改的部分 ★★★★★
 6 Listen {{ HttpPort }}
 7 ………………
 8 # If your host doesn't have a registered DNS name, enter its IP address here.
 9 #
10 #ServerName www.example.com:80
11 # 下麵的是本次修改的部分 ★★★★★
12 # 格式  ServerName 本機內網IP:Port
13 # 這樣的話,在 apache.sls 文件中就不用寫規則獲取 minion的內網IP了,
14 # 因為在狀態執行的時候,就會根據下文的 grains 規則得到對應 minion 的內網IP
15 # ServerName {{ grains['ip4_interfaces']['eth0'][0] }}:{{ HttpPort }}
16 
17 # 這裡是一個變數,如此的話,在 apache.sls 中需要寫規則獲取 minion 的內網IP
18 # 優先這種寫法,後期改變時,直接改 sls 文件即可。而不用改變該配置文件
19 ServerName {{ LocalInnerIP }}:{{ HttpPort }}
20 
21 # 「#」 註釋,只是針對 httpd 服務,對於 jinja 仍然是可用的 ★★★★★
22 # salt 模塊 支持
23 # hw_addr_eth0={{ HwAddr_eth0 }}
24 # grains 支持
25 # ip6_interfaces_eth0={{ IP6_Interface_eth0 }}
26 # pillar 支持
27 # pillar_user={{ Pillar_User }}

 

4.4. apache.sls 文件修改

 1 [root@salt100 lamp2]# pwd
 2 /srv/salt/lamp2
 3 [root@salt100 lamp2]# ll
 4 total 16
 5 -rw-r--r-- 1 root root 747 Jan  1 14:17 apache.sls
 6 drwxr-xr-x 2 root root  75 Jan  1 14:33 file
 7 -rw-r--r-- 1 root root 209 Jan  1 14:04 init.sls
 8 -rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls
 9 -rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
10 [root@salt100 lamp2]# cat apache.sls 
11 apache-service:
12   pkg.installed:
13     - name: httpd
14 
15   file.managed:
16     - name: /etc/httpd/conf/httpd.conf
17     - source: salt://lamp2/file/httpd.conf
18     - user: root
19     - gourp: root
20     - mode: 644
21     - backup: minion
22     - require:    # 我依賴誰
23       - pkg: apache-service   # 依賴 apache-service 中 pkg 的安裝包
24     # 新加 jinja 內容  # 本次修改內容 ★★★★★
25     - template: jinja
26     - defaults:
27       LocalInnerIP: {{ grains['ip4_interfaces']['eth0'][0] }}
28       HttpPort: 8088
29       # salt遠程執行模塊 支持  ★★★★★
30       HwAddr_eth0: {{ salt['network.hw_addr'] ('eth0') }}  # 註意 ] ( 之間的空格
31       # grains 支持 【其實 defaults 下的第一行就是,這裡在重覆一遍】
32       IP6_Interface_eth0: {{ grains['ip6_interfaces']['eth0'][0] }}
33       # pillar 支持
34       Pillar_User: {{ pillar['level1']['level2']['my_user'] }}
35 
36   service.running:
37     - name: httpd
38     - enable: True
39     - reload: True
40     - require:   # 我依賴誰
41       - pkg: apache-service
42     - watch:      # 我監控誰
43       # 一旦發生變化,就重載入服務
44       - file: apache-service  # 監控 apache-service 中 file 的文件

 

4.5. init.sls 文件修改

 1 [root@salt100 lamp2]# pwd
 2 /srv/salt/lamp2
 3 [root@salt100 lamp2]# ll
 4 total 16
 5 -rw-r--r-- 1 root root 747 Jan  1 14:17 apache.sls
 6 drwxr-xr-x 2 root root  75 Jan  1 14:33 file
 7 -rw-r--r-- 1 root root 209 Jan  1 14:04 init.sls
 8 -rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls
 9 -rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
10 [root@salt100 lamp2]# cat init.sls   # 根據 pillar 來區分,哪些 minion 執行哪些 SLS 文件
11 include:   # 我包含誰
12 {% if pillar['service_appoint'] == 'www' %}
13   - lamp2.apache
14   - lamp2.php
15 {% elif pillar['service_appoint'] == 'mariadb' %}
16   - lamp2.mariadb
17 {% endif %}

 

4.6. 執行 SLS

1 # 測試一下,看是否可執行,有沒有什麼異常
2 [root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init test=True  
3 # 根據 init.sls 信息,選取覆蓋 if 條件中所有情況的 minion 並測試一下,看是否正常
4 [root@salt100 lamp2]# salt -L 'salt01,salt100' state.sls lamp2.init test=True  
5 # 單個執行,並查看返回情況
6 # 這時可在 salt01 機器,通過 ps -ef | grep 'httpd' 和 netstat -lntup | grep 'httpd' 查看
7 # 可見 httpd 已經重載入,並且埠從 80 改為了 8088
8 [root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init 
9 [root@salt100 lamp2]# salt '*' state.sls lamp2.init  # 批量執行,並查看返回情況

 

4.7. 部分截圖

[root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init test=True  # 對應的截圖

 

對應 salt 遠程執行、grains、pillar 的情況

 1 [root@salt100 ~]# salt 'salt01' network.hw_addr eth0
 2 salt01:
 3     00:0c:29:95:1b:7a
 4 [root@salt100 ~]# salt 'salt01' grains.item ip6_interfaces:eth0
 5 salt01:
 6     ----------
 7     ip6_interfaces:eth0:
 8         - fe80::20c:29ff:fe95:1b7a
 9 [root@salt100 ~]# salt 'salt01' pillar.item level1:level2:my_user
10 salt01:
11     ----------
12     level1:level2:my_user:
13         lisi

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Swagger介紹 Swagger 是一款RESTFUL介面的、基於YAML、JSON語言的文檔線上自動生成、代碼自動生成的工具。而我最近做的項目用的是WebAPI,前後端完全分離,這時後端使用Swagger就能夠很方便簡潔的把所寫的介面以及相關註釋展示給前端人員, 從而方便雙方的溝通,提高工作效率 ...
  • 開發環境: 開發工具:VS2017 系統:Win10 64位 Skd下載地址: https://dotnet.microsoft.com/download 3個都下載下載,安裝dotnet-sdk-2.2.106-win-x64.exe, dotnet-runtime-2.2.4-win-x64.e ...
  • 一、C#簡介 C#是微軟公司發佈的一種面向對象的、運行於.NET Framework之上的高級程式設計語言。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、介面、與Java幾乎同樣的語法和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM ...
  • 1面向對象 類:包含欄位、屬性、函數、構造函數 欄位:存儲數據 屬性:保護欄位 get set 函數:描述對象的行為 構造函數:初始化對象,給對象的每個屬性賦值 面向對象的好處:讓程式具有擴展性 類決定了對象將要擁有的屬性和行為。 1 namespace _07虛方法 2 { 3 class Pro ...
  • 你在為windows10自動更新而煩惱嗎?下麵教你一招如何關閉自動更新 ...
  • 第1節:terminal終端設備終端:鍵盤、滑鼠、顯示器物理終端(/dev/console):控制台console虛擬終端(tty:teletypewriters,/dev/tty# #為[1-6]):tty可以有n個,Ctrl+Alt+F[1-6]圖形終端(/dev/tty7)startx,xwi ...
  • (1)、使用WinSCP工具,實現將Windows的文件上傳到Linux指定目錄下 (1)、輸入主機名、用戶名、密碼,選擇登錄,成功連接至Linux系統 (2)、在左側列表,選擇要上傳文件,單擊右鍵選擇上傳即可 (3)、在右側列表,選擇要下載文件,單擊右鍵選擇下載即可。 註意:主機名:Linux的I ...
  • (1)在登錄黑框中輸入如下命令,讓CentOS 7自動獲取一個IP地址: # dhclient (2)正常情況下不會有任何輸出內容。用如下命令查看獲取到的IP地址: # ip addr 它將返回如圖所示的信息。 ip addr命令就是用來查看IP地址的。這裡請註意Linux操作系統是區分大小寫的。從 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...