Merge branch 'borgbackup' into 'newinfra'
Borgbackup See merge request nounous/ansible!121certbot_on_virtu
commit
293784a5cf
|
@ -9,3 +9,18 @@ debian_mirror: http://mirror.adm.crans.org/debian
|
||||||
ubuntu_mirror: http://mirror.adm.crans.org/ubuntu
|
ubuntu_mirror: http://mirror.adm.crans.org/ubuntu
|
||||||
debian_components: main non-free
|
debian_components: main non-free
|
||||||
ubuntu_components: main restricted universe multiverse
|
ubuntu_components: main restricted universe multiverse
|
||||||
|
|
||||||
|
glob_borg:
|
||||||
|
to_backup:
|
||||||
|
- /etc
|
||||||
|
- /var
|
||||||
|
path: /backup/borg
|
||||||
|
remote:
|
||||||
|
- borg@zephir.adm.crans.org:/backup/borg/{{ ansible_hostname }}
|
||||||
|
retention:
|
||||||
|
- ["daily", 4]
|
||||||
|
- ["monthly", 6]
|
||||||
|
consistency_check:
|
||||||
|
- disabled
|
||||||
|
extra_init:
|
||||||
|
- make-parent-dirs
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
loc_borg:
|
||||||
|
to_exclude:
|
||||||
|
- /var/lib/backuppc
|
||||||
|
remote:
|
||||||
|
- /backup/borg/zephir
|
3
hosts
3
hosts
|
@ -23,6 +23,9 @@
|
||||||
# [test_vm]
|
# [test_vm]
|
||||||
# re2o-test.adm.crans.org
|
# re2o-test.adm.crans.org
|
||||||
|
|
||||||
|
[backups]
|
||||||
|
zephir.adm.crans.org
|
||||||
|
|
||||||
[certbot]
|
[certbot]
|
||||||
gitzly.adm.crans.org
|
gitzly.adm.crans.org
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
#!/usr/bin/env ansible-playbook
|
#!/usr/bin/env ansible-playbook
|
||||||
---
|
---
|
||||||
# zephir backups virtual machines.
|
|
||||||
# omnomnom backups home dirs.
|
|
||||||
|
|
||||||
# Rsync client on all server to allow backup
|
- hosts: server
|
||||||
#- hosts: server
|
vars:
|
||||||
# vars:
|
borg: '{{ glob_borg | default({}) | combine(loc_borg | default({})) }}'
|
||||||
# # Backup password
|
mirror: '{{ glob_mirror | default({}) | combine(loc_mirror | default({})) }}'
|
||||||
# backuppc_rsyncd_passwd: "{{ vault_backuppc_rsyncd_passwd }}"
|
roles:
|
||||||
# roles: ["rsync-client"]
|
- borgbackup-client
|
||||||
|
|
||||||
# Backuppc backup software
|
- hosts: backups
|
||||||
#- hosts: zephir.adm.crans.org,omnomnom.adm.crans.org
|
vars:
|
||||||
# roles: ["backuppc"]
|
borg: '{{ glob_borg | default({}) | combine(loc_borg | default({})) }}'
|
||||||
|
roles:
|
||||||
|
- borgbackup-server
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
- name: restart cron
|
||||||
|
service:
|
||||||
|
name: cron
|
||||||
|
state: restarted
|
|
@ -0,0 +1,60 @@
|
||||||
|
---
|
||||||
|
- name: Pin borgmatic
|
||||||
|
template:
|
||||||
|
src: "apt/{{ item }}.j2"
|
||||||
|
dest: "/etc/apt/{{ item }}"
|
||||||
|
loop:
|
||||||
|
- sources.list.d/bullseye.list
|
||||||
|
- preferences.d/borgmatic-bullseye
|
||||||
|
when: ansible_lsb.release | int <= 10
|
||||||
|
|
||||||
|
- name: Install borgbackup
|
||||||
|
apt:
|
||||||
|
update_cache: true
|
||||||
|
name:
|
||||||
|
- borgbackup
|
||||||
|
- borgmatic
|
||||||
|
state: present
|
||||||
|
register: apt_result
|
||||||
|
retries: 3
|
||||||
|
until: apt_result is succeeded
|
||||||
|
|
||||||
|
- name: Ensures /etc/borgmatic exists
|
||||||
|
file:
|
||||||
|
path: /etc/borgmatic
|
||||||
|
state: directory
|
||||||
|
mode: 0700
|
||||||
|
owner: root
|
||||||
|
|
||||||
|
- name: Deploy ssh private key
|
||||||
|
template:
|
||||||
|
src: "borgmatic/id_ed25519_borg.j2"
|
||||||
|
dest: "/etc/borgmatic/id_ed25519_borg"
|
||||||
|
mode: 0600
|
||||||
|
owner: root
|
||||||
|
|
||||||
|
- name: Deploy borgmatic config
|
||||||
|
template:
|
||||||
|
src: "borgmatic/config.yaml.j2"
|
||||||
|
dest: "/etc/borgmatic/config.yaml"
|
||||||
|
mode: 0600
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Init borg repository
|
||||||
|
command:
|
||||||
|
cmd: /usr/bin/borgmatic init -e repokey
|
||||||
|
register: borg_init
|
||||||
|
changed_when: '"does not exist" in borg_init.stderr'
|
||||||
|
|
||||||
|
- name: Deploy borg cron
|
||||||
|
template:
|
||||||
|
src: "cron.d/borg.j2"
|
||||||
|
dest: "/etc/cron.d/borg"
|
||||||
|
notify: restart cron
|
||||||
|
|
||||||
|
- name: Indicate role in motd
|
||||||
|
template:
|
||||||
|
src: update-motd.d/04-service.j2
|
||||||
|
dest: /etc/update-motd.d/04-borgbackup
|
||||||
|
mode: 0755
|
|
@ -0,0 +1,12 @@
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
|
||||||
|
|
||||||
|
Package: *
|
||||||
|
Pin: release n=bullseye
|
||||||
|
Pin-Priority: 1
|
||||||
|
|
||||||
|
|
||||||
|
Package: borgmatic
|
||||||
|
Pin: release n=bullseye
|
||||||
|
Pin-Priority: 900
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
|
||||||
|
deb http://{{ mirror.name }}/debian bullseye main
|
|
@ -0,0 +1,88 @@
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
|
||||||
|
location:
|
||||||
|
source_directories:
|
||||||
|
{% for dir in borg.to_backup %}
|
||||||
|
- {{ dir }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
repositories:
|
||||||
|
{% for remote in borg.remote %}
|
||||||
|
- {{ remote }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
exclude_patterns:
|
||||||
|
- '*.pyc'
|
||||||
|
- '\#*\#'
|
||||||
|
- '*~'
|
||||||
|
{% for pattern in borg.to_exclude | default([]) %}
|
||||||
|
- {{ pattern }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
exclude_caches: true
|
||||||
|
|
||||||
|
exclude_if_present:
|
||||||
|
- .nobackup
|
||||||
|
|
||||||
|
borgmatic_source_directory: /tmp/borgmatic
|
||||||
|
|
||||||
|
storage:
|
||||||
|
encryption_passphrase: {{ vault_borgbackup_passwd }}
|
||||||
|
ssh_command: ssh -i /etc/borgmatic/id_ed25519_borg
|
||||||
|
borg_base_directory: /etc/borgmatic
|
||||||
|
borg_config_directory: /etc/borgmatic/config/
|
||||||
|
borg_cache_directory: /etc/borgmatic/cache
|
||||||
|
borg_security_directory: /etc/borgmatic/config/security
|
||||||
|
borg_keys_directory: /etc/borgmatic/config/keys
|
||||||
|
compression: 'lz4'
|
||||||
|
umask: 0077
|
||||||
|
lock_wait: 5
|
||||||
|
archive_name_format: '{hostname}-{now}'
|
||||||
|
{% set extra_init = borg.extra_init | default([]) %}
|
||||||
|
{% set extra_prune = borg.extra_prune | default([]) %}
|
||||||
|
{% set extra_create = borg.extra_create | default([]) %}
|
||||||
|
{% set extra_check = borg.extra_check | default([]) %}
|
||||||
|
{% if extra_init or extra_prune or extra_create or extra_check %}
|
||||||
|
extra_borg_options:
|
||||||
|
{% endif %}
|
||||||
|
{% if extra_init %}
|
||||||
|
# Extra command-line options to pass to "borg init".
|
||||||
|
init: {% for cmd in extra_init %}--{{ cmd }} {% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% if extra_prune %}
|
||||||
|
# Extra command-line options to pass to "borg prune".
|
||||||
|
prune: {% for cmd in extra_prune %}--{{ cmd }} {% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if extra_create %}
|
||||||
|
# Extra command-line options to pass to "borg create".
|
||||||
|
create: {% for cmd in extra_create %}--{{ cmd }} {% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if extra_check %}
|
||||||
|
# Extra command-line options to pass to "borg check".
|
||||||
|
check: {% for cmd in extra_check %}--{{ cmd }} {% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
retention:
|
||||||
|
{% for retention in borg.retention %}
|
||||||
|
keep_{{ retention[0] }}: {{ retention[1] }}
|
||||||
|
{% endfor %}
|
||||||
|
prefix: '{hostname}-'
|
||||||
|
|
||||||
|
consistency:
|
||||||
|
checks:
|
||||||
|
{% for check in borg.consistency_check %}
|
||||||
|
- {{ check }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if borg.hooks | default([]) %}
|
||||||
|
hooks:
|
||||||
|
{% for hook in borg.hooks %}
|
||||||
|
{{ hook.type }}:
|
||||||
|
{% for value in hook.values %}
|
||||||
|
- {{ value }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
umask: 0077
|
||||||
|
{% endif %}
|
|
@ -0,0 +1 @@
|
||||||
|
{{ vault_borgbackup_ssh_privkey }}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
|
||||||
|
PATH=$PATH:/usr/sbin:/usr/bin:/usr/local/bin:/sbin:/bin
|
||||||
|
|
||||||
|
{{ 60 | random(seed=inventory_hostname) }} {{ 24 | random(seed=inventory_hostname) }} * * * root borgmatic --syslog-verbosity 1
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/tail +14
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
[0m> [38;5;82mBorgbackup (Client)[0m a été déployé sur cette machine. Voir [38;5;6m/etc/borgmatic/[0m.
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
- name: Install borgbackup
|
||||||
|
apt:
|
||||||
|
update_cache: true
|
||||||
|
name:
|
||||||
|
- borgbackup
|
||||||
|
state: present
|
||||||
|
register: apt_result
|
||||||
|
retries: 3
|
||||||
|
until: apt_result is succeeded
|
||||||
|
|
||||||
|
- name: Create borgbackup user
|
||||||
|
user:
|
||||||
|
create_home: yes
|
||||||
|
home: '/var/lib/borg/'
|
||||||
|
system: yes
|
||||||
|
state: present
|
||||||
|
update_password: always
|
||||||
|
name: borg
|
||||||
|
|
||||||
|
- name: Ensures .ssh dir exists
|
||||||
|
file:
|
||||||
|
path: /var/lib/borg/.ssh
|
||||||
|
state: directory
|
||||||
|
mode: 0700
|
||||||
|
owner: borg
|
||||||
|
|
||||||
|
- name: Deploy authorized_keys
|
||||||
|
template:
|
||||||
|
src: "authorized_keys.j2"
|
||||||
|
dest: "/var/lib/borg/.ssh/authorized_keys"
|
||||||
|
mode: 0600
|
||||||
|
|
||||||
|
- name: Indicate role in motd
|
||||||
|
template:
|
||||||
|
src: update-motd.d/05-service.j2
|
||||||
|
dest: /etc/update-motd.d/05-borg
|
||||||
|
mode: 0755
|
|
@ -0,0 +1,3 @@
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
|
||||||
|
command="borg serve --restrict-to-path {{ borg.path }}",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding {{ vault_borgbackup_ssh_pubkey }}
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/tail +14
|
||||||
|
{{ ansible_header | comment }}
|
||||||
|
[0m> [38;5;82mBorgbackup (Serveur)[0m a été déployé sur cette machine. Les backups sont situés dans [38;5;6m{{ borg.path }}[0m.
|
Loading…
Reference in New Issue