Saltstack_使用指南04_数据系统-Grains 4.1. grains条目项信息4.2. grains全部信息4.3. 查询grains指定信息5.1. m

2020-10-15 14:39:53 浏览数 (1)

1. 主机规划

Grains文档

代码语言:javascript复制
https://docs.saltstack.com/en/latest/topics/grains/index.html    

注意事项

修改了master或者minion的配置文件,那么必须重启对应的服务。

2. Grains基本信息

代码语言:javascript复制
Saltstack 数据系统
    Grains (谷粒)
    Pillar  (柱子)

Grains:静态数据    当Minion启动的时候收集的Minion本地的相关信息
                    如:操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号
    1、信息查询  【资产管理】★★★★★
    2、用于目标选择    salt -G 'os:CentOS' test.ping    ★★★★★
    3、配置管理中使用

刷新grains 【这样修改grains信息不用重启salt-minion 也能刷新】
不然需要重启salt-minion
salt '*' saltutil.sync_grains

开发一个Grains:
    Python:写一个Python脚本,返回一个字典就可以了。
代码语言:javascript复制
可以通过

salt 'salt01' saltutil.sync_grains   【推荐】
或salt 'salt01' saltutil.sync_all   【范围太广,不推荐使用】
或salt 'salt01' state.highstate     【执行高级状态时同步,不建议使用】
或salt 'salt01' saltutil.refresh_modules   【只刷新客户端,服务端向客户端分发的不刷新,比如修改了grains的py脚本时,不会推送到minion端  不建议使用】
或salt 'salt01' saltutil.refresh_grains    【只刷新客户端,服务端向客户端分发的不刷新,比如修改了grains的py脚本时,不会推送到minion端  不建议使用】

将配置同步到minion端
如果做了更改也可以使用
salt 'salt01' sys.reload_modules

3. Grains优先级信息

代码语言:javascript复制
经验证优先级如下:
1、    salt系统自带信息  【优先级最低】
2、    自编写Python脚本  备注:在指定目录下存放py脚本
3、    /etc/salt/grains  备注:该文件不存在,需要自己创建
4、    /etc/salt/minion  【优先级最高】

推荐使用 自编写py脚本定义,这样自定义的grains只需要在master端维护即可,减少后期维护成本。

下文内容就是根据优先级写的。

4. Salt自带Grains 信息

4.1. grains条目项信息

代码语言:javascript复制
1 [root@salt100 salt]# salt 'salt01' grains.ls  # 查看salt01机器有哪些grains条目项信息
2 ………………

4.2. grains全部信息

代码语言:javascript复制
  1 [root@salt100 salt]# salt 'salt01' grains.items  # 查看salt01机器有哪些grains信息 
  2 salt01:
  3     ----------
  4     SSDs:
  5     biosreleasedate:
  6         05/19/2017
  7     biosversion:
  8         6.00
  9     cpu_flags:
 10         - fpu
 11         - vme
 12         - de
 13         - pse
 14         - tsc
 15         - msr
 16         - pae
 17         - mce
 18         - cx8
 19         - apic
 20         - sep
 21         - mtrr
 22         - pge
 23         - mca
 24         - cmov
 25         - pat
 26         - pse36
 27         - clflush
 28         - mmx
 29         - fxsr
 30         - sse
 31         - sse2
 32         - ss
 33         - ht
 34         - syscall
 35         - nx
 36         - pdpe1gb
 37         - rdtscp
 38         - lm
 39         - constant_tsc
 40         - arch_perfmon
 41         - nopl
 42         - xtopology
 43         - tsc_reliable
 44         - nonstop_tsc
 45         - eagerfpu
 46         - pni
 47         - pclmulqdq
 48         - ssse3
 49         - fma
 50         - cx16
 51         - pcid
 52         - sse4_1
 53         - sse4_2
 54         - x2apic
 55         - movbe
 56         - popcnt
 57         - tsc_deadline_timer
 58         - aes
 59         - xsave
 60         - avx
 61         - f16c
 62         - rdrand
 63         - hypervisor
 64         - lahf_lm
 65         - abm
 66         - 3dnowprefetch
 67         - fsgsbase
 68         - tsc_adjust
 69         - bmi1
 70         - avx2
 71         - smep
 72         - bmi2
 73         - invpcid
 74         - mpx
 75         - rdseed
 76         - adx
 77         - smap
 78         - clflushopt
 79         - xsaveopt
 80         - xsavec
 81         - arat
 82     cpu_model:
 83         Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
 84     cpuarch:
 85         x86_64
 86     disks:
 87         - sda
 88         - sr0
 89     dns:
 90         ----------
 91         domain:
 92         ip4_nameservers:
 93             - 10.0.0.2
 94             - 223.5.5.5
 95         ip6_nameservers:
 96         nameservers:
 97             - 10.0.0.2
 98             - 223.5.5.5
 99         options:
100         search:
101         sortlist:
102     domain:
103     fqdn:
104         salt01
105     fqdn_ip4:
106         - 172.16.1.11
107     fqdn_ip6:
108         - fe80::20c:29ff:fe95:1b84
109         - fe80::20c:29ff:fe95:1b7a
110     gid:
111         0
112     gpus:
113         |_
114           ----------
115           model:
116               SVGA II Adapter
117           vendor:
118               unknown
119     groupname:
120         root
121     host:
122         salt01
123     hwaddr_interfaces:
124         ----------
125         eth0:
126             00:0c:29:95:1b:7a
127         eth1:
128             00:0c:29:95:1b:84
129         lo:
130             00:00:00:00:00:00
131     id:
132         salt01
133     init:
134         systemd
135     ip4_gw:
136         10.0.0.2
137     ip4_interfaces:
138         ----------
139         eth0:
140             - 172.16.1.11
141         eth1:
142             - 10.0.0.11
143         lo:
144             - 127.0.0.1
145     ip6_gw:
146         False
147     ip6_interfaces:
148         ----------
149         eth0:
150             - fe80::20c:29ff:fe95:1b7a
151         eth1:
152             - fe80::20c:29ff:fe95:1b84
153         lo:
154             - ::1
155     ip_gw:
156         True
157     ip_interfaces:
158         ----------
159         eth0:
160             - 172.16.1.11
161             - fe80::20c:29ff:fe95:1b7a
162         eth1:
163             - 10.0.0.11
164             - fe80::20c:29ff:fe95:1b84
165         lo:
166             - 127.0.0.1
167             - ::1
168     ipv4:
169         - 10.0.0.11
170         - 127.0.0.1
171         - 172.16.1.11
172     ipv6:
173         - ::1
174         - fe80::20c:29ff:fe95:1b7a
175         - fe80::20c:29ff:fe95:1b84
176     kernel:
177         Linux
178     kernelrelease:
179         3.10.0-862.el7.x86_64
180     kernelversion:
181         #1 SMP Fri Apr 20 16:44:24 UTC 2018
182     locale_info:
183         ----------
184         defaultencoding:
185             UTF-8
186         defaultlanguage:
187             en_US
188         detectedencoding:
189             UTF-8
190     localhost:
191         salt01
192     lsb_distrib_codename:
193         CentOS Linux 7 (Core)
194     lsb_distrib_id:
195         CentOS Linux
196     machine_id:
197         5ae5f27014ee438780bf37ae68889471
198     manufacturer:
199         VMware, Inc.
200     master:
201         salt100
202     mdadm:
203     mem_total:
204         1821
205     nodename:
206         salt01
207     num_cpus:
208         2
209     num_gpus:
210         1
211     os:
212         CentOS
213     os_family:
214         RedHat
215     osarch:
216         x86_64
217     oscodename:
218         CentOS Linux 7 (Core)
219     osfinger:
220         CentOS Linux-7
221     osfullname:
222         CentOS Linux
223     osmajorrelease:
224         7
225     osrelease:
226         7.5.1804
227     osrelease_info:
228         - 7
229         - 5
230         - 1804
231     path:
232         /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
233     pid:
234         1598
235     productname:
236         VMware Virtual Platform
237     ps:
238         ps -efHww
239     pythonexecutable:
240         /usr/bin/python
241     pythonpath:
242         - /usr/bin
243         - /usr/lib64/python27.zip
244         - /usr/lib64/python2.7
245         - /usr/lib64/python2.7/plat-linux2
246         - /usr/lib64/python2.7/lib-tk
247         - /usr/lib64/python2.7/lib-old
248         - /usr/lib64/python2.7/lib-dynload
249         - /usr/lib64/python2.7/site-packages
250         - /usr/lib64/python2.7/site-packages/gtk-2.0
251         - /usr/lib/python2.7/site-packages
252     pythonversion:
253         - 2
254         - 7
255         - 5
256         - final
257         - 0
258     saltpath:
259         /usr/lib/python2.7/site-packages/salt
260     saltversion:
261         2018.3.3
262     saltversioninfo:
263         - 2018
264         - 3
265         - 3
266         - 0
267     selinux:
268         ----------
269         enabled:
270             False
271         enforced:
272             Disabled
273     serialnumber:
274         VMware-56 4d 32 86 98 5c a8 3c-50 92 82 be 30 95 1b 7a
275     server_id:
276         2097601471
277     shell:
278         /bin/sh
279     swap_total:
280         2047
281     systemd:
282         ----------
283         features:
284              PAM  AUDIT  SELINUX  IMA -APPARMOR  SMACK  SYSVINIT  UTMP  LIBCRYPTSETUP  GCRYPT  GNUTLS  ACL  XZ  LZ4 -SECCOMP  BLKID  ELFUTILS  KMOD  IDN
285         version:
286             219
287     uid:
288         0
289     username:
290         root
291     uuid:
292         86324d56-5c98-3ca8-5092-82be30951b7a
293     virtual:
294         VMware
295     zfs_feature_flags:
296         False
297     zfs_support:
298         False
299     zmqversion:
300         4.1.4

4.3. 查询grains指定信息

代码语言:javascript复制
1 [root@salt100 ~]# salt 'salt01' grains.item roles  # 没有该项信息,因此只显示key 不显示value
2 salt01:
3     ----------
4     roles:
5 [root@salt100 ~]# salt 'salt01' grains.item os
6 salt01:
7     ----------
8     os:
9         CentOS

5. 自写grains的py脚本

该脚本在salt master端,然后推送到minion端。

5.1. master端编写py脚本

代码语言:javascript复制
 1 [root@salt100 salt]# pwd
 2 /srv/salt
 3 [root@salt100 salt]# mkdir _grains  # salt指定的位置
 4 [root@salt100 salt]# cd _grains/
 5 [root@salt100 _grains]# vim my_grains.py 
 6 #!/usr/bin/env python
 7 # -*- coding:utf-8 -*-
 8 
 9 def grains_define():
10     # initialize a grains dictionary
11     grains = {}
12     # 填充信息
13 grains['roles'] = ["webserver01","memcache01"],
14 grains['os'] = 'redhat01'
15 
16     # 返回这个字典
17     return grains

5.2. grains刷新并查看指定信息

在master端执行,并查看grains信息

代码语言:javascript复制
 1 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 会推送py脚本到minion端,并刷新grains信息
 2 salt01:
 3     - grains.my_grains
 4 [root@salt100 ~]# salt 'salt01' grains.item roles
 5 salt01:
 6     ----------
 7     roles:
 8         |_
 9           - webserver01
10           - memcache01
11 [root@salt100 ~]# salt 'salt01' grains.item os
12 salt01:
13     ----------
14     os:
15         redhat01

5.3. 在minion端查看推送过来的文件位置

代码语言:javascript复制
 1 [root@salt01 minion]# pwd
 2 /var/cache/salt/minion
 3 [root@salt01 minion]# tree
 4 .
 5 ├── accumulator
 6 ├── extmods
 7 │   └── grains  # 在这个目录下
 8 │       ├── my_grains.py
 9 │       └── my_grains.pyc
10 ├── files
11 │   └── base
12 │       ├── _grains
13 │       │   └── my_grains.py
14 │       ├── top.sls
15 │       └── web
16 │           └── apache.sls
17 ├── highstate.cache.p
18 ├── module_refresh
19 ├── pkg_refresh
20 ├── proc
21 └── sls.p
22 
23 8 directories, 9 files

6. 在/etc/salt/grains 中定义grains

注意:

该文件默认不存在,需要自己创建。

6.1. minion端配置修改

在salt01上操作

代码语言:javascript复制
1 [root@salt01 salt]# cat /etc/salt/grains 
2 roles:
3   - webserver02
4   - memcache02
5 os: redhat02

6.2. grains刷新并查看指定信息

在salt100上操作

代码语言:javascript复制
 1 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新grains信息
 2 salt01:
 3 [root@salt100 ~]# salt 'salt01' grains.item roles
 4 salt01:
 5     ----------
 6     roles:
 7         - webserver02
 8         - memcache02
 9 [root@salt100 ~]# salt 'salt01' grains.item os
10 salt01:
11     ----------
12     os:
13         redhat02

7. 在/etc/salt/minion 中定义grains

生产中不建议使用,因为写在了默认的配置文件中,不利于后期维护。

7.1. minion端配置修改

minion端salt01机器上配置修改

代码语言:javascript复制
 1 [root@salt01 salt]# pwd
 2 /etc/salt
 3 [root@salt01 salt]# vim minion
 4 ………………
 5 # Custom static grains for this minion can be specified here and used in SLS
 6 # files just like all other grains. This example sets 4 custom grains, with
 7 # the 'roles' grain having two values that can be matched against.
 8 grains:
 9   roles:
10     - webserver03
11     - memcache03
12   os: redhat03
13 #  deployment: datacenter4
14 #  cabinet: 13
15 #  cab_u: 14-15

7.2. grains刷新并查看指定信息

在master端刷新grains信息,并查看

