Inhaltsverzeichnis

Runbook: DSN-Export

Dauer: ~5 Minuten
Rolle: Sysadmin, DBA
Anwendung: Migration, Dokumentation, Disaster Recovery

Export und Import von DSN-Definitionen (Data Source Names).


Workflow

flowchart TD A[Start] --> B{Ziel?} B -->|Export| C[DSN aus Config extrahieren] B -->|Import| D[DSN in Config einfügen] C --> E[JSON speichern] D --> F[Gateway neustarten] E --> G[Fertig] F --> H[DSN testen] H --> G style G fill:#e8f5e9


1. DSN-Struktur

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=***"
      }
    }
  }
}

2. DSN exportieren

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

3. DSN importieren

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

4. Einzelne DSN hinzufügen

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

5. DSN zwischen Umgebungen migrieren

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"

6. Gateway neustarten

Nach DSN-Änderungen:

# Linux
sudo systemctl restart data-gateway
 
# Windows
Restart-Service -Name "DataGateway"
 
# Docker
docker restart gateway

7. DSN testen

# 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

8. Checkliste

# 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

Troubleshooting

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

Sicherheitshinweise

Passwörter in Exports:

  • Niemals Passwörter in Git committen
  • Export-Dateien verschlüsseln oder löschen
  • Umgebungsvariablen für Credentials verwenden:
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=${DB_USER};Password=${DB_PASS}"

Verwandte Runbooks


« ← Config-Backup | → Operator-Übersicht »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional