我目前可以通过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
当然,这不起作用,只获得一个属性。由于我几乎没有厨师/刀具知识,有人可以让我知道如何做到这一点,或者其他一些方法来实现这一点。
答案 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"] }'