saltstack
要维护好一个庞大的配置管理系统,首先得维护好管理对象。
在saltStack中管理对象叫做target,在master上我们可以采用不同target去管理不同minion。
target通过管理和匹配minion的id来做集合。
匹配:列表匹配、正则匹配
列表匹配 salt -L minion中id的名称 test.ping
正则匹配 salt -E 'min*' test.ping #min是一个简单的正则表达式,也可以写出其他正则表达式去匹配minion中的id
================================================================================================================
管理对象属性grains
grains里记录着每台minion的一些常用属性:cpu、内存、磁盘,网络信息等等,可以通过grains.items查看某台minion的所有grains信息。
minion的grains信息是minion启动时采集汇报给master的。
自定义grains的几种方法:
1.通过minion配置文件定义;
2.通过grains相关文件定义;
3.通过python脚本定义;
grains相关命令用法:
[root@localhost ~]# salt 'web01' sys.list_functions grains
web01:
- grains.append
- grains.delval
- grains.filter_by
- grains.get
- grains.get_or_set_hash
- grains.has_value
- grains.item
- grains.items
- grains.ls
- grains.remove
- grains.setval
- grains.setvals
[root@localhost ~]# salt 'web01' 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
'grains.delval:'
New in version 0.17.0
Delete a grain from the grains config file
:param destructive: Delete the key, too. Defaults to False.
CLI Example:
salt '*' grains.delval key
自定义Grains
在开头我们提到三种自定义Grains的方法,这里一一说明下。
1、通过Minion配置文件配置
在Minion端我们可以通过查看/etc/salt/minion配置文件中,查找grains可以查看到相关注释的示例。不过便于配置管理,我们不一般不会选择在该文件上进行修改,而在minion include的目录下/etc/salt/minion.d目录下单独创建grains.conf文件。就以官方给出的示例,将minion配置文件中配置示例复到/etc/salt/minion.d/grains.conf中,并将注释去掉,如下:
- [root@361way.com ~]# cat /etc/salt/minion.d/grains.conf
- grains:
- roles:
- - webserver
- - memcache
- deployment: datacenter4
- cabinet: 13
- cab_u: 14-15
配置增加完成后重启salt-minion服务生效。通过saltmaster端查看结果如下:
- [root@saltmaster ~]# salt 'irora200' grains.item roles
- www.361way.com:
- ----------
- roles:
- - webserver
- - memcache
这里有两点一定需要注意:1、grains.conf 里的配置需要是YAML格式;2、配置修改后需要重启salt-minion服务才能生效。
2、通过Grains模块定义Grains
上面使用list_functions 列出所有的函数时,对应的是有grains.append、grains.setval等方法,这里就是利用该方法进行的操作。示例如下:
- [root@saltmaster ~]# salt 'irora200' grains.append hosttype 'online'
- irora200:
- ----------
- hosttype:
- - online
- [root@saltmaster ~]# salt 'irora200' grains.item hosttype
- irora200:
- ----------
- hosttype:
- - online
- [root@saltmaster ~]# salt 'irora200' grains.setvals "{'idc':'ZJ','city':'hangzhou'}"
- irora200:
- ----------
- city:
- hangzhou
- idc:
- ZJ
- [root@saltmaster ~]# salt 'irora200' grains.item idc city
- irora200:
- ----------
- city:
- hangzhou
- idc:
- ZJ
这样配置后,会在minion主机端生成配置文件grains ,如下:
- [root@irora200 salt]# cat /etc/salt/grains
- city: hangzhou
- hosttype:
- - online
- idc: ZJ
如下图所示,我们做了一个实验,如果/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中的重复值。即下例中deployment的值在/etc/salt/grains中的变化为datacenter1(setval操作后) --datacenter4(append操作后,并没有变成datacenter5)。
所以会上例中不难看出,/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > /etc/salt/grains配置中的优先级。
注:该处也适用通过分发文件到minion的/etc/salt/grains ,不过分发文件和命令执行的区别是,分发文件必须要minion端重启salt-minion服务后才能生效。而通过grains 命令执行是立即生效
-