前言:state是salt最核心的功能,通過預先制定好的sls文件對minion端進行狀態管理,支持包括程序包pkg
、文件file
、網絡配置network
、系統服務system
、系統用戶user
等,更多狀態對象點我。
SLS(代表SaLt State文件)是Salt State系統的核心。SLS描述了系統的目標狀態,由格式簡單的數據構成。經常被稱作配置管理。Salt默認使用YAML,來表達SLS數據。
1. top.sls
top.sls 是配置管理的入口文件,一切都是從這裏開始,在master 主機上,默認存放在/srv/salt/目錄. top.sls 默認從 base 標籤開始解析執行,下一級是操作的目標,可以通過正則,grain模塊,或分組名,來進行匹配,再下一級是要執行的state文件,不包換擴展名。
創建 /srv/salt/top.sls
通過正則進行匹配的示例,
base: '*': - webserver
通過分組名進行匹配的示例,必須要有 - match: nodegroup
base: group1: - match: nodegroup - webserver
通過grain模塊匹配的示例,必須要有- match: grain
base: 'os:Fedora': - match: grain - webserver
準備好top.sls文件後,編寫一個state文件
/srv/salt/webserver.sls
apache: # 標籤定義 pkg: # state declaration - installed # function declaration
第一行被稱爲(ID declaration) 標籤定義,在這裏被定義爲安裝包的名。注意:在不同發行版軟件包命名不同,比如 fedora 中叫httpd的包 Debian/Ubuntu中叫apache2
第二行被稱爲(state declaration)狀態定義, 在這裏定義使用(pkg state module)
第三行被稱爲(function declaration)函數定義, 在這裏定義使用(pkg state module)調用 installed 函數
最後可以在終端中執行命令來查看結果:
salt '*' state.highstate
或附件 test=True參數 測試執行
salt '*' state.highstate -v test=True
主控端對目標主機(targeted minions)發出指令運行state.highstatem模塊,目標主機首先會對top.sls下載,解析,然後按照top.sls內匹配規則內的定義的模塊將被下載,解析,執行,然後結果反饋給 master.
2. SLS文件命名空間
注意在以上的例子中,SLS文件 webserver.sls 被簡稱爲webserver. SLS文件命名空間有如下幾條基本的規則:
SLS文件的擴展名 .sls 被省略。 (例如. webserver.sls 變成 webserver)
子目錄可以更好的組織,每個子目錄都由一個點來表示.(例如 webserver/dev.sls 可以簡稱爲 webserver.dev)
如果子目錄創建一個init.sls的文件,引用的時候僅指定該目錄即可. (例如 webserver/init.sls 可以簡稱爲 webserver)
如果一個目錄下同時存在webserver.sls 和 webserver/init.sls,那麼 webserver/init.sls 將被忽略,SLS文件引用的webserver將只引用webserver.sls
3 . state多文件示例
下面是一個state多文件示例,
apache/init.sls apache/httpd.confssh/init.sls ssh/server.sls ssh/banner ssh/ssh_config ssh/sshd_config
創建一個引用這些目錄的 server.sls
server: - apache - ssh
state的層級關係
include 示例:
include 包含某個state文件
/srv/salt/apache.sls
apache: pkg: - installed service: - running - require: - pkg: apache
使用 include 可以包換有state文件而不必重新寫
/srv/salt/apache-custom.sls
include: apache
extend 示例:
extend 與include配合使用,作用是 修改,或擴展引用的state文件的某個字段
/srv/salt/apache.sls
apache: pkg: - installed service: - running - require: - pkg: apache
extend默認是替換引用文件的某個字段的屬性,如例
/srv/salt/apache-change.sls
include: - apache extend: apache pkg: - name: vim - installed
當extend與watch,或require結合使用的時候,則是擴展某個字段的屬性,如例:
/srv/salt/apache-custom.sls
include: - apache extend: apache service: - watch: - file: /etc/redis.conf
4. state的邏輯關係列表及示例
match: 配模某個模塊,比如 match: grain match: nodegroup require: 依賴某個state,在運行此state前,先運行依賴的state,依賴可以有多個 watch: 在某個state變化時運行此模塊 order: 優先級比require和watch低,有order指定的state比沒有order指定的優先級高
# state的邏輯關係
require:依賴某個state,在運行此state前,先運行依賴的state,依賴可以有多個
httpd: # maps to "name" pkg: - installed file: # maps to State module filename - managed: # maps to the managed function in the file State module - name: /etc/httpd/conf/httpd.conf # one of many options passed to the manage function - source: salt://httpd/httpd.conf - require: - pkg: httpd
watch:在某個state變化時運行此模塊,watch除具備require功能外,還增了關注狀態的功能。
redis: pkg: - latest file.managed: - source: salt://redis/redis.conf - name: /etc/redis.conf - require: - pkg: redis service.running: - enable: True - watch: - file: /etc/redis.conf - pkg: redis
order:優先級比require和watch低,有order指定的state比沒有order指定的優先級高
vim: pkg.installed: - order: 1
# 想讓某個state最後一個運行,可以用last
5. 進階主題:模板
使用模板來精簡SLS,使SLS可以使用python的 循環,分支,判斷 等邏輯
{% for item in ['tmp','test'] %} /opt/{{ item }}: file.directory: - user: root - group: root - mode: 755 - makedirs: True {% endfor %} httpd: pkg.managed: {% if grains['os'] == 'Ubuntu' %} - name: apache2 {% elif grains['os'] == 'CentOS' %} - name: httpd {% endif %} - installed
通過加載jinja模板引擎,可以模板配置文件按照預訂條件來生成最終的配置文件
/opt/test.conf
{% if grains['os'] == 'Ubuntu' %} host: {{ grains['host'] }} {% elif grains['os'] == 'CentOS' %} host: {{ grains['fqdn'] }} {% endif %} /opt/test.conf: file.managed: - source: salt://test.conf - user: root - group: root - mode: 644 - template: jinja
參考文檔
文檔: http://docs.saltstack.com/topics/tutorials/starting_states.html
文檔: http://docs.saltstack.com/ref/states/writing.html
文檔: http://docs.saltstack.com/ref/states/ordering.html
文檔: http://www.ituring.com.cn/article/37783
文檔: http://docs.saltstack.com/topics/tutorials/starting_states.html
作者:擼大師
鏈接:https://www.jianshu.com/p/6d87c358748a
來源:簡書