SLS(表明SaLt State文件)是Salt State系統的核心。SLS描述了系統的目標狀態,由格式簡單的數據構成。這常常被稱做配置管理html
top.sls 是配置管理的入口文件,一切都是從這裏開始,在master 主機上,默認存放在/srv/salt/目錄. top.sls 默認從 base 標籤開始解析執行,下一級是操做的目標,能夠經過正則,grain模塊,或分組名,來進行匹配,再下一級是要執行的state文件,不包換擴展名。node
建立 /srv/salt/top.slspython
base: '*': - webserver
base: group1: - match: nodegroup - webserver
base: 'os:Fedora': - match: grain - webserver
準備好top.sls文件後,編寫一個state文件web
apache: # 標籤訂義 pkg: # state declaration - installed # function declaration
最後能夠在終端中執行命令來查看結果:redis
salt '*' state.highstate
或附件 test=True參數 測試執行apache
salt '*' state.highstate -v test=True
主控端對目標主機(targeted minions)發出指令運行state.highstatem模塊,目標主機首先會對top.sls下載,解析,而後按照top.sls內匹配規則內的定義的模塊將被下載,解析,執行,而後結果反饋給 master.vim
注意在以上的例子中,SLS文件 webserver.sls 被簡稱爲webserver. SLS文件命名空間有以下幾條基本的規則:markdown
下面是一個state多文件示例,ssh
apache/init.sls apache/httpd.conf ssh/init.sls ssh/server.sls ssh/banner ssh/ssh_config ssh/sshd_config
建立一個引用這些目錄的 server.sls函數
server: - apache - ssh
/srv/salt/apache.sls
apache: pkg: - installed service: - running - require: - pkg: apache
使用 include 能夠包換有state文件而沒必要從新寫
include: apache
/srv/salt/apache.sls
apache: pkg: - installed service: - running - require: - pkg: apache
extend默認是替換引用文件的某個字段的屬性,如例
include: - apache extend: apache pkg: - name: vim - installed
當extend與watch,或require結合使用的時候,則是擴展某個字段的屬性,如例:
include: - apache extend: apache service: - watch: - file: /etc/redis.conf
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
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
vim: pkg.installed: - order: 1
想讓某個state最後一個運行,能夠用last
{% 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
/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