如何通过角色找到厨师节点ip

时间:2013-02-13 11:08:28

标签: ruby postgresql ip chef role

我遇到了问题。我正在尝试获取运行postgresql的节点IP并且是复制主机。所以我可以将IP植入到repmgr cookbook中,这样它就会自动将其设置为SSH配置文件。我需要它,因为我没有在端口22上运行SSH,所以我需要自动化该过程。

这是configure.rb文件:

template File.join(node[:repmgr][:pg_home], '.ssh/config') do
  source 'ssh_config.erb'
  mode 0644
  owner node[:repmgr][:system_user]
  group node[:repmgr][:system_user]
  variables( :hosts => Array(master_node[:ipaddress]) )
end

directory File.dirname(node[:repmgr][:config_file_path])

template node[:repmgr][:config_file_path] do
  source 'repmgr.conf.erb'
  mode 0644
end

主节点IP地址取自属性(default.rb):

default[:repmgr][:addressing][:master] = nil

我需要将nil更改为其他内容,以便我可以获得主服务器的IP,因此也称为slave。备用服务器可以将其IP添加到SSH配置,因此它将通过我的SSH端口而不是默认的22端口进行复制。

我希望有人可以提供帮助,因为我是Ruby的新手,我只知道它的基础知识。

谢谢。我希望你理解我的问题。

1 个答案:

答案 0 :(得分:3)

如果您使用chef-server,则可以通过配方中的search找到其他已配置的节点。您可以按不同的属性搜索节点:例如角色,配方,环境,名称等。我希望您的复制主节点具有一些使其唯一的属性,例如 postgres recipe或 replication-master 在run_list中的角色。

nodes = search( :node, 'recipes:postgres' )

nodes = search( :node, 'role:replication-master' )

搜索返回具有相应属性的节点数组。 然后:

node.default[:repmgr][:addressing][:master] = nodes.first[:ipaddress]

代码应该写在配方文件中,而不是属性中。