0

我是 Chef 的新手,我正在尝试使用 kitchen-ec2 测试 2 个 db 服务 + 2 个应用程序服务器的 AWS 集群配置,并面临以下问题:

我无法将ip_address_1 从 recipe#1(server1 的 recipe#1 已完成)动态传递给 recipe#2(这是 server2 的配置配方,正在执行)。听听您的建议会很有帮助。

我可以做的一件事是在 .kitchen.yml 中为我尝试配置的每个盒子显式设置 IP 地址,但我很好奇是否有任何方法可以即时完成,就像Ohai 节点 [' ipaddress']属性,但更通用,可能是集群中配置的所有服务器 IP 地址的列表。

recipe#1 -完成- server1已配置,AWS 分配了私有ipaddress1
recipe#2 -正在进行- server2配置正在应用,但它需要 ipaddress1

提前谢谢你,
德米特里

4

1 回答 1

0

我不确定这是否是您要查找的内容,但您可以通过 访问配方中的所有服务器配置search,例如:

search(:node, 'recipes:"recipe#2"')

然后遍历结果以访问节点配置。

一个例子,用于填充/etc/hosts。我正在使用knife-ec2,我不确定kitchen-ec2 是否提供所有这些属性。

食谱/default.rb

template "/etc/hosts" do
  source "etc/hosts.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(:servers => search(:node, "chef_environment:#{node.chef_environment}"),
            :region => node['ec2']['placement_availability_zone'].match(/(\w*\-\w*\-\d*).*/)[1])
end

模板/默认/etc/hosts.erb

<% @servers.each do |n| %>
   <% if n["ec2"] %>
      <% region = n["ec2"]["placement_availability_zone"].match(/(\w*\-\w*\-\d*).*/)[1] %>
      <% if region == @region && n["ec2"]["local_ipv4"] %>
<%= n["ec2"]["local_ipv4"] -%> <%= n.name -%> <%= n["ec2"]["hostname"] -%>

      <% elsif n["ec2"]["public_ipv4"] %>
<%= n["ec2"]["public_ipv4"] -%> <%= n.name -%> <%= n["ec2"]["public_hostname"] -%>

      <% end %>
   <% end %>
<% end %>
于 2015-03-07T04:53:18.140 回答