Files
metavox-loadtest/cleanup.yml
Sam428-png a1eda430c8 Initial commit: MetaVox loadtest playbook
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>
2026-03-16 16:55:30 +01:00

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