#
# Cookbook:: kosmos-postgresql
# Recipe:: replica
#

postgresql_version = "12"
postgresql_service = "postgresql@#{postgresql_version}-main"

postgresql_custom_server postgresql_version do
  role "replica"
end

service postgresql_service do
  supports restart: true, status: true, reload: true
end

postgresql_data_bag_item = data_bag_item('credentials', 'postgresql')

primary = postgresql_primary

unless primary.nil?
  # TODO
  postgresql_data_dir = "/var/lib/postgresql/#{postgresql_version}/main"

  # FIXME get zerotier IP
  execute "set up replication" do
    command <<-EOF
systemctl stop #{postgresql_service}
mv #{postgresql_data_dir} #{postgresql_data_dir}.old
pg_basebackup -h pg.kosmos.local -U replication -D #{postgresql_data_dir} -R
chown -R postgres:postgres #{postgresql_data_dir}
systemctl start #{postgresql_service}
    EOF
    environment 'PGPASSWORD' => postgresql_data_bag_item['replication_password']
    sensitive true
    not_if { ::File.exist? "#{postgresql_data_dir}/standby.signal" }
  end

  postgresql_access "zerotier members" do
    access_type "host"
    access_db "all"
    access_user "all"
    access_addr "10.1.1.0/24"
    access_method "md5"
    notifies :reload, "service[#{postgresql_service}]", :immediately
  end

  postgresql_access "zerotier members replication" do
    access_type "host"
    access_db "replication"
    access_user "replication"
    access_addr "10.1.1.0/24"
    access_method "md5"
    notifies :reload, "service[#{postgresql_service}]", :immediately
  end
end
