saltstack 之grains (一)
参考:http://www.cnblogs.com/shhnwangjian/p/5985868.htmlsalt 的grains主要是存储静态的数据,主要是minion端的一些数据,比如,hostname,内存大小、IP,CPU等一些数据,主要是存储在minion端的。
minion在启动时会读取grains数据,如果有新的grains数据需要重启minion服务,或者在master端使用salt的命令进行刷新。
自定义grains数据的优先顺序
https://docs.saltstack.com/en/latest/topics/grains/index.html#precedence
[*]Core grains.
[*]Custom grains in /etc/salt/grains.
[*]Custom grains in /etc/salt/minion.
[*]Custom grain modules in _grains directory, synced to minions.
后面的grains信息会覆盖前面的信息。
_grains会覆盖前面所有的
先来查看一下有哪些grains数据
查看获取grains信息
在master端查看
使用grains.ls 列出有效的grains
# 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的信息
# salt 'cong-55' grains.items
cong
-55:---------- GameType:
3D
SSDs:
cloud:
qc
cpu_flags:
- fpu- vme
............
............
获取指定的grains的key的信息
# salt 'cong-55' grains.get shell ##获取shell环境
cong
-55:/bin/bash
[iyunv@cong
-33 ~]# salt 'cong-55' grains.item mem_total ##获取内存总大小
cong
-55:---------- mem_total:
2517
[iyunv@cong
-33 ~]#
在minion端使用salt-call来获取
# salt-call grains.ls
local:
- GameType- SSDs- cloud- cpu_flags- cpu_model- cpuarch- disks- dns
。。。。。。。。
[iyunv@cong
-55 ~]# salt-call grains.items
local:
---------- GameType:
3D
SSDs:
cloud:
qc
cpu_flags:
- fpu
。。。。。。。
。。。。。。
[iyunv@cong
-55 ~]# salt-call grains.get shell
local:
/bin/bash
[iyunv@cong
-55 ~]# salt-call grains.item mem_total
local:
---------- mem_total:
2517
[iyunv@cong
-55 ~]#
自定义配置grains信息
这些都是默认的grains信息,我们可以自定义添加指定的grains信息。
在minion端的配置grains
minion添加grains信息
为了方便管理我们在/etc/salt/minon的主配置文件中另增一个配置文件专门用来配置grains信息的,这样好管理。
# grep -v ^$ /etc/salt/minion|grep -v ^#
default_include: minion.d
/*.conf ##相对路径,我们在这个目录下创建以.conf结尾的文件就可被salt-minion读取了
master: 192.168.1.33
id: cong-55
#
配置grains文件
# cat /etc/salt/minion.d/grains.conf
grains:
roles:
- gameserver- mysql- redis GameType: 3D
cloud: qc
[iyunv@cong
-55 ~]#
配置完成,重启minion服务
# /etc/init.d/salt-minion restart
查看指定的grains的key是否可以获取
# salt 'cong-55' grains.item GameType
cong
-55:---------- GameType:
3D
[iyunv@cong
-33 ~]# salt 'cong-55' grains.item roles
cong
-55:---------- roles:
- gameserver- mysql- redis
[iyunv@cong
-33 ~]#
自定义的grains的信息都可以配置好了。
不重启minion让grains也可以生效
上面在minion端配置好后需要重启服务才可以生效,也可以不重启minion服务生效的。直接在master端刷新grains的数据就可以了
minion端配置grains
# cat /etc/salt/minion.d/grains.conf
grains:
roles:
- gameserver- mysql- redis GameType: 3D
cloud: qc
GameName: TestGame
[iyunv@cong
-55 ~]#
在master刷新数据,并获取新的grains key的值
# salt 'cong-55' saltutil.sync_grains ##saltutil.refresh_grains 命令也可以刷新
cong
-55:- grains.my_grains ##这个是我在master配置的grains信息,下面再说
[iyunv@cong
-33 ~]# salt 'cong-55' grains.item GameName ##刷新后可以获取指定的grains信息
cong
-55:---------- GameName:
TestGame
[iyunv@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配置:
https://images2017.cnblogs.com/blog/796973/201711/796973-20171121120426508-47972466.png
然后我们在file_roots目录下创建一个_grains目录,然后在创建grains的信息文件
# mkdir /srv/salt/_grains/ -p
配置grains信息
# cd /srv/salt/_grains/
[iyunv@cong
-33 _grains]# ls
my_grains.py
[iyunv@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
#printmy_grains()
[iyunv@cong
-33 _grains]#
上面的grains文件使用python编写的,
然后我们在master通过命令来刷新grains就可以了
# salt 'cong-55' saltutil.refresh_grains
cong
-55: True
[iyunv@cong
-33 _grains]# salt 'cong-55' grains.get name
cong
-55: cong
[iyunv@cong
-33 _grains]# salt 'cong-55' grains.get edu
cong
-55: shhnwangjian
[iyunv@cong
-33 _grains]#
下面说一下grains的简单使用吧。
我们可以根据grains的信息来做sls文件的编写,比如grains得出OS是redhat类型的系统就执相对应的操作,类似apache在redhat平台和debin平台的名称就不一样,我们就可以根据grains的OS信息来获取系统的平台,再做处理。
-G 使用grains信息,匹配内存为2517的minion ,执行ls /tmp 命令
# salt -G 'mem_total:2517' cmd.run 'ls /tmp'
cong
-55: mysql.sock
yum.log yum_save_tx
-2017-11-21-11-24msqElI.yumtx
[iyunv@cong
-33 _grains]#
匹配内存为2517的minion,获取匹配minion的系统类型
# 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时可以根据这个来获取名称,在使用安装命令来安装软件
# cat /srv/salt/pillar/httpd.sls
{
% if grains['os'] == 'CentOS' %}
apache: httpd
{
% elif grains['os'] == 'Debian' %}
apache: apache2
{
% endif %}
[iyunv@cong
-33 _grains]#
页:
[1]