Назад | Перейти на главную страницу

Рецепт шеф-повара считывает атрибуты из другого узла

Я пишу очень простую поварскую книгу для управления развертыванием веб-приложения, и у меня есть управляемый шеф-повар узел для сервера базы данных, и я хотел бы ввести 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

Посмотрите на раздел Использование поиска в рецептах.