1、使用自定义grains
grans的一些基本用法:
salt object grains.ls 查看某台设备当前可用grains的key
salt object grains.items 查看某台设备当前可用 grains 的值
salt -G 'os:CentOS' test.ping && salt -G 'os:Amazon' test.ping
salt -G 'cpuarch:x86_64' grains.item num_cpus
salt -G 'mem_total:32232' test.ping
salt 'linux-node1*' grains.get fqdn 查询某个的信息
salt -G os:CentOS cmd.run 'uptime' 使用granis来匹配主机 -G 参数
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
[root@redis01-jp base]
# pwd
/srv/salt/base
[root@redis01-jp base]
# ls
apache dns.sls files nginx.sls
top
.sls
[root@redis01-jp base]
# cat dns.sls
local_resolv:
file
.managed:
-
source
: salt:
//files/resolv
.conf
- name:
/etc/resolv
.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
DNS_SERVER: 8.8.8.8
# 为变量传值
[root@redis01-jp base]
# cat files/resolv.conf
options timeout:2 attempts:5
search ap-northeast-1.compute.internal
nameserver 172.31.0.2
nameserver {{ DNS_SERVER }}
# 调用变量
[root@redis01-jp base]
# salt 'redis02-jp' state.sls dns #手工调用dns模块(首先加载dns.sls文件,如果没有此文件加载base/dns/init.sls 文件)
redis02-jp:
----------
ID: local_resolv
Function:
file
.managed
Name:
/etc/resolv
.conf
Result: True
Comment: File
/etc/resolv
.conf updated
Started: 06:08:55.301324
Duration: 59.928 ms
Changes:
----------
diff
:
---
+++
@@ -1,4 +1,4 @@
options timeout:2 attempts:5
-; generated by
/sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver 172.31.0.2
+nameserver 8.8.8.8
Summary
for
redis02-jp
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run
time
: 59.928 ms
[root@redis01-jp base]
# salt -G 'roles:cacheserver' cmd.run 'w'
redis02-jp:
06:43:19 up 3:24, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ec2-user pts
/0
static-ip-218-20 03:25 1:42m 0.01s 0.00s sshd: ec2-user
[root@redis01-jp base]
#
[root@redis01-jp base]
# vim /etc/salt/master
[root@redis01-jp base]
# sed -n '680,682p' /etc/salt/master
pillar_roots:
base:
-
/srv/pillar
[root@redis01-jp base]
#
|
2、使用pillar 调用变量
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
[root@redis01-jp ~]
# vim /etc/salt/master
[root@redis01-jp ~]
# sed -n '527,529p' /etc/salt/master
pillar_roots:
base:
-
/srv/pillar
[root@redis01-jp ~]
# mkdir /srv/pillar
[root@redis01-jp ~]
# service salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
[root@redis01-jp pillar]
# tree /srv/pillar/
/srv/pillar/
|-- pkg
| `-- init.sls
`--
top
.sls
1 directory, 2 files
[root@redis01-jp pillar]
# cat /srv/pillar/pkg/init.sls
pkgs:
{%
if
grains[
'os_family'
] ==
'RedHat'
%}
apache: httpd
vim: vim-enhanced
{%
elif
grains[
'os_family'
] ==
'Debian'
%}
apache: apache2
vim: vim
{%
elif
grains[
'os'
] ==
'Arch'
%}
apache: apache
vim: vim
{% endif %}
[root@redis01-jp pillar]
# cat /srv/pillar/top.sls
base:
'*'
:
- pkg
#调用pkg目录(模块),系统会自动到该目录(模块)下加载init.sls
[root@redis01-jp pillar]
# salt '*' pillar.items #查看各minion获得到的 pillar变量值
redis02-jp:
----------
pkgs:
----------
apache:
httpd
vim:
vim-enhanced
[root@redis01-jp base]
# pwd
/srv/salt/base
[root@redis01-jp base]
# tree apache/
apache/
`-- init.sls
0 directories, 1
file
[root@redis01-jp base]
# cat apache/init.sls
apache:
pkg.installed:
- name: {{ pillar[
'pkgs'
][
'apache'
] }}
#调用pillar变量
[root@redis01-jp base]
# cat top.sls
base:
'*'
:
- apache
#调用apache模块,自动加载apache/init.sls
[root@redis01-jp ~]
# salt 'redis02-jp' state.highstate
[root@redis01-jp ~]
# salt '*' saltutil.refresh_pillar 刷新pillar,grains是需要重启minion端,pillar是需要刷新
redis02-jp:
True
[root@redis01-jp ~]
# salt -I 'apache:httpd' test.ping
redis02-jp:
True
[root@redis01-jp ~]
#
|
3、Grains与pillar 的区别总结:
Grains 静态 minion启动时收集 目标选择、配置管理、数据查询 minion
pillar 动态 master定义 目标选择、配置管理、敏感数据 maste
本文转自 meteor_hy 51CTO博客,原文链接:http://blog.51cto.com/caiyuanji/1885091,如需转载请自行联系原作者