3

我有问题。我正在尝试获取一个运行 postgresql 并且是复制主机的节点 IP。所以我可以将 IP 植入到 repmgr 食谱中,这样它就会自动将其设置到 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,因此也称为从属服务器。备用服务器可以将其 IP 添加到 SSH 配置,因此它将通过我的 SSH 端口而不是默认的 22 端口进行复制。

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

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

4

1 回答 1

3

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

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

或者

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

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

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

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

于 2013-02-13T21:24:34.553 回答