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: