2016-01-20 29 views
0

我創建了一個jenkins工作,讓用戶選擇廚師環境和廚師角色,然後它應該在該環境和該角色上運行刀子搜索並運行廚師客戶端結果的節點。如何使用變量搜索刀

到目前爲止,我已經有另一項工作,讓用戶選擇一個環境,並在該查詢產生的機器上運行chef-client。代碼是

#!/bin/bash 
echo env=$Environment 
cd /chef-repo 
machines=$(knife search 'chef_environment:'$Environment -i) 
echo "The machines are: $machines" 
for i in $machines; do 
    echo "Updating node $i" 
    ssh -tt [email protected]$i "sudo chef-client" 
done 

所以要解決我的問題,我已經試過像

machines=$(knife search 'chef_environment:'$Environment AND 'role:'$Role -i) 

與錯誤的查詢:

ERROR: knife search failed: invalid search query: ''chef_environment:'test-devops AND 'role:'base' 

或我想:

machines=$(knife search "'chef_environment:'$Environment AND 'role:'$Role" -i) 

但我得到錯誤:

ERROR: Chef::Exceptions::InvalidSearchQuery: Invalid search object type nil (NilClass), must be a String or Symbol.Usage: search(:node, QUERY[, OPTIONAL_ARGS])  `knife search environment QUERY (options)` 

請問您能否賜教?

謝謝 加布裏埃爾

回答

2

聽起來你正在使用shell quotes incorrectly。試試這個:

machines=$(knife search "chef_environment:$Environment AND role:$Role" -i) 

或者你的第一個例子:

machines=$(knife search "chef_environment:$Environment" -i) 
+0

這就是它!謝謝! – Gabriel