File tree Expand file tree Collapse file tree 4 files changed +63
-1
lines changed Expand file tree Collapse file tree 4 files changed +63
-1
lines changed Original file line number Diff line number Diff line change 6060 popd
6161
6262 ansible :
63+ strategy :
64+ matrix :
65+ db_backup :
66+ # Clean install
67+ - ' '
68+ # Restore a database backup
69+ - ' testdata/xsnippet-api_20241003-030004.pgc'
70+
6371 runs-on : ubuntu-latest
6472 steps :
6573 - uses : actions/checkout@v4
@@ -96,8 +104,28 @@ jobs:
96104
97105 - name : Run the playbook
98106 run : |
107+ read -r -d '' extra_vars << 'EOF' || true
108+ {
109+ "volume_device": "${{ steps.volume-device.outputs.uri }}",
110+ "postgres_users": [
111+ {
112+ "database": "{{ xsnippet_api_user }}",
113+ "username": "{{ xsnippet_api_user }}",
114+ "backup_schedule": "*-*-* 3:00:00",
115+ "backup_restore": "${{ matrix.db_backup }}"
116+ }
117+ ]
118+ }
119+ EOF
120+
99121 ansible-playbook \
100122 -vvv \
101- -e volume_device= "${{ steps.volume-device.outputs.uri } }" \
123+ -e "${extra_vars }" \
102124 --inventory inventories/ci \
103125 site.yml
126+
127+ - name : Verify that the database backup has been restored correctly
128+ if : matrix.db_backup != ''
129+ run : |
130+ # Expect at least one full page of results
131+ test "$(curl http://127.0.0.1:8080/v1/snippets | jq length)" == "20"
Original file line number Diff line number Diff line change @@ -28,6 +28,11 @@ argument_specs:
2828 description : |
2929 The time of when database backups should be triggered. Uses the systemd calendar event expression syntax (see man 7 systemd.time).
3030 If not set, backups will not be created.
31+ backup_restore :
32+ type : str
33+ required : false
34+ description : |
35+ Path to a database backup to be restored.
3136 default : []
3237 description : |
3338 The list of database/username pairs to create.
Original file line number Diff line number Diff line change 5757 become : true
5858 become_user : postgres
5959
60+ - name : Create a temporary backup directory
61+ ansible.builtin.tempfile :
62+ state : directory
63+ suffix : backup
64+ register : backup_tmp_dir
65+ become : true
66+ become_user : postgres
67+
68+ - name : Copy the database backup
69+ ansible.builtin.copy :
70+ src : " {{ item.backup_restore }}"
71+ dest : " {{ [backup_tmp_dir.path, item.backup_restore | basename] | path_join }}"
72+ mode : ' u=rw,g=r,o='
73+ with_items : " {{ postgres_users }}"
74+ when : item.backup_restore is defined and item.backup_restore
75+ become : true
76+ become_user : postgres
77+
78+ - name : Restore the database backup
79+ community.postgresql.postgresql_db :
80+ name : " {{ item.database }}"
81+ state : " restore"
82+ target : " {{ [backup_tmp_dir.path, item.backup_restore | basename] | path_join }}"
83+ target_opts : " --single-transaction --exit-on-error"
84+ with_items : " {{ postgres_users }}"
85+ when : item.backup_restore is defined and item.backup_restore
86+ become : true
87+ become_user : postgres
88+
6089- name : Install the script for backup rotation
6190 ansible.builtin.copy :
6291 src : ' rotate.py'
You can’t perform that action at this time.
0 commit comments