saltstack有三種定義數據的方式,分別是grains,pillar,mine,每種方式的使用狀況不同,在前期學習的時候各類蛋疼,不知道哪一種狀況使用哪一種方式,很模糊。通過本身的學習,終於弄清楚了它們的不一樣點。先不用急,咱們先學習下基礎的用法,後期會總結下它們的不一樣點和具體使用狀況。app
salt有一個接口用來收集客戶端的系統基礎信息,這個接口就是grains,收集到的數據就稱爲grains數據。經過grains數據,咱們能夠作不少事情,好比使用grains指定target,使用grains來定義不一樣的值,在sls中使用grains使得sls更加靈活等等。
ide
可是grains數據是隨着minion啓動時就加載的數據,這些數據是靜態的,不可修改的。除非你去重啓minion或者刷新grains。可是這個代價是很高的。因此咱們在定義數據時儘可能不要使用grains。學習
說了這麼多,咱們實際操做下。直接上圖。
spa
這個操做顯示了192.168.79.49這臺機器的全部grains信息。blog
若是你只想顯示某個信息,能夠直接使用grains.item host就會顯示host這個key對應的信息。
接口
具體用法可使用salt-call sys.doc grains查看幫助。get
如今咱們看看如何自定義grains數據。
it
第一種方式是在minion配置中定義,須要重啓minion才能更新io
第二種方式是在minion配置同一目錄增長文件grains,和上面相似,只是不須要grains開頭,一樣須要重啓minionclass
以上兩種方式,我基本不會使用,接下來介紹第三種方式,就是自定義模塊返回grains數據,這個就要刷新grains數據,不須要重啓minion。
在_grains目錄下自定義模塊,這個目錄放哪裏呢?記得file_roots定義的目錄嗎?對的,_grains目錄須要放在file_roots定義的目錄下才會起做用的。也就是/opt/app/salt/state/prod/_grains目錄。
在_grains創建文件test.py,內容以下
操做以下,看看,神奇吧,很牛是吧。
grains的加載順序以下:
一、加載核心grains
二、加載_grains目錄下的grains信息
三、加載grains文件
四、加載minion配置中的grains
爲了不覆蓋以前的信息,咱們能夠給grains添加名字空間,這樣就不會覆蓋了。
其實就是多加一層字典而已。
待續。