--- # Nextcloud Maintenance Playbook # Created: 2026-01-24 # Purpose: Run database and file maintenance tasks on Nextcloud instances # # This playbook performs: # 1. Add missing database indices (improves query performance) # 2. Update mimetypes database (ensures proper file type handling) # # Usage: # cd ansible/ # HCLOUD_TOKEN="..." ansible-playbook -i hcloud.yml \ # playbooks/nextcloud-maintenance.yml --limit \ # --private-key "../keys/ssh/" # # To run on all servers: # HCLOUD_TOKEN="..." ansible-playbook -i hcloud.yml \ # playbooks/nextcloud-maintenance.yml \ # --private-key "../keys/ssh/" # # Requirements: # - HCLOUD_TOKEN environment variable set # - SSH access to target server(s) # - Nextcloud container must be running - name: Nextcloud Maintenance Tasks hosts: all become: true gather_facts: true vars: nextcloud_container: "nextcloud" tasks: # ============================================================ # PRE-CHECK # ============================================================ - name: Display maintenance plan debug: msg: | ============================================================ Nextcloud Maintenance - {{ inventory_hostname }} ============================================================ This playbook will: 1. Add missing database indices 2. Update mimetypes database 3. Display results Estimated time: 1-3 minutes per server ============================================================ - name: Check if Nextcloud container is running shell: docker ps --filter "name=^{{ nextcloud_container }}$" --format "{{ '{{' }}.Names{{ '}}' }}" register: nextcloud_running changed_when: false failed_when: false - name: Fail if Nextcloud is not running fail: msg: "Nextcloud container is not running on {{ inventory_hostname }}" when: "'nextcloud' not in nextcloud_running.stdout" - name: Get current Nextcloud version shell: docker exec -u www-data {{ nextcloud_container }} php occ --version register: nextcloud_version changed_when: false - name: Display Nextcloud version debug: msg: "{{ nextcloud_version.stdout }}" # ============================================================ # TASK 1: ADD MISSING DATABASE INDICES # ============================================================ - name: Check for missing database indices shell: docker exec -u www-data {{ nextcloud_container }} php occ db:add-missing-indices register: db_indices_result changed_when: "'updated successfully' in db_indices_result.stdout" failed_when: db_indices_result.rc != 0 - name: Display database indices results debug: msg: | ============================================================ Database Indices Results ============================================================ {{ db_indices_result.stdout }} ============================================================ # ============================================================ # TASK 2: UPDATE MIMETYPES DATABASE # ============================================================ - name: Update mimetypes database shell: docker exec -u www-data {{ nextcloud_container }} php occ maintenance:mimetype:update-db register: mimetype_result changed_when: "'Added' in mimetype_result.stdout" failed_when: mimetype_result.rc != 0 - name: Parse mimetype results set_fact: mimetypes_added: "{{ mimetype_result.stdout | regex_search('Added (\\d+) new mimetypes', '\\1') | default(['0'], true) | first }}" - name: Display mimetype results debug: msg: | ============================================================ Mimetype Update Results ============================================================ Mimetypes added: {{ mimetypes_added }} {% if mimetypes_added | int > 0 %} ✓ Mimetype database updated successfully {% else %} ✓ All mimetypes already up to date {% endif %} ============================================================ # ============================================================ # SUMMARY # ============================================================ - name: Display maintenance summary debug: msg: | ============================================================ ✓ MAINTENANCE COMPLETED - {{ inventory_hostname }} ============================================================ Server: {{ inventory_hostname }} Version: {{ nextcloud_version.stdout }} Tasks completed: {% if db_indices_result.changed %} ✓ Database indices: Updated {% else %} ✓ Database indices: Already optimized {% endif %} {% if mimetype_result.changed %} ✓ Mimetypes: Added {{ mimetypes_added }} new types {% else %} ✓ Mimetypes: Already up to date {% endif %} Next steps: - Check admin interface for any remaining warnings - Warnings may take a few minutes to clear from cache ============================================================