Saltstack_使用指南04_數據系統-Grains
阿新 • • 發佈:2019-03-30
other bios zip 修改 sta cmd options sse 多級 1. 主機規劃
服務器名稱 | 操作系統版本 | 內網IP | 外網IP(模擬) | Hostname | 部署模塊 |
---|---|---|---|---|---|
salt100 | CentOS7.5 | 172.16.1.100 | 10.0.0.100 | salt100 | salt-master、salt-minion |
salt01 | CentOS7.5 | 172.16.1.11 | 10.0.0.11 | salt01 | salt-minion |
salt02 | CentOS7.5 | 172.16.1.12 | 10.0.0.12 | salt02 | salt-minion |
salt03 | CentOS7.5 | 172.16.1.13 | 10.0.0.13 | salt03 | salt-minion |
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條目項信息
[root@salt100 salt]# salt ‘salt01‘ grains.ls # 查看salt01機器有哪些grains條目項信息
………………
4.2. grains全部信息
[root@salt100 salt]# salt ‘salt01‘ grains.items # 查看salt01機器有哪些grains信息
salt01:
----------
SSDs:
biosreleasedate:
05/19/2017
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- mmx
- fxsr
- sse
- sse2
- ss
- ht
- syscall
- nx
- pdpe1gb
- rdtscp
- lm
- constant_tsc
- arch_perfmon
- nopl
- xtopology
- tsc_reliable
- nonstop_tsc
- eagerfpu
- pni
- pclmulqdq
- ssse3
- fma
- cx16
- pcid
- sse4_1
- sse4_2
- x2apic
- movbe
- popcnt
- tsc_deadline_timer
- aes
- xsave
- avx
- f16c
- rdrand
- hypervisor
- lahf_lm
- abm
- 3dnowprefetch
- fsgsbase
- tsc_adjust
- bmi1
- avx2
- smep
- bmi2
- invpcid
- mpx
- rdseed
- adx
- smap
- clflushopt
- xsaveopt
- xsavec
- arat
cpu_model:
Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
cpuarch:
x86_64
disks:
- sda
- sr0
dns:
----------
domain:
ip4_nameservers:
- 10.0.0.2
- 223.5.5.5
ip6_nameservers:
nameservers:
- 10.0.0.2
- 223.5.5.5
options:
search:
sortlist:
domain:
fqdn:
salt01
fqdn_ip4:
- 172.16.1.11
fqdn_ip6:
- fe80::20c:29ff:fe95:1b84
- fe80::20c:29ff:fe95:1b7a
gid:
0
gpus:
|_
----------
model:
SVGA II Adapter
vendor:
unknown
groupname:
root
host:
salt01
hwaddr_interfaces:
----------
eth0:
00:0c:29:95:1b:7a
eth1:
00:0c:29:95:1b:84
lo:
00:00:00:00:00:00
id:
salt01
init:
systemd
ip4_gw:
10.0.0.2
ip4_interfaces:
----------
eth0:
- 172.16.1.11
eth1:
- 10.0.0.11
lo:
- 127.0.0.1
ip6_gw:
False
ip6_interfaces:
----------
eth0:
- fe80::20c:29ff:fe95:1b7a
eth1:
- fe80::20c:29ff:fe95:1b84
lo:
- ::1
ip_gw:
True
ip_interfaces:
----------
eth0:
- 172.16.1.11
- fe80::20c:29ff:fe95:1b7a
eth1:
- 10.0.0.11
- fe80::20c:29ff:fe95:1b84
lo:
- 127.0.0.1
- ::1
ipv4:
- 10.0.0.11
- 127.0.0.1
- 172.16.1.11
ipv6:
- ::1
- fe80::20c:29ff:fe95:1b7a
- fe80::20c:29ff:fe95:1b84
kernel:
Linux
kernelrelease:
3.10.0-862.el7.x86_64
kernelversion:
#1 SMP Fri Apr 20 16:44:24 UTC 2018
locale_info:
----------
defaultencoding:
UTF-8
defaultlanguage:
en_US
detectedencoding:
UTF-8
localhost:
salt01
lsb_distrib_codename:
CentOS Linux 7 (Core)
lsb_distrib_id:
CentOS Linux
machine_id:
5ae5f27014ee438780bf37ae68889471
manufacturer:
VMware, Inc.
master:
salt100
mdadm:
mem_total:
1821
nodename:
salt01
num_cpus:
2
num_gpus:
1
os:
CentOS
os_family:
RedHat
osarch:
x86_64
oscodename:
CentOS Linux 7 (Core)
osfinger:
CentOS Linux-7
osfullname:
CentOS Linux
osmajorrelease:
7
osrelease:
7.5.1804
osrelease_info:
- 7
- 5
- 1804
path:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
pid:
1598
productname:
VMware Virtual Platform
ps:
ps -efHww
pythonexecutable:
/usr/bin/python
pythonpath:
- /usr/bin
- /usr/lib64/python27.zip
- /usr/lib64/python2.7
- /usr/lib64/python2.7/plat-linux2
- /usr/lib64/python2.7/lib-tk
- /usr/lib64/python2.7/lib-old
- /usr/lib64/python2.7/lib-dynload
- /usr/lib64/python2.7/site-packages
- /usr/lib64/python2.7/site-packages/gtk-2.0
- /usr/lib/python2.7/site-packages
pythonversion:
- 2
- 7
- 5
- final
- 0
saltpath:
/usr/lib/python2.7/site-packages/salt
saltversion:
2018.3.3
saltversioninfo:
- 2018
- 3
- 3
- 0
selinux:
----------
enabled:
False
enforced:
Disabled
serialnumber:
VMware-56 4d 32 86 98 5c a8 3c-50 92 82 be 30 95 1b 7a
server_id:
2097601471
shell:
/bin/sh
swap_total:
2047
systemd:
----------
features:
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
version:
219
uid:
0
username:
root
uuid:
86324d56-5c98-3ca8-5092-82be30951b7a
virtual:
VMware
zfs_feature_flags:
False
zfs_support:
False
zmqversion:
4.1.4
4.3. 查詢grains指定信息
[root@salt100 ~]# salt ‘salt01‘ grains.item roles # 沒有該項信息,因此只顯示key 不顯示value
salt01:
----------
roles:
[root@salt100 ~]# salt ‘salt01‘ grains.item os
salt01:
----------
os:
CentOS
5. 自寫grains的py腳本
該腳本在salt master端,然後推送到minion端。
5.1. master端編寫py腳本
[root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# mkdir _grains # salt指定的位置
[root@salt100 salt]# cd _grains/
[root@salt100 _grains]# vim my_grains.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def grains_define():
# initialize a grains dictionary
grains = {}
# 填充信息
grains[‘roles‘] = ["webserver01","memcache01"],
grains[‘os‘] = ‘redhat01‘
# 返回這個字典
return grains
5.2. grains刷新並查看指定信息
在master端執行,並查看grains信息
[root@salt100 ~]# salt ‘salt01‘ saltutil.sync_grains # 會推送py腳本到minion端,並刷新grains信息
salt01:
- grains.my_grains
[root@salt100 ~]# salt ‘salt01‘ grains.item roles
salt01:
----------
roles:
|_
- webserver01
- memcache01
[root@salt100 ~]# salt ‘salt01‘ grains.item os
salt01:
----------
os:
redhat01
5.3. 在minion端查看推送過來的文件位置
[root@salt01 minion]# pwd
/var/cache/salt/minion
[root@salt01 minion]# tree
.
├── accumulator
├── extmods
│ └── grains # 在這個目錄下
│ ├── my_grains.py
│ └── my_grains.pyc
├── files
│ └── base
│ ├── _grains
│ │ └── my_grains.py
│ ├── top.sls
│ └── web
│ └── apache.sls
├── highstate.cache.p
├── module_refresh
├── pkg_refresh
├── proc
└── sls.p
8 directories, 9 files
6. 在/etc/salt/grains 中定義grains
註意:
該文件默認不存在,需要自己創建。
6.1. minion端配置修改
在salt01上操作
[root@salt01 salt]# cat /etc/salt/grains
roles:
- webserver02
- memcache02
os: redhat02
6.2. grains刷新並查看指定信息
在salt100上操作
[root@salt100 ~]# salt ‘salt01‘ saltutil.sync_grains # 刷新grains信息
salt01:
[root@salt100 ~]# salt ‘salt01‘ grains.item roles
salt01:
----------
roles:
- webserver02
- memcache02
[root@salt100 ~]# salt ‘salt01‘ grains.item os
salt01:
----------
os:
redhat02
7. 在/etc/salt/minion 中定義grains
生產中不建議使用,因為寫在了默認的配置文件中,不利於後期維護。
7.1. minion端配置修改
minion端salt01機器上配置修改
[root@salt01 salt]# pwd
/etc/salt
[root@salt01 salt]# vim minion
………………
# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets 4 custom grains, with
# the ‘roles‘ grain having two values that can be matched against.
grains:
roles:
- webserver03
- memcache03
os: redhat03
# deployment: datacenter4
# cabinet: 13
# cab_u: 14-15
7.2. grains刷新並查看指定信息
在master端刷新grains信息,並查看
[root@salt100 ~]# salt ‘salt01‘ saltutil.sync_grains # 刷新指定minion的grains信息
salt01:
[root@salt100 ~]# salt ‘salt01‘ grains.item roles
salt01:
----------
roles:
- webserver03
- memcache03
[root@salt100 ~]# salt ‘salt01‘ grains.item os
salt01:
----------
os:
redhat03
8. Grains使用方式
8.1. 查詢grains的指定信息
[root@salt100 salt]# salt ‘salt0*‘ grains.item os # 通過通配符匹配salt0* minion端的操作系統信息
salt01:
----------
os:
CentOS
salt03:
----------
os:
CentOS
salt02:
----------
os:
CentOS
[root@salt100 salt]# salt ‘salt0*‘ grains.item ip4_interfaces:eth0 # 多級查詢
salt03:
----------
ip4_interfaces:eth0:
- 172.16.1.13
salt01:
----------
ip4_interfaces:eth0:
- 172.16.1.11
salt02:
----------
ip4_interfaces:eth0:
- 172.16.1.12
[root@salt100 salt]# salt ‘salt0*‘ grains.item ip4_interfaces:eth0:0 # 取列表中的第一個值★★★★★
salt01:
----------
ip4_interfaces:eth0:0:
172.16.1.11
salt03:
----------
ip4_interfaces:eth0:0:
172.16.1.13
salt02:
----------
ip4_interfaces:eth0:0:
172.16.1.12
8.2. 通過grains查詢信息
示例1
[root@salt100 salt]# salt ‘salt01‘ grains.item os
salt01:
----------
os:
CentOS
[root@salt100 salt]# salt -G ‘os:CentOS‘ cmd.run ‘echo "zhangliang $(date +%Y)"‘ # 指定操作系統為CentOS的
salt03:
zhangliang 2018
salt02:
zhangliang 2018
salt01:
zhangliang 2018
salt100:
zhangliang 2018
示例2
[root@salt100 salt]# salt ‘salt01‘ grains.item ip_interfaces
salt01:
----------
ip_interfaces:
----------
eth0:
- 172.16.1.11
- fe80::20c:29ff:fe95:1b7a
eth1:
- 10.0.0.11
- fe80::20c:29ff:fe95:1b84
lo:
- 127.0.0.1
- ::1
[root@salt100 salt]# salt -G ‘ip_interfaces:eth0:172.16.1.11‘ cmd.run ‘whoami‘
salt01:
root
[root@salt100 salt]# salt -G ‘ip_interfaces:eth1:10.0.0.11‘ cmd.run ‘whoami‘
salt01:
root
9. 在top file中使用grains
9.1. top.sls編寫
[root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# cat top.sls
base:
# 使用通配符 暫時註釋掉
# ‘salt0*‘:
# - web.apache
# - web.nginx # 可以有多個
# 指定具體minion
‘salt03‘:
- web.apache
# 使用grains匹配,添加如下幾行
‘roles:webserver03‘:
- match: grain
- web.apache
9.2. state.highstate執行
首先通過grains查看salt01和salt02 的roles信息
[root@salt100 salt]# salt ‘salt01‘ grains.item roles
salt01:
----------
roles:
- webserver03
- memcache03
[root@salt100 salt]# salt ‘salt02‘ grains.item roles
salt02:
----------
roles:
執行結果
[root@salt100 salt]# salt ‘salt01‘ state.highstate test=True # 執行正常
………………
[root@salt100 salt]# salt ‘salt01‘ state.highstate # 執行正常
………………
[root@salt100 salt]# salt ‘salt02‘ state.highstate test=True # 執行異常【top.file 中沒有該匹配】
salt02:
----------
ID: states
Function: no.None
Result: False
Comment: No Top file or master_tops data matches found.
Changes:
Summary for salt02
------------
Succeeded: 0
Failed: 1
------------
Total states run: 1
Total run time: 0.000 ms
Saltstack_使用指南04_數據系統-Grains