我是Chef的新手,我正在尝试使用kitchen-ec2测试2 db serve + 2应用服务器的AWS群集配置,并面临以下问题:
我无法动态传递#strong> ip_address_1从食谱#1 (食物1的食谱#1已完成)到食谱#2 (这是服务器2的配置食谱并正在执行)。听取你的建议会很有帮助。
我可以做的一件事就是在我试图配置的每个盒子中明确设置.kitchen.yml中的IP地址,但我很好奇是否有任何方法我可以动态做到,像< strong> Ohai node ['ipaddress'] 属性,但更通用,可能是我的群集中配置的所有服务器IP地址的列表。
食谱#1 - 完成 - server1 已配置,AWS已分配私有 ipaddress1
正在应用食谱#2 - 正在进行 - server2 配置但需要 ipaddress1
提前谢谢你,
梅德
答案 0 :(得分:0)
我不确定这是否是您正在寻找的内容,但您可以通过search
访问配方中的所有服务器配置,例如:
search(:node, 'recipes:"recipe#2"')
然后迭代结果以访问节点配置。
example,用于填充/etc/hosts
。我使用刀-ec2,我不确定kitchen-ec2是否提供了所有这些属性。
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
templates/default/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 %>