summaryrefslogtreecommitdiff
path: root/roles/storage/zfs/volume/tasks/main.yml
blob: 260d706d1f996c0b8b08178e2bb85cc361254e05 (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
---
- name: check volume parent
  when: "'parent' in zfs_volume"
  assert:
    msg: "the volume parent must be of type zfs and must not have a parent"
    that:
    - zfs_volume.parent.type == 'zfs'
    - "'parent' not in zfs_volume.parent"

- name: create zfs dataset
  zfs:
    name: "{{ ('parent' in zfs_volume) | ternary((zfs_volume.parent.pool | default(''))~'/'~(zfs_volume.parent.name | default('')), zfs_volume.pool) }}/{{ zfs_volume.name }}"
    extra_zfs_properties: "{{ zfs_volume.properties | dehumanize_zfs_properties | default(omit) }}"
    state: present

- name: compute derivated mountpoint
  set_fact:
    zfs_volume_mountpoint: "{{ (zfs_pools[zfs_volume.parent.pool | default(zfs_volume.pool)].mountpoint, ('parent' in zfs_volume) | ternary((zfs_volume.parent.name | default('')), ''), zfs_volume.name) | path_join }}"

- name: bind mount filesystem
  when:
  - "'dest' in zfs_volume"
  - zfs_volume.dest != zfs_volume_mountpoint
  mount:
    src: "{{ zfs_volume_mountpoint }}"
    path: "{{ zfs_volume.dest }}"
    fstype: none
    opts: bind,x-systemd.automount,nofail
    state: mounted

- name: set volume owner/group and mode
  file:
    state: directory
    path: "{{ zfs_volume.dest | default(zfs_volume_mountpoint) }}"
    mode: "{{ zfs_volume.mode | default(omit) }}"
    owner: "{{ zfs_volume.owner | default(omit) }}"
    group: "{{ zfs_volume.group | default(omit) }}"