一、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
类似如图:

wKiom1nEszWBn-i0AACP-CKEVfY848.png

2、获取单项grains值

#salt "minion_152" grains.item os

如图:

wKiom1nEs7KiX30BAAAT2wJ9Tt4010.png

3、获取grains中的所有项(键)

#salt "minion_152" grains.ls     #以minion_152上的为例

wKioL1nEtIfi1DyaAAAamtqXnLE317.png

这样就可通过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

如图:

wKioL1nEtz3gj5OEAAAlXf3EZlE507.png


方法二:

在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

如图:

wKioL1nEuTbw7YfsAAATLK_nZIY145.png

推送更新成功。

此时到minion_152所在的机器

/var/cache/salt/minion/files/base/_grains/会发现 在master端创建的hello.py grains脚本已经推送至此,如图:

wKioL1nEugqDTZ7CAAA1ASTuB8U666.png

并且在该minion下的

/var/cache/salt/minion/extmods/grains 下有执行的标记生成了hello.pyc

wKiom1nEuonQUJO6AAAYreNCuBE584.png

第一种方法是grains中的纯静态指定minion下生成并且要重启minion生效,第二种方法可以统一放在胳端管理,再推送到各指定minions 动态生成管理。


三、pillar的使用

1、获取指定minion上pillar的数据

首先与grains不同的是要获取pillar需要在master的配置文件中打开

取消552行的注释如下:

pillar_opts: True

并重启salt-master


#salt  "minion_152" pillar.data
如图:

wKiom1nEvyTg31wsAAA1sva79G0048.png

注意:最好不要在线上使用 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

  如图:

wKioL1nEwtfwLwvyAAARPjz_LBY011.png查看minion_152 pillar数据

#salt "minion_152" pillar.data
或
#salt "minion_152" pillar.items

如图:

wKioL1nExInDaGAAAAAkpynHMng728.png


wKioL1nExLuyoutzAAAUAgcdUzY877.png


由于只对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数据

如图:

wKiom1nEy3iQgMogAAAwnUIs1cg033.png

通过grains和pillar可以很方便的定制出特定的数据,pillar 配置是完全保存在master端的,而grains既可以保存在master端也可以单独至minion端,每次修改需要重启minion端。pillar偏向敏感数据的统一存放在master端且灵活修改。