自動化運維工具SaltStack - 多環境(使用記錄【state.sls 與 state.highstate】)


轉自:https://segmentfault.com/a/1190000000513137

今天在進行 saltstack 多環境的時候,遇到一個問題,最終得到解決,好記性不如爛筆頭,記錄。

首先,我在 salt master 服務器上對 /etc/salt/master 配置文件進行多環境配置,配置文件如下:

file_roots:  base: - /srv/salt/base  dev: - /srv/salt/dev  prod: - /srv/salt/prod  test: - /srv/salt/test 

然后在分別建立配置文件所配置的目錄。
其中我的 /srv/salt/prod 的目錄樹如下:

/srv/salt/prod
|-- nginx | `-- stock.sls |-- stock.prod.com | `-- nginx | `-- stock.prod.com `-- top.sls 

我做這個主要是為了對集群中的 nginx 的配置文件進行批量管理,當配置文件變更后,能進行批量推送。

弄完以上后,執行命令讓其生效:

sudo salt -N STOCK  state.highstate -v 

執行完畢,能成功生效,但是突然想到個問題,這個是全局的所有的環境的所有的狀態生效,如果我要只對 prod 環境的某一個狀態生效呢,或者是其他的環境。於是查看官方文檔,發現了可以使用 state.sls 來指定特定的進行處理,當時也沒有細看,就直接執行命令:

sudo salt -N STOCK state.sls nginx.stock 

結果執行報錯,告訴我在 base 下面沒有匹配到 nginx.stock

當時想,不應該是,我不是定義了么,開始是以為 state.sls 和 state.highstate 一樣,會對所有的環境遍歷。
有問題,就 google 唄,然后 google 了下沒有出來,啃官方文檔去,找到 state.sls 的那段,發現定義如下:

salt.modules.state.sls(mods,saltenv='base',test=None,exclude=None,queue=False,env=None,concurrent=False,**kwargs) 

從上面可以看出, state.sls 默認的運行環境是 base,另外通過查看了下 saltstack 的 google groups ,發現綠肥也對這個解答了下, state.sls 並不讀取 top.sls,所以 state.sls 需要單獨執行哪些 sls 的話,需要你自定義。
綠肥解答的連接請點擊這里

注:由於萬惡的長城的存在,請准備梯子。

經過上面的查看,因此,修正執行命令

 sudo salt -N STOCK state.sls saltenv='prod' nginx.stock 

多加一個參數 saltenv,問題解決。更詳細的內容請看官方的文檔介紹 - salt.modules.state.sls


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM