saltstack 之grains (一)


參考:http://www.cnblogs.com/shhnwangjian/p/5985868.html

salt 的grains主要是存儲靜態的數據,主要是minion端的一些數據,比如,hostname,內存大小、IP,CPU等一些數據,主要是存儲在minion端的。

minion在啟動時會讀取grains數據,如果有新的grains數據需要重啟minion服務,或者在master端使用salt的命令進行刷新。

 

自定義grains數據的優先順序

https://docs.saltstack.com/en/latest/topics/grains/index.html#precedence

  1. Core grains.
  2. Custom grains in /etc/salt/grains.
  3. Custom grains in /etc/salt/minion.
  4. Custom grain modules in _grains directory, synced to minions.

 后面的grains信息會覆蓋前面的信息。

_grains會覆蓋前面所有的

 

先來查看一下有哪些grains數據

查看獲取grains信息

在master端查看

使用grains.ls 列出有效的grains

[root@cong-33 ~]# salt 'cong-55' grains.ls  ##列出grains的key信息
cong-55:
    - GameType
    - SSDs
    - cloud
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
。。。。。。。
。。。。。。。

grains.items列出所有grains的信息

[root@cong-33 ~]# salt 'cong-55' grains.items
cong-55:
    ----------
    GameType:
        3D
    SSDs:
    cloud:
        qc
    cpu_flags:
        - fpu
        - vme
............
............

獲取指定的grains的key的信息

[root@cong-33 ~]# salt 'cong-55' grains.get shell  ##獲取shell環境
cong-55:
    /bin/bash

[root@cong-33 ~]# salt 'cong-55' grains.item mem_total  ##獲取內存總大小
cong-55:
    ----------
    mem_total:
        2517
[root@cong-33 ~]#

 

在minion端使用salt-call來獲取

[root@cong-55 ~]# salt-call grains.ls
local:
    - GameType
    - SSDs
    - cloud
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
。。。。。。。。

[root@cong-55 ~]# salt-call grains.items
local:
    ----------
    GameType:
        3D
    SSDs:
    cloud:
        qc
    cpu_flags:
        - fpu
。。。。。。。
。。。。。。

[root@cong-55 ~]# salt-call grains.get shell
local:
    /bin/bash
[root@cong-55 ~]# salt-call grains.item mem_total
local:
    ----------
    mem_total:
        2517
[root@cong-55 ~]#

 

自定義配置grains信息

這些都是默認的grains信息,我們可以自定義添加指定的grains信息。

在minion端的配置grains

minion添加grains信息

   為了方便管理我們在/etc/salt/minon的主配置文件中另增一個配置文件專門用來配置grains信息的,這樣好管理。

[root@cong-55 ~]# grep -v ^$ /etc/salt/minion|grep -v ^#
default_include: minion.d/*.conf  ##相對路徑,我們在這個目錄下創建以.conf結尾的文件就可被salt-minion讀取了
master: 192.168.1.33
id: cong-55
[root@cong-55 ~]#

配置grains文件

[root@cong-55 ~]# cat /etc/salt/minion.d/grains.conf 
grains:
  roles:
    - gameserver
    - mysql
    - redis
  GameType: 3D
  cloud: qc
  
[root@cong-55 ~]# 

配置完成,重啟minion服務

[root@cong-55 ~]# /etc/init.d/salt-minion restart

 

查看指定的grains的key是否可以獲取

[root@cong-33 ~]# salt 'cong-55' grains.item GameType
cong-55:
    ----------
    GameType:
        3D

[root@cong-33 ~]# salt 'cong-55' grains.item roles
cong-55:
    ----------
    roles:
        - gameserver
        - mysql
        - redis
[root@cong-33 ~]#

自定義的grains的信息都可以配置好了。

 

不重啟minion讓grains也可以生效

上面在minion端配置好后需要重啟服務才可以生效,也可以不重啟minion服務生效的。直接在master端刷新grains的數據就可以了

minion端配置grains

[root@cong-55 ~]# cat /etc/salt/minion.d/grains.conf 
grains:
  roles:
    - gameserver
    - mysql
    - redis
  GameType: 3D
  cloud: qc
  GameName: TestGame
  
[root@cong-55 ~]#

 

在master刷新數據,並獲取新的grains key的值

[root@cong-33 ~]# salt 'cong-55' saltutil.sync_grains  ##saltutil.refresh_grains 命令也可以刷新
cong-55:
    - grains.my_grains  ##這個是我在master配置的grains信息,下面再說
[root@cong-33 ~]# salt 'cong-55' grains.item GameName  ##刷新后可以獲取指定的grains信息
cong-55:
    ----------
    GameName:
        TestGame
[root@cong-33 ~]# 

 

在master配置grains信息

參考:http://www.cnblogs.com/shhnwangjian/p/5985868.html

在master配置grains信息需要在指定的file_roots目錄下的_grains目錄中創建grains的信息文件才可以.

file_roots目錄默認是 /src/salt/   而grains的信息是在file_roots目錄下的_grains目錄里面。

file_roots的值可以通過配置文件/etc/salt/master來配置指定。還可以配置多個環境的file_roots的值

file_roots配置:

 

 然后我們在file_roots目錄下創建一個_grains目錄,然后在創建grains的信息文件

[root@cong-33 ~]# mkdir /srv/salt/_grains/ -p

配置grains信息

[root@cong-33 ~]# cd /srv/salt/_grains/
[root@cong-33 _grains]# ls
my_grains.py
[root@cong-33 _grains]# cat my_grains.py 
#!/usr/bin/env python
#_*_ coding: utf-8 _*_

def my_grains():
    grains = {}
    grains['name'] = 'cong'
    grains['edu'] = 'shhnwangjian'

    return grains

#my_grains

#print  my_grains()
[root@cong-33 _grains]#

上面的grains文件使用python編寫的,

然后我們在master通過命令來刷新grains就可以了

[root@cong-33 _grains]# salt 'cong-55' saltutil.refresh_grains
cong-55:
    True
[root@cong-33 _grains]# salt 'cong-55' grains.get name
cong-55:
    cong
[root@cong-33 _grains]# salt 'cong-55' grains.get edu
cong-55:
    shhnwangjian
[root@cong-33 _grains]# 

 

下面說一下grains的簡單使用吧。

我們可以根據grains的信息來做sls文件的編寫,比如grains得出OS是redhat類型的系統就執相對應的操作,類似apache在redhat平台和debin平台的名稱就不一樣,我們就可以根據grains的OS信息來獲取系統的平台,再做處理。

 

-G 使用grains信息,匹配內存為2517的minion ,執行ls /tmp 命令

[root@cong-33 _grains]# salt -G 'mem_total:2517' cmd.run 'ls /tmp'  
cong-55:
    mysql.sock
    yum.log
    yum_save_tx-2017-11-21-11-24msqElI.yumtx
[root@cong-33 _grains]# 

匹配內存為2517的minion,獲取匹配minion的系統類型

[root@cong-33 _grains]# salt -G 'mem_total:2517' grains.get os
cong-55:
    CentOS

 

 pillar也是salt存儲信息的,下面pillar例子根據minion的os系統類型來設置pillar的參數的值。

centos系統的apache key 的值就是httpd

debin系統的apache key的值就是 apache2

這樣我們能在安裝apache時可以根據這個來獲取名稱,在使用安裝命令來安裝軟件

[root@cong-33 _grains]# cat /srv/salt/pillar/httpd.sls 
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
[root@cong-33 _grains]# 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM