原文地址:http://docs.saltstack.com/topics/targeting/grains.html
之所以翻译这样子的文章,是因为自己在学下Salt,举手之劳,希望能帮助他人,如果误导了你,在此表示歉意。
Grains
Salt 迎来了一个能够获取基础系统的静态信息的接口,之所以被称为grains接口,是因为通过salt获取了minion的基础信息。
Grains
当minion第一次启动的时候,它会收集关于系统的所有的静态信息。
grains 接口是用于salt的核心模块和组件,以便正确的salt minion命令在特定的系统上能够自动可用。
重要的是需要记住当salt minion启动时那些从它获取到的静态信息,因为这些信息是静态的。这意味着在grains中的信息是不变的,因此这些自然的数据时静态的,所以
grains的信息是像这样子的,运行内核,或者操作系统。
匹配所有CentOS 从服务器:
salt -G 'os:CentOS' test.ping
salt -G 'cpuarch:x86_64' grains.item num_cpus
可用的grains能够使用'grains.ls'模块列出:
salt '*' grains.lsGrains数据能够使用'grains.items'模块列出:
salt '*' grains.items
Grains的数据能够在从服务器的配置文件中静态的指定,通过增加grains选项和更改选项指定:
grains: roles: - webserver - memcache deployment: datacenter4 cabinet: 13 cab_u: 14-15
关于GRAINS需要注意的:
Grains的配置很容易写,grains接口数据是通过执行所有‘公共’功能模块来获取位于grains包或者自定义的grains目录。返回的信息必须是Python
dict数据,在字典中的键值是grains的名字,并且它的值是字典中的变量。
自定义的grains值应该放在一个_grains目录中位于file_roots master指定配置文件中。当运行state.highstate时,他们会被分发到从服务器上。或者
通过执行saltutil.sync_grains和saltutil.sync_all函数。
在添加grain信息之前,需要认真考虑grain信息是哪些,哪些需要静态的数据,如果这些数据是可变的,考虑使用Pillar替代。
Grains的例子:
在Grains包中核心的模块,提供了如何书写Grains的例子。
https://github.com/saltstack/salt/blob/develop/salt/grains/core.py
同步Grains
同步Grains数据可以使用多种方法,当state.highstate调用时可以自动的同步,或者使用saltutil.sync_grains or saltutil.sync_all 函数来同步。