Runbook: DSN-Export

Trajanje: ~5 minuta
Uloga: Sysadmin, DBA
Primjena: Migracija, Dokumentacija, Disaster Recovery

Export i Import DSN definicija (Data Source Names).


Tijek rada

flowchart TD A[Start] --> B{Cilj?} B -->|Export| C[DSN iz Configa ekstrahirati] B -->|Import| D[DSN u Config umetnuti] C --> E[JSON spremiti] D --> F[Gateway ponovno pokrenuti] E --> G[Gotovo] F --> H[DSN testirati] H --> G style G fill:#e8f5e9


1. DSN struktura

DSN se definiraju u appsettings.json:

{
  "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 eksportirati

Sa jq (Linux/macOS):

# Sve DSN kao JSON eksportirati
jq '.Gateway.Databases' appsettings.json > dsn-export.json
 
# Pojedinu DSN eksportirati
jq '.Gateway.Databases.produktion' appsettings.json > produktion-dsn.json
 
# DSN imena ispisati
jq -r '.Gateway.Databases | keys[]' appsettings.json

Sa PowerShell (Windows):

# JSON ucitati
$config = Get-Content "appsettings.json" | ConvertFrom-Json
 
# Sve DSN eksportirati
$config.Gateway.Databases | ConvertTo-Json -Depth 10 | Out-File "dsn-export.json"
 
# DSN imena ispisati
$config.Gateway.Databases.PSObject.Properties.Name

3. DSN importirati

Sa jq (Linux):

# DSN iz Export-datoteke u Config umetnuti
jq --slurpfile dsn dsn-export.json '.Gateway.Databases = $dsn[0]' appsettings.json > appsettings.new.json
 
# Backup i zamijeniti
cp appsettings.json appsettings.json.bak
mv appsettings.new.json appsettings.json

Sa PowerShell (Windows):

# Postojecu Config ucitati
$config = Get-Content "appsettings.json" | ConvertFrom-Json
 
# Export ucitati
$dsnExport = Get-Content "dsn-export.json" | ConvertFrom-Json
 
# DSN zamijeniti
$config.Gateway.Databases = $dsnExport
 
# Spremiti
$config | ConvertTo-Json -Depth 10 | Out-File "appsettings.json" -Encoding UTF8

4. Pojedinu DSN dodati

Sa jq:

# Novu DSN dodati
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

Sa PowerShell:

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

5. DSN izmedu okruzenja migrirati

Export iz produkcije:

# Na Prod-serveru
ssh prod-gateway "jq '.Gateway.Databases' /opt/data-gateway/appsettings.json" > prod-dsn.json

Import u Staging (s prilagodbom lozinke):

# Lozinke zamijeniti Staging lozinkama
jq '.produktion.ConnectionString = "Server=sql-staging;Database=ProdDB;User Id=app;Password=staging-pwd"' \
    prod-dsn.json > staging-dsn.json
 
# U Staging importirati
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 ponovno pokrenuti

Nakon DSN promjena:

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

7. DSN testirati

# Sve DSN testirati
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

Ocekivani izlaz:

Testing demo: 200
Testing produktion: 200
Testing reporting: 200

8. Kontrolna lista

# Provjera Da/Ne
———–
1 DSN eksportiran -
2 Export-datoteka sacuvana -
3 Lozinke nisu u cistom tekstu u exportu -
4 Import proveden -
5 Gateway ponovno pokrenut -
6 Sve DSN testirane -

Rjesavanje problema

Problem Uzrok Rjesenje
————————–
jq: parse error Nevalidan JSON JSON validirati
DSN nije pronadena Gateway nije ponovno pokrenut Restart
Connection failed Pogresan Connection String Credentiale provjeriti
Encoding problemi Pogresan Encoding UTF-8 koristiti

Sigurnosne napomene

Lozinke u Exportima:

  • Nikad lozinke committati u Git
  • Export-datoteke enkriptirati ili obrisati
  • Varijable okruzenja za Credentiale koristiti:
"ConnectionString": "Server=sql01;Database=ProdDB;User Id=${DB_USER};Password=${DB_PASS}"

Povezani runbookovi


« <- Config-Backup | -> Operator pregled »


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

Zuletzt geändert: 29.01.2026. u 23:38