Я пишу очень простую поварскую книгу для управления развертыванием веб-приложения, и у меня есть управляемый шеф-повар узел для сервера базы данных, и я хотел бы ввести IP-адрес (и несколько других атрибутов) с этого сервера базы данных. , в рецепт, запущенный на сервере приложений ...
Например, в рецепте проверка кода на сервере приложений, что-то вроде этого ..
hostname = node[:myapp][:dbserver_hostname]
attributes = chef_get_attributes_for_hostname(hostname)
connect_to_mysql_at_ip = attributes[:ipaddress]
Я не уверен, что это то, что вы можете легко сделать в шеф-поваре? Пытаюсь найти на него документацию. Спасибо!
Я предполагаю, что вы настроили роли для веб-сервера, сервера базы данных и т. Д.
Примерно так в рецепте сервера приложений:
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 -%>
Возможно, есть лучший способ получить IP-адрес с помощью Chef 0.10. Я думаю, что в приведенном выше коде может быть наследие Chef 0.9, но он работает.
http://wiki.opscode.com/display/chef/Search
Посмотрите на раздел Использование поиска в рецептах.