1. 程式人生 > >saltstack grains與pillar使用和訂制

saltstack grains與pillar使用和訂制

saltstack pillar grains的簡單使用與訂制

一、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使用和訂制