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