46 lines
1.3 KiB
Ruby
46 lines
1.3 KiB
Ruby
class Chef
|
|
class Recipe
|
|
def postgresql_primary
|
|
postgresql_primary = search(:node, "role:postgresql_primary AND chef_environment:#{node.chef_environment}").first
|
|
|
|
unless postgresql_primary.nil?
|
|
primary_ip = ip_for(postgresql_primary)
|
|
|
|
{ hostname: postgresql_primary[:hostname], ipaddress: primary_ip }
|
|
end
|
|
end
|
|
|
|
def postgresql_replicas
|
|
postgresql_replicas = []
|
|
|
|
search(:node, "role:postgresql_replica AND chef_environment:#{node.chef_environment}").each do |replica|
|
|
replica_ip = ip_for(replica)
|
|
|
|
postgresql_replicas << { hostname: replica[:hostname], ipaddress: replica_ip }
|
|
end
|
|
|
|
postgresql_replicas
|
|
end
|
|
|
|
def ip_for(server_node)
|
|
if node.chef_environment == "development"
|
|
server_node['network']['interfaces']['eth1']['routes'].first['src']
|
|
else
|
|
# If the server has a private Zerotier IP, use it
|
|
if server_node['knife_zero'] && server_node['knife_zero']['host'] && \
|
|
server_node['knife_zero']['host'].start_with?("10.1.1.")
|
|
server_node['knife_zero']['host']
|
|
else
|
|
server_node['ipaddress']
|
|
end
|
|
end
|
|
end
|
|
|
|
def postgresql_service_name
|
|
postgresql_version = "12"
|
|
|
|
"postgresql@#{postgresql_version}-main"
|
|
end
|
|
end
|
|
end
|