Saltstack自0.17.x版本開始引進Formulas的概念,旨在經過簡化State和集成數據來實現State的友好管理。根據SALT FORMULAS的官方文檔,在完成手動添加formula目錄後,formula應該提供一些默認的配置而當即可用。若是須要進一步的配置,大部分的formulas能夠經過Pillar數據進行配置,能夠參考每一個Formula倉庫的pillar.example文件查詢可用的配置。html
先來看下編寫State的通常樣例:apache
乍看一下以爲這樣寫很正常,但是仔細想一想吧,這樣一來,apache的應用屬性的判斷邏輯寫死在sls文件裏,一旦須要更多的判斷邏輯時這樣的寫法便稍顯笨拙,那麼,有什麼好辦法呢?spa
其實簡單來講的話,Formulas便是建議使用Salt的用戶編寫State sls時統一使用map.jinjia來完成處理邏輯和判斷,從而生成相似pillar的變量數據。下面,一樣以apache爲例講述Salt Formulas編寫邏輯。Formulas結構以下:rest
Formulas的核心便在於map.jinja的編寫,如上Apache對應的map.jinja樣例內容以下:orm
這樣一來,apache對應的主sls(init.sls)內容則能夠改寫爲以下:server
少了複雜的判斷邏輯,多了變量數據的簡單使用!htm
Salt Formulas 還能夠經過結合Pillar實現更多的擴展。一樣以上述Apache的配置爲例,須要編寫conf.sls來完成apache的配置,結合Formulas Map 概念以後,它可能變成以下內容:blog
注意上述配置裏,除了導入map.jinja預約義內容外,還有一行source配置使用了奇怪的salt["pillar.get"]["apache:lookup:config:tmpl"],熟悉pillar的應該不陌生,這即是結合了pillar來完成state的定義。文檔
事先在/srv/pillar/top.sls裏包含apache.sls,然後在這個pillar定義文件裏添加對應內容來重寫映射關係:get
這樣一來,即可以基於Formulas map基礎上作更多的特點化配置。
如你所見,Formulas其實應該算是State的集成和封裝,事實上,Github也已經有不少的*-Formulas state出現,一個標準的*-Formulas 擁有如下結構:
具體可參照Github上已有的Formulas樣例,這裏再也不贅述。
參考內容: