Targeting -- 在SaltStack中選擇目標機器
參考連結:官方文件 Targeting
Targeting
Targeting
通過客戶端的
hostname
,系統資訊,預定義的分組或複合條件來選擇執行命令或配置狀態的目標機器。
比如說命令salt web1 apache.signal restart
只會重啟web1
上的apache
服務。
在State系統也類似,以下的top file
只讓客戶端web1
執行webserver.sls
base:
'web1':
- webserver
Salt目前有5種方式來選擇目標機器,靈活而強大。
- 匹配minion id
- 使用
shell
萬用字元 - 正則(
Perl
風格) minion
列表
- 使用
- Grains
- 可用的
Grains
- 在客戶端配置檔案中定義
Grains
- 編寫
Grains
- 可用的
- 節點分組
- 複合匹配
- 批量執行
匹配minion id
minion id
客戶端(
minion
)的唯一標誌符。預設值是主機的FQDN
,也可以在配置檔案中修改。
每一個客戶端都需要唯一標誌符。minion
第一次啟動時選擇FQDN
作為標誌符。預設值可以在minion
配置檔案中用id
來覆蓋。
Tip
minion id和minion keys
minion id 是 minion 公/私鑰對的名字,如果修改了 minion id ,master 需要重新接受新的key,否則 minion 不能通過 master 的認證。操作和新增新的 minion 一樣。
shell萬用字元 Globbing
Salt
預設使用shell
風格萬用字元('*','?','[]')來匹配minion id
。在State
系統中的top file
也一樣。
Note
使用 salt 命令時必須將'*'放在單引號中,或是用'\'轉義,不然 shell 會在 salt 之前擴充套件'*'。
匹配所有客戶端:
salt '*' test.ping
匹配所有example.net
域或者example
域的客戶端:
salt '*.example.net' test.ping
salt '*.example.*' test.ping
匹配example.net
域中的webN
客戶端(web1.example.net, web2.example.net … webN.example.net
):
salt 'web?.example.net' test.ping
匹配web1
到web5
:
salt 'web[1-5]' test.ping
匹配web-x
,web-y
,web-z
:
salt 'web-[x-z]' test.ping
正規表示式 Regular Expressions
Salt
可以使用Perl
風格的正規表示式來匹配minion id
,使用選項-E
。
匹配web1-prod
和web1-devel
:
salt -E 'web1-(prod|devel)' test.ping
在State
的top file
,需要將匹配方式作為第一個選項。以下例子在和上面相同的客戶端上執行webserver
中的內容。
base:
'web1-(prod|devel)':
- match: pcre
- webserver
minion列表 Lists
最基本的,可以列出每一個minion id
來指定多個目標機器,使用選項'-L'。
salt -L 'web1,web2,web3' test.ping
使用 Grains
Grains
minion啟動時收集的關於系統的靜態資訊。
需要注意的是,grains
是minion
啟動時載入的,在執行過程中不會發生變化,所以是靜態資料。grains
中包含諸如執行的核心版本,作業系統等資訊。
grains示例
匹配所有系統是CentOS
的客戶端:
salt -G 'os:CentOS' test.ping
匹配所有64位CPU
的機器,並返回CPU
核心數:
salt -G 'cpuarch:x86_64' grains.item num_cpus
有哪些可用的grains?
grains
在客戶端上執行,收集客戶端的資訊,所有不同的客戶端可以有不同的grains
。使用grains.ls
模組列出目標機器上所有可用的grains
的名字。
salt '*' grains.ls
grains.item
列出所有grains
的名字及內容。
salt '*' grains.items
在客戶端配置檔案中定義grains
內建的grains
不一定滿足需求,可以在minion
的配置檔案中靜態定義grains
。
grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15
重啟minion
服務後,grains.ls
就可以列出roles
等自定義的grains
。grains
資料不僅可以用salt
命令查詢,還可以在state
系統和Targeting
中用來匹配目標機器。
編寫Grains
在minion
配置檔案中定義的grains
是靜態的,不能夠動態的在minion
上生成。可以用Python
非常方便的寫動態的grains
。minion
啟動時,會執行grains
包所帶的模組及自定義grains
模組中的公開函式,返回的結果就是grains
。grains
模組中的函式必須返回一個dict
,其中key
是grains
的名字,value
是值。
Note
這裡的動態 grains 是指 minion 啟動時動態生成,事先並不知道內容,在啟動後,這些值依然是不變的。
很明顯,自定義的grains
並不是直接放在minion
上,而是放在master
配置檔案中定義的file_roots
下的_grains
目錄中。執行state.highstate
,saltutil.sync_grains
,saltutil.sync_all
時,會將_grains
中的檔案分發到客戶端上。
假定file_roots
為/srv/salt
,增加自定義grain
的操作如下:
# mkdir /srv/salt/_grains
# vim /srv/salt/_grains/custom_grain.py
def custom_grains():
'''
only a test grain.
you could use any Python code to generate the grains list dynamicly.
'''
grains = {'role' : 'LB'}
return grains
# salt '*' saltutil.sync_grains
# salt '*' grains.item role
由於是作為模組匯入,custom_grain.py
中不需要#!/usr/bin/env python
行,也不需要有執行許可權。
節點組 Node Groups
Node group
在
master
中nodegroups
用複合條件定義的一組minion
。 複合匹配在下面的內容有詳細介紹。
nodegroups
配置示例:
nodegroups:
group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
group2: 'G@os:Debian and foo.domain.com'
使用-N
選項:
salt -N group1 test.ping
在top file
中用- match: nodegroup
來指定使用節點組匹配。
base:
group1:
- match: nodegroup
- webserver
複合匹配 Compound matchers
Compound matcher
用布林操作符連線的多個目標條件。
複合匹配可以用前面討論的幾種方式實現更精確的匹配。複合匹配預設使用Globbing
,要使用其他匹配方式的話,需要加上型別字首字母,現在實現的字母
詳細列表,請參考文件。
複合匹配中也可以使用and
,or
,not
操作符,比如說,下面的命令匹配主機名以webserv
開始且執行Debian
系統的minion
,還匹配主機名滿足正則web-dc1-srv.*
的minion
。
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
本例中,G
表示用shell萬用字元
匹配grains
;E
表示用正則匹配minion id
。
這個例子在top file
中如下:
base:
'webserv* and G@os:Debian or E@web-dc1-srv.*':
- match: compound
- webserver
注意not
不能用於第一個條件,需要用如下命令:
salt -C '* and not G@kernel:Darwin' test.ping
批量執行 Batch Size
在指定數量或百分比的機器上執行命令。
salt \* -b 10 test.ping
salt -G 'os:RedHat' --batch-size 25% apache.signal restart
第一條命令在所有的客戶端上執行test.ping
,但同一時間只有10臺機器執行此命令,當有minion
返回執行結果是,再讓下一個minion
執行。
第二條命令在系統是RedHat
的客戶端中重啟apache
服務,但同一時間只有25%的機器執行重啟,直到所有目標機器執行完成。
Batch Size
並不減少總的數量,只是限制同時執行任務的機器數量。這非常有用,比如,在負載均衡web
叢集中,可以只用一條命令分批的重啟web
服務。
相關文章
- 002---選擇器(標籤選擇器、類選擇器、id選擇器、偽類選擇器、萬用字元選擇器)字元
- 目標偽類選擇器實現手風琴效果
- JQ選擇器(標籤)學習
- jquery中的選擇器jQuery
- jQuery選擇器介紹:基本選擇器、層次選擇器、過濾選擇器、表單選擇器jQuery
- jQuery選擇器 標籤選擇元素+css簡單新增移除操作jQueryCSS
- css標籤選擇器的使用注意CSS
- Kubernetes – 標籤和選擇器
- CSS樣式中的後代選擇器和子代選擇器CSS
- CSS樣式中的通用選擇器和偽類選擇器CSS
- jQuery選擇器——基本選擇器jQuery
- K8S標籤與標籤選擇器K8S
- 在機器學習專案中該如何選擇最佳化器機器學習
- 基本CSS選擇器,複合選擇器,後代選擇器CSS
- jQuery選擇器——層次選擇器jQuery
- css中:not()選擇器和jQuery中.not()方法CSSjQuery
- JQuery選擇器——可見性篩選選擇器和屬性篩選選擇器jQuery
- 在Linux中,如何配置iSCSI目標?Linux
- CSS3新增選擇器(屬性選擇器、結構偽類選擇器、偽元素選擇器)CSSS3
- SaltStack中的檔案伺服器伺服器
- jQuery選擇器之層次選擇器jQuery
- CSS選擇器(5)——屬性選擇器CSS
- jQuery選擇器——基本過濾選擇器jQuery
- CSS ID選擇器與CLASS選擇器CSS
- 關於jQuery中的選擇器jQuery
- day42:HTML標籤和CSS選擇器HTMLCSS
- Molecule 在構建工具中的選擇
- CSS-選擇器6-兄弟選擇器CSS
- jQuery選擇器——內容過濾選擇器jQuery
- jQuery選擇器——子元素過濾選擇器jQuery
- jQuery選擇器——屬性過濾選擇器jQuery
- Element UI框架中巧用樹選擇器UI框架
- HTML中CSS引用:選擇器的使用HTMLCSS
- CSS中的五大選擇器CSS
- PHPIDE選擇標準PHPIDE
- css3 選擇器:屬性選擇器(五)CSSS3
- CSS-選擇器4-後代選擇器CSS
- jQuery選擇器——表單元素過濾選擇器jQuery