厨师食谱从另一个节点读取属性

我正在编写一个非常简单的厨师菜谱来pipe理Web应用程序的部署,并且我有一个厨师pipe理数据库服务器的节点,并且希望从该数据库服务器中引入IP地址(以及其他一些属性) ,进入在应用服务器上运行的配方…

例如,在检查应用程序服务器上的代码,这样的事情..

hostname = node[:myapp][:dbserver_hostname] attributes = chef_get_attributes_for_hostname(hostname) connect_to_mysql_at_ip = attributes[:ipaddress] 

我不确定这是否可以轻松做到这一点? 努力find它的文档。 谢谢!

我假设你已经为Web服务器,数据库服务器等设置了angular色

在应用服务器配方中是这样的:

 dbservers = Array.new search(:node, "role:database_server") do |n| n["network"]["interfaces"]["eth0"]["addresses"].each_pair do |address,value| dbservers << address if value.has_key?("broadcast") end if n["network"]["interfaces"]["eth1"] end template "/path/to/app/config/appserver.conf" do source 'appserver.conf.erb' owner 'foo' group 'bar' mode 0644 variables :dbservers => dbservers end 

那么你的模板会有这样的:

 <% @dbservers.each do |s| -%> connect_to_mysql_at_ip <%= s %> <% end -%> 

可能有一个更好的方法来获得与0.10厨师的IP地址。 我认为上面的代码可能有厨师0.9的遗产,但它确实有效。

http://wiki.opscode.com/display/chef/Search

看看在食谱中使用search部分。