1. 程式人生 > >Linux之企業實訓篇——Saltstack自動化管理系統之Grains元件

Linux之企業實訓篇——Saltstack自動化管理系統之Grains元件

這裡寫圖片描述

一、簡介

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@server
1 ~]# 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:
最後grains 配置優先順序順序為/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > master端自定義grains指令碼(minion端/var/cache/salt/minion/extmods/grains目錄下) > Grains模組定義Grains (/etc/salt/grains)

這裡寫圖片描述