【发布时间】:2016-04-03 05:00:30
【问题描述】:
我不擅长 Ohai。我想知道是否有任何方法可以通过 Chef 配方从各个子网中找出所有节点的 IP 地址(包括自己的)。
我在 AWS Opswork 中创建了一层,并想在配置文件中添加每个节点的 ip addr 和 hostname。任何帮助将不胜感激。
【问题讨论】:
标签: ip chef-infra chef-recipe aws-opsworks devops
我不擅长 Ohai。我想知道是否有任何方法可以通过 Chef 配方从各个子网中找出所有节点的 IP 地址(包括自己的)。
我在 AWS Opswork 中创建了一层,并想在配置文件中添加每个节点的 ip addr 和 hostname。任何帮助将不胜感激。
【问题讨论】:
标签: ip chef-infra chef-recipe aws-opsworks devops
所以这在一定程度上取决于您是要获取 layer 中的所有实例,还是要获取堆栈中的所有总实例。
首先,像这样的东西 - 未经测试! - 您的食谱代码应该工作:
my_layer_name = "my_database_layer_or_whatever"
node[:opsworks][:layers][my_layer_name][:instances].each do |current_instance, current_instance_data|
puts node[:opsworks][:layers][my_layer_name][:instances][current_instance][:private_dns_name]
end
请注意,这将为您提供私有 dns 名称 - 因此是 OpsWorks 网络的内部名称。您可能想要也可能不想要 - 对象上有十几个其他属性,包括公共 IP 地址。
如果您想获取整个堆栈的实例,我打赌您可以遍历node[:opsworks][:layers],因为我已经遍历了这里的实例。只是另一个循环。
另请注意,此代码适用于 Chef 11。在 Chef 12 things have changed a bit。
如果您使用的是 Chef 12,我找到了有关如何use/search the Chef Data Bags for OpsWorks 的文档。
【讨论】: