Grains
grains 负责采集客户端(minion端)一些基本信息 ,这个也完全可以自定义,可以在客户端自定义,然后自动汇报上来,也可以从服务器端定义然后推下去,采集完后再汇报上来(重启才收集),也可以使用saltutil.sync_grains进行刷新
1.grains之收集信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@node1 salt]# salt
'node1*'
grains.ls
[root@node1 salt]# salt
'node1'
grains.items #查看收集的所有信息
[root@node1 salt]# salt
'node1'
grains.
get
fqdn #显示单个
node1:
node1
[root@node1 salt]# salt
'node1'
grains.item fqdn #显示单个
node1:
----------
fqdn:
node1
[root@node1 salt]# salt
'node1*'
grains.
get
ip_interfaces:eth2
node1:
-
192.168
.
10.129
- fe80::20c:29ff:feca:35bf
|
2.grains之在指定服务器执行命令(-G匹配grains信息)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@node1 salt]# salt
'node*'
grains.
get
os
node2:
CentOS
node1:
CentOS
[root@node1 salt]# salt -G os:CentOS cmd.run
'w'
#与grains里存储的os信息匹配,匹配到的机器执行 w
node2:
14
:
46
:
45
up
15
:
04
,
2
users, load average:
0.00
,
0.00
,
0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 -
12
:
27
2
:19m
0
.06s
0
.06s -bash
root pts/
0
192.168
.
10.1
12
:
38
28
:
32
0
.40s
0
.29s bash
node1:
06
:
48
:
31
up
15
:
04
,
2
users, load average:
0.08
,
0.04
,
0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Wed15
2
:19m
0
.33s
0
.01s bash
root pts/
0
192.168
.
10.1
04
:
40
1
.00s
1
.06s
0
.39s /usr/bin/python
|
3.自定义信息
minion端自定义1:
1
2
3
4
5
6
7
8
9
10
11
|
[root@node2 ~]# vim /etc/salt/minion ###在node2自定义角色-webserver,memcache
grains:
roles:
- webserver
- memcache
[root@node2 ~]# /etc/init.d/salt-minion restart
测试:
[root@node1 salt]# salt -G
'roles:memcache'
cmd.run
'echo hehe'
node2:
hehe
注:在master端收集与grains里自定义的角色匹配的机器执行echo命令
|
minion端自定义2:
1
2
3
4
5
6
7
8
9
10
|
[root@node2 ~]# cat /etc/salt/grains ###也可以在/etc/salt/grains自定义
web: nginx
[root@node2 ~]# /etc/init.d/salt-minion restart
测试
[root@node1 salt]# salt -G web:nginx cmd.run
'w'
node2:
14
:
59
:
37
up
15
:
17
,
2
users, load average:
0.00
,
0.00
,
0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 -
12
:
27
2
:32m
0
.06s
0
.06s -bash
root pts/
0
192.168
.
10.1
12
:
38
7
.00s
0
.47s
0
.36s bash
|
将minion端自定义的grains信息与top.sls联系:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@node1 salt]# cat /srv/salt/apache.sls
apache-install:
pkg.installed:
- names:
- httpd
- httpd-devel
apache-service:
service.running:
- name: httpd
- enable: True
- reload: True
[root@node1 salt]# cat /srv/salt/top.sls
base:
'web:nginx'
:
- match: grain
- apache
[root@node1 salt]# salt
'*'
state.highstate
注:匹配web:nginx,使用grains匹配,匹配成功的执行apache.sls这个状态
|
Pillar
数据存储在master端,在master端定义,指定给对应的minion,可以使用saltutil.refresh_pillar刷新,常用于存储master指定的数据,只有指定的minion可以看到。用于敏感数据保存
1.系统默认pillar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@node1 ~]# vim /etc/salt/master
pillar_opts: Ture #这里只是查看一下,查看之后将其关闭
[root@node1 ~]# /etc/init.d/salt-master restart
[root@node1 ~]# salt
'*'
pillar.items #查看系统默认的pillar,key value的形式
[root@node1 ~]# salt
'*'
pillar.items
node1:
----------
master:
----------
__role:
master
auth_mode:
1
auto_accept:
False
cache_sreqs:
True
cachedir:
/
var
/cache/salt/master
cli_summary:
False
.......................................
|
2.自定义pillar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#编辑配置文件
[root@node1 ~]# vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
[root@node1 ~]# mkdir /srv/pillar
#写一个apache的状态
[root@node1 ~]# cat /srv/pillar/apache.sls
{%
if
grains[
'os'
] ==
'CentOS'
%}
apache: httpd
{% elif grains[
'os'
] ==
'Debian'
%}
apache: apache2
{% endif %}
注:使用grains收集信息,如果系统是centos,那么apache的名字就叫httpd。系统是Debian的时候,apache叫apache2
|
#写一个tops.sls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[root@node1 ~]# cat /srv/pillar/top.sls #将定义的apache状态指定给所有minion
base:
'*'
:
- apache
[root@node1 ~]# salt
'*'
saltutil.refresh_pillar #刷新一下
node2:
True
node1:
True
[root@node1 ~]# salt
'*'
pillar.items
node1:
----------
apache:
httpd
node2:
----------
apache:
httpd
[root@node1 ~]# salt -I
'apache:httpd'
test.ping
node1:
True
node2:
True
|
本文转自 fxl风 51CTO博客,原文链接:http://blog.51cto.com/fengxiaoli/1958010