aboutsummaryrefslogtreecommitdiffstats
path: root/molecule/default/converge.yml
blob: 504758ddca919fe257c761fedb6dfaabc2f2d1f1 (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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
---
- name: Setup - Configure SSH keys for all hosts
  hosts:
    - borg-client
    - borg-client-2
    - borg-client-multi
    - borg-client-nonroot
    - borg-client-multi-keys

  vars:
    borg_server_host: borg-server

  pre_tasks:
    # This would usually be set by the user globally on their ansible
    # repository and can be a security risk to do automatically. We will
    # however set the variable here in the pre_tasks since it is for testing.
    - name: Start ssh on borg-server
      ansible.builtin.systemd:
        name: sshd
        state: started
      become: true
      delegate_to: borg-server

    - name: Start ssh on borg-server-2
      ansible.builtin.systemd:
        name: sshd
        state: started
      become: true
      delegate_to: borg-server-2

    - 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: Fetch ssh_key for borg-server-2
      ansible.builtin.command: >-
        ssh-keyscan -t rsa borg-server-2 | sed "s/^[^ ]* //"
      register: borg_server_2_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_host)
          | join(" ") }}
      when: borg_server_host_ssh_key is not defined

- name: Setup - Create custom borg user on borg-server-2
  hosts: borg-server-2
  tasks:
    - name: Create backupserver user
      ansible.builtin.user:
        name: backupserver
        home: /var/backups
        shell: /bin/bash
      become: true

- name: Converge - Default borg-client
  hosts: borg-client

  roles:
    - role: 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_included_dirs:
          - /etc
          - /home
        borg_excluded_dirs:
          - /opt
          - /var
          - /reee reeee

- name: Converge - borg-client-2 (custom server user)
  hosts: borg-client-2

  vars:
    borg_server_host_ssh_key: "{{ hostvars['localhost']['borg_server_2_ssh_keyscan']['stdout'] | split(' ') | reject('search', 'borg-server-2') | join(' ') }}"

  roles:
    - role: kliwniloc.borgbackup
      vars:
        borg_server_host: borg-server-2
        borg_server_user: backupserver
        borg_server_user_home: /var/backups
        borg_decryption_keys_yaml_path: ""
        borg_ssh_key_type: ed25519
        borg_backup_service_successful_exit_status:
          - 1
          - TEMPFAIL
        borg_compression: lz4
        borg_create_additional_arguments: >-
          -C zlib,6
        borg_systemd_oncalendar: "*-*-* 03:00:00"
        borg_included_dirs:
          - /etc
          - /home
        borg_excluded_dirs:
          - /opt
          - /var
          - /reee reeee

- name: Converge - Multi-instance backup (same host, different repos)
  hosts: borg-client-multi
  serial: 1

  vars:
    borg_server_host: borg-server
    borg_server_user_home: /opt/borg
    borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"

  roles:
    - role: kliwniloc.borgbackup
      vars:
        borg_repo_name: configs
        borg_backup_argument: configs
        borg_compression: zstd
        borg_included_dirs:
          - /etc
        borg_excluded_dirs: []
        borg_systemd_oncalendar: "*-*-* 02:00:00"

    - role: kliwniloc.borgbackup
      vars:
        borg_repo_name: home-data
        borg_backup_argument: home-data
        borg_compression: lz4
        borg_included_dirs:
          - /home
        borg_excluded_dirs:
          - /home/*/.cache
        borg_systemd_oncalendar: "*-*-* 04:00:00"

- name: Converge - Non-root backup user
  hosts: borg-client-nonroot

  pre_tasks:
    - name: Create backup user for non-root test
      ansible.builtin.user:
        name: backupuser
        home: /home/backupuser
        shell: /bin/bash
        state: present
      become: true

  roles:
    - role: kliwniloc.borgbackup
      vars:
        borg_server_host: borg-server
        borg_server_user_home: /opt/borg
        borg_client_user: backupuser
        borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"
        borg_included_dirs:
          - /etc
        borg_excluded_dirs: []

- name: Converge - Per-repo SSH keys with different append-only settings
  hosts: borg-client-multi-keys
  serial: 1

  vars:
    borg_server_host: borg-server
    borg_server_user_home: /opt/borg
    borg_decryption_keys_yaml_path: "{{ playbook_dir }}/decryption_keys.yml"

  roles:
    - role: kliwniloc.borgbackup
      vars:
        borg_repo_name: configs-keys
        borg_backup_argument: configs-keys
        borg_ssh_key_per_repo: true
        borg_ssh_key_type: ed25519
        borg_mode_append_only: true
        borg_storage_quota: 10G
        borg_compression: zstd
        borg_create_additional_arguments: >-
          --stats --list --filter=AME
        borg_included_dirs:
          - /etc
        borg_excluded_dirs: []
        borg_systemd_oncalendar: "*-*-* 02:00:00"

    - role: kliwniloc.borgbackup
      vars:
        borg_repo_name: home-data-keys
        borg_backup_argument: home-data-keys
        borg_ssh_key_per_repo: true
        borg_ssh_key_type: ed25519
        borg_mode_append_only: false
        borg_storage_quota: 50G
        borg_compression: lz4
        borg_create_additional_arguments: >-
          --one-file-system --exclude-caches
        borg_included_dirs:
          - /home
        borg_excluded_dirs:
          - /home/*/.cache
        borg_systemd_oncalendar: "*-*-* 04:00:00"