Compare commits

...

5 Commits

12 changed files with 98 additions and 7 deletions

View File

@ -56,6 +56,17 @@ system_backups_snapshots_dataset: "hpool/backup"
system_backups_snapshots_root_dataset: "{{ system_backups_snapshots_dataset }}/the-nine-worlds" system_backups_snapshots_root_dataset: "{{ system_backups_snapshots_dataset }}/the-nine-worlds"
system_backups_snapshots_data_dataset: "{{ system_backups_snapshots_root_dataset }}/data" system_backups_snapshots_data_dataset: "{{ system_backups_snapshots_root_dataset }}/data"
# --------------------------------------------------------------------------------------------------
# system:external
# --------------------------------------------------------------------------------------------------
system_external_dataset: "hpool/external"
system_external_root_dataset: "{{ system_external_dataset }}/the-nine-worlds"
system_external_data_dataset: "{{ system_external_root_dataset }}/data"
system_external_directory: "/media/hpool/external"
system_external_root_directory: "{{ system_external_directory }}/the-nine-worlds"
system_external_data_directory: "{{ system_external_root_directory }}/data"
# -------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------
# vpn # vpn
# -------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------
@ -140,6 +151,9 @@ music_user_nextcloud_videos_pswd: "{{ vault_music_user_nextcloud_videos_pswd }}"
services_root_dataset: "{{ system_var_root_dataset }}" services_root_dataset: "{{ system_var_root_dataset }}"
services_data_dataset: "{{ system_var_data_dataset }}" services_data_dataset: "{{ system_var_data_dataset }}"
services_containers_dataset: "{{ system_var_containers_dataset }}" services_containers_dataset: "{{ system_var_containers_dataset }}"
services_external_dataset: "{{ system_external_data_dataset }}"
services_external_directory: "{{ system_external_data_directory }}"
services_host_services: services_host_services:
lrproxy: lrproxy:
@ -201,6 +215,7 @@ services_backups_snapshots_services: "\
{ service: { { service: {
'user_name': ( 'pod-' ~ service ), 'user_name': ( 'pod-' ~ service ),
'data_dataset': ( services_data_dataset ~ '/pod-' ~ service ), 'data_dataset': ( services_data_dataset ~ '/pod-' ~ service ),
'external_dataset': ( services_external_dataset ~ '/pod-' ~ service ),
'backup_dataset': ( services_backups_snapshots_data_dataset ~ '/pod-' ~ service ), 'backup_dataset': ( services_backups_snapshots_data_dataset ~ '/pod-' ~ service ),
'recursive': true, 'recursive': true,
'skip_parent': true, 'skip_parent': true,

View File

@ -28,6 +28,18 @@
autosnap = yes autosnap = yes
autoprune = yes autoprune = yes
# Template for datasets with external data. Unlike production datasets these are not backed up
# anywhere. External datasets contain data that can be lost and that generally take up a lot of disk
# space. Since they don't have a backup, they keep snapshots around for longer than production/
[template_external]
frequently = 0
hourly = 36
daily = 30
monthly = 3
yearly = 0
autosnap = yes
autoprune = yes
# Template for backup datasets which also doubles as a hot spare. The assumption is that these # Template for backup datasets which also doubles as a hot spare. The assumption is that these
# backup production datasets. In addition to three months of snapshots, keep 36 hourly snapshots for # backup production datasets. In addition to three months of snapshots, keep 36 hourly snapshots for
# quick rollback in case of trouble. No monthly snapshots are kept as that would require the # quick rollback in case of trouble. No monthly snapshots are kept as that would require the

View File

@ -10,6 +10,11 @@
recursive = yes recursive = yes
process_children_only = yes process_children_only = yes
[{{ backups_snapshots_user_external_dataset }}]
use_template = external
recursive = yes
process_children_only = yes
[{{ backups_snapshots_user_backup_dataset }}] [{{ backups_snapshots_user_backup_dataset }}]
use_template = backup use_template = backup
recursive = yes recursive = yes

View File

