SLS(表明SaLt State文件)是Salt State系統的核心。SLS描述了系統的目標狀態,由格式簡單的數據構成。這常常被稱做配置管理 首先,在master上面定義salt的主目錄,默認是在/srv/salt/下面,vim /etc/salt/master:php
file_roots: base: - /srv/salt dev: - /srv/salt-dev
而後,在/srv/salt下面建立top.sls文件(若是有的話,就不用建立了,直接編輯好了) vim top.slsnode
base: '*':
top.sls 默認從 base 標籤開始解析執行,下一級是操做的目標,能夠經過正則,grain模塊,或分組名,來進行匹配,再下一級是要執行的state文件nginx
base: '*': #經過正則去匹配全部minion - nginx #這裏都是我本身寫的state.sls模塊名 這裏能夠無視 後面會提到 my_app: #經過分組名去進行匹配 必需要定義match:nodegroup - match: nodegroup - nginx 'os:Redhat': #經過grains模塊去匹配,必需要定義match:grain - match: grain - nginx
整個top.sls大概的格式就是這個樣子,編寫完top.sls後,編寫state.sls文件;web
cd /srv/salt vim nginx.sls
nginx.sls內容:shell
nginx: pkg: #定義使用(pkg state module) - installed #安裝nginx(yum安裝) service.running: #保持服務是啓動狀態 - enable: True - reload: True - require: - file: /etc/init.d/nginx - watch: #檢測下面兩個配置文件,有變更,立馬執行上述/etc/init.d/nginx 命令reload操做 - file: /etc/nginx/nginx.conf - file: /etc/nginx/fastcgi.conf - pkg: nginx /etc/nginx/nginx.conf: #絕對路徑 file.managed: - source: salt://files/nginx/nginx.conf #nginx.conf配置文件在salt上面的位置 - user: root - mode: 644 - template: jinja #salt使用jinja模塊 - require: - pkg: nginx /etc/nginx/fastcgi.conf: file.managed: - source: salt://files/nginx/fastcgi.conf - user: root - mode: 644 - require: - pkg: nginx
在當前目錄下面(salt的主目錄)建立files/nginx/nginx.conf、files/nginx/fastcgi.conf文件,裏面確定是你本身項配置的nginx配置文件的內容啦;使用salt作自動化,通常nginx都是挺熟悉的,這裏不作詳細解釋了vim
測試安裝:安全
root@salt salt # salt 'sa10-003' state.sls nginx test=True ··········這裏省略輸出信息 Summary ------------ Succeeded: 8 Failed: 0 ------------Total: 8
往minion上面進行推送的時候,通常salt ‘sa10-003’ state.sls nginx 這種命令;固然,也能夠執行 salt sa10-003 state.highstate 這種命令會默認匹配全部的state.sls模塊。其中test=True 是指測試安裝 ,也就是不進行實際操做,只是查看測試效果。session
state的邏輯關係列表:
include: 包含某個文件 好比我新建的一個my_webserver.sls文件內,就能夠繼承nginx和php相關模塊配置,而沒必要從新編寫app
root@salt salt # cat my_webserver.sls include: - nginx - php
match: 配模某個模塊,好比 以前定義top.sls時候的 match: grain match: nodegroup require: 依賴某個state,在運行此state前,先運行依賴的state,依賴能夠有多個 好比文中的nginx模塊內,相關的配置必需要先依賴nginx的安裝運維
- require: - pkg: nginx
watch: 在某個state變化時運行此模塊,文中的配置,相關文件變化後,當即執行相應操做
- watch: - file: /etc/nginx/nginx.conf - file: /etc/nginx/fastcgi.conf - pkg: nginx
order: 優先級比require和watch低,有order指定的state比沒有order指定的優先級高,假如一個state模塊內安裝多個服務,或者其餘依賴關係,可使用
nginx: pkg.installed: - order:1
想讓某個state最後一個運行,能夠用last
Pillar是Salt很是重要的一個組件,它用於給特定的minion定義任何你須要的數據,這些數據能夠被Salt的其餘組件使用。這裏能夠看出Pillar的一個特色,Pillar數據是與特定minion關聯的,也就是說每個minion都只能看到本身的數據,因此Pillar能夠用來傳遞敏感數據(在Salt的設計中,Pillar使用獨立的加密session,也是爲了保證敏感數據的安全性)。 另外還能夠在Pillar中處理平臺差別性,好比針對不一樣的操做系統設置軟件包的名字,而後在State中引用等。
默認狀況下,master配置文件中的全部數據都添加到Pillar中,且對全部minion可用。默認以下:
#pillar_opts: True
master上配置文件中定義pillar_roots,用來指定pillar的數據存儲在哪一個目錄
pillar_roots: base: - /srv/salt/pillar
首先,和state系統同樣,pillar也是須要一個top.sls文件做爲一個入口,用來指定對象。
base: '*': - pillar #這裏指定了一個pillar模塊
pillar.sls文件:
############IDC################ {% if grains['ip_interfaces'].get('eth0')[0].startswith('10.10') %} nameservers: ['10.10.9.31','10.10.9.135'] zabbixserver: ['10.10.9.234'] {% else %} nameservers: ['10.20.9.75'] zabbixserver: ['10.20.9.234'] {% endif %} ######## nginx ######## ngx_home_dir: /var/cache/nginx
上文的IDC這塊是我本身整理的經過ip來劃分不一樣的nameserver等,這裏只是放出來參考,在State文件中將能夠引用Pillar數據,好比引用
ngx_home_dir:
nginx: pkg: - installed user.present: - home: {{ pillar['ngx_home_dir'] }} - shell: /sbin/nologin - require: - group: nginx group.present: - require: - pkg: nginx service.running: - enable: True - reload: True - require: - file: /etc/init.d/nginx - file: /data1/logs/nginx - watch: - file: {{ pillar['ngx_conf_dir'] }}/nginx.conf - file: {{ pillar['ngx_conf_dir'] }}/fastcgi.conf - pkg: nginx ······ 後面關於配置就省略了
在pillar內能夠提早將不一樣的部分根據在pillar內定義好,這樣統一配置的時候就能夠實現根據機器實際狀況配置;好比根據機器的硬件狀況配置nginx的worker_processes:
user nginx; {% if grains['num_cpus'] < 8 %} worker_processes {{ grains['num_cpus'] }}; {% else %} worker_processes 8; {% endif %} worker_rlimit_nofile 65535; ``````````具體配置省略
不少定義的時候,均可以使用到pillar來進行自定義相關數據,具體狀況能夠自行摸索,這裏只是個舉例。
系統運維工程師:李超