Highstate資料結構定義
參考連結:官方文件
作者言
這篇文件詳細解釋了SLS檔案中,每個部分的名稱與含義,以及SLS中的資料處理後的資料結構。
我只是SaltStack的初學者,如果文中有錯誤的地方,請不吝賜教。
在學習的過程,我做了一些實驗,犯了不少錯,積累了一些經驗,對SaltStack的執行也有一定了解,如果有什麼問題,或是不太理解的地方,非常歡迎留言交流!
Salt State Tree
Top file
Salt State系統的入口檔案,其中定義了minion處於哪個環境,載入哪些SLS模組。
State tree
存放在file_roots目錄下的一系列SLS檔案。使用SLS模組的形式來組織State tree。
Include宣告
Include宣告
一個list,其元素是要引用到本SLS檔案的其他SLS模組。 只能用在highstate結構的頂層。
示例:
include:
- edit.vim
- http.server
Module引用
Module引用
SLS模組的名字,以在Salt master上的檔案結構命名。名為
edit.vim
的模組指向salt://edit/vim.sls
。
ID宣告
ID宣告
定義一個獨立的highstate資料段。ID在highstate dict中作為key,其對應的value是包含state宣告和requisit宣告的另一個dict。
用在highstate結構的頂層或extend宣告的下一層。
ID在整個State tree中必須是唯一的。如果同一個ID用了兩次,只有最先匹配到的生效,其他所有的同名ID宣告被忽略。
Extend宣告
Extend宣告
擴充套件被引用的SLS模組中的name宣告。extend宣告也是一個dict,其key必須是在被引用的SLS模組中定義的ID。
只能用在highstate結構的頂層。
在需要增加或修改另一個SLS檔案中定義的state宣告時,Extend宣告非常有用。下面的程式碼來自mywebsite.sls檔案,其中include並且extend了apache.sls模組(增加了apache監視的物件),使得Apache服務在配置檔案mywebsite發生改變時自動重啟。
include:
- apache
extend:
apache:
service:
- watch:
- file: mywebsite
mywebsite:
file:
- managed
State宣告
State宣告
一個list,至少包含一個定義function宣告的string,0個或多個function arg宣告的dict。
還有一些可選的成員,比如名字覆蓋部分(name和names宣告),requistie宣告。
只能用在ID宣告的下一級。
Requisite宣告
Requisite宣告
一個list,其成員是requisite引用。
用來生成動作依賴樹。Salt states被設計成按確定的順序執行,require或watch其他Salt state可以調整執行的順序。
做為list元件用在state宣告下一級,或是作為key用在ID宣告下一級。
Requisite引用
Requisite引用
只有一個key的dict。key是被引用的state宣告的名字,value是被引用的ID宣告的名字。 只能用作requisite宣告的成員。
Function宣告
Function宣告
state中要要執行的function。1個state宣告中只能有1個function宣告。
下面的例子中,state宣告呼叫了state模組pkg模組中的installed功能。
httpd:
pkg.installed
可以用行內縮寫方式宣告function(上面的例子中就是),使用完整寫法使得資料結構更清晰:
httpd:
pkg:
- installed
需要注意的是連續的兩個簡寫形式是無效的,為了避免疑惑,建議全部採用完整寫法。
INVALID:
httpd:
pkg.installed
service.running
VALID:
httpd:
pkg:
- installed
service:
- running
只能用作state宣告的成員。
Function arg宣告
Function arg宣告
只有1個key的dict,作為引數傳遞給function宣告,其值為有效的Python型別。其型別必須滿足function的需要。 用在function宣告下一級。
下面的例子中,state宣告是file,function宣告是managed,user、group和mode是傳遞給managed的引數:
/etc/http/conf/http.conf:
file.managed:
- user: root
- group: root
- mode: 644
Name宣告
Name宣告
覆蓋state宣告中的name引數。name引數的預設值是ID宣告。 name總是1個單key字典,其值型別是string。
在有的場景下,修改預設的name引數非常有用。比如說,可以避免ID衝突。下面例子中的兩個state不能同時使用/etc/motd
作為ID:
motd_perms:
file.managed:
- name: /etc/motd
- mode: 644
motd_quote:
file.append:
- name: /etc/motd
- text: "Of all smells, bread; of all tastes, salt."
另外一個使用name宣告的場景是,ID宣告非常長,又需要在多次引用這個ID。在下面的例子,使用mywebsite
比/etc/apache2/sites-available/mywebsite.com
方便多了:
mywebsite:
file.managed:
- name: /etc/apache2/sites-available/mywebsite.com
- source: salt://mywebsite.com
a2ensite mywebsite.com:
cmd.wait:
- unless: test -L /etc/apache2/sites-enabled/mywebsite.com
- watch:
- file: mywebsite
apache2:
service:
- running
- watch:
- file: mywebsite
Names宣告
Names宣告
將1個state宣告擴充套件為多個不同名的state宣告。
看下面的例子:
python-pkgs:
pkg.installed:
- names:
- python-django
- python-crypto
- python-yaml
轉換成lowstate後的結果是:
python-django:
pkg.installed
python-crypto:
pkg.installed
python-yaml:
pkg.installed
完整的例子
下面的YAML是一個完整的例子,其中的名字部分使用的是hightstate元件名。
<Include Declaration>:
- <Module Reference>
- <Module Reference>
<Extend Declaration>:
<ID Declaration>:
[<overrides>]
# standard declaration
<ID Declaration>:
<State Declaration>:
- <Function>
- <Function Arg>
- <Function Arg>
- <Function Arg>
- <Name>: <name>
- <Requisite Declaration>:
- <Requisite Reference>
- <Requisite Reference>
# inline function and names
<ID Declaration>:
<State Declaration>.<Function>:
- <Function Arg>
- <Function Arg>
- <Function Arg>
- <Names>:
- <name>
- <name>
- <name>
- <Requisite Declaration>:
- <Requisite Reference>
- <Requisite Reference>
# multiple states for single id
<ID Declaration>:
<State Declaration>:
- <Function>
- <Function Arg>
- <Name>: <name>
- <Requisite Declaration>:
- <Requisite Reference>
<State Declaration>:
- <Function>
- <Function Arg>
- <Names>:
- <name>
- <name>
- <Requisite Declaration>:
- <Requisite Reference>
相關文章
- Salt Highstate資料結構定義資料結構
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- 資料結構 AVL樹和紅黑樹的定義資料結構
- 【01】把 Elasticsearch 當資料庫使:表結構定義Elasticsearch資料庫
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- 自定義響應資料結構資料結構
- 資料結構之二叉樹的定義和性質資料結構二叉樹
- 資料結構:樹和二叉樹定義和術語資料結構二叉樹
- 資料結構學習(C++)——單連結串列(定義與實現) (轉)資料結構C++
- 資料結構筆記——二叉樹的定義和性質資料結構筆記二叉樹
- iovec結構體定義及使用結構體
- 對應定義結構獲取
- 資料結構與演算法——普通樹的定義與C++實現資料結構演算法C++
- 資料結構學習(C++)——棧和佇列(定義和實現) (轉)資料結構C++佇列
- Delphi重定義的訊息結構
- 資料庫架構和物件、定義資料完整性-SQL Server資料庫架構物件SQLServer
- oracle獲取資料字典定義詳細總結Oracle
- 結構化資料、半結構化資料和非結構化資料
- 資料模式(Schema)定義模式
- 【資料結構篇】認識資料結構資料結構
- 給定json資料,將資料與頁面結構進行繫結JSON
- C語言/C++程式設計學習—資料結構—連結串列類的宣告及定義C語言C++程式設計資料結構
- 資料結構小白系列之資料結構概述資料結構
- 資料結構?資料結構
- 資料結構資料結構
- IMG-後勤執行-倉庫管理-主資料-定義倉位結構(WM-15)
- 資料結構與演算法-資料結構(棧)資料結構演算法
- Mysql如何讀.frm結尾的表結構定義檔案MySql
- 結構體定義 typedef struct 用法詳解和用法小結結構體Struct
- 【PHP資料結構】PHP資料結構及演算法總結PHP資料結構演算法
- WM Define Storage Bin Structure定義倉位結構(七)Struct
- 資料結構-棧資料結構
- 資料結構-堆資料結構
- 資料結構-集合資料結構
- 資料結構 - 字串資料結構字串
- 資料結構——列表資料結構
- Redis 資料結構Redis資料結構
- 資料結構——樹資料結構