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>
193 lines
13 KiB
YAML
193 lines
13 KiB
YAML
# =============================================================================
|
|
# Nextcloud Server Configuratie
|
|
# =============================================================================
|
|
nextcloud_url: "https://seedmv.researchdrivede.src.surf-hosted.nl"
|
|
nextcloud_admin_user: "admin"
|
|
nextcloud_admin_password: "secureadminpass"
|
|
nextcloud_db_name: "nextcloud"
|
|
nextcloud_data_dir: "/var/www/nextcloud/data"
|
|
groupfolders_dir: "{{ nextcloud_data_dir }}/__groupfolders"
|
|
|
|
# =============================================================================
|
|
# Groep die toegang krijgt tot de teamfolders
|
|
# =============================================================================
|
|
loadtest_group: "loadtest-group"
|
|
create_group: true
|
|
|
|
# =============================================================================
|
|
# Team Folders Configuratie
|
|
# =============================================================================
|
|
num_teamfolders: 50
|
|
teamfolder_prefix: "LoadTest-TF"
|
|
teamfolder_permissions: 31
|
|
|
|
# =============================================================================
|
|
# Mappenstructuur per teamfolder
|
|
# =============================================================================
|
|
# 10 hoofdmappen x 3 submappen = 30 leaf folders per teamfolder
|
|
folder_structure:
|
|
Financieel: ["Facturen", "Contracten", "Begrotingen"]
|
|
HR: ["Personeelsdossiers", "Sollicitaties", "Verlof"]
|
|
IT: ["Projecten", "Infrastructuur", "Security"]
|
|
Juridisch: ["Contracten", "Compliance", "Dossiers"]
|
|
Marketing: ["Campagnes", "Materiaal", "Analyses"]
|
|
Operations: ["Logistiek", "Inkoop", "Planning"]
|
|
Management: ["Notulen", "Strategie", "Rapportages"]
|
|
Onderzoek: ["Publicaties", "Data", "Experimenten"]
|
|
Communicatie: ["Intern", "Extern", "Persberichten"]
|
|
Archief: ["2023", "2024", "2025"]
|
|
|
|
# =============================================================================
|
|
# MetaVox Metadata Velden Configuratie
|
|
# =============================================================================
|
|
|
|
# 10 Teamfolder-velden (metadata die op teamfolder-niveau wordt ingesteld)
|
|
teamfolder_metadata_fields:
|
|
- { name: "tf_department", type: "text", description: "Afdeling" }
|
|
- { name: "tf_project_code", type: "text", description: "Projectcode" }
|
|
- { name: "tf_classification", type: "dropdown", description: "Classificatie", options: "Openbaar,Intern,Vertrouwelijk,Geheim" }
|
|
- { name: "tf_owner", type: "text", description: "Eigenaar" }
|
|
- { name: "tf_status", type: "dropdown", description: "Status", options: "Actief,Archief,Concept,Afgesloten" }
|
|
- { name: "tf_start_date", type: "date", description: "Startdatum" }
|
|
- { name: "tf_end_date", type: "date", description: "Einddatum" }
|
|
- { name: "tf_budget_code", type: "text", description: "Budgetcode" }
|
|
- { name: "tf_is_confidential", type: "checkbox", description: "Vertrouwelijk" }
|
|
- { name: "tf_location", type: "text", description: "Locatie" }
|
|
|
|
# 90 File-metadata-velden (metadata die per bestand wordt ingesteld)
|
|
file_metadata_fields:
|
|
# Text velden (30 stuks)
|
|
- { name: "doc_title", type: "text", description: "Documenttitel" }
|
|
- { name: "doc_author", type: "text", description: "Auteur" }
|
|
- { name: "doc_subject", type: "text", description: "Onderwerp" }
|
|
- { name: "doc_keywords", type: "text", description: "Trefwoorden" }
|
|
- { name: "doc_source", type: "text", description: "Bron" }
|
|
- { name: "doc_language", type: "text", description: "Taal" }
|
|
- { name: "doc_version", type: "text", description: "Versie" }
|
|
- { name: "doc_reference", type: "text", description: "Referentie" }
|
|
- { name: "doc_creator", type: "text", description: "Maker" }
|
|
- { name: "doc_contributor", type: "text", description: "Bijdrager" }
|
|
- { name: "doc_publisher", type: "text", description: "Uitgever" }
|
|
- { name: "doc_rights", type: "text", description: "Rechten" }
|
|
- { name: "doc_identifier", type: "text", description: "Identifier" }
|
|
- { name: "doc_relation", type: "text", description: "Relatie" }
|
|
- { name: "doc_coverage", type: "text", description: "Dekking" }
|
|
- { name: "doc_abstract", type: "text", description: "Samenvatting" }
|
|
- { name: "doc_notes", type: "text", description: "Notities" }
|
|
- { name: "doc_contact", type: "text", description: "Contactpersoon" }
|
|
- { name: "doc_email", type: "text", description: "E-mailadres" }
|
|
- { name: "doc_phone", type: "text", description: "Telefoonnummer" }
|
|
- { name: "doc_address", type: "text", description: "Adres" }
|
|
- { name: "doc_city", type: "text", description: "Stad" }
|
|
- { name: "doc_country", type: "text", description: "Land" }
|
|
- { name: "doc_postal_code", type: "text", description: "Postcode" }
|
|
- { name: "doc_organization", type: "text", description: "Organisatie" }
|
|
- { name: "doc_unit", type: "text", description: "Afdeling" }
|
|
- { name: "doc_role", type: "text", description: "Rol" }
|
|
- { name: "doc_case_number", type: "text", description: "Zaaknummer" }
|
|
- { name: "doc_invoice_number", type: "text", description: "Factuurnummer" }
|
|
- { name: "doc_contract_number", type: "text", description: "Contractnummer" }
|
|
|
|
# Dropdown velden (20 stuks)
|
|
- { name: "doc_type", type: "dropdown", description: "Documenttype", options: "Brief,Rapport,Notitie,Factuur,Contract,Offerte,Notulen,Beleidsstuk,Memo,Overig" }
|
|
- { name: "doc_status", type: "dropdown", description: "Documentstatus", options: "Concept,Review,Goedgekeurd,Definitief,Verlopen,Ingetrokken" }
|
|
- { name: "doc_priority", type: "dropdown", description: "Prioriteit", options: "Laag,Normaal,Hoog,Urgent,Kritiek" }
|
|
- { name: "doc_category", type: "dropdown", description: "Categorie", options: "Financieel,Juridisch,HR,IT,Marketing,Operations,R&D,Strategie,Compliance" }
|
|
- { name: "doc_sensitivity", type: "dropdown", description: "Gevoeligheid", options: "Openbaar,Intern,Vertrouwelijk,Strikt vertrouwelijk" }
|
|
- { name: "doc_retention", type: "dropdown", description: "Bewaartermijn", options: "1 jaar,3 jaar,5 jaar,7 jaar,10 jaar,Permanent" }
|
|
- { name: "doc_format", type: "dropdown", description: "Formaat", options: "PDF,Word,Excel,PowerPoint,Afbeelding,E-mail,Overig" }
|
|
- { name: "doc_review_status", type: "dropdown", description: "Reviewstatus", options: "Niet gereviewed,In review,Goedgekeurd,Afgekeurd" }
|
|
- { name: "doc_approval_level", type: "dropdown", description: "Goedkeuringsniveau", options: "Team,Management,Directie,Bestuur" }
|
|
- { name: "doc_lifecycle", type: "dropdown", description: "Levenscyclus", options: "Creatie,Gebruik,Archivering,Vernietiging" }
|
|
- { name: "doc_audience", type: "dropdown", description: "Doelgroep", options: "Intern,Extern,Bestuur,Partners,Klanten,Leveranciers" }
|
|
- { name: "doc_region", type: "dropdown", description: "Regio", options: "Noord,Oost,Zuid,West,Centraal,Internationaal" }
|
|
- { name: "doc_quarter", type: "dropdown", description: "Kwartaal", options: "Q1,Q2,Q3,Q4" }
|
|
- { name: "doc_fiscal_year", type: "dropdown", description: "Boekjaar", options: "2023,2024,2025,2026,2027" }
|
|
- { name: "doc_department", type: "dropdown", description: "Afdeling", options: "Finance,HR,IT,Legal,Marketing,Operations,R&D,Sales,Support" }
|
|
- { name: "doc_workflow_state", type: "dropdown", description: "Workflowstatus", options: "Nieuw,In behandeling,Wachtend,Afgerond,Geannuleerd" }
|
|
- { name: "doc_archive_reason", type: "dropdown", description: "Archiveringsreden", options: "Bewaartermijn,Afgesloten project,Wettelijke verplichting,Verzoek" }
|
|
- { name: "doc_access_level", type: "dropdown", description: "Toegangsniveau", options: "Iedereen,Team,Management,Beperkt" }
|
|
- { name: "doc_origin", type: "dropdown", description: "Herkomst", options: "Intern,Extern,Partner,Overheid,Klant" }
|
|
- { name: "doc_media_type", type: "dropdown", description: "Mediatype", options: "Tekst,Afbeelding,Audio,Video,Mixed" }
|
|
|
|
# Date velden (20 stuks)
|
|
- { name: "doc_created_date", type: "date", description: "Aanmaakdatum" }
|
|
- { name: "doc_modified_date", type: "date", description: "Wijzigingsdatum" }
|
|
- { name: "doc_published_date", type: "date", description: "Publicatiedatum" }
|
|
- { name: "doc_expiry_date", type: "date", description: "Verloopdatum" }
|
|
- { name: "doc_review_date", type: "date", description: "Reviewdatum" }
|
|
- { name: "doc_approval_date", type: "date", description: "Goedkeuringsdatum" }
|
|
- { name: "doc_archive_date", type: "date", description: "Archiveringsdatum" }
|
|
- { name: "doc_effective_date", type: "date", description: "Ingangsdatum" }
|
|
- { name: "doc_received_date", type: "date", description: "Ontvangstdatum" }
|
|
- { name: "doc_sent_date", type: "date", description: "Verzenddatum" }
|
|
- { name: "doc_signed_date", type: "date", description: "Tekendatum" }
|
|
- { name: "doc_deadline", type: "date", description: "Deadline" }
|
|
- { name: "doc_meeting_date", type: "date", description: "Vergaderdatum" }
|
|
- { name: "doc_start_date", type: "date", description: "Startdatum" }
|
|
- { name: "doc_end_date", type: "date", description: "Einddatum" }
|
|
- { name: "doc_invoice_date", type: "date", description: "Factuurdatum" }
|
|
- { name: "doc_payment_date", type: "date", description: "Betaaldatum" }
|
|
- { name: "doc_due_date", type: "date", description: "Vervaldatum" }
|
|
- { name: "doc_birth_date", type: "date", description: "Geboortedatum" }
|
|
- { name: "doc_registration_date", type: "date", description: "Registratiedatum" }
|
|
|
|
# Checkbox velden (20 stuks)
|
|
- { name: "doc_is_template", type: "checkbox", description: "Is template" }
|
|
- { name: "doc_is_signed", type: "checkbox", description: "Is getekend" }
|
|
- { name: "doc_is_approved", type: "checkbox", description: "Is goedgekeurd" }
|
|
- { name: "doc_is_archived", type: "checkbox", description: "Is gearchiveerd" }
|
|
- { name: "doc_is_public", type: "checkbox", description: "Is openbaar" }
|
|
- { name: "doc_is_confidential", type: "checkbox", description: "Is vertrouwelijk" }
|
|
- { name: "doc_is_final", type: "checkbox", description: "Is definitief" }
|
|
- { name: "doc_is_draft", type: "checkbox", description: "Is concept" }
|
|
- { name: "doc_needs_review", type: "checkbox", description: "Review nodig" }
|
|
- { name: "doc_needs_approval", type: "checkbox", description: "Goedkeuring nodig" }
|
|
- { name: "doc_has_attachments", type: "checkbox", description: "Heeft bijlagen" }
|
|
- { name: "doc_is_scanned", type: "checkbox", description: "Is gescand" }
|
|
- { name: "doc_is_ocr", type: "checkbox", description: "OCR verwerkt" }
|
|
- { name: "doc_is_encrypted", type: "checkbox", description: "Is versleuteld" }
|
|
- { name: "doc_is_compressed", type: "checkbox", description: "Is gecomprimeerd" }
|
|
- { name: "doc_is_original", type: "checkbox", description: "Is origineel" }
|
|
- { name: "doc_is_copy", type: "checkbox", description: "Is kopie" }
|
|
- { name: "doc_requires_action", type: "checkbox", description: "Actie vereist" }
|
|
- { name: "doc_is_billable", type: "checkbox", description: "Is factureerbaar" }
|
|
- { name: "doc_is_completed", type: "checkbox", description: "Is afgerond" }
|
|
|
|
# =============================================================================
|
|
# Dummy Bestanden Configuratie
|
|
# =============================================================================
|
|
files_per_teamfolder: 10000
|
|
dummy_file_content: "Dit is een dummy bestand voor MetaVox load testing. Aangemaakt door Ansible."
|
|
dummy_file_extension: "txt"
|
|
dummy_file_prefix: "loadtest-doc"
|
|
|
|
# =============================================================================
|
|
# Performance Configuratie
|
|
# =============================================================================
|
|
sql_batch_size: 2000
|
|
http_timeout: 300
|
|
max_retries: 3
|
|
|
|
# =============================================================================
|
|
# Database Index Optimalisatie
|
|
# =============================================================================
|
|
# Bij grote hoeveelheden metadata records moeten overbodige indexes
|
|
# op oc_metavox_file_gf_meta gedropt worden voor performance en diskruimte.
|
|
#
|
|
# BEHOUDEN (4 indexes):
|
|
# - PRIMARY
|
|
# - mf_file_gf_meta_unique (file_id, groupfolder_id, field_name)
|
|
# - idx_file_gf_gf_lookup (groupfolder_id, field_name, field_value)
|
|
# - idx_gf_file_meta_filter (field_name, field_value, groupfolder_id)
|
|
#
|
|
# DROPPEN (7 redundante indexes):
|
|
drop_indexes:
|
|
- "idx_file_gf_composite"
|
|
- "mf_file_gf_meta_file"
|
|
- "mf_file_gf_meta_gf"
|
|
- "mf_file_gf_meta_field"
|
|
- "idx_gf_file_meta_file_id"
|
|
- "idx_gf_file_meta_timestamps"
|
|
- "idx_file_gf_updated"
|