Grains是saltstack的一個組件,它存放着minion啓動時收集到的系統底層的詳細信息,每次minion啓動時,就會進行Grains的採集並保存下來,在之後的生命週期裏面,除非你再次重啓minion,不然Grains是不會從新收集的。Grains的信息是靜態信息。php
那麼Grains會收集哪些信息呢?最好詳細瞭解它的內容!grains與遠程執行走的更近一些。node
Grains are collected for the operating system, domain name, IP address, kernel, OS type, memory, and many other system properties(屬性).nginx
r Grains可以在state系統中使用,用於配置管理模塊。web
r Grains可以在target中使用,再用來匹配minion,好比匹配操做系統,使用-G選項。apache
r Grains可以用於信息查詢,Grains保存着收集到的客戶端的詳細信息。vim
~ Available grains can be listed by using the 'grains.ls' module安全
salt 'saltstack-node1*' grains.ls
~ Grains data can be listed by using the 'grains.items' module(超級詳細)bash
salt 'saltstack-node1*' grains.items
~ 只顯示item 裏的os值,注意item後面沒有s服務器
salt '*' grains.item os
~ fqdndom
salt 'saltstack-node1*' grains.get fqdn
~ domain
salt 'saltstack-node1*' grains.get domain
~ ip4_interfaces
salt 'saltstack-node1*' grains.get ip4_interfaces
有三種方式,建議使用第2種,自定義grains文件,而不是在minion的配置文件中修改。
在minion配置文件中,支持配置grains。好比說,給一臺機器打一個標籤,標籤內容是webserver,這樣之後在作管理時,好比說,重啓全部的webserver服務時,那麼咱們就可使用這個標籤(即grains的值)來獲取。
不建議在這裏配置,由於會比較混亂,須要在每個minion端配置,工做量大而且很差統一。
~ 修改minion配置文件
[root@saltstack-node1 ~]# vim /etc/salt/minion#在minion配置文件中定義grains grains: role: webserver env: test # key: value # key是關鍵字,查詢時輸入key,返回的值是value。 # role表明機器扮演的角色是什麼(key),webserver表明是一臺webserver服務器(value) # env表明環境(key),test表明測試環境(value)
~ 驗證命令:驗證時,會有延時,要耐心等待,最好先用test.ping 來測試連通性。
salt 'saltstack-node1*' grains.get role salt 'saltstack-node1*' grains.get env
~ 官網案例
grains: roles:#第1個key - webserver#這樣寫表明列表形式,即這臺機器扮演多個角色(value1) - memcache#這樣寫表明列表形式,即這臺機器扮演多個角色(value2) deployment: datacenter4#第2個key,只有1個value cabinet: 13 cab_u: 14-15
~ 小結
r 會有延時,須要耐心等待與測試。
r 不建議使用這種方式定義grains。
第2種配置方式有個優勢,能夠把自定義的grains抽取出來,把配置寫好後,再批量分發給不一樣的minion端,這樣就能夠統一自定義的grains,並且配置還特別簡單。
~ 建立並修改grains文件
#注意寫法!test表明測試環境。 [root@saltstack-node1 ~]# vim /etc/salt/grains cloud: openstack roles: - nginx - php env: test #配置完成後,必需要重啓minion服務。
~ 驗證命令
salt 'saltstack-node1*' grains.get cloud salt 'saltstack-node1*' grains.get roles salt 'saltstack-node1*' grains.get env
若是出現下面的報錯,可以先test.ping,看是否有問題。服務端推送的時候,常常會有延時。
第3種用法,是在top file裏面編寫。
~ 建立並編寫top file
[root@saltstack-node1 ~]# vim /etc/salt/top.sls base: 'role:nginx' - match: grain - web.nginx # 必定要加上match關鍵字,匹配grain這個詞。
~ 和原來寫好的對比
[root@saltstack-node1 salt]# cat /srv/salt/top.sls base: '*':# 就是在這個地方,有改變,能夠用grains來匹配minion端,還行下面一行有改變 - apache
用於信息查詢,或執行命令均可以,在target中匹配minion,必須加 -G 選項。
salt -G cloud:openstack cmd.run 'df -h' salt -G env:test cmd.run 'ifconfig eth0|awk NR==2' salt -G roles:php cmd.run 'uname -r' salt -G os:CentOS cmd.run 'whoami'
Pilla也是saltstack的一個重要組件,在salt0.9.8版本增長了Pilla(動態數據)。
存儲位置:存儲在master端,存放須要提供給minion的信息。
應用場景:用來存儲敏感的信息,每一個minion只能訪問master分配給本身的Pilla。
它比較安全,grains比較不安全。
它的好處是,能夠指定,只能在master端指定。
Pilla和配置管理,走的更近一些,而grains與遠程執行走的更近一些。
~ Step1:指定pillar的根
[root@saltstack-node1 salt]# vim /etc/salt/master#去掉註釋 pillar_roots: base: - /srv/pillar [root@saltstack-node1 salt]# mkdir -p /srv/pillar#建立pillar的根目錄 [root@saltstack-node1 salt]# cd /srv/pillar [root@saltstack-node1 pillar]# /etc/init.d/salt-master restart#重啓服務
~ Step2:自定義pillar的標籤
[root@saltstack-node1 pillar]# vim zabbix.sls Zabbix_Server: 10.0.0.22 #第1個是key,第2個是value
~ Step3:配置top file
[root@saltstack-node1 pillar]# vim top.sls base: 'saltstack-node2.example.com': - zabbix
~ Step4:刷新
[root@saltstack-node1 pillar]# salt '*' saltutil.refresh_pillar saltstack-node2.example.com: True saltstack-node1.example.com: True
~ 驗證
[root@saltstack-node1 pillar]# salt '*' pillar.item Zabbix_Server saltstack-node1.example.com: ---------- saltstack-node2.example.com: ---------- Zabbix_Server: 10.0.0.22
salt '*' pillar.items
salt '*' pillar.item Zabbix_Server salt '*' pillar.get Zabbix_Server
salt -I 'Zabbix_Server:10.0.0.22' test.ping salt -I 'Zabbix_Server:10.0.0.22' cmd.run 'getenforce'
名稱,存儲位置,數據類型,數據採集更新方式,應用
grains,minion端,靜態數據,minion啓動時收集,也可使用saltutil.sync_grains進行刷新。,存儲minion基本數據。好比用於匹配minion,自身數據能夠用來作資產管理等。
pillar,master端,動態數據,在master端定義,指定給對應的minion,也可使用saltutil.sync_pillar刷新。,存儲master指定的數據,只有指定的minion可以看到,用於存儲敏感數據。
命令:含義
salt '*' grains.ls#列出全部可用的grains(key) salt '*' grains.items#列出全部grains的數據(key && value) salt '*' grains.item os#只列出grains的os數據(key && value) salt '*' grains.get os#獲取指定的grains值(value) salt -G cloud:openstack cmd.run 'df -h'#grains配合遠程執行,匹配target #注意:key和value都要寫,但中間沒有空格 , salt '*' pillar.items#查看系統內置的pillar salt '*' pillar.item Zabbix_Server#只查看指定的pillar(key && value) salt '*' pillar.get Zabbix_Server#獲取指定的pillar值(key) salt -I 'Zabbix_Server:10.0.0.22' test.ping#pillar配合遠程執行,匹配target #注意:key和value都要寫,但中間沒有空格