一、簡介
GRAINS 組件是saltstack中非常重要的一個組件,其主要用於記錄Minion的一些靜態信息,如比:CPU、內存、磁盤、網絡等。grains信息是每次客戶端啓動後自動上報給master的,一旦這些靜態信息發生改變需要重啓minion或者,重新同步下 grains。
除此之外我們還可以自定義Grains的一些信息。
自定義的方法有三種:
1、通過Minion配置文件定義;
2、通過Grains相關模塊定義;
3、通過python腳本定義。
以上修改均要使用YAML格式
二、實驗環境
//本實驗在上篇實驗的遺留的基礎上進行的,三臺虛擬機的關係如下圖所示:
主機名 | ip | 服務 | 預配置服務 |
---|---|---|---|
server1 | 172.25.2.1/24 | salt-master,salt-minion | haproxy |
server2 | 172.25.2.2/24 | salt-minion | hattpd |
server3 | 172.25.2.3/24 | salt-minion | nginx |
三、利用grains獲取信息
2.1、查看Grains相關的命令及用法
[root@server1 ~]# salt 'server1' sys.list_functions grains
server1:
- grains.append
- grains.delval
- grains.fetch
- grains.filter_by
- grains.get
- grains.get_or_set_hash
- grains.has_value
- grains.item
- grains.items
- grains.ls
- grains.remove
- grains.set
- grains.setval
- grains.setvals
[root@server1 ~]# salt 'server1' sys.doc grains
//查看grains每個命令的祥解,這裏輸出較多就不展示了。
2、獲取主機item信息
[root@server1 ~]# salt server1 grains.items //查看所有監聽項
[root@server1 ~]# salt server1 grains.item ipv4 //查看ip
server1:
----------
ipv4:
- 127.0.0.1
- 172.25.2.1
四、自定義Grains
3. 1 通過Minion配置文件配置
3.1.1
//在Minion端我們可以通過查看/etc/salt/minion配置文件中,查找grains可以查看到相關注釋的示例。
[root@server2 ~]# vim /etc/salt/minion
//grains裏的數據爲靜態的,所以修改完需要刷新
[root@server2 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion:root:server2 daemon: OK
Starting salt-minion:root:server2 daemon: OK
server1端查看
3.1.2
//不過便於配置管理,我們不一般不會選擇在該文件上進行修改,而在minion的下/etc/salt/minion.d目錄下單獨創建grains.conf文件。和上面的方法相同,將minion配置文件中 grains配置示例復到/etc/salt/minion.d/grains.conf中,並將註釋去掉,如下:
[root@server2 ~]# cat /etc/salt/minion.d/grains.conf
grains:
roles:
- apache
deployment: datacenter4
cabinet: 13
cab_u: 14-15
//配置增加完成後重啓salt-minion服務生效。
3.2 通過Grains相關模塊定義
3.2.1
//在/etc/salt/grains下自定義文件
[root@server3 salt]# vim /etc/salt/grains
//這裏沒有修改配置文件,所以minion端不需要重啓,只要在master端同步
[root@server1 ~]# salt server3 saltutil.sync_grains //同步server3端數據
server3:
[root@server1 ~]# salt '*' grains.item roles //查看
server2:
----------
roles:
- apache
server3:
----------
roles:
nginx //已同步
server1:
----------
roles:
//在上篇博客中寫的/srv/salt下的top.sls,文件中的主機名,也可用主機所對應的grains.roles來替換,這裏注意要加上一個“- match:grain”參數.
3.2.1
//上面使用list_functions列出所有的函數時,對應的是有grains.append、grains.setval等方法,這裏就是利用該方法進行的操作。
[root@server1 ~]# salt "server1" grains.append status 'online' //制定一個
server1:
----------
status:
- online
[root@server1 ~]# salt "server1" grains.setvals "{'id':'yifan','city':'xian'}"
//制定多個
server1:
----------
city:
xian
id:
yifan
[root@server1 ~]# salt "server1" grains.item status id city //查看
server1:
----------
city:
xian
id:
yifan
status:
- online
這樣配置後,會在minion主機端生成配置文件grains ,如下:
[root@server1 ~]# vim /etc/salt/grains
!!!注意:/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > /etc/salt/grains配置中的優先級,後者不會覆蓋前者相同的items塊後的內容。
3.3、使用自定義python腳本獲取grains信息
//默認自定義腳本需要存放在master的/srv/salt/_grains目錄下,這裏使用mkdir 創建即可。
[root@server1 salt]# mkdir _grains/
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
//使用sync_grains命令同步腳本到minion主機上去,並通過grains.item命令獲取相關信息即可
[root@server1 _grains]# salt server2 saltutil.sync_grains //同步到server2
server2:
- grains.my_grains
//這裏查看已接收到
//查看僅server2接受到
[root@server1 _grains]# salt '*' grains.item hello
server1:
----------
hello:
server2:
----------
hello:
world
server3:
----------
hello:
[root@server1 _grains]# salt '*' grains.item salt
server3:
----------
salt:
server2:
----------
salt:
stack
server1:
----------
salt: