欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Saltstack_使用指南04_数据系统-Grains

程序员文章站 2022-05-29 12:10:32
1. 主机规划 Grains文档 注意事项 修改了master或者minion的配置文件,那么必须重启对应的服务。 2. Grains基本信息 3. Grains优先级信息 推荐使用 自编写py脚本定义,这样自定义的grains只需要在master端维护即可,减少后期维护成本。 下文内容就是根据优先 ......

 

1. 主机规划

Saltstack_使用指南04_数据系统-Grains

 

grains文档

https://docs.saltstack.com/en/latest/topics/grains/index.html    

 

注意事项

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

 

 

2. grains基本信息

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脚本,返回一个字典就可以了。

 

可以通过

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优先级信息

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

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

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

 

 

4. salt自带grains 信息

4.1. grains条目项信息

1 [root@salt100 salt]# salt 'salt01' grains.ls  # 查看salt01机器有哪些grains条目项信息
2 ………………

 

4.2. grains全部信息

  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指定信息

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脚本

 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信息

 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端查看推送过来的文件位置

 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上操作

1 [root@salt01 salt]# cat /etc/salt/grains 
2 roles:
3   - webserver02
4   - memcache02
5 os: redhat02

 

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

在salt100上操作

 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机器上配置修改

 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信息,并查看

 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的指定信息

 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

 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

 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编写

 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信息

 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:

 

执行结果

 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