--- # 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 %}