Ecco una proposta architetturale e implementativa per un plugin GLPI 11 dedicato al backup e versioning delle configurazioni di rete, strutturata secondo le linee guida ufficiali degli sviluppatori GLPI (PHP 8.2+, namespace PSR-4, Twig 3, API REST, hook moderni). 🧱 1. Architettura del Plugin 12345678910111213141516171819 🗄️ 2. Schema Database (MySQL/MariaDB) GLPI 11 usa InnoDB con charset utf8mb4. Il plugin creerà: sql 12345678910111213 networkdevices_id punta a glpi_networkdevices is_encrypted indica se il contenuto è cifrato con Glpi\Toolbox\Encryption Il versioning si ottiene confrontando config_hash all'arrivo di un nuovo backup 🔐 3. Gestione Profili e Diritti (GLPI Native) Il plugin si integra con il sistema dei profili di GLPI senza reinventare l'ACL. src/Config.php php 123456789101112131415161718192021 setup.php php 1234567891011 I diritti vengono esposti automaticamente in Amministrazione > Profili. ⚡ 4. Massive Actions GLPI 11 supporta le massive actions tramite hook e metodi nativi. hook.php php 123456789 Nella classe Config: php 1234567891011121314151617181920 🌐 5. Recupero Configurazione: Agent GLPI vs Alternative ✅ Opzione Richiesta: GLPI Agent Remoto GLPI Agent (ex FusionInventory) supporta task personalizzate in Python/Perl. Flusso consigliato: Il plugin espone un endpoint API: POST /api.php/plugin/netconfig/receive L'agent esegue un task netconfig_backup (Python con netmiko/napalm o expect) L'agent invia JSON: {"device_id": 12, "config": "...", "checksum": "sha256..."} GLPI valida, confronta hash, cifra se necessario, salva e registra versione Endpoint API (src/Agent/Task/Backup.php) php 123456789101112131415161718192021222324252627282930 ⚠️ Considerazioni Critiche sull'Agent GLPI Agent non è nativamente progettato per backup di rete. Richiede sviluppo di un modulo custom (Python) con gestione timeout, fallback, credential secure (vault/keystore). Alternative più solide in produzione: Oxidized + webhook verso GLPI API RANCID/Unconfigured + cron + import CSV/API GLPI + phpseclib3 (SSH diretto, ma sconsigliato per scaling/sicurezza) 💡 Raccomandazione: Usa l'agent per trigger e orchestrazione, ma delega il retrieval a netmiko/napalm in esecuzione sull'agent stesso. Mantieni le credenziali nel sistema di secrets dell'agent o in GLPI cifrate. 📜 6. Tracciamento Variazioni e Diff Ogni backup viene hashato (SHA256) Se l'hash differisce dall'ultimo, si crea nuova riga Per visualizzare il diff: usa symfony/diff o myclabs/php-diff Esempio integrazione Twig: twig 12345 Nel controller: php 12345 📥 7. Esportazione Sicura Verifica diritti: Session::haveRight(Config::class, READ) Stream diretto con header corretti Rimuovi/cripta password sensibili prima dell'export (opzionale ma consigliato) ajax/export.php php 1234567891011121314 🛣️ 8. Roadmap di Sviluppo Fase Attività Tempo Stimato 1 Scaffold plugin, setup/hook, schema DB, migration 2 gg 2 CRUD Config, integrazione menu, template Twig 3 gg 3 Diritti profili, massive actions, API endpoint 2 gg 4 Logica hash, versioning, diff HTML 2 gg 5 Export sicuro, cifratura, test unitari 2 gg 6 Modulo Agent GLPI (Python) o integrazione Oxidized 3-5 gg 7 Documentazione, package, test GLPI 11 QA 2 gg ⚠️ Note Critiche per GLPI 11 Namespace PSR-4 obbligatorio: PluginNetconfig\ mappato su src/ Cifratura: Usa Glpi\Toolbox\Encryption (AES-256-GCM) con chiave in GLPI_CONFIG_DIR/config_db.php o variabile d'ambiente API REST: GLPI 11 richiede dichiarazione esplicita degli endpoint plugin via add_api_endpoint o routing custom Performance: Configurazioni switch/router possono superare 500KB. Usa MEDIUMTEXT e indicizza per ricerca Sicurezza: Non esporre endpoint /ajax/retrieve.php senza CSRF+token. Preferisci l'agent o l'API con autenticazione app token Compatibilità: Dichiara in setup.php: $PLUGIN_HOOKS['compatible']['netconfig'] = ['glpi' => '>=11.0']; 📦 Dipendenze Composer Consigliate json 123456789101112