@ -31,12 +31,26 @@
extra_zfs_properties: extra_zfs_properties:
canmount: "off" canmount: "off"
- name: "{{ services_service_name }} : create external dataset"
community.general.zfs:
name: "{{ services_external_dataset }}/{{ services_service_user_name }}"
state: "present"
extra_zfs_properties:
canmount: "off"
- name: "{{ services_service_name }} : create volume datasets" - name: "{{ services_service_name }} : create volume datasets"
community.general.zfs: community.general.zfs:
name: "{{ services_data_dataset }}/{{ services_service_user_name }}/{{ item.key }}" name: "{{ services_data_dataset }}/{{ services_service_user_name }}/{{ item.key }}"
state: "present" state: "present"
extra_zfs_properties: "{{ item.value.extra_zfs_properties | default({}) }}" extra_zfs_properties: "{{ item.value.extra_zfs_properties | default({}) }}"
loop: "{{ services_service_volumes | dict2items }}" loop: "{{ services_service_volumes | dict2items | rejectattr('value.external', 'true') }}"
- name: "{{ services_service_name }} : create external volume datasets"
community.general.zfs:
name: "{{ services_external_dataset }}/{{ services_service_user_name }}/{{ item.key }}"
state: "present"
extra_zfs_properties: "{{ item.value.extra_zfs_properties | default({}) }}"
loop: "{{ services_service_volumes | dict2items | selectattr('value.external', 'true') }}"
when: when:

View File

@ -10,7 +10,7 @@ services_deploy_pod:
podman_run_args: podman_run_args:
- "-v {{ services_data_directory }}/pod-cloud/nextcloud/_data:/var/www/html" - "-v {{ services_data_directory }}/pod-cloud/nextcloud/_data:/var/www/html"
- "-v {{ services_data_directory }}/pod-cloud/data/_data:/var/www/html/data" - "-v {{ services_data_directory }}/pod-cloud/data/_data:/var/www/html/data"
- "-v {{ services_data_directory }}/pod-cloud/external/_data:/media/external" - "-v {{ services_external_directory }}/pod-cloud/external/_data:/media/external"
- "--user=0" - "--user=0"
- "--entrypoint=\"/bin/bash\"" - "--entrypoint=\"/bin/bash\""
cmd_args: cmd_args:
@ -24,7 +24,7 @@ services_deploy_pod:
- "-v ./.config/service/hosts:/etc/hosts:ro" - "-v ./.config/service/hosts:/etc/hosts:ro"
- "-v {{ services_data_directory }}/pod-cloud/nextcloud/_data:/var/www/html" - "-v {{ services_data_directory }}/pod-cloud/nextcloud/_data:/var/www/html"
- "-v {{ services_data_directory }}/pod-cloud/data/_data:/var/www/html/data" - "-v {{ services_data_directory }}/pod-cloud/data/_data:/var/www/html/data"
- "-v {{ services_data_directory }}/pod-cloud/external/_data:/media/external" - "-v {{ services_external_directory }}/pod-cloud/external/_data:/media/external"
cmd_args: cmd_args:
- "/cron.sh" - "/cron.sh"
nextcloud: nextcloud:
@ -40,7 +40,7 @@ services_deploy_pod:
- "-v ./.config/service/hosts:/etc/hosts:ro" - "-v ./.config/service/hosts:/etc/hosts:ro"
- "-v {{ services_data_directory }}/pod-cloud/nextcloud/_data:/var/www/html" - "-v {{ services_data_directory }}/pod-cloud/nextcloud/_data:/var/www/html"
- "-v {{ services_data_directory }}/pod-cloud/data/_data:/var/www/html/data" - "-v {{ services_data_directory }}/pod-cloud/data/_data:/var/www/html/data"
- "-v {{ services_data_directory }}/pod-cloud/external/_data:/media/external" - "-v {{ services_external_directory }}/pod-cloud/external/_data:/media/external"
- "-v ./.config/service/database.name:/run/secrets/database.name:ro" - "-v ./.config/service/database.name:/run/secrets/database.name:ro"
- "-v ./.config/service/database.user:/run/secrets/database.user:ro" - "-v ./.config/service/database.user:/run/secrets/database.user:ro"
- "-v ./.config/service/database.password:/run/secrets/database.password:ro" - "-v ./.config/service/database.password:/run/secrets/database.password:ro"

View File

@ -2,5 +2,6 @@
services_service_user_name: "pod-{{ services_service_name }}" services_service_user_name: "pod-{{ services_service_name }}"
services_service_user_home: "{{ services_home_directory }}/{{ services_service_user_name }}" services_service_user_home: "{{ services_home_directory }}/{{ services_service_user_name }}"
services_service_user_data: "{{ services_data_directory }}/{{ services_service_user_name }}" services_service_user_data: "{{ services_data_directory }}/{{ services_service_user_name }}"
services_service_user_external: "{{ services_external_directory }}/{{ services_service_user_name }}"
services_service_user_containers: "\ services_service_user_containers: "\
{{ services_containers_directory }}/{{ services_service_user_name }}" {{ services_containers_directory }}/{{ services_service_user_name }}"

View File

