99 lines
3.9 KiB
Plaintext
99 lines
3.9 KiB
Plaintext
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
|
|
|