如何通过 chef provisioning 获取已配置机器的 ip 地址

How do I get the ipaddress of a provisioned machine via chef provisioning

我正在编写一个厨师配置食谱来配置机器集群。我已经 more/less 这样做了,但现在我想将所有已配置机器的主机文件设置为所有其他主机的动态分配的 IP 地址。有没有办法查询配置主机的 IP 地址?

简短的回答是:您不需要,这是您不应该使用厨师配置的原因之一。长话短说,一些驱动程序允许通过资源访问底层对象,但你最终得到的看起来与普通的 Chef 代码完全不同。将每个 machine 对象存储在一个数组中,稍后您可以尝试使用它进行第二次传递。

真正的答案是配置层不应该这样做,在实际配置的节点上使用 Chef Search 或相关云 API 之类的东西,就像使用 "normal" 大厨

不在 ChefProvisioning 层上,但我已按如下方式完成:

您可以在 Chef 服务器中使用 hostsfile cookbook from chef supermarket and a databag

可以访问具有属性 node[:ipaddress] 的一个节点 IP,将其存储在数据包中,然后通过所有 ips 循环访问,使用主机文件 cookbook 到 create/update 条目与资源 hostsfile_entry,类似于:

node[:list_of_hosts].each do |name, ip|
  hostsfile_entry ip do
    hostname name
    action [:create_if_missing, :update]
  end
end

假设您在散列中有来自数据包的 IP 和主机名列表。

希望这对您有所帮助。