在将在配置中使用的属性中解析IP ADDR

时间:2013-05-15 03:46:03

标签: templates chef

我有一个主从服务器postgresql服务器的设置。我需要我的dbslave服务器才能看到我的dbmaster服务器。所以在我的pg_hba.conf中,我在节点中有一个ruby变量名private_ip

模板pg_hba.conf如下所示:

 <% node["postgresql"]["pg_hba"].each do |hba| %>
 <%= hba['type'] %> <%= hba['db'] %> <%= hba['user'] %> <%= hba['addr'] %> <%= hba['method'] %>
 <% end %>

在食谱中它看起来像这样。它将获取节点的每个哈希值。

slave.rb食谱:

 # hba
 node.override["postgresql"]["pg_hba"] = [ { "type" => "host", "db" => "all", "user" =>"all", "addr" => "<%= private_ip %>", "method" => "trust"}

要获取IP地址,我使用搜索方法。

 dbserver = search(:node, "role:pg_server_master")
 private_ip = "#{dbserver[0][:private_ip]}"
 puts private_ip

现在的问题是 - 如何将搜索结果的值放在node.override变量<%= private_ip =>上。

请问任何想法?

2 个答案:

答案 0 :(得分:1)

我使用了大厨的搜索方法:

  # getting the private ip for pg_hba.conf
  dbserver = search(:node, "role:oftheserver")
  private_ip = dbserver[0]['ipaddress']
  mask = @ipaddress.to_s + "/32"

因此,在我的情况下,此搜索的输出将为x.x.x.x / 32。

答案 1 :(得分:0)

将必要的变量传递给模板:

template "/etc/whatever/pg_hba.conf" do
  source "pg_hba.conf.erb"
  mode 0644
  owner "root"
  group "root"
  variables({
    :private_ip => private_ip
  })
end

然后在模板中使用它:

<%= @private_ip =>