]> git.immae.eu Git - github/fretlink/ansible-postgresql-role.git/blame - templates/standby-pg_basebackup-clone.sh.j2
standby-clone: Allow cloning of standby server with pg_basebackup
[github/fretlink/ansible-postgresql-role.git] / templates / standby-pg_basebackup-clone.sh.j2
CommitLineData
b722248e
P
1#!/usr/bin/env bash
2# {{ ansible_managed }}
3
4set -eo pipefail
5
6CLUSTER_VERSION="{{ postgres_version }}"
7CLUSTER_NAME="{{ postgres_cluster_name }}"
8PRIMARY_CLUSTER_HOST="{{ postgres_primary.host }}"
9PRIMARY_CLUSTER_PORT="{{ postgres_primary.port }}"
10PRIMARY_CLUSTER_USER="{{ postgres_primary.replication_user }}"
11PRIMARY_CLUSTER_PASSWORD="{{ postgres_primary.replication_password }}"
12{% if postgres_primary.replication_dbname is defined %}
13PRIMARY_CLUSTER_DBNAME=" dbname='{{ postgres_primary.replication_dbname }}'"
14{% endif %}
15
16read -p "You are about to clone the primary cluster (${PRIMARY_CLUSTER_HOST}:${PRIMARY_CLUSTER_PORT}) with pg_basebackup. This will replace the local ${CLUSTER_VERSION}/${CLUSTER_NAME} cluster. Are you sure? [y/n] " -r go
17
18if [ "$go" != "y" ]; then
19 echo "Aborted."
20 exit 1
21fi
22
23BACKUP_DATE=$(date +%s)
24
25echo "Stopping PostgreSQL"
26pg_ctlcluster "${CLUSTER_VERSION}" "${CLUSTER_NAME}" stop || true
27
28echo "Cleaning up old cluster directory"
29sudo -u postgres mv "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}"{,"_${BACKUP_DATE}"}
30
31echo "Creating new directory"
32sudo -u postgres mkdir -p "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}"
33
34echo "Get backup from primary server"
35sudo -u postgres \
36 time "/usr/lib/postgresql/${CLUSTER_VERSION}/bin/pg_basebackup" --format=p -R \
37 -d "host='${PRIMARY_CLUSTER_HOST}' port='${PRIMARY_CLUSTER_PORT}' user='${PRIMARY_CLUSTER_USER}' password='${PRIMARY_CLUSTER_PASSWORD}' ${PRIMARY_CLUSTER_DBNAME} sslmode=require" \
38 -D "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}/"
39
40echo "Restoring .conf and server certificate"
41sudo -u postgres cp -a "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}_${BACKUP_DATE}/"{*.conf,server.crt,server.key} "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}/"
42
43echo "Ensure rights are correcly set"
44chown -R postgres:postgres "/var/lib/postgresql/${CLUSTER_VERSION}/"
45chmod 0700 "/var/lib/postgresql/${CLUSTER_VERSION}/"
46chmod -R o-rwx "/var/lib/postgresql/${CLUSTER_VERSION}/"
47
48echo "Starting PostgreSQL"
49sudo pg_ctlcluster "${CLUSTER_VERSION}" "${CLUSTER_NAME}" start