7

我目前可以通过以下方式一次获取节点的一个属性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

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

4

3 回答 3

5

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

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

并且很容易将其扩展到所需的任意数量的属性 - 只需继续添加 n.[ATTRIB] 到闭包中。

于 2013-06-01T21:34:36.063 回答
5

截至今天(厨师:12.19.36),您的第二个查询实际上有效(您可以添加任意数量的属性):

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname -a cloud.local_hostname
于 2018-03-12T12:29:03.820 回答
0

这对我的需求有用:

knife exec -E 'nodes.find("*:*") {|n| printf "%s - %s \n",  n["hostname"] , n["ipaddress"]  }'
于 2020-02-11T17:13:48.743 回答