====== 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|Config-Backup]] - Popolna varnostna kopija
* [[..:tagesgeschaeft:dsn-verwalten|Upravljanje DSN]] - Administracija DSN
* [[..:tagesgeschaeft:server-starten|Zagon strežnika]] - Po uvozu
----
<< [[.:config-backup|<- Config-Backup]] | [[..:start|-> Pregled operaterja]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional//
{{tag>operator runbook dsn export import migration}}