saltstack grains與pillar使用和訂制
一、grains與pillar簡介
grains是minion啟動時加載,在minion運行過程中不會發生變化,所以是靜態數據。grains數據的定制可以在各minion端,也可以放在master端;grains中包含許多的信息,如:運行的內核版本,操作系統,網絡接口地址,MAC地址,cpu,內存等等信息。
Pillar是Salt用來分發全局變量到所有或指定minion的一個定制接口,所以相對grains來說可以稱為動態的數據,保存在master端。
由於涉及的配置文件采用yaml格式,如果對yaml語法不在熟悉請訪問這裏
http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
最好也了解下jinjia2的格式,如不熟悉請訪問這裏
http://docs.jinkan.org/docs/jinja2/intro.html
saltstack的安裝部署請看這裏
http://dyc2005.blog.51cto.com/270872/1967147
二、grains日常使用入門
1、獲取minion的grains所有數據
salt "minion_152" grains.items
類似如圖:
2、獲取單項grains值
#salt "minion_152" grains.item os
如圖:
3、獲取grains中的所有項(鍵)
#salt "minion_152" grains.ls #以minion_152上的為例
這樣就可通過grains.item 項去獲取具體對應的值啦
4、在minion上訂制grains數據
訂制grains數據有兩種方法分別如下:
方法一:
修改/etc/salt/minion配置文件去掉12行左右的註釋
default_include: minion.d/*.conf
在/etc/salt/minion.d目錄下
創建一個test.conf 內容如下:
grains: Data: - test Project: - wgdbl_game
重啟minion
#salt "minion_152" grains.items
如圖:
方法二:
在master操作
mkdir -pv /srv/salt/_grains cd /srv/salt/_grains cat hello.py
#!/usr/bin/python def GrainsHello(): grains = {} grains["project"] = "myTestProject" grains["name"] = "san game" return grains
在服務端寫好腳本再同步刷新到指定minion
#salt "minion_152" saltutil.sync_grains
如圖:
推送更新成功。
此時到minion_152所在的機器
/var/cache/salt/minion/files/base/_grains/會發現 在master端創建的hello.py grains腳本已經推送至此,如圖:
並且在該minion下的
/var/cache/salt/minion/extmods/grains 下有執行的標記生成了hello.pyc
第一種方法是grains中的純靜態指定minion下生成並且要重啟minion生效,第二種方法可以統一放在胳端管理,再推送到各指定minions 動態生成管理。
三、pillar的使用
1、獲取指定minion上pillar的數據
首先與grains不同的是要獲取pillar需要在master的配置文件中打開
取消552行的註釋如下:
pillar_opts: True
並重啟salt-master
#salt "minion_152" pillar.data 如圖:
註意:最好不要在線上使用 salt "*" pillar.data 這想會卡的哦。
2、pillar數據定制
配置master的pillar的根目錄
取消529 -532 的註釋
529 pillar_roots: 530 base: 531 - /srv/pillar
創建根目錄
mkdir -pv /srv/pillar
重啟salt-master
切換到/srv/pillar目錄
創建pillar頂層入口文件(相當於目錄)top.sls,註意必須要以sls後綴。
cat top.sls base: "*": - data "minion_152": - minion152
創建 data.sls
cat data.sls
project_name: san subject: - zgws - wgdbl
創建 minion152.sls
cat minion152.sls
Minion_152: info HostName: - zgws_game01 IP: - 172.16.3.152 game: - zgws
向minion同步pillar數據
#salt "minion_152" saltutil.refresh_pillar
如圖:
查看minion_152 pillar數據
#salt "minion_152" pillar.data 或 #salt "minion_152" pillar.items
如圖:
由於只對minion_152進行推送更新pIllar 因此其他的minion不會收到更新。
3、pillar配置文件中增加jinjia2格式的判斷
cat top.sls
base: "*": - data "minion_152": - minion152 - osinfo
創建osinfo.sls
cat osinfo.sls
OS_INFO: - {{ grains.os}} {% if grains["os"] == "CentOS"%} - Linux System {% endif %}
刷新pillar數據
#salt "minion_152" saltutil.refresh_pillar
查看minion_152 pillar數據
如圖:
通過grains和pillar可以很方便的定制出特定的數據,pillar 配置是完全保存在master端的,而grains既可以保存在master端也可以單獨至minion端,每次修改需要重啟minion端。pillar偏向敏感數據的統一存放在master端且靈活修改。
本文出自 “學無止境,學以致用” 博客,請務必保留此出處http://dyc2005.blog.51cto.com/270872/1967804
saltstack grains與pillar使用和訂制