The mounts were only ever read by one-off migration scripts, and their cache had grown to 9.7 GB. restic and the bucket replica talk to object storage directly, so nothing needs a filesystem view of the buckets. Disable s3fs like on asxpio-ops; the bootstrap playbook unmounts and drops the fstab lines (applied by hand, cache removed). The playbook still created Immich directories under the mount and its summary needed the cache size, which a disabled host no longer sets. Assisted-by: Claude:opus-5-5
82 lines
2.7 KiB
YAML
82 lines
2.7 KiB
YAML
---
|
|
# Stage 3: Setup S3FS on all servers
|
|
#
|
|
# This playbook sets up s3fs to mount S3 buckets as local filesystems.
|
|
# Must be run after Stage 2 (full deployment) to ensure Docker is installed.
|
|
#
|
|
# Mounts the following buckets:
|
|
# - asxpio-terraform-main -> /mnt/s3/terraform
|
|
# - asxpio-backups-main -> /mnt/s3/backups
|
|
# - asxpio-immich-main -> /mnt/s3/immich
|
|
#
|
|
# Cache sizes (per-host):
|
|
# - asxpio-ops (40GB disk): 10GB cache max
|
|
# - asxpio-services (160GB disk): 80GB cache max
|
|
#
|
|
# Usage:
|
|
# ansible-playbook playbooks/03-setup-s3fs.yaml
|
|
#
|
|
# IMPORTANT: Ensure S3 credentials are set in group_vars/all/vault.yaml:
|
|
# vault_s3_access_key: "your-access-key"
|
|
# vault_s3_secret_key: "your-secret-key"
|
|
#
|
|
|
|
- name: Setup S3FS on all servers
|
|
hosts: ops_servers,services_servers
|
|
become: true
|
|
gather_facts: true
|
|
|
|
pre_tasks:
|
|
- name: Validate S3 credentials are set
|
|
ansible.builtin.assert:
|
|
that:
|
|
- s3_access_key is defined
|
|
- s3_access_key != ""
|
|
- s3_secret_key is defined
|
|
- s3_secret_key != ""
|
|
fail_msg: |
|
|
S3 credentials not set!
|
|
Please set vault_s3_access_key and vault_s3_secret_key in:
|
|
- group_vars/all/vault.yaml (encrypted with ansible-vault)
|
|
OR
|
|
- Pass via command line: -e "s3_access_key=xxx s3_secret_key=yyy"
|
|
success_msg: "S3 credentials validated"
|
|
|
|
- name: Display S3 configuration
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
========================================
|
|
S3FS Setup on {{ inventory_hostname }}
|
|
========================================
|
|
Target: {{ inventory_hostname }}
|
|
S3 Region: {{ s3_region }}
|
|
S3 Endpoint: {{ s3_endpoint }}
|
|
|
|
Buckets to mount:
|
|
{% for bucket in s3_buckets %}
|
|
- {{ bucket.name }} -> {{ bucket.mount_point }}
|
|
{% endfor %}
|
|
========================================
|
|
|
|
roles:
|
|
- role: s3fs
|
|
|
|
post_tasks:
|
|
- name: Display mounted filesystems
|
|
ansible.builtin.command:
|
|
cmd: df -h
|
|
register: df_output
|
|
changed_when: false
|
|
|
|
- name: Show S3 mounts
|
|
ansible.builtin.debug:
|
|
msg: "{{ df_output.stdout_lines | select('search', 's3fs') | list }}"
|
|
|
|
- name: Display post-setup information
|
|
ansible.builtin.debug:
|
|
msg: >-
|
|
{% if s3fs_enabled | default(true) | bool %}s3fs mounts on {{ inventory_hostname }}:
|
|
{{ s3_buckets | map(attribute='mount_point') | join(', ') }}, cache in
|
|
/var/cache/s3fs ({{ (s3fs_ensure_diskfree / 1024) | int }} GB kept free)
|
|
{% else %}s3fs is disabled on {{ inventory_hostname }}: mounts and
|
|
fstab lines removed{% endif %}
|