main.yml (2570B)
1 --- 2 # Database role 3 4 - name: Install PostgreSQL on Debian/Ubuntu 5 apt: 6 name: postgresql 7 state: present 8 update_cache: true 9 notify: 10 - Restart postgresql 11 when: ansible_facts["os_family"] == 'Debian' 12 13 - name: Ensure PostgreSQL is started and enabled 14 systemd: 15 name: postgresql 16 state: started 17 enabled: true 18 19 - name: Collect database information 20 become: true 21 become_user: postgres 22 community.postgresql.postgresql_info: 23 filter: 24 - "databases*" 25 register: database_info 26 27 - name: Check if exchange database already exists 28 become: true 29 become_user: postgres 30 ansible.builtin.set_fact: 31 exchange_db_exists: "{{ 'taler-exchange' in database_info.databases.keys() }}" 32 33 - name: Check if versioning schema exists 34 become: true 35 become_user: postgres 36 community.postgresql.postgresql_query: 37 login_user: postgres 38 db: taler-exchange 39 query: 40 SELECT schema_name FROM information_schema.schemata WHERE schema_name = '_v'; 41 register: schema_check 42 when: exchange_db_exists | bool 43 44 - name: Set versioning schema existence fact 45 ansible.builtin.set_fact: 46 versioning_schema_exists: "{{ schema_check.rowcount | default(0) > 0 }}" 47 when: exchange_db_exists | bool 48 49 - name: Check if postgres backup file exists locally 50 ansible.builtin.stat: 51 path: "{{ role_path }}/files/postgres-backup.sql.gz" 52 follow: yes 53 delegate_to: localhost 54 register: backup_file_status 55 56 - name: Set local backup existence fact 57 ansible.builtin.set_fact: 58 local_backup_exists: "{{ backup_file_status.stat.exists | default(false) }}" 59 60 - name: Fail if trying to import backup and versioning schema exists 61 fail: msg="Backup for import provided, but _v schema exists on target host" 62 when: 63 - not DISABLE_RESTORE_BACKUP 64 - versioning_schema_exists | default(false) | bool 65 - local_backup_exists | bool 66 67 # Note: the postgres-backup.sql.gz is a symbolic link in Git. 68 # The target of that symbolic link is created via the 'restore.sh' script. 69 - name: Upload database backup file to server if restoring from backup 70 copy: 71 src: postgres-backup.sql.gz 72 dest: /tmp/postgres-backup.sql.gz 73 owner: postgres 74 group: postgres 75 mode: "0400" 76 when: 77 - local_backup_exists | bool 78 79 - name: Restore PostgreSQL database from backup 80 become: true 81 become_user: postgres 82 shell: "gunzip -c /tmp/postgres-backup.sql.gz | psql -X -d postgres" 83 when: 84 - local_backup_exists | bool 85 86 - name: Remove backup from server (delete file) 87 ansible.builtin.file: 88 path: /tmp/postgres-backup.sql.gz 89 state: absent