change before saturday
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user