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: