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