如何使用变量进行刀搜索

时间:2016-01-20 20:52:31

标签: jenkins chef knife

我创建了一个jenkins工作,让用户可以选择一个厨师环境和一个厨师角色,然后它应该在该环境和该角色上进行刀搜索,并在结果节点上运行chef-client。

到目前为止,我还有另一项工作是让用户选择一个环境并在该查询产生的机器上运行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 lcsa@$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)`
你能告诉我吗?

谢谢你, 加布里埃尔

1 个答案:

答案 0 :(得分:2)

听起来像是在使用shell quotes incorrectly。试试这个:

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

或者您的第一个例子:

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