Saltstack_使用指南04_數據系統-Grains

来源:https://www.cnblogs.com/zhanglianghhh/archive/2019/03/29/10623156.html
-Advertisement-
Play Games

1. 主機規劃 Grains文檔 註意事項 修改了master或者minion的配置文件,那麼必須重啟對應的服務。 2. Grains基本信息 3. Grains優先順序信息 推薦使用 自編寫py腳本定義,這樣自定義的grains只需要在master端維護即可,減少後期維護成本。 下文內容就是根據優先 ...


 

1. 主機規劃

 

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 	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • title: 如何更加安全快速的使用富文本編輯器 date: 2019 03 28 08:45:28 tags: C 眾所周知,富文本編輯器是目前用途廣泛的前端插件,它可以直接編輯並保存多樣化的文本格式。適用於論壇留言,簡單文章發佈,自定義靜態頁面等。本文簡單對一種安全使用富文本編輯器的方法進行介紹 ...
  • 其實很簡單,因為Combox的Item是一個K/V的object,那麼就可以把它的items轉換成IEnumerable<DictionaryEntry>類型的(System.Collections命名空間),然後根據要選中的Key或Value使用Lamda表達式來設置Combox的選中項。 比如當 ...
  • 從今天開始來學習如何在 ASP.NET Core 中構建 Web API 以及每項功能的最佳適用場景。 ...
  • DS密法是DYLIKE本人研發的一種針對文本字元串的高強度加密方法,本加密方法的優點是同源不同密,同一個源文本每次加密的結果都不同,長度也不同.密鑰最大可達String類型的字元最大長度.缺點是解密時間長,500字長度的密文解密約需半秒.適用於非頻繁的數據加密交換.註意,欲加密的源字串不能少於5字. ...
  • 今天應客戶要求,修改導出word模板。使用的是Aspose.Words插件。這個程式原是同事所寫,且自己對Aspose不是很瞭解。在替換木板上花費了一些時間。 先來一張圖:下圖是原來的模板。現在要求刪除“原始內容3”,在“原始內容1”上面添加“新內容”,假設新加“新內容”的分數占位符是“Rule1” ...
  • 第一步下載erlang環境並安裝: rpm -Uvh https://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/Packages/epel-release-7-11.noarch.rpm yum install erlang 第二步下載Rabb ...
  • 環境:MacOS 10.13.6 虛擬機:VirtualBox6.0(VirtualBox-6.0.4-128413-OSX.dmg) Linux:Centos7(CentOS-7-x86_64-Minimal-1810.iso) 一:虛擬機安裝 這個。。。。真沒啥好說的。。。略過 二:虛擬機創建C ...
  • 1. 主機規劃 Pillar文檔 註意事項 2. Grains VS Pillar 3. Pillar基本信息 4. 顯示系統自帶的pillar 系統自帶的pillar預設是不顯示的 註意:看完之後還原回去,因為數據較多。和自定義數據雜在一起,不方便查看 4.1. 修改配置文件並重啟服務 4.2. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...