Ansible playbook voor het opzetten van een MetaVox loadtest omgeving: - 50 teamfolders met 10.000 bestanden elk (500K totaal) - 100 metadata velddefinities (10 teamfolder + 90 file-level) - 3-niveau mappenstructuur (10 hoofdmappen x 3 submappen) - ~43M metadata records via directe MySQL inserts - Geoptimaliseerde database indexes (7 redundante indexes gedropt) Gebruikt directe filesystem writes en MySQL inserts i.p.v. WebDAV/API voor maximale performance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
128 lines
5.1 KiB
YAML
128 lines
5.1 KiB
YAML
---
|
|
# =============================================================================
|
|
# MetaVox Load Test - Cleanup Playbook
|
|
# =============================================================================
|
|
# Verwijdert alle teamfolders, metadata-velden, metadata-records en bestanden
|
|
# die door de load test zijn aangemaakt.
|
|
#
|
|
# Gebruik: ansible-playbook -i inventory/hosts.yml cleanup.yml
|
|
# =============================================================================
|
|
|
|
- name: MetaVox Load Test - Opruimen
|
|
hosts: nextcloud_server
|
|
gather_facts: false
|
|
vars:
|
|
nc_api_base: "{{ nextcloud_url }}/ocs/v2.php"
|
|
nc_index_base: "{{ nextcloud_url }}/index.php"
|
|
nc_auth_header: "Basic {{ (nextcloud_admin_user + ':' + nextcloud_admin_password) | b64encode }}"
|
|
common_headers:
|
|
OCS-APIRequest: "true"
|
|
Accept: "application/json"
|
|
Authorization: "{{ nc_auth_header }}"
|
|
|
|
tasks:
|
|
# =========================================================================
|
|
# Stap 1: Verwijder metadata records uit database
|
|
# =========================================================================
|
|
- name: "Cleanup: Verwijder file metadata records"
|
|
ansible.builtin.command:
|
|
cmd: mysql -u root {{ nextcloud_db_name }} -e "TRUNCATE TABLE oc_metavox_file_gf_meta;"
|
|
ignore_errors: true
|
|
|
|
- name: "Cleanup: Verwijder groupfolder metadata records"
|
|
ansible.builtin.command:
|
|
cmd: mysql -u root {{ nextcloud_db_name }} -e "TRUNCATE TABLE oc_metavox_gf_metadata;"
|
|
ignore_errors: true
|
|
|
|
- name: "Cleanup: Verwijder field assignments"
|
|
ansible.builtin.command:
|
|
cmd: mysql -u root {{ nextcloud_db_name }} -e "DELETE FROM oc_metavox_gf_assigns WHERE groupfolder_id IN (SELECT folder_id FROM oc_group_folders WHERE mount_point LIKE '{{ teamfolder_prefix }}-%');"
|
|
ignore_errors: true
|
|
|
|
# =========================================================================
|
|
# Stap 2: Verwijder teamfolders via API
|
|
# =========================================================================
|
|
- name: "Cleanup: Haal lijst van bestaande teamfolders op"
|
|
ansible.builtin.uri:
|
|
url: "{{ nc_index_base }}/apps/groupfolders/folders"
|
|
method: GET
|
|
headers: "{{ common_headers }}"
|
|
return_content: true
|
|
timeout: "{{ http_timeout }}"
|
|
register: existing_folders
|
|
|
|
- name: "Cleanup: Filter load-test teamfolders"
|
|
ansible.builtin.set_fact:
|
|
loadtest_folder_ids: >-
|
|
{{
|
|
existing_folders.json.ocs.data | dict2items
|
|
| selectattr('value.mount_point', 'match', teamfolder_prefix ~ '-.*')
|
|
| map(attribute='key')
|
|
| list
|
|
}}
|
|
when: existing_folders.json.ocs.data is defined
|
|
|
|
- name: "Cleanup: Verwijder {{ loadtest_folder_ids | default([]) | length }} teamfolders"
|
|
ansible.builtin.uri:
|
|
url: "{{ nc_index_base }}/apps/groupfolders/folders/{{ item }}"
|
|
method: DELETE
|
|
headers: "{{ common_headers }}"
|
|
status_code: [200, 404]
|
|
timeout: "{{ http_timeout }}"
|
|
loop: "{{ loadtest_folder_ids | default([]) }}"
|
|
loop_control:
|
|
label: "Folder ID {{ item }}"
|
|
pause: 0.2
|
|
|
|
# =========================================================================
|
|
# Stap 3: Verwijder metadata velddefinities
|
|
# =========================================================================
|
|
- name: "Cleanup: Verwijder metadata-velden via script"
|
|
ansible.builtin.template:
|
|
src: templates/cleanup_metadata.py.j2
|
|
dest: /tmp/metavox_cleanup_metadata.py
|
|
mode: '0755'
|
|
|
|
- name: "Cleanup: Draai metadata cleanup"
|
|
ansible.builtin.command:
|
|
cmd: python3 /tmp/metavox_cleanup_metadata.py
|
|
register: cleanup_result
|
|
changed_when: "'deleted' in cleanup_result.stdout"
|
|
|
|
# =========================================================================
|
|
# Stap 4: Verwijder groep en tijdelijke bestanden
|
|
# =========================================================================
|
|
- name: "Cleanup: Verwijder loadtest groep"
|
|
ansible.builtin.uri:
|
|
url: "{{ nc_api_base }}/cloud/groups/{{ loadtest_group }}"
|
|
method: DELETE
|
|
headers: "{{ common_headers }}"
|
|
status_code: [200, 404]
|
|
timeout: "{{ http_timeout }}"
|
|
when: create_group | default(true)
|
|
|
|
- name: "Cleanup: Verwijder tijdelijke scripts"
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: absent
|
|
loop:
|
|
- /tmp/metavox_setup_metadata_fields.py
|
|
- /tmp/metavox_fast_create_files.sh
|
|
- /tmp/metavox_fast_db_register.py
|
|
- /tmp/metavox_create_folder_structure.py
|
|
- /tmp/metavox_fast_metadata_insert.py
|
|
- /tmp/metavox_cleanup_metadata.py
|
|
- /tmp/filecache_batch.sql
|
|
- /tmp/dir_insert.sql
|
|
- /tmp/gf_metadata_insert.sql
|
|
- /tmp/file_meta_batch.sql
|
|
|
|
- name: "Cleanup: Voltooid"
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
Cleanup voltooid!
|
|
- {{ loadtest_folder_ids | default([]) | length }} teamfolders verwijderd
|
|
- Metadata records opgeruimd (TRUNCATE)
|
|
- Metadata-velden opgeruimd
|
|
- Groep '{{ loadtest_group }}' verwijderd
|