上一集 中
我們先介紹一下內建的 Grains 有什麼好了salt 'www-01' grains.items
www-01:
biosreleasedate: 06/22/2012
biosversion: 6.00
cpu_flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc arch_perfmon pebs bts nopl tsc_reliable nonstop_tsc aperfmperf pni ssse3 cx16 sse4_1 x2apic hypervisor lahf_lm dtherm
cpu_model: Intel(R) Xeon(R) CPU L5420 @ 2.50GHz
cpuarch: x86_64
defaultencoding: UTF8
defaultlanguage: zh_TW
domain:
fqdn: www-01
gpus:
{'model': 'SVGA II Adapter', 'vendor': 'unknown'}
host: www-01
id: www-01
ip_interfaces: {'sit0': [], 'lo': ['127.0.0.1'], 'eth0': ['192.168.1.1']}
ipv4:
127.0.0.1
192.168.1.1
kernel: Linux
kernelrelease: 3.9.7-neoesque
localhost: www-01
manufacturer: VMware, Inc.
master: salt
mem_total: 8016
nodename: www-01
num_cpus: 4
num_gpus: 1
os: SUSE Enterprise Server
os_family: Suse
oscodename: x86_64
osfullname: SUSE Linux Enterprise Server
osrelease: 11
path: /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin/
productname: VMware Virtual Platform
ps: ps -efH
pythonpath:
/usr/local/bin
/usr/local/lib64/python2.6/site-packages/pip-1.3.1-py2.6.egg
/usr/lib/python26.zip
/usr/lib64/python2.6
/usr/lib64/python2.6/plat-linux2
/usr/lib64/python2.6/lib-tk
/usr/lib64/python2.6/lib-old
/usr/lib64/python2.6/lib-dynload
/usr/lib64/python2.6/site-packages
/usr/local/lib64/python2.6/site-packages
pythonversion: 2.6.0.final.0
saltpath: /usr/local/lib64/python2.6/site-packages/salt
saltversion: 0.15.90
serialnumber: VMware-42 30 04 4b 79 d2 c1 59-92 2b eb 2e 71 d4 7c 63
server_id: 1323040866
shell: /bin/zsh
virtual: VMware
如果想要單獨知道某一個salt 'www-01' grains.item os
www-01:
os: SUSE Enterprise Server
但是從上面的資訊我們可以發現 Salt 與預設只能抓到剛剛說的 os: SLES 跟 osrelease: 11
首先在 Master 的電腦的 Base 底下新增一個叫做 ___grains__的資料夾install -d /srv/salt/_grains
vi /srv/salt/_grains/os.py
def patch():
'''
return Service Pack Version
'''
grains = {}
for line in open("/etc/SuSE-release"):
if "PATCHLEVEL" in line:
patch = int(line.split("=")[-1])
grains['ospatch'] = patch
return grains
因為 SUSE 的 SP 版本號存在 __/etc/SuSE-release__
- 開頭不用 #!/usr/bin/python
因為這個檔案原本 salt 就會直接餵給 python 吃而已, - grains 這個變數可以直接覆寫
因為最後是 merge 結果的, 所以 grains[, ‘ ospatch’ ] = patch 最後你的grains.items
裡面就會多一個 ospatch 的變數
存檔後就可以準備下指令啦salt '*' state.highstate
salt 'www-01' grains.item ospatch
salt '*' sys.reload_modules
這樣 minion 就會重新 scan modules 了salt '*' grains.item ospatch
如果沒錯誤應該可以看到如下的結果
www-stage:
ospatch: 1
www-02:
ospatch: 2
www-01:
ospatch: 2
www-03:
ospatch: 2
www-04:
ospatch: 2
自定 Grains 大概就是這麼一回事嘍~