Saltstack grains组件
grains是Saltstack最重要的組件之一,grains的作用是收集被控主機(jī)的基本信息,這些信息通常都是一些靜態(tài)的數(shù)據(jù),包括CPU、內(nèi)核、操作系統(tǒng)、虛擬化等,在服務(wù)器端可以根據(jù)這些信息進(jìn)行靈活定制,管理員可以利用這新信息對(duì)不同業(yè)務(wù)進(jìn)行個(gè)性化配置。
官網(wǎng)提供的用來區(qū)分不同操作系統(tǒng)的示例如下(采用jinja模板):
{% if grains['os'] == 'Ubuntu' %} host: {{ grains['host'] }} {% elif grains['os'] == 'CentOS' %} host: {{ grains['fqdn'] }} {% endif %}示例中CentOS發(fā)行版主機(jī)將被 "host: {{ grains['fqdn'] }}"匹配,以主機(jī)SN100-128(centOS6.4)為例,最終得到"host:SN100-128"。同時(shí),命令行的匹配操作系統(tǒng)發(fā)行版本為CentOS的被控端可以通過-G參數(shù)來過濾,如salt -G 'os:CentOS' test.ping。
[root@localhost~]# salt -G 'os:CentOS' test.ping SN100-128:True SN100-129:True SN100-130:True(1) grains常用操作命令:
#獲取主機(jī)的grains項(xiàng)信息:
[root@localhost~]# salt 'SN100-128' grains.ls SN100-128:- SSDs- biosreleasedate- biosversion- cpu_flags- cpu_model- cpuarch- domain- fqdn- fqdn_ip4- fqdn_ip6- gpus- host- hwaddr_interfaces- id- init- ip4_interfaces- ip6_interfaces- ip_interfaces- ipv4- ipv6- kernel- kernelrelease- locale_info- localhost- lsb_distrib_codename- lsb_distrib_id- lsb_distrib_release- machine_id- manufacturer- master- mdadm- mem_total- nodename- num_cpus- num_gpus- os- os_family- osarch- oscodename- osfinger- osfullname- osmajorrelease- osrelease- osrelease_info- path- productname- ps- pythonexecutable- pythonpath- pythonversion- saltpath- saltversion- saltversioninfo- selinux- serialnumber- server_id- shell- virtual- zmqversion獲取主機(jī)單項(xiàng)grains數(shù)據(jù):
#獲取操作系統(tǒng)發(fā)行版本. [root@localhost~]# salt 'SN100-128' grains.item os SN100-128:----------os:CentOS #獲取操作系統(tǒng)的內(nèi)核信息. [root@localhost~]# salt 'SN100-128' grains.item kernel SN100-128:----------kernel:Linux#獲取操作系統(tǒng)的selinux信息 [root@localhost~]# salt 'SN100-128' grains.item selinux SN100-128:----------selinux:----------enabled:Falseenforced:Disabled#salt '*' grains.item os //返回鍵值對(duì)
#salt '*' grains.get os ?//返回值
獲取主機(jī)id為'SN100-128'的所有g(shù)rains鍵及值信息。
[root@localhost~]# salt 'SN100-128' grains.items SN100-128:----------SSDs:biosreleasedate:04/14/2014biosversion:6.00cpu_flags:- fpu - vme - de - pse - tsc - msr - pae - mce - cx8 - apic - sep - mtrr - pge - mca - cmov - pat - pse36 cpu_model:Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHzcpuarch:x86_64domain:fqdn:TestOnlyMPAPPfqdn_ip4:- 10.10.100.128- 127.0.0.1fqdn_ip6:gpus:|_----------model:SVGA II Adaptervendor:unknownhost:TestOnlyMPAPPhwaddr_interfaces:----------eth1:00:50:56:87:b1:54lo:00:00:00:00:00:00id:SN100-128init:upstartip4_interfaces:----------eth1:- 10.10.100.128lo:- 127.0.0.1ip6_interfaces:----------eth1:- fe80::250:56ff:fe87:b154lo:- ::1ip_interfaces:----------eth1:- 10.10.100.128- fe80::250:56ff:fe87:b154lo:- 127.0.0.1- ::1ipv4:- 10.10.100.128- 127.0.0.1ipv6:- ::1- fe80::250:56ff:fe87:b154kernel:Linuxkernelrelease:2.6.32-431.el6.x86_64locale_info:----------defaultencoding:UTF8defaultlanguage:zh_CNdetectedencoding:UTF-8localhost:TestOnlyMPAPPlsb_distrib_codename:Finallsb_distrib_id:CentOSlsb_distrib_release:6.5machine_id:bcc4f9ad2d40506966ce2b1400000014manufacturer:VMware, Inc.master:10.10.100.127mdadm:mem_total:8001nodename:TestOnlyMPAPPnum_cpus:2num_gpus:1os:CentOSos_family:RedHatosarch:x86_64oscodename:Finalosfinger:CentOS-6osfullname:CentOSosmajorrelease:6osrelease:6.5osrelease_info:- 6- 5path:/sbin:/usr/sbin:/bin:/usr/binproductname:VMware Virtual Platformps:ps -efHpythonexecutable:/usr/bin/python2.6pythonpath:- /usr/bin- /usr/lib64/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/lib64/python2.6/site-packages/gst-0.10- /usr/lib64/python2.6/site-packages/gtk-2.0- /usr/lib64/python2.6/site-packages/webkit-1.0- /usr/lib/python2.6/site-packages- /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-infopythonversion:- 2- 6- 6- final- 0saltpath:/usr/lib/python2.6/site-packages/saltsaltversion:2015.5.8saltversioninfo:- 2015- 5- 8- 0selinux:----------enabled:Falseenforced:Disabledserialnumber:VMware-42 07 95 36 bc 00 ee bd-bc 79 77 5c 81 14 35 b5server_id:295812205shell:/bin/shvirtual:VMwarezmqversion:3.2.5(2) 定義grains數(shù)據(jù):
定義grains數(shù)據(jù)的方法有兩種,其中一種為在被控端主機(jī)定制配置文件,另一種是通過主控端擴(kuò)展模塊API實(shí)現(xiàn),區(qū)別是模塊更靈活,可以通過python編程動(dòng)態(tài)定義,而配置文件只適合相對(duì)固定的鍵與值。下面分別舉例說明。
1.被控端主機(jī)定制grains數(shù)據(jù)
SSH登錄一臺(tái)被控主機(jī),如SN100-128,配置文件定制的路徑為/etc/salt/minion,參數(shù)為default_include: minion.d/*.conf,具體操作如下:
【/etc/salt/minion.d/hostinfo.conf】
grains:roles:- webserver- memcachedeployment: datacenter4cabinet: 13重啟被控主機(jī)salt-minion服務(wù),使之生效:service salt-minion restart。驗(yàn)證結(jié)果在主控端主機(jī)運(yùn)行:salt 'SN100-128' grains.item roles deployment cabinet,觀察配置的鍵與值,如下所示。
[root@localhost~]# salt 'SN100-128' grains.item roles deployment cabinet SN100-128:----------cabinet:13deployment:datacenter4roles:- webserver- memcache或者也可以這樣定義
vim /etc/salt/grainscloud: openstack test: salt/etc/init.d/salt-minion restart 或者執(zhí)行同步 salt '*' saltutil.sync_grainssalt -G 'cloud:openstack' test.ping2.主控端擴(kuò)展模塊定制grains數(shù)據(jù)
首先在主控端編寫python代碼,然后將該python文件同步到被控主機(jī),最后刷新生效(即編譯python源碼文件生成字節(jié)碼pyc)。在主控端bash目錄(見/etc/salt/master配置文件的file_roots項(xiàng),默認(rèn)的bash配置在/srv/salt)下生成_grains目錄,執(zhí)行install -d /srv/salt/_grains開始編寫代碼,實(shí)現(xiàn)獲取被控主機(jī)系統(tǒng)允許最大打開文件數(shù)(ulimit -n)的grains數(shù)據(jù)。
【/srv/salt/_grains/sysprocess.py】
#!/usr/bin/env python #coding:utf-8import os,sys,commands def Granins_openfile():"""os max open file of grains value"""grains = {}#init default value_open_file=65535try:getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')except Exception,e:passif getulimit[0] == 0:_open_file=int(getulimit[1])grains['max_open_file'] = _open_filereturn grains Granins_openfile()上面代碼的說明如下。
grains_openfile()定義一個(gè)獲取最大打開文件數(shù)的函數(shù),函數(shù)名稱沒有要求,符合python的函數(shù)命名規(guī)則即可;
grains = {} 初始化一個(gè)grains字典,變量名一定要用grains,以便Saltstack識(shí)別;
grains['max_open_file'] = _open_file 將獲取的linux ulimit -n 的結(jié)果值賦予grains['max_open_file'],其中"max_open_file"就是grains的項(xiàng),_open_file就是grains的值。
最后同步模塊到指定被控端主機(jī)并刷新生效,因?yàn)間rains比較合適采集靜態(tài)類的數(shù)據(jù),比如硬件,內(nèi)核信息等。當(dāng)有動(dòng)態(tài)類的功能需求時(shí),需要提行刷新,具體操作如下:
同步模塊?salt 'SN100-128' saltutil.sync_all ,看看 "SN100-128"主機(jī)發(fā)生了什么?文件已經(jīng)同步到minion cache目錄中,如下:
/var/cache/salt/minion/extmods/grains/sysprocess.py /var/cache/salt/minion/files/base/_grains/sysprocess.py?/var/cache/salt/minion/extmods/grains/為擴(kuò)展模塊文件最終存放位置,刷新模塊后將在同路徑下生成字節(jié)碼pyc;
?/var/cache/salt/minion/files/base/_grains/為臨時(shí)存放位置。
?刷新模塊salt 'SN100-128' sys.reload_modules,再看看主機(jī)發(fā)生了什么變化?在/var/cache/salt/minion/extmods/grains/位置多了一個(gè)編譯后的字節(jié)碼文件sysprocess.pyc文件,為python可執(zhí)行的格式。
/var/cache/salt/minion/extmods/grains/sysprocess.py /var/cache/salt/minion/extmods/grains/sysprocess.pyc /var/cache/salt/minion/files/base/_grains/sysprocess.py?效驗(yàn)結(jié)果為可以在主控端查看grains信息,執(zhí)行?salt 'SN100-128' grains.item max_open_file,結(jié)果顯示"max_open_file:1024",這就是前面定制的主機(jī)grains信息。
[root@localhost~]# salt 'SN100-128' grains.item max_open_file SN100-128:----------max_open_file:1024grains在top.sls中的使用:
'roles: nginx':- match:grain //聲明使用grain- init.pkg //執(zhí)行init.pkg模塊?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/saneri/p/5567491.html
總結(jié)
以上是生活随笔為你收集整理的Saltstack grains组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曲靖的公司可以在昆明购买公积金吗
- 下一篇: Centos7修改默认网卡名(改为eth