mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 12:03:46 +00:00 
			
		
		
		
	kandra: Automate the second step of configuring database replicas.
If there is a replication primary configured, and no current database, then we check all of the required secrets are in place, then pull down the latest backup and trigger a PostgreSQL restart, which will pick up downloading the remaining WAL logs to catch up, then start streaming from the configured primary.
This commit is contained in:
		
				
					committed by
					
						 Tim Abbott
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							d893a2a29e
						
					
				
				
					commit
					a4e6037dc4
				
			
							
								
								
									
										47
									
								
								puppet/kandra/files/postgresql/setup_data.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								puppet/kandra/files/postgresql/setup_data.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | set -eux | ||||||
|  |  | ||||||
|  | service postgresql stop | ||||||
|  |  | ||||||
|  | cert_file="$(crudini --get /etc/zulip/zulip.conf postgresql ssl_cert_file)" | ||||||
|  | if [ -z "$cert_file" ] || [ ! -f "$cert_file" ]; then | ||||||
|  |     echo "Certificate file is not set or does not exist!" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | key_file="$(crudini --get /etc/zulip/zulip.conf postgresql ssl_key_file)" | ||||||
|  | if [ -z "$key_file" ] || [ ! -f "$key_file" ]; then | ||||||
|  |     echo "Key file is not set or does not exist!" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | cert_cn="$(openssl x509 -noout -subject -in "$cert_file" | sed -n '/^subject/s/^.*CN\s*=\s*//p')" | ||||||
|  |  | ||||||
|  | if [ "$cert_cn" != "$(hostname)" ]; then | ||||||
|  |     echo "Configured certificate does not match host!" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | echo "Checking for S3 secrets..." | ||||||
|  | crudini --get /etc/zulip/zulip-secrets.conf secrets s3_region >/dev/null | ||||||
|  | crudini --get /etc/zulip/zulip-secrets.conf secrets s3_backups_bucket >/dev/null | ||||||
|  | crudini --get /etc/zulip/zulip-secrets.conf secrets s3_backups_key >/dev/null | ||||||
|  | crudini --get /etc/zulip/zulip-secrets.conf secrets s3_backups_secret_key >/dev/null | ||||||
|  |  | ||||||
|  | if [ ! -f "/var/lib/postgresql/.postgresql/postgresql.crt" ]; then | ||||||
|  |     echo "Replication certificate file is not set or does not exist!" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | if [ ! -f "/var/lib/postgresql/.postgresql/postgresql.key" ]; then | ||||||
|  |     echo "Replication key file is not set or does not exist!" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | version="$(crudini --get /etc/zulip/zulip.conf postgresql version)" | ||||||
|  | mkdir -p "/srv/data/postgresql/$version" | ||||||
|  | chown postgres.postgres "/srv/data/postgresql/$version" | ||||||
|  | chmod 700 "/srv/data/postgresql/$version" | ||||||
|  |  | ||||||
|  | /usr/local/bin/env-wal-g backup-fetch "/var/lib/postgresql/$version/main" LATEST | ||||||
|  | chown -R postgres.postgres "/var/lib/postgresql/$version/main" | ||||||
| @@ -34,6 +34,25 @@ class kandra::profile::postgresql inherits kandra::profile::base { | |||||||
|     unless  => 'test /var/lib/postgresql/ -ef /srv/data/postgresql/', |     unless  => 'test /var/lib/postgresql/ -ef /srv/data/postgresql/', | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   # This is the second stage, after secrets are configured | ||||||
|  |   $replication_primary = zulipconf('postgresql', 'replication_primary', undef) | ||||||
|  |   if $replication_primary != undef { | ||||||
|  |       file { '/root/setup_data.sh': | ||||||
|  |         ensure => file, | ||||||
|  |         owner  => 'root', | ||||||
|  |         group  => 'root', | ||||||
|  |         mode   => '0744', | ||||||
|  |         source => 'puppet:///modules/kandra/postgresql/setup_data.sh', | ||||||
|  |       } | ||||||
|  |       exec { 'setup_data': | ||||||
|  |         command => '/root/setup_data.sh', | ||||||
|  |         require => [File['/usr/local/bin/env-wal-g'], Exec['setup_disks']], | ||||||
|  |         unless  => "test -d /srv/data/postgresql/${zulip::postgresql_common::version}/main", | ||||||
|  |         timeout => 0, | ||||||
|  |         notify  => Exec[$zulip::postgresql_base::postgresql_restart], | ||||||
|  |       } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   file { "${zulip::postgresql_base::postgresql_confdir}/pg_hba.conf": |   file { "${zulip::postgresql_base::postgresql_confdir}/pg_hba.conf": | ||||||
|     ensure  => file, |     ensure  => file, | ||||||
|     require => Package["postgresql-${zulip::postgresql_common::version}"], |     require => Package["postgresql-${zulip::postgresql_common::version}"], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user