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

non*_*ing 6 chef-infra 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
Run Code Online (Sandbox Code Playgroud)

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

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname -a cloud.local_hostname
Run Code Online (Sandbox Code Playgroud)

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

non*_*ing 5

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

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

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


AxA*_*AxA 5

截至今天(Chef:36 年 12 月 19 日),您的第二个查询实际上有效(您可以根据需要添加任意数量的属性):

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname -a cloud.local_hostname
Run Code Online (Sandbox Code Playgroud)