diff options
Diffstat (limited to 'templates/standby-pg_basebackup-clone.sh.j2')
-rwxr-xr-x | templates/standby-pg_basebackup-clone.sh.j2 | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/templates/standby-pg_basebackup-clone.sh.j2 b/templates/standby-pg_basebackup-clone.sh.j2 new file mode 100755 index 0000000..ca34a05 --- /dev/null +++ b/templates/standby-pg_basebackup-clone.sh.j2 | |||
@@ -0,0 +1,49 @@ | |||
1 | #!/usr/bin/env bash | ||
2 | # {{ ansible_managed }} | ||
3 | |||
4 | set -eo pipefail | ||
5 | |||
6 | CLUSTER_VERSION="{{ postgres_version }}" | ||
7 | CLUSTER_NAME="{{ postgres_cluster_name }}" | ||
8 | PRIMARY_CLUSTER_HOST="{{ postgres_primary.host }}" | ||
9 | PRIMARY_CLUSTER_PORT="{{ postgres_primary.port }}" | ||
10 | PRIMARY_CLUSTER_USER="{{ postgres_primary.replication_user }}" | ||
11 | PRIMARY_CLUSTER_PASSWORD="{{ postgres_primary.replication_password }}" | ||
12 | {% if postgres_primary.replication_dbname is defined %} | ||
13 | PRIMARY_CLUSTER_DBNAME=" dbname='{{ postgres_primary.replication_dbname }}'" | ||
14 | {% endif %} | ||
15 | |||
16 | read -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 | |||
18 | if [ "$go" != "y" ]; then | ||
19 | echo "Aborted." | ||
20 | exit 1 | ||
21 | fi | ||
22 | |||
23 | BACKUP_DATE=$(date +%s) | ||
24 | |||
25 | echo "Stopping PostgreSQL" | ||
26 | pg_ctlcluster "${CLUSTER_VERSION}" "${CLUSTER_NAME}" stop || true | ||
27 | |||
28 | echo "Cleaning up old cluster directory" | ||
29 | sudo -u postgres mv "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}"{,"_${BACKUP_DATE}"} | ||
30 | |||
31 | echo "Creating new directory" | ||
32 | sudo -u postgres mkdir -p "/var/lib/postgresql/${CLUSTER_VERSION}/${CLUSTER_NAME}" | ||
33 | |||
34 | echo "Get backup from primary server" | ||
35 | sudo -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 | |||
40 | echo "Restoring .conf and server certificate" | ||
41 | sudo -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 | |||
43 | echo "Ensure rights are correcly set" | ||
44 | chown -R postgres:postgres "/var/lib/postgresql/${CLUSTER_VERSION}/" | ||
45 | chmod 0700 "/var/lib/postgresql/${CLUSTER_VERSION}/" | ||
46 | chmod -R o-rwx "/var/lib/postgresql/${CLUSTER_VERSION}/" | ||
47 | |||
48 | echo "Starting PostgreSQL" | ||
49 | sudo pg_ctlcluster "${CLUSTER_VERSION}" "${CLUSTER_NAME}" start | ||