From a64636bdedf842402016b29932862896dd6a6265 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 1 May 2021 20:15:49 +0200 Subject: add experimental syncoid zfs backup role --- roles/storage/zfs/syncoid/tasks/datasets.yml | 16 ++++++++++ roles/storage/zfs/syncoid/tasks/main.yml | 47 ++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 roles/storage/zfs/syncoid/tasks/datasets.yml create mode 100644 roles/storage/zfs/syncoid/tasks/main.yml (limited to 'roles/storage/zfs/syncoid/tasks') diff --git a/roles/storage/zfs/syncoid/tasks/datasets.yml b/roles/storage/zfs/syncoid/tasks/datasets.yml new file mode 100644 index 00000000..91db0f67 --- /dev/null +++ b/roles/storage/zfs/syncoid/tasks/datasets.yml @@ -0,0 +1,16 @@ +--- +- name: create base dataset for host + zfs: + name: "{{ zfs_syncoid_target_pool }}/{{ source.key }}" + state: present + extra_zfs_properties: + compression: lz4 + xattr: sa + +- name: create datasets for path + loop: "{{ source.value.paths | zfs_syncoid_explode_paths | unique }}" + loop_control: + label: "{{ source.key }}/{{ item }}" + zfs: + name: "{{ zfs_syncoid_target_pool }}/{{ source.key }}/{{ item }}" + state: present diff --git a/roles/storage/zfs/syncoid/tasks/main.yml b/roles/storage/zfs/syncoid/tasks/main.yml new file mode 100644 index 00000000..53aa434a --- /dev/null +++ b/roles/storage/zfs/syncoid/tasks/main.yml @@ -0,0 +1,47 @@ +--- +- name: install sanoid package + apt: + name: sanoid + state: present + +- name: create syncoid directory + file: + path: /var/lib/syncoid + state: directory + mode: 0700 + +- name: genarate ssh keypair for syncoid + openssh_keypair: + path: /var/lib/syncoid/id_ssh_ed25519 + type: ed25519 + comment: ZFS Backup syncoid@{{ host_name }} + +- name: generate syncoid ssh config wrapper + copy: + content: | + #!/bin/bash + exec /usr/sbin/syncoid --sshoption "UserKnownHostsFile=/var/lib/syncoid/ssh.knownhosts" --sshoption "HashKnownHosts=no" --sshkey "/var/lib/syncoid/id_ssh_ed25519" --no-sync-snap --compress zstd-fast "$@" + dest: /var/lib/syncoid/syncoid_wrapper + mode: 0755 + +- name: configure lvm to ignore zfs volumes + lineinfile: + path: /etc/lvm/lvm.conf + backrefs: yes + regexp: '^\s*#?\s*global_filter\s*=' + line: ' global_filter = [ "r|/dev/zd[0-9]+|" ]' + +- name: create target datasets + loop: "{{ zfs_syncoid_sources | dict2items }}" + loop_control: + loop_var: source + label: "{{ source.key }}" + include_tasks: datasets.yml + +- name: create systemd units + loop: "{{ zfs_syncoid_sources | dict2items }}" + loop_control: + label: "{{ item.key }}" + template: + src: systemd.service.j2 + dest: "/etc/systemd/system/syncoid-{{ item.key }}.service" -- cgit v1.2.3