====== 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|Config-Backup]] – Vollständige Sicherung * [[..:tagesgeschaeft:dsn-verwalten|DSN verwalten]] – DSN-Administration * [[..:tagesgeschaeft:server-starten|Server starten]] – Nach Import ---- << [[.:config-backup|← Config-Backup]] | [[..:start|→ Operator-Übersicht]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook dsn export import migration}}