Inhaltsverzeichnis
Runbook: DSN-Export
Durata: ~5 minuti
Ruolo: Sysadmin, DBA
Applicazione: Migrazione, Documentazione, Disaster Recovery
Export e import di definizioni DSN (Data Source Names).
Workflow
flowchart TD
A[Start] --> B{Obiettivo?}
B -->|Export| C[Estrarre DSN da Config]
B -->|Import| D[Inserire DSN in Config]
C --> E[Salvare JSON]
D --> F[Riavviare Gateway]
E --> G[Finito]
F --> H[Testare DSN]
H --> G
style G fill:#e8f5e9
1. Struttura DSN
I DSN sono definiti in appsettings.json:
{
"Gateway": {
"Databases": {
"demo": {
"Provider": "sqlite",
"ConnectionString": "Data Source=data/demo.db"
},
"produzione": {
"Provider": "sqlserver",
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=app;Password=***"
},
"reporting": {
"Provider": "postgresql",
"ConnectionString": "Host=pg01;Database=reports;Username=reader;Password=***"
}
}
}
}
2. Esportare DSN
Con jq (Linux/macOS):
# Esportare tutti i DSN come JSON jq '.Gateway.Databases' appsettings.json > dsn-export.json # Esportare singolo DSN jq '.Gateway.Databases.produzione' appsettings.json > produzione-dsn.json # Elencare nomi DSN jq -r '.Gateway.Databases | keys[]' appsettings.json
Con PowerShell (Windows):
# Caricare JSON $config = Get-Content "appsettings.json" | ConvertFrom-Json # Esportare tutti i DSN $config.Gateway.Databases | ConvertTo-Json -Depth 10 | Out-File "dsn-export.json" # Elencare nomi DSN $config.Gateway.Databases.PSObject.Properties.Name
3. Importare DSN
Con jq (Linux):
# Inserire DSN da file export in Config jq --slurpfile dsn dsn-export.json '.Gateway.Databases = $dsn[0]' appsettings.json > appsettings.new.json # Backup e sostituire cp appsettings.json appsettings.json.bak mv appsettings.new.json appsettings.json
Con PowerShell (Windows):
# Caricare Config esistente $config = Get-Content "appsettings.json" | ConvertFrom-Json # Caricare Export $dsnExport = Get-Content "dsn-export.json" | ConvertFrom-Json # Sostituire DSN $config.Gateway.Databases = $dsnExport # Salvare $config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8
4. Aggiungere Singolo DSN
Con jq:
# Aggiungere nuovo DSN jq '.Gateway.Databases.nuovodb = { "Provider": "mysql", "ConnectionString": "Server=mysql01;Database=newdb;User=app;Password=secret" }' appsettings.json > appsettings.new.json mv appsettings.new.json appsettings.json
Con PowerShell:
$config = Get-Content "appsettings.json" | ConvertFrom-Json # Nuovo DSN come PSObject $newDsn = [PSCustomObject]@{ Provider = "mysql" ConnectionString = "Server=mysql01;Database=newdb;User=app;Password=secret" } # Aggiungere $config.Gateway.Databases | Add-Member -Name "nuovodb" -Value $newDsn -MemberType NoteProperty $config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8
5. Migrare DSN tra Ambienti
Export da Produzione:
# Su server Prod ssh prod-gateway "jq '.Gateway.Databases' /opt/data-gateway/appsettings.json" > prod-dsn.json
Import in Staging (con adattamento password):
# Sostituire password con quelle staging jq '.produzione.ConnectionString = "Server=sql-staging;Database=ProdDB;User Id=app;Password=staging-pwd"' \ prod-dsn.json > staging-dsn.json # Importare in Staging scp staging-dsn.json staging-gateway:/tmp/ ssh staging-gateway "jq --slurpfile dsn /tmp/staging-dsn.json \ '.Gateway.Databases = \$dsn[0]' /opt/data-gateway/appsettings.json > /tmp/new.json && \ mv /tmp/new.json /opt/data-gateway/appsettings.json && \ systemctl restart data-gateway"
6. Riavviare Gateway
Dopo modifiche DSN:
# Linux sudo systemctl restart data-gateway # Windows Restart-Service -Name "DataGateway" # Docker docker restart gateway
7. Testare DSN
# Testare tutti i DSN for dsn in $(jq -r '.Gateway.Databases | keys[]' appsettings.json); do echo -n "Testing $dsn: " curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:5000/api/v1/dsn/$dsn/tables" done
Output atteso:
Testing demo: 200 Testing produzione: 200 Testing reporting: 200
8. Checklist
| # | Punto di verifica | v |
| — | ———– | — |
| 1 | DSN esportato | ☐ |
| 2 | File export salvato | ☐ |
| 3 | Password non in chiaro nell'export | ☐ |
| 4 | Import eseguito | ☐ |
| 5 | Gateway riavviato | ☐ |
| 6 | Tutti i DSN testati | ☐ |
Troubleshooting
| Problema | Causa | Soluzione |
| ——— | ——— | ——– |
jq: parse error | JSON non valido | Validare JSON |
| DSN non trovato | Gateway non riavviato | Restart |
Connection failed | Connection String errato | Verificare credenziali |
| Problemi encoding | Encoding errato | Usare UTF-8 |
Note sulla Sicurezza
Password negli Export:
- Mai committare password in Git
- Crittografare o eliminare file export
- Usare variabili ambiente per credenziali:
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=${DB_USER};Password=${DB_PASS}"
Runbook Correlati
- Config-Backup - Backup completo
- Gestire DSN - Amministrazione DSN
- Avviare server - Dopo Import
« <- Config-Backup | -> Panoramica Operatore »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional
Zuletzt geändert: il 29/01/2026 alle 23:34