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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...