grains
主要負責采集客戶端一些基本信息, 這個也完全可以自定義,可以在客戶端自定義,然后自動匯報上來;也可以從服務器端定義然后推下去,采集完后,再匯報上來
1. 打印所有items值
root@sh-salt-01 ~
> salt bj-db-01 grains.items
bj-db-01:
----------
SSDs:
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
...... 此處省略100字
selinux:
----------
enabled:
False
enforced:
Disabled
server_id:
327831961
shell:
/bin/bash
virtual:
VMware
zmqversion:
3.2.5
2.列出所有items
> salt bj-db-01 grains.ls
bj-db-01:
- SSDs
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
- hwaddr_interfaces
- id
- init
......
3.查看單個item值
root@sh-salt-01 ~
> salt bj-db-01 grains.item shell
bj-db-01:
----------
shell:
/bin/bash
root@sh-salt-01 ~
> salt bj-db-01 grains.item ipv4
bj-db-01:
----------
ipv4:
- 1.1.1.12
- 127.0.0.1
4.自定義grains數(shù)據(jù)
- 有兩種方法
在minion端實現(xiàn)
修改配置文件/etc/salt/minion中打開 default_include: minion.d/.conf
在/etc/salt/minion.d/目錄中添加需要增加的items,文件類型與配置項.conf對應
> vim /etc/salt/minion.d/tomcat.conf
grains: #開頭需聲明是grains
role:
- tomcat
- db
max_con: 123
重啟minion,在master查看
> salt bj-db-01 grains.item role max_con
bj-db-01:
----------
max_con:
123
role:
- tomcat
- db
在master端實現(xiàn)
在master端添加
在/srv/salt/ 創(chuàng)建_grains目錄,一般是py文件,編寫grains文件,需要返回一個字典
> vim tomcat.py
def tomcat_version():
grains = {}
grains['tomcat'] = '7.0.64'
return grains
同步到minion端
salt bj-db-01 saltutil.sync_all
查看自定義的grains信息
> salt bj-db-01 grains.item tomcat
bj-db-01:
----------
tomcat:
7.0.64
pillar
Pillar是什么?
pillar是salt非常重要的一個組件,它用于給特定的minion定義任何你需要的數(shù)據(jù), 這些數(shù)據(jù)可以被salt的其他組件使用。pillar 在解析完成 后,是一個嵌套的 dict 結構;最上層的 key 是 minion ID,其 value 是該 minion 所擁有的 Pillar 數(shù)據(jù);每一個 value 也都是 key/value。這里可以看出 Pillar 的一個特點,Pillar 數(shù)據(jù)是與特定 minion 關聯(lián)的,也就是說每一個minion 都只能看到自己的數(shù)據(jù), 所以 Pillar 可以用來傳遞敏感數(shù)據(jù) 。
Pillar可以用在哪些地方?
- 敏感數(shù)據(jù)
例如ssh key,加密證書等,由于Pillar使用獨立的加密session,可以確保這些敏感數(shù)據(jù)不被其他minion看到。 - 變量
可以在Pillar中處理平臺差異性,比如針對不同的操作系統(tǒng)設置軟件包的名字,然后在State中引用。 - 其他任何數(shù)據(jù)
可以在Pillar中添加任何需要用到的數(shù)據(jù)。比如定義用戶和UID的對應關系,mnion的角色等。 - 用在Targetting中
Pillar可以用來選擇minion,使用-I選項。
怎樣定義Pillar數(shù)據(jù)?
- master配置文件中定義
默認情況下,master配置文件中的所有數(shù)據(jù)都添加到Pillar中,且對所有minion可用。如果要禁用這一默認值,可以在master配置文件中添加如下數(shù)據(jù),重啟服務后生效:
pillar_opts: False
- 使用SLS文件定義Pillar
Pillar使用與State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定義的目錄下。示例如下:
pillar_roots:
base:
- /srv/pillar
- 定義入口文件和數(shù)據(jù)
cd /srv/pillar
vim top.sls
base:
'*':
- data
vim data.sls
appname: website
flow:
maxconn: 30000
maxmen: 8G
如何知道m(xù)inion擁有哪些Pillar數(shù)據(jù)?
在master上修改Pilla文件后,需要用以下命令刷新minion上的數(shù)據(jù):
salt bj-db-01 saltutil.refresh_pillar
使用執(zhí)行模塊pillar。pillar模塊有兩個funtion:pillar.data和pillar.raw。示例如下:
salt bj-db-01 pillar.data
如果定義好的pillar不生效,建議刷新一下試試。
> salt bj-db-01 saltutil.refresh_pillar
bj-db-01:
True
root@sh-salt-01 pillar
> salt bj-db-01 pillar.data
bj-db-01:
----------
appname:
website
flow:
----------
maxconn:
30000
maxmen:
8G
Pillar中數(shù)據(jù)如何使用?
完成pillar配置后,我們可以在state和模板文件中引用,模板格式變量為{{ pillar變量 }}:
- 示例
{{ pillar['appname'] }} #代表值 website
{{ pillar['flow']['maxconn'] }} #代表值 30000
python API格式:
pillar['appname']
pillar['flow']['maxconn']
1.操作目標主機
使用-I,大寫 i
選項表示使用Pillar來匹配minion.
> salt -I 'appname:website' test.ping
bj-db-01:
True
2.結合grains處理數(shù)據(jù)差異性
首先結合grainx的id信息來區(qū)分不同id的maxcpu和maxmen;
修改上面的data.sls,語法為jinja2,查看jinja2中文文檔
vim data.sls
appname: website
ip: {{ grains['ipv4'][0] }}
flow:
maxconn: 30000
{ % if grains['id'] == 'sh-salt-01' % }
maxcpu: 8
maxmen: 8G
{ % elif grains['id'] == 'bj-db-01' % }
maxcpu: 2
maxmen: 4G
{ % endif % }
刷新pillar數(shù)據(jù),查看主機的pillar數(shù)據(jù),看看是否有差異
> salt \* saltutil.refresh_pillar
bj-db-01:
True
sh-salt-01:
True
root@sh-salt-01 pillar
> salt \* pillar.data ip
bj-db-01:
----------
ip:
1.1.1.12
sh-salt-01:
----------
ip:
1.1.1.11
本文出處:[劉天斯python自動運維一書]