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:
转载于:https://blog.51cto.com/rickyhui/1694708