blob: 63a10e554b7258d89b67836c60cc75b368472b37 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
---
- name: Side effect - Configure SSH access for transition tests
hosts:
- borg-client-transition
- borg-client-validation
tasks:
- name: Start ssh on borg-server
ansible.builtin.systemd:
name: sshd
state: started
become: true
delegate_to: borg-server
- name: Fetch ssh key for borg-server
ansible.builtin.command: >-
ssh-keyscan -t rsa borg-server | sed "s/^[^ ]* //"
register: borg_server_ssh_keyscan
changed_when: false
- name: Set ssh key for borg-server
ansible.builtin.set_fact:
borg_server_host_ssh_key: >-
{{ borg_server_ssh_keyscan.stdout
| split(" ")
| reject("search", "borg-server")
| join(" ") }}
- name: Side effect - Transition prune from timer to after_backup
hosts: borg-client-transition
tasks:
- name: Configure timer-triggered pruning
ansible.builtin.include_role:
name: kliwniloc.borgbackup
vars:
borg_server_host: borg-server
borg_server_user_home: /opt/borg
borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"
borg_repo_name: transition-repo
borg_backup_argument: transition-repo
borg_included_dirs:
- /etc
borg_excluded_dirs: []
borg_prune_enabled: true
borg_prune_trigger: timer
borg_prune_keep_daily: "2"
borg_prune_glob_archives: "{hostname}-*"
borg_prune_systemd_oncalendar: "*-*-* 05:15:00"
- name: Check timer-triggered prune resources
ansible.builtin.stat:
path: "{{ item }}"
loop:
- /usr/local/bin/run_borg_prune@transition-repo
- /etc/systemd/system/borg_prune@transition-repo.service
- /etc/systemd/system/borg_prune@transition-repo.timer
register: transition_timer_resources
- name: Check timer-triggered prune timer is enabled
ansible.builtin.systemd:
name: borg_prune@transition-repo.timer
register: transition_timer_status
become: true
- name: Assert timer-triggered pruning was configured
ansible.builtin.assert:
that:
- transition_timer_resources.results | map(attribute='stat.exists') | list == [true, true, true]
- transition_timer_status.status.UnitFileState == 'enabled'
- name: Reconfigure pruning to run after backup
ansible.builtin.include_role:
name: kliwniloc.borgbackup
vars:
borg_server_host: borg-server
borg_server_user_home: /opt/borg
borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"
borg_repo_name: transition-repo
borg_backup_argument: transition-repo
borg_included_dirs:
- /etc
borg_excluded_dirs: []
borg_prune_enabled: true
borg_prune_trigger: after_backup
borg_prune_keep_last: "2"
borg_prune_glob_archives: "{hostname}-*"
- name: Check stale prune timer was removed
ansible.builtin.stat:
path: /etc/systemd/system/borg_prune@transition-repo.timer
register: stale_transition_timer
- name: Read transition backup service
ansible.builtin.slurp:
src: /etc/systemd/system/borg_backup@transition-repo.service
register: transition_backup_service
become: true
- name: Assert after_backup transition completed
ansible.builtin.assert:
that:
- not stale_transition_timer.stat.exists
- >-
'OnSuccess=borg_prune@transition-repo.service'
in (transition_backup_service.content | b64decode)
- name: Side effect - Disable timer-triggered pruning
hosts: borg-client-validation
tasks:
- name: Configure timer-triggered pruning before disabling it
ansible.builtin.include_role:
name: kliwniloc.borgbackup
vars:
borg_server_host: borg-server
borg_server_user_home: /opt/borg
borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"
borg_repo_name: validation-disable-prune
borg_backup_argument: validation-disable-prune
borg_included_dirs:
- /etc
borg_prune_enabled: true
borg_prune_trigger: timer
borg_prune_keep_last: "2"
- name: Check prune resources before disabling
ansible.builtin.stat:
path: "{{ item }}"
loop:
- /usr/local/bin/run_borg_prune@validation-disable-prune
- /etc/systemd/system/borg_prune@validation-disable-prune.service
- /etc/systemd/system/borg_prune@validation-disable-prune.timer
register: enabled_prune_resources
- name: Assert prune resources were created
ansible.builtin.assert:
that:
- enabled_prune_resources.results | map(attribute='stat.exists') | list == [true, true, true]
- name: Disable timer-triggered pruning
ansible.builtin.include_role:
name: kliwniloc.borgbackup
vars:
borg_server_host: borg-server
borg_server_user_home: /opt/borg
borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"
borg_repo_name: validation-disable-prune
borg_backup_argument: validation-disable-prune
borg_included_dirs:
- /etc
borg_prune_enabled: false
- name: Check that disabled prune resources were removed
ansible.builtin.stat:
path: "{{ item }}"
loop:
- /usr/local/bin/run_borg_prune
- /usr/local/bin/run_borg_prune@validation-disable-prune
- /etc/systemd/system/borg_prune@validation-disable-prune.service
- /etc/systemd/system/borg_prune@validation-disable-prune.timer
register: disabled_prune_resources
- name: Assert disabled prune resources were removed
ansible.builtin.assert:
that:
- disabled_prune_resources.results | map(attribute='stat.exists') | select | list | length == 0
|