aboutsummaryrefslogtreecommitdiffstats
path: root/molecule/default/side_effect.yml
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