From e924eb6bc4e68ae6342fb41b609026ded44d3338 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 17 May 2016 22:52:20 +1000 Subject: [PATCH] try to get template to work --- templates/postgres.9.3.template.yml | 101 ++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/templates/postgres.9.3.template.yml b/templates/postgres.9.3.template.yml index fc1308c..57f1398 100644 --- a/templates/postgres.9.3.template.yml +++ b/templates/postgres.9.3.template.yml @@ -1,3 +1,17 @@ +params: + db_synchronous_commit: "off" + db_shared_buffers: "256MB" + db_work_mem: "10MB" + db_default_text_search_config: "pg_catalog.english" + db_name: discourse + db_user: discourse + db_wal_level: minimal + db_max_wal_senders: 0 + db_checkpoint_segments: 6 + db_logging_collector: off + db_log_min_duration_statement: 100 + + hooks: before_code: - replace: @@ -6,6 +20,7 @@ hooks: to: sv start postgres || exit 1 run: + - exec: apt-get remove -y postgresql-9.5 - exec: apt-get update && apt-get install -y postgresql-9.3 - exec: /etc/init.d/postgresql stop - exec: mkdir -p /shared/postgres_run @@ -52,6 +67,60 @@ run: from: /#?listen_addresses *=.*/ to: "listen_addresses = '*'" + # sync commit off is faster and less spiky, also marginally less safe + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?synchronous_commit *=.*/ + to: "synchronous_commit = $db_synchronous_commit" + + # default is 128MB which is way too small + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?shared_buffers *=.*/ + to: "shared_buffers = $db_shared_buffers" + + # default is 1MB which is too small + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?work_mem *=.*/ + to: "work_mem = $db_work_mem" + + # allow for other + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?default_text_search_config *=.*/ + to: "default_text_search_config = '$db_default_text_search_config'" + + # Necessary to enable backups + - exec: + cmd: + - install -d -m 0755 -o postgres -g postgres /shared/postgres_backup + + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?max_wal_senders *=.*/ + to: "max_wal_senders = $db_max_wal_senders" + + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?wal_level *=.*/ + to: "wal_level = $db_wal_level" + + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?checkpoint_segments *=.*/ + to: "checkpoint_segments = $db_checkpoint_segments" + + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?logging_collector *=.*/ + to: "logging_collector = $db_logging_collector" + + - replace: + filename: "/etc/postgresql/9.3/main/postgresql.conf" + from: /#?log_min_duration_statement *=.*/ + to: "log_min_duration_statement = $db_log_min_duration_statement" + - replace: filename: "/etc/postgresql/9.3/main/pg_hba.conf" from: /^#local +replication +postgres +peer$/ @@ -72,6 +141,38 @@ run: # give db a few secs to start up - exec: "sleep 5" + - exec: su postgres -c 'createdb $db_name' || true + - exec: su postgres -c 'psql $db_name -c "create user $db_user;"' || true + - exec: su postgres -c 'psql $db_name -c "grant all privileges on database $db_name to $db_user;"' || true + - exec: su postgres -c 'psql $db_name -c "alter schema public owner to $db_user;"' + - exec: su postgres -c 'psql template1 -c "create extension if not exists hstore;"' + - exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"' + - exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"' + - exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"' + - exec: + stdin: | + update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII'); + cmd: sudo -u postgres psql $db_name + raise_on_fail: false + + - file: + path: /var/lib/postgresql/take-database-backup + chown: postgres:postgres + chmod: "+x" + contents: | + #!/bin/bash + ID=db-$(date +%F_%T) + FILENAME=/shared/postgres_backup/$ID.tar.gz + pg_basebackup --format=tar --pgdata=- --xlog --gzip --label=$ID > $FILENAME + echo $FILENAME + + - file: + path: /var/spool/cron/crontabs/postgres + contents: | + # m h dom mon dow command + #MAILTO=? + #0 */4 * * * /var/lib/postgresql/take-database-backup + - exec: hook: postgres cmd: "echo postgres installed!" -- 2.25.1