2014-09-04 59 views
0

我想搜索角色“mapreduce-datanode”&“mapreduce-namenode”的节点。如何厨师搜索角色或

,所以我尝试以下操作:

hadoop_nodes = search(:node, "role:mapreduce-datanode OR role:mapreduce-namenode AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}") 

是做这个正确的方式?

谢谢。

+0

你应该将OR(与()(因为它通常具有较少的优先级)组合在一起,这里您匹配'role:mapreduce-datanode'或其他条件,我会使用'“(role:mapreduce-datanode或role:mapreduce-namenode) AND ...'(警告:未经测试) – Tensibai 2014-09-04 16:02:57

+0

@Tensibai谢谢 – roy 2014-09-04 16:22:53

回答

1

如果你想"mapreduce-datanode" & "mapreduce-namenode",正如你所说,那么为什么你使用OR?

如果你真的想要一个AND,然后你想:

hadoop_nodes = search(:node, "role:mapreduce-datanode AND role:mapreduce-namenode AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}") 

如果你希望两个集合的并集(即你真的平均OR),那么试试这个:

hadoop_nodes = search(:node, "(role:mapreduce-datanode OR role:mapreduce-namenode) AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}")