diff --git a/manifests/site.pp b/manifests/site.pp index 96d196d7..d659f7c8 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -1,115 +1,116 @@ node 'louvre.softwareheritage.org' { include role::swh_hypervisor_master include role::postgresql_client } node /^(orsay|beaubourg|hypervisor\d+)\.(internal\.)?softwareheritage\.org$/ { include role::swh_hypervisor } node 'pergamon.softwareheritage.org' { include role::swh_sysadmin } node 'tate.softwareheritage.org' { include role::swh_forge } node 'moma.softwareheritage.org' { include role::swh_api } node 'webapp0.softwareheritage.org' { include role::swh_api_azure } node 'saatchi.internal.softwareheritage.org' { include role::swh_scheduler } node /^(belvedere|somerset).(internal.)?softwareheritage.org$/ { include role::swh_database include profile::pgbouncer } node 'banco.softwareheritage.org' { include role::swh_backup + include role::postgresql_backup } node /^esnode\d+.(internal.)?softwareheritage.org$/ { include role::swh_elasticsearch } node /^(unibo-test).(internal.)?softwareheritage.org$/ { include role::swh_vault_test } node /^(unibo-prod|vangogh).(euwest.azure.)?(internal.)?softwareheritage.org$/ { include role::swh_vault } node /^(uffizi|storage\d+\.[^.]+\.azure).(internal.)?softwareheritage.org$/ { include role::swh_storage } node /^getty.(internal.)?softwareheritage.org$/ { include role::swh_eventlog } node /^worker\d+\.(internal\.)?softwareheritage\.org$/ { include role::swh_worker_inria } node /^worker\d+\..*\.azure\.internal\.softwareheritage\.org$/ { include role::swh_worker_azure } node /^dbreplica(0|1)\.euwest\.azure\.internal\.softwareheritage\.org$/ { include role::swh_database } node /^ceph-osd\d+\.internal\.softwareheritage\.org$/ { include role::swh_ceph_osd } node /^ceph-mon\d+\.internal\.softwareheritage\.org$/ { include role::swh_ceph_mon } node /^ns\d+\.(.*\.azure\.)?internal\.softwareheritage\.org/ { include role::swh_nameserver_secondary } node 'thyssen.internal.softwareheritage.org' { include role::swh_ci_server } node /^jenkins-debian\d+\.internal\.softwareheritage\.org$/ { include role::swh_ci_agent_debian } node 'logstash0.internal.softwareheritage.org' { include role::swh_logstash_instance } node 'kibana0.internal.softwareheritage.org' { include role::swh_kibana_instance } node 'munin0.internal.softwareheritage.org' { include role::swh_munin_master } node 'giverny.softwareheritage.org', 'petit-palais.softwareheritage.org', 'grand-palais.softwareheritage.org', 'ddouard-desktop.internal.softwareheritage.org' { include role::swh_desktop } node default { include role::swh_base include profile::puppet::agent } diff --git a/site-modules/profile/manifests/postgresql/backup.pp b/site-modules/profile/manifests/postgresql/backup.pp new file mode 100644 index 00000000..2bbf7b9e --- /dev/null +++ b/site-modules/profile/manifests/postgresql/backup.pp @@ -0,0 +1,15 @@ +class profile::postgresql::backup { + include profile::postgresql::client + + $pg_backup_user = %{hiera('swh::deploy::db::pgbouncer::user::login')} + $pg_backup_password = %{hiera('swh::deploy::db::pgbouncer::user::password')} + + file { '/usr/local/bin/pg_cluster_backup.sh': + ensure => file, + owner => root, + group => staff, + mode => '0755', + content => template('profile/swh/pg_cluster_backup.sh.erb'), + } + +} diff --git a/site-modules/profile/templates/swh/pg_cluster_backup.sh.erb b/site-modules/profile/templates/swh/pg_cluster_backup.sh.erb new file mode 100755 index 00000000..d85c3283 --- /dev/null +++ b/site-modules/profile/templates/swh/pg_cluster_backup.sh.erb @@ -0,0 +1,23 @@ +#!/bin/sh + +# banco has many *slow* CPU cores +PARALLELISM=3 +COMPRESSION=1 + +DATE=`/bin/date +%Y-%m-%d` + +export PGHOST=belvedere.internal.softwareheritage.org +export PGPORT=5434 +export PGUSER=<%= @pg_backup_user %> +export PGPASSWORD=<%= @pg_backup_password %> + +DB_LIST=`/usr/bin/psql template1 -t -c \ + "SELECT datname from pg_database WHERE datname NOT IN ('postgres', 'template0', 'template1');"` + +cd ${TARGET_DIR} + +for database in ${DB_LIST} +do + echo "dumping database ${database}" + /usr/bin/pg_dump -Fd -j ${PARALLELISM} -Z ${COMPRESSION} -f pgdump-${DATE}.${database} -d ${database} -w +done diff --git a/site-modules/role/manifests/postgresql_backup.pp b/site-modules/role/manifests/postgresql_backup.pp new file mode 100644 index 00000000..4a72ebbf --- /dev/null +++ b/site-modules/role/manifests/postgresql_backup.pp @@ -0,0 +1,3 @@ +class role::postgresql_backup { + include profile::postgresql::backup +}