Runbook: DSN-Export

Trajanje: ~5 minut
Vloga: Sistemski administrator, DBA
Uporaba: Migracija, dokumentacija, obnova ob nesreči

Izvoz in uvoz DSN definicij (Data Source Names).


Potek dela

flowchart TD A[Začetek] --> B{Cilj?} B -->|Izvoz| C[Izvleci DSN iz konfiguracije] B -->|Uvoz| D[Vstavi DSN v konfiguracijo] C --> E[Shrani JSON] D --> F[Ponovno zaženi Gateway] E --> G[Končano] F --> H[Testiraj DSN] H --> G style G fill:#e8f5e9


1. Struktura DSN

DSN so definirani v appsettings.json:

{
  "Gateway": {
    "Databases": {
      "demo": {
        "Provider": "sqlite",
        "ConnectionString": "Data Source=data/demo.db"
      },
      "produkcija": {
        "Provider": "sqlserver",
        "ConnectionString": "Server=sql01;Database=ProdDB;User Id=app;Password=***"
      },
      "porocanje": {
        "Provider": "postgresql",
        "ConnectionString": "Host=pg01;Database=reports;Username=reader;Password=***"
      }
    }
  }
}

2. Izvoz DSN

Z jq (Linux/macOS):

# Izvozi vse DSN kot JSON
jq '.Gateway.Databases' appsettings.json > dsn-export.json
 
# Izvozi posamezni DSN
jq '.Gateway.Databases.produkcija' appsettings.json > produkcija-dsn.json
 
# Navedi imena DSN
jq -r '.Gateway.Databases | keys[]' appsettings.json

S PowerShell (Windows):

# Naloži JSON
$config = Get-Content "appsettings.json" | ConvertFrom-Json
 
# Izvozi vse DSN
$config.Gateway.Databases | ConvertTo-Json -Depth 10 | Out-File "dsn-export.json"
 
# Navedi imena DSN
$config.Gateway.Databases.PSObject.Properties.Name

3. Uvoz DSN

Z jq (Linux):

# Vstavi DSN iz izvozne datoteke v konfiguracijo
jq --slurpfile dsn dsn-export.json '.Gateway.Databases = $dsn[0]' appsettings.json > appsettings.new.json
 
# Varnostna kopija in zamenjava
cp appsettings.json appsettings.json.bak
mv appsettings.new.json appsettings.json

S PowerShell (Windows):

# Naloži obstoječo konfiguracijo
$config = Get-Content "appsettings.json" | ConvertFrom-Json
 
# Naloži izvoz
$dsnExport = Get-Content "dsn-export.json" | ConvertFrom-Json
 
# Zamenjaj DSN
$config.Gateway.Databases = $dsnExport
 
# Shrani
$config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8

4. Dodajanje posameznega DSN

Z jq:

# Dodaj nov DSN
jq '.Gateway.Databases.novabaza = {
    "Provider": "mysql",
    "ConnectionString": "Server=mysql01;Database=newdb;User=app;Password=secret"
}' appsettings.json > appsettings.new.json
 
mv appsettings.new.json appsettings.json

S PowerShell:

$config = Get-Content "appsettings.json" | ConvertFrom-Json
 
# Nov DSN kot PSObject
$newDsn = [PSCustomObject]@{
    Provider = "mysql"
    ConnectionString = "Server=mysql01;Database=newdb;User=app;Password=secret"
}
 
# Dodaj
$config.Gateway.Databases | Add-Member -Name "novabaza" -Value $newDsn -MemberType NoteProperty
 
$config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8

5. Migracija DSN med okolji

Izvoz iz produkcije:

# Na produkcijskem strežniku
ssh prod-gateway "jq '.Gateway.Databases' /opt/data-gateway/appsettings.json" > prod-dsn.json

Uvoz v testno okolje (s prilagoditvijo gesel):

# Zamenjaj gesla s testnimi gesli
jq '.produkcija.ConnectionString = "Server=sql-staging;Database=ProdDB;User Id=app;Password=staging-pwd"' \
    prod-dsn.json > staging-dsn.json
 
# Uvozi v testno okolje
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. Ponovni zagon Gateway

Po spremembah DSN:

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

7. Testiranje DSN

# Testiraj vse DSN
for dsn in $(jq -r '.Gateway.Databases | keys[]' appsettings.json); do
    echo -n "Testiram $dsn: "
    curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:5000/api/v1/dsn/$dsn/tables"
done

Pričakovani izpis:

Testiram demo: 200
Testiram produkcija: 200
Testiram porocanje: 200

8. Kontrolni seznam

# Točka preverjanja V
———–
1 DSN izvoženi
2 Izvozna datoteka shranjena
3 Gesla niso v čistopisu v izvozu
4 Uvoz izveden
5 Gateway ponovno zagnan
6 Vsi DSN testirani

Odpravljanje težav

Težava Vzrok Rešitev
————————–
jq: parse error Neveljaven JSON Validiraj JSON
DSN ni najden Gateway ni ponovno zagnan Ponovni zagon
Connection failed Napačen Connection String Preveri poverilnice
Težave s kodiranjem Napačno kodiranje Uporabi UTF-8

Varnostni nasveti

Gesla v izvozih:

  • Nikoli ne commitaj gesel v Git
  • Šifriraj ali izbriši izvozne datoteke
  • Uporabi okoljske spremenljivke za poverilnice:
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=${DB_USER};Password=${DB_PASS}"

Povezani Runbooks


« <- Config-Backup | -> Pregled operaterja »


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

Zuletzt geändert: dne 29.01.2026 ob 23:35