當前位置:成語大全網 - 成語詞典 - 如何使用Salt Pillar

如何使用Salt Pillar

怎樣定義Pillar數據?

master配置文件中定義

默認情況下,master配置文件中的所有數據都添加到Pillar中,且對所有minion可用。如果要禁用這壹默認值,可以在master配置文件中添加如下數據,重啟服務後生效:

pillar_opts: False

使用SLS文件定義Pillar

Pillar使用與State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定義的目錄下。示例如下:

pillar_roots:

base:

- /srv/pillar

這段代碼定義了base環境下的Pillar文件保存在/srv/pillar/目錄下。與State相似,Pillar也有top file,也使用相同的匹配方式將數據應用到minion上。示例如下:

/srv/pillar/top.sls:

base:

'*':

- data

- packages

/srv/pillar/packages.sls:

{% if grains['os'] == 'RedHat' %}

apache: httpd

git: git

{% elif grains['os'] == 'Debian' %}

apache: apache2

git: git-core

{% endif %}

/srv/pillar/data/init.sls:

role: DB_master

這段代碼表示,base環境中所有的minion都具有packages和data中定義的數據。Pillar采用與file server相同的文件映射方式,在本例中,packages映射到文件/srv/pillar/packages.sls,data映射到/srv/pillar/data/init.sls。註意key與value要用冒號加空格分隔,沒有空格的話將解析失敗。

Pillar還可以使用其他的匹配方式來選擇minion,下面的例子中,servers只應用到操作系統是Debain的機器:

dev:

'os:Debian':

- match: grain

- servers

如何知道minion擁有哪些Pillar數據?

使用執行模塊pillar。pillar模塊有兩個funtion:pillar.data和pillar.raw。示例如下:

# salt '*' pillar.data

在master上修改Pilla文件後,需要用以下命令刷新minion上的數據:

salt '*' saltutil.refresh_pillar

如果定義好的pillar不生效,建議刷新壹下試試。

Pillar中數據如何使用?

Pillar解析後是dict對象,直接使用Python語法,可以用索引(pillar['pkgs']['apache'])或get方法(pillar.get('users', {}))。詳見下面的例子。

示例

targeting

使用-I選項表示使用Pillar來匹配minion.

salt -I 'role:DB*' test.ping

在Pillar中使用列表

Pillar的key/value結構中的value可以是string,也可以是壹個list。Pillar文件定義如下:

/srv/pillar/users/init.sls:

users:

thatch: 1000

shouse: 1001

utahdave: 1002

redbeard: 1003

在top.sls中引用Pillar文件,對所有的minion應用users中的內容:

/srv/pillar/top.sls:

base:

'*':

- data

- users

現在所有的minion都具有了users數據,可以在state文件中使用:

/srv/salt/users/init.sls:

{% for user, uid in pillar.get('users', {}).items() %}

{{user}}:

user.present:

- uid: {{uid}}

{% endfor %}

利用Pillar處理平臺差異

不同的操作系統不僅管理資源的方式不同,軟件包的名字、配置文件的路徑也有有可能不壹樣。Salt的執行模塊屏蔽了系統管理資源的差異。其他的差異可以根據grains中的的os、cpuarch等信息來處理,這些條件判斷可以寫在State文件中,但會使得State文件的邏輯不清晰。Pillar可以很好地解決這個問題。下面的例子中,在不同的os上安裝對應的軟件包,但state file完全壹樣,不需要針對os作修改,靈活方便。

/srv/pillar/pkg/init.sls:

pkgs:

{% if grains['os_family'] == 'RedHat' %}

apache: httpd

vim: vim-enhanced

{% elif grains['os_family'] == 'Debian' %}

apache: apache2

vim: vim

{% elif grains['os'] == 'Arch' %}

apache: apache

vim: vim

{% endif %}

/srv/pillar/top.sls:

base:

'*':

- data

- users

- pkg

/srv/salt/apache/init.sls:

apache:

pkg.installed:

- name: {{ pillar['pkgs']['apache'] }}

還可以在state file中設置默認值: srv/salt/apache/init.sls:

apache:

pkg.installed:

- name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}