@ -15,8 +15,24 @@
group: "{{ services_service_user_name }}" group: "{{ services_service_user_name }}"
mode: 0755 mode: 0755
- name: "{{ services_service_name }} : directories : create external directory"
ansible.builtin.file:
path: "{{ services_service_user_external }}"
state: "directory"
owner: "{{ services_service_user_name }}"
group: "{{ services_service_user_name }}"
mode: 0755
- name: "{{ services_service_name }} : directories : create volume directories" - name: "{{ services_service_name }} : directories : create volume directories"
ansible.builtin.include_tasks: "directories/volumes.yml" ansible.builtin.include_tasks: "directories/volumes.yml"
vars:
services_service_volume_root_directory: "\
{% if services_service_volume.value.external is defined and \
services_service_volume.value.external %}\
{{ services_service_user_external }}\
{% else %}\
{{ services_service_user_data }}\
{% endif %}"
loop: "{{ services_service_volumes | dict2items }}" loop: "{{ services_service_volumes | dict2items }}"
loop_control: loop_control:
loop_var: "services_service_volume" loop_var: "services_service_volume"

View File

@ -2,7 +2,7 @@
- name: "\ - name: "\
{{ services_service_name }} : directories : create volume \"{{ services_service_volume.key }}\"" {{ services_service_name }} : directories : create volume \"{{ services_service_volume.key }}\""
ansible.builtin.file: ansible.builtin.file:
path: "{{ services_service_user_data }}/{{ services_service_volume.key }}" path: "{{ services_service_volume_root_directory }}/{{ services_service_volume.key }}"
state: "directory" state: "directory"
owner: "{{ services_service_user_name }}" owner: "{{ services_service_user_name }}"
group: "{{ services_service_user_name }}" group: "{{ services_service_user_name }}"
@ -12,13 +12,13 @@
{{ services_service_name }} : directories : check if \"{{ services_service_volume.key }}\" \ {{ services_service_name }} : directories : check if \"{{ services_service_volume.key }}\" \
mount exists" mount exists"
ansible.builtin.stat: ansible.builtin.stat:
path: "{{ services_service_user_data }}/{{ services_service_volume.key }}/_data" path: "{{ services_service_volume_root_directory }}/{{ services_service_volume.key }}/_data"
register: services_setup_user_volume_mount register: services_setup_user_volume_mount
- name: "\ - name: "\
{{ services_service_name }} : directories : create \"{{ services_service_volume.key }}\" mount" {{ services_service_name }} : directories : create \"{{ services_service_volume.key }}\" mount"
ansible.builtin.file: ansible.builtin.file:
path: "{{ services_service_user_data }}/{{ services_service_volume.key }}/_data" path: "{{ services_service_volume_root_directory }}/{{ services_service_volume.key }}/_data"
state: "directory" state: "directory"
owner: "{{ services_service_user_name }}" owner: "{{ services_service_user_name }}"
group: "{{ services_service_user_name }}" group: "{{ services_service_user_name }}"

View File

@ -0,0 +1,20 @@
---
- name: "external : create root external dataset"
community.general.zfs:
name: "{{ system_external_dataset }}"
state: "present"
extra_zfs_properties:
canmount: "off"
"com.sun:auto-snapshot": "false"
- name: "external : create external dataset root"
community.general.zfs:
name: "{{ system_external_root_dataset }}"
state: "present"
- name: "external : create external dataset for the-nine-worlds"
community.general.zfs:
name: "{{ system_external_data_dataset }}"
state: "present"
extra_zfs_properties:
canmount: "off"

View File

@ -8,3 +8,8 @@
ansible.builtin.import_tasks: "include/backups.yml" ansible.builtin.import_tasks: "include/backups.yml"
tags: tags:
- "system:datasets:backups" - "system:datasets:backups"
- name: "play:system : role:datasets : tasks:external"
ansible.builtin.import_tasks: "include/external.yml"
tags:
- "system:datasets:external"

View File

@ -154,6 +154,8 @@
{{ services_backups_snapshots_services[services_service_name].user_name }}" {{ services_backups_snapshots_services[services_service_name].user_name }}"
backups_snapshots_user_data_dataset: "\ backups_snapshots_user_data_dataset: "\
{{ services_backups_snapshots_services[services_service_name].data_dataset }}" {{ services_backups_snapshots_services[services_service_name].data_dataset }}"
backups_snapshots_user_external_dataset: "\
{{ services_backups_snapshots_services[services_service_name].external_dataset }}"
backups_snapshots_user_backup_dataset: "\ backups_snapshots_user_backup_dataset: "\
{{ services_backups_snapshots_services[services_service_name].backup_dataset }}" {{ services_backups_snapshots_services[services_service_name].backup_dataset }}"
backups_snapshots_user_recursive: "\ backups_snapshots_user_recursive: "\

View File

@ -17,6 +17,7 @@ services_volumes:
nextcloud: nextcloud:
data: data:
external: external:
external: true
git: git:
data: data:
runner: runner: