====== 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|Config-Backup]] - Potpuni backup
* [[..:tagesgeschaeft:dsn-verwalten|DSN upravljanje]] - DSN administracija
* [[..:tagesgeschaeft:server-starten|Server pokrenuti]] - Nakon Importa
----
<< [[.:config-backup|<- Config-Backup]] | [[..:start|-> Operator pregled]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional//
{{tag>operator runbook dsn export import migration}}