代码语言:javascript复制
 1 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新指定minion的grains信息 
 2 salt01:
 3 [root@salt100 ~]# salt 'salt01' grains.item roles
 4 salt01:
 5     ----------
 6     roles:
 7         - webserver03
 8         - memcache03
 9 [root@salt100 ~]# salt 'salt01' grains.item os
10 salt01:
11     ----------
12     os:
13         redhat03

8. Grains使用方式

8.1. 查询grains的指定信息

代码语言:javascript复制
 1 [root@salt100 salt]# salt 'salt0*' grains.item os  # 通过通配符匹配salt0*  minion端的操作系统信息 
 2 salt01:
 3     ----------
 4     os:
 5         CentOS
 6 salt03:
 7     ----------
 8     os:
 9         CentOS
10 salt02:
11     ----------
12     os:
13         CentOS 
14 [root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0  # 多级查询 
15 salt03:
16     ----------
17     ip4_interfaces:eth0:
18         - 172.16.1.13
19 salt01:
20     ----------
21     ip4_interfaces:eth0:
22         - 172.16.1.11
23 salt02:
24     ----------
25     ip4_interfaces:eth0:
26         - 172.16.1.12
27 [root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0:0  # 取列表中的第一个值★★★★★
28 salt01:
29     ----------
30     ip4_interfaces:eth0:0:
31         172.16.1.11
32 salt03:
33     ----------
34     ip4_interfaces:eth0:0:
35         172.16.1.13
36 salt02:
37     ----------
38     ip4_interfaces:eth0:0:
39         172.16.1.12

8.2. 通过grains查询信息

示例1

代码语言:javascript复制
 1 [root@salt100 salt]# salt 'salt01' grains.item os  
 2 salt01:
 3     ----------
 4     os:
 5         CentOS
 6 [root@salt100 salt]# salt -G 'os:CentOS' cmd.run 'echo "zhangliang $(date  %Y)"' # 指定操作系统为CentOS的   
 7 salt03:
 8     zhangliang 2018
 9 salt02:
10     zhangliang 2018
11 salt01:
12     zhangliang 2018
13 salt100:
14     zhangliang 2018

示例2

代码语言:javascript复制
 1 [root@salt100 salt]# salt 'salt01' grains.item ip_interfaces 
 2 salt01:
 3     ----------
 4     ip_interfaces:
 5         ----------
 6         eth0:
 7             - 172.16.1.11
 8             - fe80::20c:29ff:fe95:1b7a
 9         eth1:
10             - 10.0.0.11
11             - fe80::20c:29ff:fe95:1b84
12         lo:
13             - 127.0.0.1
14             - ::1
15 [root@salt100 salt]# salt -G 'ip_interfaces:eth0:172.16.1.11' cmd.run 'whoami'  
16 salt01:
17     root
18 [root@salt100 salt]# salt -G 'ip_interfaces:eth1:10.0.0.11' cmd.run 'whoami'  
19 salt01:
20     root

9. 在top file中使用grains

9.1. top.sls编写

代码语言:javascript复制
 1 [root@salt100 salt]# pwd
 2 /srv/salt
 3 [root@salt100 salt]# cat top.sls 
 4 base:
 5   # 使用通配符  暂时注释掉
 6   # 'salt0*':
 7   #   - web.apache
 8     # - web.nginx  # 可以有多个
 9   # 指定具体minion
10   'salt03':
11     - web.apache
12   # 使用grains匹配,添加如下几行
13   'roles:webserver03':
14     - match: grain
15     - web.apache

9.2. state.highstate执行

首先通过grains查看salt01和salt02 的roles信息

代码语言:javascript复制
 1 [root@salt100 salt]# salt 'salt01' grains.item roles  
 2 salt01:
 3     ----------
 4     roles:
 5         - webserver03
 6         - memcache03
 7 [root@salt100 salt]# salt 'salt02' grains.item roles
 8 salt02:
 9     ----------
10     roles:

执行结果

代码语言:javascript复制
 1 [root@salt100 salt]# salt 'salt01' state.highstate test=True # 执行正常
 2 ………………
 3 [root@salt100 salt]# salt 'salt01' state.highstate # 执行正常
 4 ………………
 5 [root@salt100 salt]# salt 'salt02' state.highstate test=True  # 执行异常【top.file 中没有该匹配】
 6 salt02:
 7 ----------
 8           ID: states
 9     Function: no.None
10       Result: False
11      Comment: No Top file or master_tops data matches found.
12      Changes:   
13 
14 Summary for salt02
15 ------------
16 Succeeded: 0
17 Failed:    1
18 ------------
19 Total states run:     1
20 Total run time:   0.000 ms

0 人点赞