Compare commits
5 Commits
1e14af0931
...
872be00880
Author | SHA1 | Date | |
---|---|---|---|
872be00880 | |||
41cf7e25f0 | |||
64c54f67f6 | |||
2725962e05 | |||
dfec8a462d |
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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"
|
||||||
|
@ -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 }}"
|
||||||
|
@ -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"
|
||||||
|
@ -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 }}"
|
||||||
|
20
playbooks/roles/system/datasets/tasks/include/external.yml
Normal file
20
playbooks/roles/system/datasets/tasks/include/external.yml
Normal 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"
|
@ -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"
|
||||||
|
@ -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: "\
|
||||||
|
@ -17,6 +17,7 @@ services_volumes:
|
|||||||
nextcloud:
|
nextcloud:
|
||||||
data:
|
data:
|
||||||
external:
|
external:
|
||||||
|
external: true
|
||||||
git:
|
git:
|
||||||
data:
|
data:
|
||||||
runner:
|
runner:
|
||||||
|
Loading…
Reference in New Issue
Block a user