|
27 | 27 | $primary_target = peadm::get_targets(getvar('cluster.params.primary_host'), 1)
|
28 | 28 | $replica_target = peadm::get_targets(getvar('cluster.params.replica_host'), 1)
|
29 | 29 | $compiler_targets = peadm::get_targets(getvar('cluster.params.compiler_hosts'))
|
30 |
| - $puppetdb_postgresql_target = getvar('cluster.params.primary_postgresql_host') ? { |
31 |
| - undef => $primary_target, |
32 |
| - default => peadm::get_targets(getvar('cluster.params.primary_postgresql_host'), 1), |
33 |
| - } |
| 30 | + |
| 31 | + # Determine the array of targets to which the PuppetDB PostgreSQL database |
| 32 | + # should be restored to. This could be as simple as just the primary server, |
| 33 | + # or it could be two separate PostgreSQL servers. |
| 34 | + $puppetdb_postgresql_targets = peadm::flatten_compact([ |
| 35 | + getvar('cluster.params.primary_postgresql_host') ? { |
| 36 | + undef => $primary_target, |
| 37 | + default => peadm::get_targets(getvar('cluster.params.primary_postgresql_host'), 1), |
| 38 | + }, |
| 39 | + getvar('cluster.params.replica_postgresql_host') ? { |
| 40 | + undef => $replica_target, |
| 41 | + default => peadm::get_targets(getvar('cluster.params.replica_postgresql_host'), 1), |
| 42 | + }, |
| 43 | + ]) |
34 | 44 |
|
35 | 45 | $puppetdb_targets = peadm::flatten_compact([
|
36 | 46 | $primary_target,
|
|
46 | 56 | && tar -xzf ${shellquote($input_file)}
|
47 | 57 | | CMD
|
48 | 58 |
|
| 59 | + # Map of recovery option name to array of database hosts to restore the |
| 60 | + # relevant .dump content to. |
49 | 61 | $restore_databases = {
|
50 |
| - 'orchestrator' => $primary_target, |
51 |
| - 'activity' => $primary_target, |
52 |
| - 'rbac' => $primary_target, |
53 |
| - 'puppetdb' => $puppetdb_postgresql_target, |
| 62 | + 'orchestrator' => [$primary_target], |
| 63 | + 'activity' => [$primary_target], |
| 64 | + 'rbac' => [$primary_target], |
| 65 | + 'puppetdb' => $puppetdb_postgresql_targets, |
54 | 66 | }.filter |$key,$_| {
|
55 | 67 | $recovery_opts[$key] == true
|
56 | 68 | }
|
|
106 | 118 | }
|
107 | 119 |
|
108 | 120 | #$database_to_restore.each |Integer $index, Boolean $value | {
|
109 |
| - $restore_databases.each |$name,$database_target| { |
| 121 | + $restore_databases.each |$name,$database_targets| { |
110 | 122 | out::message("# Restoring ${name} database")
|
111 | 123 | $dbname = "pe-${shellquote($name)}"
|
112 | 124 |
|
113 | 125 | # Drop pglogical extensions and schema if present
|
114 |
| - run_command(@("CMD"/L), $database_target) |
| 126 | + run_command(@("CMD"/L), $database_targets) |
115 | 127 | su - pe-postgres -s /bin/bash -c \
|
116 | 128 | "/opt/puppetlabs/server/bin/psql \
|
117 | 129 | --tuples-only \
|
118 | 130 | -d '${dbname}' \
|
119 | 131 | -c 'DROP SCHEMA IF EXISTS pglogical CASCADE;'"
|
120 | 132 | | CMD
|
121 | 133 |
|
122 |
| - run_command(@("CMD"/L), $database_target) |
| 134 | + run_command(@("CMD"/L), $database_targets) |
123 | 135 | su - pe-postgres -s /bin/bash -c \
|
124 | 136 | "/opt/puppetlabs/server/bin/psql \
|
125 | 137 | -d '${dbname}' \
|
126 | 138 | -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'"
|
127 | 139 | | CMD
|
128 | 140 |
|
129 | 141 | # To allow db user to restore the database grant temporary privileges
|
130 |
| - run_command(@("CMD"/L), $database_target) |
| 142 | + run_command(@("CMD"/L), $database_targets) |
131 | 143 | su - pe-postgres -s /bin/bash -c \
|
132 | 144 | "/opt/puppetlabs/server/bin/psql \
|
133 | 145 | -d '${dbname}' \
|
134 | 146 | -c 'ALTER USER \"${dbname}\" WITH SUPERUSER;'"
|
135 | 147 | | CMD
|
136 | 148 |
|
137 |
| - # Restore database |
138 |
| - run_command(@("CMD"/L), $primary_target) |
139 |
| - /opt/puppetlabs/server/bin/pg_restore \ |
140 |
| - -d "sslmode=verify-ca \ |
141 |
| - host=${shellquote($database_target.peadm::certname())} \ |
142 |
| - sslcert=/etc/puppetlabs/puppetdb/ssl/${shellquote($primary_target.peadm::certname())}.cert.pem \ |
143 |
| - sslkey=/etc/puppetlabs/puppetdb/ssl/${shellquote($primary_target.peadm::certname())}.private_key.pem \ |
144 |
| - sslrootcert=/etc/puppetlabs/puppet/ssl/certs/ca.pem \ |
145 |
| - dbname=${dbname} \ |
146 |
| - user=${dbname}" \ |
147 |
| - -Fd ${recovery_directory}/${name}/${dbname}.dump.d |
148 |
| - | CMD |
| 149 | + # Restore database. If there are multiple database restore targets, perform |
| 150 | + # the restore(s) in parallel. |
| 151 | + parallelize($database_targets) |$database_target| { |
| 152 | + run_command(@("CMD"/L), $primary_target) |
| 153 | + /opt/puppetlabs/server/bin/pg_restore \ |
| 154 | + -d "sslmode=verify-ca \ |
| 155 | + host=${shellquote($database_target.peadm::certname())} \ |
| 156 | + sslcert=/etc/puppetlabs/puppetdb/ssl/${shellquote($primary_target.peadm::certname())}.cert.pem \ |
| 157 | + sslkey=/etc/puppetlabs/puppetdb/ssl/${shellquote($primary_target.peadm::certname())}.private_key.pem \ |
| 158 | + sslrootcert=/etc/puppetlabs/puppet/ssl/certs/ca.pem \ |
| 159 | + dbname=${dbname} \ |
| 160 | + user=${dbname}" \ |
| 161 | + -Fd ${recovery_directory}/${name}/${dbname}.dump.d |
| 162 | + | CMD |
| 163 | + } |
149 | 164 |
|
150 | 165 | # Remove db user privileges post restore
|
151 |
| - run_command(@("CMD"/L), $database_target) |
| 166 | + run_command(@("CMD"/L), $database_targets) |
152 | 167 | su - pe-postgres -s /bin/bash -c \
|
153 | 168 | "/opt/puppetlabs/server/bin/psql \
|
154 | 169 | -d '${dbname}' \
|
155 | 170 | -c 'ALTER USER \"${dbname}\" WITH NOSUPERUSER;'"
|
156 | 171 | | CMD
|
157 | 172 |
|
158 | 173 | # Drop pglogical extension and schema (again) if present after db restore
|
159 |
| - run_command(@("CMD"/L), $database_target) |
| 174 | + run_command(@("CMD"/L), $database_targets) |
160 | 175 | su - pe-postgres -s /bin/bash -c \
|
161 | 176 | "/opt/puppetlabs/server/bin/psql \
|
162 | 177 | --tuples-only \
|
163 | 178 | -d '${dbname}' \
|
164 | 179 | -c 'DROP SCHEMA IF EXISTS pglogical CASCADE;'"
|
165 | 180 | | CMD
|
166 | 181 |
|
167 |
| - run_command(@("CMD"/L), $database_target) |
| 182 | + run_command(@("CMD"/L), $database_targets) |
168 | 183 | su - pe-postgres -s /bin/bash -c \
|
169 | 184 | "/opt/puppetlabs/server/bin/psql \
|
170 | 185 | -d '${dbname}' \
|
|
0 commit comments