saltstack数据系统Grains

Grains是什么?

  Grains是SaltStack收集的有关底层管理系统的静态信息。 SaltStack收集的Grains信息包括操作系统版本、域名、IP地址、内核、操作系统类型、内存以及许多其他系统属性。
  您可以将自定义的grains添加到Salt Minion的/etc/salt/grains文件中,或放置在Grains部分下的Salt Minion配置文件中。 例如,许多用户为每个Salt Minion添加一个称为角色的定制grain来描述系统的功能。

Grains获取信息

查看Grains函数:

root@King: /home# salt 'salt-minion-1' sys.list_functions grains
salt-minion-1:
    - grains.append        # 将grains的key和value添加到grains配置文件中以列表形式保存,类型  list
    - grains.delval        # 删除grains的value
    - grains.filter_by
    - grains.get           # 获取setvals插入的标签指定的值
    - grains.get_or_set_hash   # 在自定义配置文件中加入哈希加密值
    - grains.has_value   
    - grains.item      # 获取一个或者多个信息
    - grains.items       # 获取详细信息
    - grains.ls      # 获取主机信息
    - grains.remove      # 从grains配置文件中的列表中删除一个值(删除grains的key列表中的一个value值,如果grains的key和value不是列表不能删除)
    - grains.setval      # 批量添加grains信息
    - grains.setvals     # 添加多个grains的key和value到grains配置文件中,类型是key-value

grains.append 是将value添加到key的列表中,如果key不存在将创建

grains.setvals 添加多个grains的key和value到grains配置文件中,类型是key-value

grains.delkey 会把key和value一起删掉,

grains.delval只是把value删掉,key还在,key的值变为null

每个命令的帮助信息又可以通过sys.doc查看,如下:

root@King: /home# salt 'salt-minion-1'  sys.doc grains
'grains.append:'

    New in version 0.17.0

    Append a value to a list in the grains config file. If the grain doesn't
    exist, the grain key is added and the value is appended to the new grain
    as a list item.

    key
        The grain key to be appended to

    val
        The value to append to the grain key

    :param convert: If convert is True, convert non-list contents into a list.
        If convert is False and the grain contains non-list contents, an error
        is given. Defaults to False.

    :param delimiter: The key can be a nested dict key. Use this parameter to
        specify the delimiter you use.
        You can now append values to a list in nested dictionnary grains. If the
        list doesn't exist at this level, it will be created.
        New in version 2014.7.6

    CLI Example:

        salt '*' grains.append key val
.........此处省略

获取主机item信息

root@King: /home# salt 'salt-minion-1' grains.ls
salt-minion-1:
    - SSDs
    - a
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gpus
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_interfaces
    - ip6_interfaces
    - ip_interfaces
    - ipv4
    - ipv6
......此处省略

查看item详细信息

root@King: /home# salt 'salt-minion-1' grains.items
salt-minion-1:
    ----------
    SSDs:
    a:
        - 1
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
       ......此处省略

查看一项或者多项item值

root@King: /home# salt 'salt-minion-1' grains.item ipv4    # 查看ipv4的值
salt-minion-1:
    ----------
    ipv4:
        - 127.0.0.1
        - 172.16.61.116
root@King: /home# salt 'salt-minion-1' grains.item localhost ipv4  # 查看多个值
salt-minion-1:
    ----------
    ipv4:
        - 127.0.0.1
        - 172.16.61.116
    localhost:
        King

自定义Grains

命令行操作:

# 定义一个hosttype 值为redis-slave
root@King: /home# salt 'salt-minion-1' grains.append hosttype 'redis-slave'
salt-minion-1:
    ----------
    hosttype:
        - redis-slave

# 查看自定义标签
root@King: /home# salt 'salt-minion-1' grains.item hosttype
salt-minion-1:
    ----------
    hosttype:
        - redis-slave

# 自定义配置
root@King: /home# salt 'salt-minion-1' grains.setvals "{'city':'beijing'}"
salt-minion-1:
    ----------
    city:
        beijing

# 查看新增的配置
root@King: /home# salt 'salt-minion-1' grains.item city
salt-minion-1:
    ----------
    city:
        beijing

自定义后,会在minion主机端生成配置文件grains:

root@King: ~# cat /etc/salt/grains    # 可以看到刚才自定义的标签和值
city: beijing
hosttype:
- redis-slave

配置文件修改(minion端)

  修改minion端后,要重启minion端服务才能生效

  修改minion端的配置文件:修改这三个文件中的配置都会生效 

  修改/etc/salt/grains不重启服务的方法,刷新命令如下:

salt '*' saltutil.sync_grains

配置文件:

/etc/salt/minion.d/grains.conf
/etc/salt/minion
/etc/salt/grains

总结:

如果/etc/salt/minion.d/grains.conf中已经存在的自定义items, 再通过执行grains.append或grains.setval去执行时,发现会以 grains.conf中的为准,虽然在/etc/salt/grains中也有内容生成。

而且执行grains.append操作后,/etc/salt/minion.d/grains.conf 中已存在的值会覆盖/etc/salt/grains中的重复值。

/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > /etc/salt/grains配置中的优先级。

grains_module的方式设置(master端)

在master上建立模块对应目录:

root@King: ~#  mkdir -pv /srv/salt/_grains 

写入一个简单的模块

#vi /srv/salt/_grains/my_grain_mod.py 
import time 
def now():
    grains = {}
    grains['now'] = time.time() 
    return grains

同步模块到minion

root@King: ~# salt 'salt-minion-1' saltutil.sync_all
salt-minion-1:
    ----------
    beacons:
    grains:
        - grains.my_grain_mod      # 新增的自定义
    modules:
    output:
    renderers:
    returners:
    sdb:
    states:
    utils:

重新加载模块和查看新设置的Grains:

root@King: ~# salt 'salt-minion-1' sys.reload_modules
salt-minion-1:
    True
root@King: ~# salt 'salt-minion-1' grains.item now
salt-minion-1:
    ----------
    now:
        1611036019.0
原文地址:https://www.cnblogs.com/Tang-Yuan/p/14297635.html