您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何理解Salt Highstate數據結構定義,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
小編將詳細介紹SLS文件中每個部分的名稱與含義,以及SLS中的數據處理后的數據結構。
Top file
Salt State系統的入口文件,其中定義了minion處于哪個環境,加載哪些SLS模塊。
State tree
存放在file_roots目錄下的一系列SLS文件。使用SLS模塊的形式來組織State tree。
Include聲明
一個list,其元素是要引用到本SLS文件的其他SLS模塊。 只能用在highstate結構的頂層。
示例:
include: - edit.vim - http.server
Module引用
SLS模塊的名字,以在Salt master上的文件結構命名。名為
edit.vim
的模塊指向salt://edit/vim.sls
。
ID聲明
定義一個獨立的highstate數據段。ID在highstate dict中作為key,其對應的value是包含state聲明和requisit聲明的另一個dict。
用在highstate結構的頂層或extend聲明的下一層。
ID在整個State tree中必須是唯一的。如果同一個ID用了兩次,只有最先匹配到的生效,其他所有的同名ID聲明被忽略。
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聲明
一個list,至少包含一個定義function聲明的string,0個或多個function arg聲明的dict。
還有一些可選的成員,比如名字覆蓋部分(name和names聲明),requistie聲明。
只能用在ID聲明的下一級。
Requisite聲明
一個list,其成員是requisite引用。
用來生成動作依賴樹。Salt states被設計成按確定的順序執行,require或watch其他Salt state可以調整執行的順序。
做為list組件用在state聲明下一級,或是作為key用在ID聲明下一級。
Requisite引用
只有一個key的dict。key是被引用的state聲明的名字,value是被引用的ID聲明的名字。 只能用作requisite聲明的成員。
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聲明
只有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聲明
覆蓋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聲明
將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數據結構定義有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。