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