Call multiple states(調(diào)用多個(gè)states)
你可以在一個(gè)聲明的ID下面定義多個(gè)state語句,例如,我們可以快速的修改webserver.sls,并且如果apache沒有運(yùn)行將其啟動(dòng)。
httpd:
pkg: #state類型聲明
- installed
service: #state類型聲明
- running
- require:
- pkg: httpd
在運(yùn)行state.highstate之前,嘗試停止apache,并且再次觀察其輸出內(nèi)容。
Require other states(依賴其他state)
現(xiàn)在我們已經(jīng)安裝了apache,并且處于工作狀態(tài),讓我們添加一個(gè)HTML文件來定制我們的網(wǎng)站。將下面的內(nèi)容添加進(jìn)你的webserver/init.sls文件中:
httpd:
pkg:
- installed
service:
- running
- require:
- pkg: httpd
/var/www/html/index.html: # 聲明一個(gè)ID
file: # 聲明state
- managed # state中的函數(shù)名
- source: salt://webserver/index.html # 函數(shù)的參數(shù)
- require: # 聲明requisite
- pkg: httpd # requisite的引用
第9行聲明一個(gè)新的ID,在這個(gè)例子中它是我們自定義的HTML文件要安裝的位置(Note:在不同的操作系統(tǒng)或發(fā)行版上apache服務(wù)的默認(rèn)位置可能不同,/srv/www也可能是個(gè)好位置。)
第10行聲明使用的state。
第11行聲明使用第十行中的state的函數(shù)名。這個(gè)managed函數(shù)將從master上下載文件,并且按照指定的位置進(jìn)行安裝。
第12行是函數(shù)的參數(shù),在本例中利用managed函數(shù)中的source參數(shù),指定需要從master上下載的文件的路徑和名稱
第13行是require的聲明
第14行是require所要引用的state和ID,在這個(gè)例子它值的例子開頭處的那個(gè)ID,這個(gè)聲明告訴salt在不安裝apache之前不要安裝HTML文件
接下來,創(chuàng)建index.html文件,并且保存在webserver目錄下:
<html>
<head><title>Salt rocks</title></head>
<body>
<h1>This file brought to you by Salt</h1>
</body>
</html>
最后,在調(diào)用一次state.highstate,minion將獲取和執(zhí)行highstate以及從master的文件服務(wù)器上獲取我們的HTML文件
salt '*' state.highstate
現(xiàn)在驗(yàn)證apache中你自定義的HTML吧!
http://192.168.181.17
require VS watch
現(xiàn)在有兩個(gè)依賴的聲明,"require和watch",不是所有的state都支持"watch"。service state不支持"watch"并且不支持通過觀察一個(gè)條件進(jìn)行重新啟動(dòng)一個(gè)服務(wù)
例如,如果你使用salt配置安裝apache的虛擬主機(jī),當(dāng)配置文件發(fā)送改變時(shí)要重啟apache,你可以修改之前的例子:
/etc/httpd/extra/httpd-vhosts.conf:
file:
- managed
- source: salt://webserver/httpd-vhosts.conf
apache:
pkg:
- installed
service:
- running
- watch:
- file: /etc/httpd/extra/httpd-vhosts.conf
- require:
- pkg: apache