grains學習

    saltstack有三種定義數據的方式,分別是grains,pillar,mine,每種方式的使用狀況不同,在前期學習的時候各類蛋疼,不知道哪一種狀況使用哪一種方式,很模糊。通過本身的學習,終於弄清楚了它們的不一樣點。先不用急,咱們先學習下基礎的用法,後期會總結下它們的不一樣點和具體使用狀況。app


    salt有一個接口用來收集客戶端的系統基礎信息,這個接口就是grains,收集到的數據就稱爲grains數據。經過grains數據,咱們能夠作不少事情,好比使用grains指定target,使用grains來定義不一樣的值,在sls中使用grains使得sls更加靈活等等。
ide

    可是grains數據是隨着minion啓動時就加載的數據,這些數據是靜態的,不可修改的。除非你去重啓minion或者刷新grains。可是這個代價是很高的。因此咱們在定義數據時儘可能不要使用grains。學習

    說了這麼多,咱們實際操做下。直接上圖。
spa

wKioL1OH6H3jfr__AANge49znzo038.jpg


這個操做顯示了192.168.79.49這臺機器的全部grains信息。blog

若是你只想顯示某個信息,能夠直接使用grains.item host就會顯示host這個key對應的信息。
接口

具體用法可使用salt-call sys.doc grains查看幫助。get

如今咱們看看如何自定義grains數據。
it

第一種方式是在minion配置中定義,須要重啓minion才能更新io

wKioL1OH6y2xMVt9AABgEHjP4Hk652.jpg

第二種方式是在minion配置同一目錄增長文件grains,和上面相似,只是不須要grains開頭,一樣須要重啓minionclass

wKioL1OH63ajV7hAAABXVnwBrWU366.jpg

以上兩種方式,我基本不會使用,接下來介紹第三種方式,就是自定義模塊返回grains數據,這個就要刷新grains數據,不須要重啓minion。

在_grains目錄下自定義模塊,這個目錄放哪裏呢?記得file_roots定義的目錄嗎?對的,_grains目錄須要放在file_roots定義的目錄下才會起做用的。也就是/opt/app/salt/state/prod/_grains目錄。

在_grains創建文件test.py,內容以下

wKiom1OH8ZqydguuAACCHxyF4kU219.jpg

操做以下,看看,神奇吧,很牛是吧。

wKiom1OH8mCCLeTcAAIlPf-4iVw660.jpg

grains的加載順序以下:

一、加載核心grains

二、加載_grains目錄下的grains信息

三、加載grains文件

四、加載minion配置中的grains


爲了不覆蓋以前的信息,咱們能夠給grains添加名字空間,這樣就不會覆蓋了。

wKiom1OH9vOwfzZDAAEuVE-NSC8107.jpg

其實就是多加一層字典而已。


待續。

相關文章
相關標籤/搜索