http://732233048.blog.51cto.com/9323668/1640792
参考:
pillar:http://docs.saltstack.cn/zh_CN/latest/topics/tutorials/pillar.html
grains:http://docs.saltstack.cn/zh_CN/latest/topics/targeting/grains.html#targeting-grains
http://www.furion.info/414.html
pillar和grains:
pillar:
salt 一个非常重要的组件,它用于给特定的minion定义任何需要的数据(数据是动态的),这些数据,这些数据库可以被salt 其他的组件 如state 使用
可以根据需要自定义pillar 变量,如果用户和uid ,
grains:
主要负责搜集minion端一些文本信息,如果:主机名,ip,接口,操作系统等等,这些信息都是静态的,grains 可以自定义,可以在minion端自定义,然后minion断搜集本地信息发送给master,断,也可以在master端自定义,然后master断把自定义的grains 推送到minion断,去采集minon端相关信息。
我们可以等到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定的,不易变化的请使用grains
我通常会把pillar或grains 看成一个很大的字典,字典名就是pillar活grains;在grains 字典忠会有很多键值对,每个键对应一个值,如:{{ grains['os'] }} 的值就是CentOS
pillar:
命令:
salt '*' pillar.items
salt '*' pillar.items users
##创建pillar目录:
[root@dbm133 ~]# mkdir /srv/pillar/
##pillar目录树:
[root@dbm133 ~]# cd /srv/pillar/
[root@dbm133 pillar]# tree
.
├── file
│ └── init.sls
└── top.sls
##pillar入口文件:
[root@dbm133 pillar]# cat top.sls
base:
'*':
- file
##pillar的.sls文件
[root@dbm133 pillar]# cd file/
[root@dbm133 file]# ll
total 4
-rw-r--r-- 1 root root 29 Jul 21 13:40 init.sls
[root@dbm133 file]# cat init.sls
files:
file1: /tmp/scj/file10 ##pillar变量格式就是键值对,key:value;此处是嵌套
name: jeff
##当pillar数据在master变更时,minions需要刷新本地数据,可以通过saltutil.refresh_pillar函数完成
salt '*' saltutil.refresh_pillar ##所有minion刷新本地数据
调用pillar变量:
##创建.sls文件:
[root@dbm133 httpd]# pwd
/srv/salt/web/httpd
[root@dbm133 httpd]# cat conf.sls
{{ pillar['files']['file1'] }}: ##调用pillar变量,两个花括号;可以改成{{ pillar.get('files:file1','') }}
file:
- managed
- source: salt://web/files/file1
- template: jinja ##一定要指定template: jinja,只有这样才会去找pillar变量
##配置salt://web/files/file1文件:
[root@dbm133 files]# pwd
/srv/salt/web/files
[root@dbm133 files]# cat file1
hello {{ pillar['name'] }} ##调用pillar变量,两个花括号,调用pillar字典中name键所对应的值
###在.sls文件和配置文件里都可以调用pillar变量和grains变量
推送到minion:
salt zszz_192.168.186.132 state.highstate
grains:
命令:
salt '*' grains.ls 查看grains所有分类
salt '*' grains.items 查看grains所有信息
salt '*' grains.item os 查看grains某个分类信息
:在master端定义:
##在master端定义,需要用python去编写
##创建_grains目录
[root@dbm133 ~]# mkdir /srv/salt/_grains #必须是_grains目录
[root@dbm133 ~]# cd /srv/salt/_grains
[root@dbm133 _grains]# vi mygrains.py
#!/usr/bin/python
#encoding:utf-8
def mygrain():
grain1={} #需要定义一个字典,因为grains就是一个大的字典
grain1['company']='chengmeng'
grain1['zhiwei']='yunwei'
return grain1
##把自定义grains推送到minion端:
[root@dbm133 ~]# salt '*' saltutil.sync_all
zszz_192.168.186.135:
----------
beacons:
grains:
- grains.mygrains ##mygrains 即:python脚本名
modules:
outputters:
renderers:
returners:
states:
utils:
zszz_192.168.186.132:
----------
beacons:
grains:
- grains.mygrains
modules:
outputters:
renderers:
returners:
states:
utils: