Dauer: ~5 Minuten
Rolle: Sysadmin, DBA
Anwendung: Migration, Dokumentation, Disaster Recovery
Export und Import von DSN-Definitionen (Data Source Names).
DSN werden in appsettings.json definiert:
{
"Gateway": {
"Databases": {
"demo": {
"Provider": "sqlite",
"ConnectionString": "Data Source=data/demo.db"
},
"produktion": {
"Provider": "sqlserver",
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=app;Password=***"
},
"reporting": {
"Provider": "postgresql",
"ConnectionString": "Host=pg01;Database=reports;Username=reader;Password=***"
}
}
}
}
Mit jq (Linux/macOS):
# Alle DSN als JSON exportieren jq '.Gateway.Databases' appsettings.json > dsn-export.json # Einzelne DSN exportieren jq '.Gateway.Databases.produktion' appsettings.json > produktion-dsn.json # DSN-Namen auflisten jq -r '.Gateway.Databases | keys[]' appsettings.json
Mit PowerShell (Windows):
# JSON laden $config = Get-Content "appsettings.json" | ConvertFrom-Json # Alle DSN exportieren $config.Gateway.Databases | ConvertTo-Json -Depth 10 | Out-File "dsn-export.json" # DSN-Namen auflisten $config.Gateway.Databases.PSObject.Properties.Name
Mit jq (Linux):
# DSN aus Export-Datei in Config einfügen jq --slurpfile dsn dsn-export.json '.Gateway.Databases = $dsn[0]' appsettings.json > appsettings.new.json # Backup und ersetzen cp appsettings.json appsettings.json.bak mv appsettings.new.json appsettings.json
Mit PowerShell (Windows):
# Bestehende Config laden $config = Get-Content "appsettings.json" | ConvertFrom-Json # Export laden $dsnExport = Get-Content "dsn-export.json" | ConvertFrom-Json # DSN ersetzen $config.Gateway.Databases = $dsnExport # Speichern $config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8
Mit jq:
# Neue DSN hinzufügen jq '.Gateway.Databases.neuedb = { "Provider": "mysql", "ConnectionString": "Server=mysql01;Database=newdb;User=app;Password=secret" }' appsettings.json > appsettings.new.json mv appsettings.new.json appsettings.json
Mit PowerShell:
$config = Get-Content "appsettings.json" | ConvertFrom-Json # Neue DSN als PSObject $newDsn = [PSCustomObject]@{ Provider = "mysql" ConnectionString = "Server=mysql01;Database=newdb;User=app;Password=secret" } # Hinzufügen $config.Gateway.Databases | Add-Member -Name "neuedb" -Value $newDsn -MemberType NoteProperty $config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8
Export aus Produktion:
# Auf Prod-Server ssh prod-gateway "jq '.Gateway.Databases' /opt/data-gateway/appsettings.json" > prod-dsn.json
Import in Staging (mit Passwort-Anpassung):
# Passwörter durch Staging-Passwörter ersetzen jq '.produktion.ConnectionString = "Server=sql-staging;Database=ProdDB;User Id=app;Password=staging-pwd"' \ prod-dsn.json > staging-dsn.json # In Staging importieren 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"
Nach DSN-Änderungen:
# Linux sudo systemctl restart data-gateway # Windows Restart-Service -Name "DataGateway" # Docker docker restart gateway
# Alle DSN testen 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
Erwartete Ausgabe:
Testing demo: 200 Testing produktion: 200 Testing reporting: 200
| # | Prüfpunkt | ✓ |
| — | ———– | — |
| 1 | DSN exportiert | ☐ |
| 2 | Export-Datei gesichert | ☐ |
| 3 | Passwörter nicht im Klartext in Export | ☐ |
| 4 | Import durchgeführt | ☐ |
| 5 | Gateway neugestartet | ☐ |
| 6 | Alle DSN getestet | ☐ |
| Problem | Ursache | Lösung |
| ——— | ——— | ——– |
jq: parse error | Ungültiges JSON | JSON validieren |
| DSN nicht gefunden | Gateway nicht neugestartet | Restart |
Connection failed | Falscher Connection String | Credentials prüfen |
| Encoding-Probleme | Falsches Encoding | UTF-8 verwenden |
Passwörter in Exports:
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=${DB_USER};Password=${DB_PASS}"
« ← Config-Backup | → Operator-Übersicht »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional