刀:一次获得两个(或更多)属性

时间:2013-05-30 18:21:26

标签: chef knife

我目前可以通过knife search node一次获取一个节点的一个属性,如下所示:

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname
# RESULT:
i-7a421114:
cloud.public_hostname: ec2-104-214-107-198.compute-1.amazonaws.com

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.local_hostname
# RESULT:
i-7a421114:
cloud.local_hostname: ip-10-60-146-201.ec2.internal

我想通过一次调用同时检索两个属性,如下所示:

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname -a cloud.local_hostname

当然,这不起作用,只获得一个属性。由于我几乎没有厨师/刀具知识,有人可以让我知道如何做到这一点,或者其他一些方法来实现这一点。

3 个答案:

答案 0 :(得分:4)

我开始研究如何编写自己的刀插件,但这太过分了。 knife exec相当优雅而简单地解决了这个问题:

knife exec -E 'nodes.find(:name => "i-7a421114") { |n| puts "#{n.cloud.public_hostname} - #{n.cloud.local_hostname}" }'

并且很容易将其扩展到所需的多个属性 - 只需将n。[ATTRIB]添加到闭包中。

答案 1 :(得分:3)

截至今天(Chef:12.19.36),您的第二个查询确实有效(并且您可以根据需要添加任意数量的attribs):

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname -a cloud.local_hostname

答案 2 :(得分:0)

这是满足我需要的东西:

knife exec -E 'nodes.find("*:*") {|n| printf "%s - %s \n",  n["hostname"] , n["ipaddress"]  }'