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