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所有数据

1
salt  "minion_152"  grains.items
1
类似如图:

wKiom1nEszWBn-i0AACP-CKEVfY848.png

2、获取单项grains值

1
#salt "minion_152" grains.item os

如图:

wKiom1nEs7KiX30BAAAT2wJ9Tt4010.png

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

1
#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 内容如下:

1
2
3
4
5
grains:               
    Data:
       test
    Project:
       - wgdbl_game

重启minion

1
#salt "minion_152" grains.items

如图:

wKioL1nEtz3gj5OEAAAlXf3EZlE507.png


方法二:

在master操作

1
2
3
mkdir  -pv  /srv/salt/_grains
cd   /srv/salt/_grains
cat  hello.py
1
2
3
4
5
6
#!/usr/bin/python
def  GrainsHello():    
     grains  =  {}
     grains[ "project" =  "myTestProject"
     grains[ "name" =  "san game"   
     return  grains

在服务端写好脚本再同步刷新到指定minion

1
#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


1
2
#salt  "minion_152" pillar.data
如图:

wKiom1nEvyTg31wsAAA1sva79G0048.png

注意:最好不要在线上使用 salt "*" pillar.data   这想会卡的哦。


2、pillar数据定制

配置master的pillar的根目录

取消529 -532 的注释

1
2
3
529 pillar_roots:
530   base:
531     -  /srv/pillar

创建根目录

mkdir -pv /srv/pillar

重启salt-master

切换到/srv/pillar目录

创建pillar顶层入口文件(相当于目录)top.sls,注意必须要以sls后缀。

1
2
3
4
cat  top .sls
base:    "*" :      
    - data    "minion_152" :
    - minion152

创建 data.sls

cat data.sls

1
2
3
4
project_name: san
subject:
    -  zgws
    -  wgdbl


创建 minion152.sls

cat minion152.sls

1
2
3
4
5
6
7
Minion_152: info
HostName:
    -  zgws_game01
IP:
    -  172.16 . 3.152
game:
    -  zgws

向minion同步pillar数据

1
#salt "minion_152" saltutil.refresh_pillar

  如图:

wKioL1nEwtfwLwvyAAARPjz_LBY011.png查看minion_152 pillar数据

1
2
3
#salt "minion_152" pillar.data
#salt "minion_152" pillar.items

如图:

wKioL1nExInDaGAAAAAkpynHMng728.png


wKioL1nExLuyoutzAAAUAgcdUzY877.png


由于只对minion_152进行推送更新pIllar 因此其他的minion不会收到更新。


3、pillar配置文件中增加jinjia2格式的判断

cat top.sls

1
2
3
4
5
6
base:
    "*" :
       -  data
    "minion_152" :
       -  minion152
       -  osinfo


创建osinfo.sls

cat osinfo.sls

1
2
3
4
5
OS_INFO:
     -  {{ grains.os}}
     { %  if  grains[ "os" = =  "CentOS" % }
     -  Linux System
     { %  endif  % }

刷新pillar数据

1
#salt "minion_152" saltutil.refresh_pillar

查看minion_152 pillar数据

如图:

wKiom1nEy3iQgMogAAAwnUIs1cg033.png

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










本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/1967804,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
关系型数据库 Linux Python
|
Linux Apache 开发工具
|
Web App开发 应用服务中间件 Shell
|
Web App开发 存储 应用服务中间件