A receita do Chef lê os atributos de outro nó

6

Estou escrevendo um livro de receitas de chef muito simples para gerenciar a implantação de um aplicativo da web, e tenho um nó gerenciado de chef para o servidor de banco de dados e gostaria de trazer o endereço IP (e alguns outros atributos) de esse servidor de banco de dados, na receita em execução no servidor de aplicativos ...

Por exemplo, na receita, verificando o código no servidor de aplicativos, algo assim ...

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

connect_to_mysql_at_ip = attributes[:ipaddress]

Eu não tenho certeza se isso é algo que você pode fazer facilmente no chef? Lutando para encontrar documentação sobre isso. Obrigado!

    
por tarnfeld 28.07.2012 / 19:31

2 respostas

7

Suponho que você tenha configurado funções para servidor da Web, servidor de banco de dados, etc.

Algo parecido com isso na receita do servidor de aplicativos:

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

Em seguida, seu modelo terá algo como:

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

Pode haver uma maneira mais agradável de obter o endereço IP com o Chef 0.10. Acho que o código acima pode ter o legado do Chef 0.9, mas funciona.

    
por 28.07.2012 / 23:44
0

link

Veja a seção Como pesquisar em receitas.

    
por 28.07.2012 / 22:40

Tags