我遇到了问题。我正在尝试获取运行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的新手,我只知道它的基础知识。
谢谢。我希望你理解我的问题。
答案 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]
代码应该写在配方文件中,而不是属性中。