From d5a0803eee548ae4523297b1d4733763c9379916 Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Thu, 1 Jan 2026 19:30:51 +0100 Subject: [PATCH] add database --- .gitignore | 3 + AGENTS.md | 25 +- apps/charts/blinko/templates/database.yaml | 8 +- apps/charts/blinko/templates/oidc.yaml | 1 + .../templates/secret-external-secrets.yaml | 1 + .../templates/secret-password-generators.yaml | 1 + apps/charts/blinko/templates/secret.yaml | 9 - apps/charts/blinko/values.yaml | 26 +- apps/charts/common/MIGRATION.md | 323 ++++++++++++++++- apps/charts/common/README.md | 2 + apps/charts/common/common-1.0.0.tgz | Bin 72389 -> 147627 bytes apps/charts/common/templates/_helpers.tpl | 96 +++++ apps/root/templates/applicationset.yaml | 6 +- apps/root/values.yaml | 4 + scripts/migrate_database.py | 335 ++++++++++++++++++ 15 files changed, 805 insertions(+), 35 deletions(-) create mode 100644 apps/charts/blinko/templates/oidc.yaml create mode 100644 apps/charts/blinko/templates/secret-external-secrets.yaml create mode 100644 apps/charts/blinko/templates/secret-password-generators.yaml delete mode 100644 apps/charts/blinko/templates/secret.yaml create mode 100755 scripts/migrate_database.py diff --git a/.gitignore b/.gitignore index f394bfb..ce57049 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ **/charts/*.tgz charts/*.tgz +**/__pycache__/ +__pycache__/ + **/Chart.lock diff --git a/AGENTS.md b/AGENTS.md index 4a2dde1..e63b127 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -203,20 +203,27 @@ env: The `PostgresDatabase` resource automatically provisions PostgreSQL databases. +**New Version (Recommended):** + Create `templates/database.yaml`: ```yaml -apiVersion: homelab.mortenolsen.pro/v1 -kind: PostgresDatabase -metadata: - name: '{{ .Release.Name }}' -spec: - environment: '{{ .Values.globals.environment }}' +{{ include "common.database" . }} ``` +Add to `values.yaml`: +```yaml +database: + enabled: true +``` + +**Legacy Version (Deprecated):** + +The legacy `homelab.mortenolsen.pro/v1` API version is deprecated. For new charts, use the common library template which uses the new `postgres.homelab.mortenolsen.pro/v1` API version. + **What it does:** - Creates a PostgreSQL database with the same name as your release - Creates a user with appropriate permissions -- Generates a Kubernetes secret named `{{ .Release.Name }}-database` containing: +- Generates a Kubernetes secret named `{{ .Release.Name }}-connection` containing: - `url`: Complete PostgreSQL connection URL - `host`: Database hostname - `port`: Database port @@ -230,10 +237,12 @@ env: - name: DATABASE_URL valueFrom: secretKeyRef: - name: "{{ .Release.Name }}-database" + name: "{{ .Release.Name }}-connection" key: url ``` +**Note:** The secret name changed from `{release}-pg-connection` (legacy) to `{release}-connection` (new version). The common library template handles this automatically. + ### 3. Secret Generation The `GenerateSecret` resource creates secure random secrets. diff --git a/apps/charts/blinko/templates/database.yaml b/apps/charts/blinko/templates/database.yaml index 6a30b53..c9ed805 100644 --- a/apps/charts/blinko/templates/database.yaml +++ b/apps/charts/blinko/templates/database.yaml @@ -1,6 +1,2 @@ -apiVersion: homelab.mortenolsen.pro/v1 -kind: PostgresDatabase -metadata: - name: '{{ .Release.Name }}' -spec: - environment: '{{ .Values.globals.environment }}' +{{ include "common.database" . }} + diff --git a/apps/charts/blinko/templates/oidc.yaml b/apps/charts/blinko/templates/oidc.yaml new file mode 100644 index 0000000..c13745f --- /dev/null +++ b/apps/charts/blinko/templates/oidc.yaml @@ -0,0 +1 @@ +{{ include "common.oidc" . }} diff --git a/apps/charts/blinko/templates/secret-external-secrets.yaml b/apps/charts/blinko/templates/secret-external-secrets.yaml new file mode 100644 index 0000000..de340c4 --- /dev/null +++ b/apps/charts/blinko/templates/secret-external-secrets.yaml @@ -0,0 +1 @@ +{{ include "common.externalSecrets.externalSecrets" . }} diff --git a/apps/charts/blinko/templates/secret-password-generators.yaml b/apps/charts/blinko/templates/secret-password-generators.yaml new file mode 100644 index 0000000..2183e0a --- /dev/null +++ b/apps/charts/blinko/templates/secret-password-generators.yaml @@ -0,0 +1 @@ +{{ include "common.externalSecrets.passwordGenerators" . }} diff --git a/apps/charts/blinko/templates/secret.yaml b/apps/charts/blinko/templates/secret.yaml deleted file mode 100644 index 9157356..0000000 --- a/apps/charts/blinko/templates/secret.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: homelab.mortenolsen.pro/v1 -kind: GenerateSecret -metadata: - name: '{{ .Release.Name }}-secrets' -spec: - fields: - - name: betterauth - encoding: base64 - length: 64 diff --git a/apps/charts/blinko/values.yaml b/apps/charts/blinko/values.yaml index 6c4d197..0bc031e 100644 --- a/apps/charts/blinko/values.yaml +++ b/apps/charts/blinko/values.yaml @@ -16,7 +16,7 @@ container: port: 1111 healthProbe: type: tcpSocket - port: http # Use named port + port: http # Use named port # Service configuration service: @@ -34,6 +34,28 @@ persistentVolumeClaims: - name: data size: 1Gi +# OIDC client +oidc: + enabled: true + redirectUris: + - "/api/auth/callback/authentik" + +# Database configuration +database: + enabled: true + +# External Secrets configuration +externalSecrets: + - name: "{release}-secrets" + passwords: + - name: betterauth + length: 64 + allowRepeat: true # Required for longer passwords + noUpper: false + encoding: hex # hex encoding for the secret + secretKeys: + - betterauth # Use this key name in the secret instead of default "password" + # VirtualService configuration virtualService: enabled: true @@ -56,5 +78,5 @@ env: DATABASE_URL: valueFrom: secretKeyRef: - name: "{release}-pg-connection" + name: "{release}-connection" key: url diff --git a/apps/charts/common/MIGRATION.md b/apps/charts/common/MIGRATION.md index bf013d4..d17dcfe 100644 --- a/apps/charts/common/MIGRATION.md +++ b/apps/charts/common/MIGRATION.md @@ -90,6 +90,16 @@ virtualService: public: true private: true +# OIDC client configuration (if applicable) +oidc: + enabled: true + redirectUris: + - "/api/auth/callback/authentik" + +# Database configuration (if applicable) +database: + enabled: true + # Environment variables env: MY_VAR: "value" @@ -148,6 +158,36 @@ Replace your template files with simple includes: {{ include "common.oidc" . }} ``` +#### database.yaml (if applicable) +**Before:** ~10 lines +**After:** +```yaml +{{ include "common.database" . }} +``` + +#### secret.yaml (if using External Secrets) +**Before:** ~10 lines (GenerateSecret) +**After (recommended - split files for correct ordering):** + +Create two files: + +`templates/secret-password-generators.yaml`: +```yaml +{{ include "common.externalSecrets.passwordGenerators" . }} +``` + +`templates/secret-external-secrets.yaml`: +```yaml +{{ include "common.externalSecrets.externalSecrets" . }} +``` + +**Alternative (single file):** +```yaml +{{ include "common.externalSecrets" . }} +``` + +**Note:** Splitting into separate files ensures Password generators are created before ExternalSecrets, which prevents sync errors. + ### Step 4: Update Dependencies Build the chart dependencies: @@ -274,6 +314,44 @@ volumes: persistentVolumeClaim: books # Uses PVC name as-is (not prefixed) ``` +### External Secrets (Password Generation) + +```yaml +# External Secrets configuration +externalSecrets: + - name: "{release}-secrets" # Secret name (supports placeholders) + passwords: + - name: betterauth # Generator name (used in generator resource name) + length: 64 # Password length (default: 32) + allowRepeat: true # Allow repeated characters (default: false) + # Required for passwords longer than ~50 characters + noUpper: false # Disable uppercase (default: false) + encoding: hex # Encoding format: raw (default), hex, base64, base64url, base32 + secretKeys: # Required: sets the key name in the secret + - betterauth # Without this, the key defaults to "password" + - name: apitoken # Generator name + length: 32 + allowRepeat: false # Can be false for shorter passwords + secretKeys: # Required: sets the key name in the secret + - apitoken # Without this, the key defaults to "password" +``` + +**Important:** For passwords longer than approximately 50 characters, you must set `allowRepeat: true`. The default character set (uppercase, lowercase, digits) doesn't have enough unique characters to generate very long passwords without repeats. + +**Multiple secrets:** + +```yaml +externalSecrets: + - name: "{release}-secrets" + passwords: + - name: password + length: 32 + - name: "{release}-api-keys" + passwords: + - name: apikey + length: 64 +``` + ## Available Placeholders See [TEMPLATING.md](./TEMPLATING.md) for complete placeholder documentation. @@ -325,15 +403,246 @@ See [TEMPLATING.md](./TEMPLATING.md) for complete placeholder documentation. - Secret references use `{release}` placeholder - Cleaner, more maintainable values.yaml +## Database Configuration + +The common library supports the new PostgreSQL database resource (API version `postgres.homelab.mortenolsen.pro/v1`). + +### Enabling Database Support + +Add to your `values.yaml`: + +```yaml +# Database configuration +database: + enabled: true +``` + +### Database Template + +Create `templates/database.yaml`: + +```yaml +{{ include "common.database" . }} +``` + +### Generated Secret + +The PostgresDatabase resource creates a secret named `{release}-connection` containing: +- `url` - Complete PostgreSQL connection URL +- `host` - Database hostname +- `port` - Database port +- `database` - Database name +- `username` - Database username +- `password` - Database password + +### Using Database Secrets + +Reference the database secret in your environment variables: + +```yaml +env: + DATABASE_URL: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: url + DB_HOST: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: host +``` + +### Global Configuration + +The database resource requires global configuration in `apps/root/values.yaml`: + +```yaml +globals: + database: + ref: + name: postgres + namespace: shared +``` + +### Migration from Legacy PostgresDatabase + +If migrating from the legacy `homelab.mortenolsen.pro/v1` PostgresDatabase: + +1. **Update API version**: Changed from `homelab.mortenolsen.pro/v1` to `postgres.homelab.mortenolsen.pro/v1` +2. **Update spec**: Changed from `environment` to `clusterRef` with `name` and `namespace` +3. **Update secret name**: Changed from `{release}-pg-connection` to `{release}-connection` +4. **Add namespace**: Metadata now includes `namespace: {{ .Release.Namespace }}` + +The common library template handles all of this automatically. + +### Migrating Database from Old Server to New Server + +When migrating databases from the old PostgreSQL server (`prod-postgres-cluster-0` in `homelab` namespace) to the new server (`postgres-statefulset-0` in `shared` namespace), use the migration script. + +#### Database Naming Convention + +Database names follow the pattern `{namespace}_{name}` where: +- `{namespace}` is the Kubernetes namespace (default: `prod`) +- `{name}` is the application name (release name) + +**Examples:** +- `prod_blinko` - blinko app in prod namespace +- `prod_gitea` - gitea app in prod namespace +- `shared_authentik-db` - authentik app in shared namespace + +#### Using the Migration Script + +The migration script is located at `scripts/migrate_database.py` and handles: +- Dumping the database from the old server +- Restoring to the new server +- Fixing permissions and ownership automatically + +**Basic Usage:** +```bash +./scripts/migrate_database.py +``` + +**Example:** +```bash +# Migrate prod_blinko database (same name on both servers) +./scripts/migrate_database.py prod_blinko prod_blinko +``` + +**With Different Database Names:** +```bash +# Migrate from old_name to new_name +./scripts/migrate_database.py old_name new_name +``` + +**With Custom PostgreSQL Users:** +```bash +# If the PostgreSQL users differ from defaults +./scripts/migrate_database.py prod_blinko prod_blinko \ + --source-user homelab \ + --dest-user postgres +``` + +**Overwriting Existing Data:** +```bash +# Use --clean flag to drop existing objects before restoring +# WARNING: This will DELETE all existing data in the destination database! +./scripts/migrate_database.py prod_blinko prod_blinko --clean +``` + +#### Behavior with Existing Databases + +**Without `--clean` flag:** +- The script will attempt to restore objects to the destination database +- If tables/objects already exist, `pg_restore` may: + - Fail with errors (e.g., "relation already exists") + - Cause data conflicts (duplicate key violations) + - Partially restore data +- **This will NOT automatically overwrite existing data** + +**With `--clean` flag:** +- Drops all existing objects (tables, sequences, functions, etc.) before restoring +- **WARNING: This will DELETE all existing data in the destination database** +- Use this when you want to completely replace the destination database with source data +- Recommended for initial migrations or when you're sure you want to overwrite + +**Best Practice:** +- For initial migrations: Use `--clean` to ensure a clean restore +- For updates/re-syncs: Use `--clean` only if you're certain you want to replace all data +- For incremental updates: Consider using application-specific sync mechanisms instead + +#### Prerequisites + +1. **Destination database must exist** - The script will verify but not create the database +2. **Both pods must be running** - The script checks this automatically +3. **Source database must exist** - The script verifies this before starting + +#### What the Script Does + +1. Verifies both PostgreSQL pods are running +2. Checks that source and destination databases exist +3. Dumps the source database using `pg_dump` (custom format) +4. Restores to the destination database using `pg_restore` +5. Automatically fixes permissions: + - Grants USAGE and CREATE on all schemas to the database user + - Changes schema ownership to the database user + - Grants ALL privileges on all tables and sequences + - Sets default privileges for future objects + +#### Default Configuration + +The script uses these defaults: +- **Source server**: `prod-postgres-cluster-0` in `homelab` namespace +- **Source user**: `homelab` +- **Destination server**: `postgres-statefulset-0` in `shared` namespace +- **Destination user**: `postgres` + +#### Troubleshooting + +**Error: "role does not exist"** +- Check the PostgreSQL user name with: `kubectl exec -n -c -- env | grep POSTGRES_USER` +- Use `--source-user` or `--dest-user` flags to specify correct users + +**Error: "database does not exist"** +- Create the destination database manually before running the script +- Verify database names match the `{namespace}_{name}` convention + +**Error: "permission denied for schema"** +- The script should fix this automatically +- If issues persist, manually grant permissions: + ```sql + GRANT USAGE ON SCHEMA TO ; + GRANT CREATE ON SCHEMA TO ; + ALTER SCHEMA OWNER TO ; + ``` + ## Handling Legacy Resources -Some charts have legacy resources that should be kept as-is: +Some charts may still have legacy resources that should be kept as-is: -- **OidcClient** (legacy) - Keep existing `client.yaml` template -- **PostgresDatabase** (legacy) - Keep existing `database.yaml` template -- **GenerateSecret** - Keep existing `secret.yaml` template +- **OidcClient** (legacy `homelab.mortenolsen.pro/v1`) - Use `common.oidc` for new AuthentikClient instead +- **PostgresDatabase** (legacy `homelab.mortenolsen.pro/v1`) - Use `common.database` for new PostgresDatabase instead +- **GenerateSecret** (legacy `homelab.mortenolsen.pro/v1`) - Use `common.externalSecrets` for External Secrets instead -These will be migrated separately when the common library adds support for them. +### Migrating from GenerateSecret to External Secrets + +**Before (GenerateSecret):** +```yaml +# templates/secret.yaml +apiVersion: homelab.mortenolsen.pro/v1 +kind: GenerateSecret +metadata: + name: '{{ .Release.Name }}-secrets' +spec: + fields: + - name: betterauth + encoding: base64 + length: 64 +``` + +**After (External Secrets):** +```yaml +# values.yaml +externalSecrets: + - name: "{release}-secrets" + passwords: + - name: betterauth + length: 64 + allowRepeat: true # Required for passwords >50 chars + noUpper: false + encoding: hex # hex, base64, base64url, base32, or raw (default) + secretKeys: + - betterauth # Required: sets the key name in the secret + +# templates/secret.yaml +{{ include "common.externalSecrets" . }} +``` + +**Note:** +- External Secrets generates passwords directly (no encoding option) +- The `secretKeys` field is **required** to set the key name in the secret +- Without `secretKeys`, the Password generator defaults to using `password` as the key name +- The `name` field in the password config is used for the generator name, not the secret key name ## Troubleshooting @@ -398,6 +707,10 @@ After migration, verify: - [ ] VirtualServices route to correct service - [ ] DNS record created (if applicable) - [ ] OIDC client created (if applicable) +- [ ] Database resource created (if applicable) +- [ ] Database secret references use correct name (`{release}-connection`) +- [ ] External Secrets created (if applicable) +- [ ] Password generators created for each secret field ## Post-Migration diff --git a/apps/charts/common/README.md b/apps/charts/common/README.md index e734db3..bc8c920 100644 --- a/apps/charts/common/README.md +++ b/apps/charts/common/README.md @@ -33,6 +33,8 @@ The library provides full resource templates that can be included directly: - `common.virtualService` - Full VirtualService resources (public + private) - `common.dns` - Full DNSRecord resource - `common.oidc` - Full AuthentikClient resource +- `common.database` - Full PostgresDatabase resource +- `common.externalSecrets` - Full ExternalSecret resources with Password generators ## Usage Example diff --git a/apps/charts/common/common-1.0.0.tgz b/apps/charts/common/common-1.0.0.tgz index bc8616f29462fa5d1c00f47c208098198f32e751..40b048fcecb3790b77cacb466d743457407de0ea 100644 GIT binary patch delta 105498 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

`_(T$k6wC?;YuH_-RW9)fOL| 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≈l-#9-FVcG*r1R0dMyJOa3~vr#V6 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%0A6P1u3 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%0D5cPWUUZ6{Fe{J`?ibLqH4e zx>IFyr;y2%<{}{RUzvVX)V|{M-3(Dl<<#_>SMOb>YM4Otw?-{jAI*PyN~7)2ES0Rf zJHlX;rklO5aPhsB#y$+2>?!U;mL8L1w(eSeK1{w&KmB5K9!j(x zum9ayR=%~I=*qtAA;fGUK>43f;J|Fr)YVMBC4}$%o_pt7L`rutT9*yIbuP6XsF!f- zdog4%%f)*e#^+OBJRXyjr-0>=oUp7EJGe z4(2TkR+du#DioR7h`!XB^H|dIg-RO(nQa%MLqYRPt7Z|sr2TovICy)Je-_Sk&|!WT zY~B6R#cS>C1f6W%~OWpX~$=|?~%KxCD+1?->C)6jWu*jk5Ywc*i}CBn=e-jZgx3)VW5Pl;EYlCJKOfotwr zSg)2{nA`e#a#_kwGa2EXe>I)l1+!%h%^x|v+m#}}gdg|}ExV*~!sSj!VL}lT)c*3(?NU2H(W2mpg;X;w0ymiE^e-+fe_w~pV2}?T%GrEK z*b^#fcG)Dwf*B@2)GV;80|pmrlpZV3pvsf)G?%N`sdNjpU3Lx5aKG%2hjqxwo{T`J zhsD;_^QHvGRv-Y~=bl>?zpnWqhr)QhDas;4m8a^rA6mdYy4NYj`mMJ!>J37fsx@+? z%4kp^S@E8!Z${yEe@Q8cXGgmwkVEcTZT|1btyxE7J#?BVx7pw$GCsyJWMwY{!{#J=$de#UnhP;)=i=@X$=fomO6REcS9#G* zoH3K_^0VuhYnR~PB`@WFqUaBt8o#}%Yl%AN>spNt909KBz6>@;!|^V5ARRvYPvfg! zThRi#STovfe;j#F^rtS5TPl0w8S2Ky*jlvqILsR}r{^IS%>xaRfA;ne&2^go1s8Qq zZw%d-{-LO<;so3aPL?cdmbij)O$e6hhGrRLgg(zO5TCT6-90+bDFn_3CeoNH#3B`U z>v2y!Ln)6;oxHqQfI0K(!11MT%fF@M-;9&X;K|k~e~N5`7(qjpNl(qZ*JtBTN25V$ z6;MOY9X~*NNzxkTF7SmrAa@&r=94y^+Psf)xEc=kOj@NdA=+#t-7iP;bF^vBgIDe{Z?YDM9n|ctaP{U`P>1F5#gPnVlkG zw2~#ouUyWK7ila5g<@JN;)ry!@J=|At)l1K8bwntg^yy^Jy~(7%%HuSL4!hW*uezU zXJIbvz=J{@4g&!2yp~(`^0KXE+bz4x?y~L6wd}gAW!tuG8{Z>*FYy0?e%lP3JR5|j zf3-r2+$n3NX>xi&Ht~+$Nm#-PNf$vY;;3P$9w=0++5-3ABG~RCMmlI$RZ{bEzrF!p z02o5IDx^BQz!tOG=P2v730?_|sL?71^D$EPTiNo-Naeh-HAA4Yv!J`S>#cJ<9>Y*k zykwZ+{hs%Wzkg2?ZRE)4ejzec+kw9!e+o276V#>V20!Del)LzH`SzLg*6B@`${2;p zEIk$aE-7MWZM_{BmtWDagVg`A;#GjvEQ&0Fa&g9YN;j3#PW3}JFzvm`f^2W3R+Ac3 zv89KlUuGGydq2KZjk`(RuvKnV1^Lq}*|jm+rcaW63iXKXTgd6pS513VD~?7Uf09Xe zP13PZ*RzJUFdHmmEf3lyk~TzZoZPjOU%STJdM;ihu+*V#0#J9xP9jkAOW?f|0J(@O z`jUzv;WkN>%-HBf9?|k2K6p@;mP3HuUm=0F9{keDF1OtuoRY7C$S_{^kbL-*vQIvt zfH=2Z!)a0WV#U9GQg&HurLQw?f3SIcf1?_>TbC|jdH(FI0@n7D$w4RWdN~f!uzFm~ z<;q9&(&ApB9Z0&w3d%;_BG3M(;$vbkyA;G#oX-L8N*6AKpa>(J<0MUj{!6y7+LKA| z9;8-z+DN23F-ZA_0XNsUp7u{0fEwEMT%+D_S2RwLh90>R3uRQWFE(V$e@rZna(13d zpmgzo!$*Q;0@S3HeQsUQ(w56uy?VoZLmEZzuus1Ap9( zor6dKCL8c>B zRdJc5A4d3oS5^ykW#%pMQHW7OD%&?GHZ?OS%4hicK-6ZV$u)#ivP?Cx z@A1CX?Q#4Vx~B+=kj0xyILXkR&?9wOMAF2lxVfRqi5! z#kI9;tUUaH)Hlj(e?8^`tZW+9Q;$@}7n7om7(fX*0>N}jmzukrExKCPH1I~wm5YUe zER>=^rg4C`efh;or?@6f?ZI>~x>J1)cbkOsqn3{huoafF{m+H(A$tur{@v+)@jOS6 zka|*^71xfBI%e#qGTvz?AhgQWQGe&?_tKPk_Xu{MQnHz*e=z^0iaX4yDNKI65Kg(D zhP@$wYV+6GBU-$6l%_Zm==Uw`RP#KovjXhJ7$(3BD~&(oNzLEP7ggCiD2zOR&{Ume zr77}M28x=GLu>%jYV<-#Pn@UfazYx53pYy22aw--FIyrw`pu&Z6M+F;VP%ervv`lK zW*SQ8^Y695e+AQV7$$6I=<5MbaA2LplqCO(2d(dSq#rSCPy(aCY!@$@TPIrg)U8>c zav-wQO?peZbotu*_LkctwlwhYs2$~nzV0OPS{Jl}aZN}TIaakSx6t`(J!K>D*P42B z+)SYx)g#90+ak`a?V3#^2luqi5D3;-P0|#B-~NE)f1>~knzuW%kD&zh{5ZY#Pbf_rw+I3u{) zoo+@Bf4yJBTmCiHF(c7zNPu$n=ISkJ-q-59av=18+~)cm>FDqyQs0Yg$jT@m*011W zI#ou9DR1>#{YO00$4z2y2?o-oS5E6K7$twmkt3oZ@6r8c8d0b&8ZZ{l3erP;aQRen4ul{c~l~^ivL2pVt8UAmH%;HqT>WDtmL-sb1#vrP>P%8PVQ z7IBNh>x_6J41Qmj*@8-0NzeV;uEQC4qsIm81`l;9Xh1{4+|Im#!fid_d0X`&oa+ra zhIP~z#)G#8rJND-NvQ;q+!q{cf3njyf1M{F5hxcA!}Q;qXHwn45H*rRPa8ml;{y~L z2w4!AvbotF^P!{W0H%!7C4~K&sYLco`7cRqp+I`45w_lp8*#iiKRj)bRV%BGNwBx- z#zpT7P2ptA`C{v1cNIQKtx&v^E9WTjWkBmO*-UXz0bSw_Y*VT~4xIJBE*^_te<^6L zJ+0gyylN?hFfG$qN#txbmoZnIbQreo=x8B;~>+tT$ez&WH$*j z;%!@ljQ#4ORh+84$0LJ(H&YVXe;;eG_7MzkW>E<_uDGE66^NzZm3FL!lJKpV$%5tM5Iew_$vHs{VmPmsI?pGXWQuD zqq6-c!e6Wkgku0B@1F4?Zee40?4$Vfh2DA8CqbwdX7MRAN7y9BDU4(Ye-_lIVqot> zTh!6`;_A3vW|x9I)jJ zs5ewCwMuWPN#R~EPc};~`U`vMDj^?^Pd9VQGuK8pgatq-La$Ov@k&{n zYyFxqL6OiPwyT59(Rui4O|5C4*MEBA0h+t1Nx3%~lOTL?O>sz&02)GPfRkyg$AV~+ z;;rg(cqxOYR2h{Wf8faCj#K#NcI?u>5BxgVf7(8@K!(`09d6!c)*?4fi(PTLg~tpeUjb4+N5C&?fcVOl$2}#mi7EHyI;8CgX?sgT2&4E{y?=6nG|%sN_$^8fy<{dYUDRvJg-+RKZq%hI4oK`y4L(E-x|T$w^^MN${-QE(H{A|DD|gzd^OLlts|AoNlR%S+2AeOf0L@xv#+~9&tDMsWQ<#dLanxbSHzi;?oa9=(gCfEiPPUp&s;b&Jx3#5 zr>ZV}Lz4KeDz%3k;w<$d$4vU8J?7Ww9U8I{6?+fWaj@`FoPoM8r*VqB1)BQ#EynPi zN4PikO%iq64RXU+R=aAg06fIotIBY7Q3=5>U0)&Ce{~LCr!YbYE)Gy=!P%QkmfIu_T9q8C-S{zrTfbqc+$>BY z6kW!~fAS4XX1M?|NjlS5jNl%|$eIb$=n5q(H*d`%OqOET+c&{8on- z0JY*OajL$SbVq22cX0eR#$DxJk|xYOdIn*Me<=@B&10|@yf7$)U!BgxCf00kvB-;P zjB$iW0za)~96n4(hU0Rw;x=#v+K{wGfJV(M87PQ|-f|Xy;^^b^zB3$bK+paCwN`u7 zo^@F)I(tVupzBoGXplZPJ*)Yb0DI3uMyyn9gK&rBE9>?n0DU@;uOW{}M^Q zzc6CZ*c|11(8(Zd8x(d>d#yzy(QeW`vhozyCe>XctPj93qEJFxQLV|BKH@z9AVLrSQ^qT%WqA1!Os$dH4grR= zF)oOi$J@gKqkClE9!O2RQ(8Hup4q$MGnuJ%^e>1-j_CXJ49_W(o0*Mm%X z1YSf!TcOyh%H-_dgmJ0pc{a()kcfoE`@er(KW9Lz$n{@?Ht2s*{YKSx%P)s2)`_64gke;@Bu;dVluT%`i~G=t%O zBo>|;s^8QsqMRvww+|MP~AdP}q4jkBXT0qrPPErcVm zIwUP`iXPhN#z#eMr>)KDCwF#$Pl>zQW*e;Vau`s<3i%z}b&=czpQq<~e;!CBB?PJ> z_t^t|qU~pdNmpL|>m$1Xyj$ds7R#+-XDe$RgZt$-Vi#v83bey!nINzv0EYF7?F854 z+y*JCH8350hE*?)Y9=mbp%=vh6#Xh(nY@i>k;lpYB8FMbzlkTE(Dq=z8s@L7fBNhk zIbJ4f2*&Pr1p3E5=j^XWe;a+}qyu7!b<1zd%*Ntrh@6>pA8);2!d~GHMQ2Fvr!38Q zr&hkaF-9i-lB_z(01(hL-%7H>u2A1q6jG{hg?17M**tY9aS$w)G0qo<_k4e3C*t^> zJeO3JY`y*yFhX9xD{y`bWwzUg=t^l;^6pctXIPQ?5SfmTL*_|Df6_ckW4{ie^%iL& zPZ&&w`IPR$yo1=WEU~6h6lRxX3++zvi5gn?C=#Wt+NIHdeD30X*>{O2SMT(szxDJXISzqVr{2@27taL;seiom~g71smRLNg#~2@{Ji?h&C_~LI*Hu zSl01fFg%%GAltLqe^owmIu;ikR~<`OP-e?b zl;YIc#;I6>p>$hQ{E!&moFe}mgAX5OuTCd)Fl}@;TycX->d?i=(rY+w_h9o|4$FAa zQh%c!Y1)3ek&0}p`GUH&|G8e&2DHhm+{42V8bN=~K>bU)fAE%kgYiI~E(I0#&Ogc@ zn5)Jf{Iqn`_fSH{g34~k9V|{sBtLfaLzU~ETnaKMUyh$yQ$O^vy9S4nPP81fWu;9p zT&T>Ur{CF3{sJaBx=+q;?~YZ_Uma|y+}_5*B!>*-*oSL_m5Kd+0-bt*TBO>voFDo8 z7R!B-RVVLke+l|>g>Lh#a0hGF1#SJK`vs;Vs)6?=sm zNB_(lzL2)OaS1nJ1^XG*%%DSe?5a~u&(LT$`;EQ;e??PW5p$Ze*TryVz@q1z&koy3 ze?R;?({2_3F}sfXTQ~@Q6Q%R9Ht-uN-)!e3)`hS1N^@oYQ{$12D}YR#e^`a>?VJ+y z`oKBZM!#Qiw@zdtaMO=g<~lY)q3ZxMzI$5&O|Y&9W*f!RQ}OyoRmI)jnek_U-RH!LzvVbga(iG{KO%pkA^u3gmx#B~}8 z5+4PHuS<$(!`^YPf#pbZz$_DrKAj=uL;?^6bra)EWw<5Kya z7A+T!QN7f3SZU$VH3usge2#k_>{YcOrF?TOpaR9*qXt9jHZP)Fr&?s9*MkqAf`1ARf2;@Z zSuQRQfllafOo~&!=USQD#J?|ivr<1kpZN&?5@gR&9d3bHnvuZ#%U-Swa4%SNLJhf7IS#Bf~ilXWh#bMc7qgXi&&p$9hgHD9807fx$}I zKX^Tv(FHj2$dofC2(cX;vG(nzKif3nOpk31sw zPX5*_VYxrk2keS_+&bL8ZN`S*rd%Va76z#O88cb0*`W1?cTJm7r53>MK-$-pRjOfX zX%gQy&(BAgEj5+NqU(9>TS|zU_25f?4OD}mYzec-GsiK9mAtj_mh3w{ z@C}p$Tr(JO$Nl(&gVjbce^j6R*NPKD*^cvjhkvQv$YYa_Yf+vDiwdpt@}hJD&JK7% zid{i$C`NMRJEN*U`S>veX7ezSeIwK|+)z-oHzC9Xx#?#Bpi4?aCTsX9BFsq=5* zX*@oy-<(xt$x0ILa!P4S((B7Yd7rH|(U!Yt-spD>RQd^H(*6C{@Ta6+_4IRuZ6X!#{)T3~i7gG+ zp3{|;lYjL2V}X?bi-_i6HCsn|Os3~%wW4_+u{nnOuCMYkO1cRx0T1G3NB$9?hWZya zt{7tJ$rhMClaysLe@>lS^z1OQP@2R*6z&sOulO zJt!HL)Nw}r4*B1E)MXq4@9#;IuNJp5uR~EUS@}VEp{bjHAQ2H)I#b=|ym}K^KHrh{ zn0B&=x+*)WcU*AMcevTD^hN-(4JJN*2YJ$F;v3yXiJtwPe=%wT{2;W6h{ht-zR+?| zuqKA~_u?R5LPP5G3}&1RBJ>&)z2^4sT$~-PE#$XgXe{U&m8?UVaul4pvldgzi#hdS z{cycGy7*<8-Q~{9-mC1+ZQn5lz?JMv$R|fx;G87?X`tV9rgQ%nP%^hf2G_jcoXX(1 zD3?y5xGTOge>eC%J?T4}Jr531_9GZCiMLVD0RUiTE*u>)`&ZiJ9<_t&EG(}lFHo}; z-eT8xJp``w9`<~{TqV649to4%Hx0B3l;mSl74e@$Y{-8{$t*==2w|CFlc2-8~o zWzUk4Go1#MOAW;JIkVf94zmjVSC-7!z;BowUcFS%tsAo)+yNyc(t68jU#9xc5p6C? zzyB}E`yi1@`(+?S5&9Djrxk4N%Sy{x&NLYcd{2rBO()A2y{nTBrv5dBn}|T)JfOPb zoB8*hf06IrQLv3ajs1jD=Oihar0pkB<;os7{1qsd01eUHep8)R!`nHwlocTFjkCt( zEXD@EbFBQC+=RBic4je70rV)b)JeBUx9nEX{D->z!7>b02G}0-e$UK%)lQ2e;d@aR4L-gUK>I$rj3U1Q=a0A!pYb! zrM|ssWFP^~C$4?@2Rvd1uIZ)Nz1F$WMaJ3Sh-V1@uy|7R--MG$~6DSjF~eErKeA+=sdl` zeEnx%Yj+Gscc=!BWcfFuSWdM|)wRT4o-UMYbAB1V_juiFZO6Ov=`dS_L!5mCD|yAH zLzW({5s6HY$`lK~z>b=Wmv0h~@$<=pf8nygw~j$tRp(E+>y?jbl8kJ)8EYuXSC5%6 z+;yQ2?6L3D>GpG0UR{_^Ur&pOhgZO8#f-|IfclWex>VWJed8AZa(mxK9Mg7y8&sOvH;=C>(0hhBu8AOr5fQ^L2=SR<3u@Mct5>wke-CRhFkYdr zM%qH__HoR{yTimxo$qt9rK@#ec)LeX*0pdVE`|peDa^Okk>;efYJzBikJeDCqrMM` zst|w9`dZ?0^*Y6-Ya3xbaxIC&Rir*mj!qH^Tcf04XUV-Gf)ZRbQpA)R|{Qd9x{gL5utdMC$~ur?(q6npSN zb^pR{qcF7yxqYqm!a$9c7Wm$FnYvHk?d?;pEAK0;*2gTzZ&L~U_M6!+j?K<&7+hzU zThrQO;L?+;iiA6hSHT=+g4xBX82ZgZKRX*q=KUW73V-pl?4G9ze>exTOf$%Qd4FJY z|6=j6*&cNhsprk_Lgt%}mJ5gV6&i4YTmV2ETxse0*X5SoS~Wy!6En;?I8Ylb9|}70 z07)`^`ZR4{J=I3ZmS${%7R+Vqjx>*`YV)@O+0}J!d9cMqSx^g&!6dz9e8c=cDoePc znR<3E<4VTt&|yDz6pY;I5?B^Er1h4Yn5Szh66UeJML|PUn7-wSFNKypJ_kU z9i1vn&gF~U3WT!`HccC&y30@f5cy@8UjZLvba5uiLEV2 zL?MtFQ}2BhL%*ur4+@4pQa(-Y=;l7fWagr`yV6NU*FN-FHU{GIpB209RLz3S8h7sH zl-Ms8jrB0-J&O-vMlBkFN-{n&CdG45W)w!`trm=BzD%n$`t4RFE9*r-=h+EVt8|i9 zR0&*wmrHt|f3K#>dufu{CRJzqrWo$h)N?DJn?8rB+?bfexSR+QasMQcq48_ck-kXm zGqF-VdXThd#&$~p_Xd<-2Fu7%ZvCSI#MCykhcsu*LShlicAz}`^q1v=xix8mf^FSS z62K}lvg2%GjWra?D%di4dFI;7Am%@#p-W_gs%9Pbf849JT=|t4K9O?>VP;VHApX>^ zz=1VOkW^8>qH!Eqx-i`cO<)SZGtRF+q7CgES#)=OWTIizBgeLBt)waWjH~q)vhU=g zrmz{V?>wmm+dmcE*;lI9v1x8}yx2YZ*R?~J@k4186ks*09A(98w*ODnmj}`5PnA;Q zRv!rFe~n82!@_A=agb8n`#L{;tN6^%6jF4;ZVx4z-ACP(u2u3ccljXHA`KPZE?4Xz zll@5LQtXnrYDEh^7dH~v{uBMG`htroHeMN+{2#|@{=O}UU$^m^GI`r}x} ze~Lbbh@homd3DaUqgO4MB~c`2@kb%0RQgLMT+JZz3BA9O$`WvDTltQiL6+3(8^L?12dt+Obcf41+ufD5j=>+Gu6vA9Xw5|1*{?rR{!Jw&Sj zq%BnMAJ8nQ`0rTv<(oU(CEA_>VRBm`W0g^% zP)s_f&$u_5-!7q*yQ1<5s12bZMt|1FRj8;O_wQeP*VMhMGR`AYUS9Irfca{(f9HK+ ztG1<`ty`1>x+NEbsQjtX3{Zb_>MmGTO)kmzf}WpiMe>oJu+|ch0O6-hzk{nKfZjHF zApopiY)IJyLm9sAJaw2L-jPKHBsOX2(NT#H1$F_MU^1DVj<>FibnHRBLsvie7l5na zi)kuJF~Yq`tx0}XTy?gB`h{(he_VlIukS|Y4l`-1a{Y@uzOCs|Sfj??T+Fg0?bOJ; zR>hop>FF=hR9A)x?;rLj2%KZ0`b*F46b$^Fpc_Z-izcrx09zJI1iRBS9(REWOp zi4Zp(=KW_FHf;I4?9!N`J{26fgghwVA(r=s%p4A9z4i8z>=z67gd2<}f0DQrgP1tj z7%PWV-{OLmy_f!o9!q^sNtW{k=PyEFGP5JHk!1la{-yA=y~u0Bw;@V5BGHMj@jpDt zc*ltVhI0ID2F&yoMVeRx!E!`@HCarl$%o+ySN+}iX1uUoNXkgIZf6c49dl?yFUU*T z#yIO;F3Wj8h$8L|n9ojwe+};uIAhlEowUjR8;)w^AcR@Q#xb)qtF+;5v#-6kQ81^{ zcXPVQ?VMb#jyt$>s9}k&5lx~6q;OA`CgnL*S%kj!*&Q=4!=YJkJmm$?T)MFnBOO>m z1kj+M-WZl36hvkQg@rA`MrZHkw5o=;Twh)dNjUCJWb6S8ZiXHse;*~CIo4{q4GAk+ z9g|b$hv{YPDEVeCRRPJc`=WC2hY_lxQJuySicG3QMc?6pYR((KNZ<|!cP9o*9hYH_ zF&|8}YTic8#X!JH^?{Il)H;{^pI+JEHjP;_@N0!N9|~cauR+7D{EA&xih{;Ew-1@t z$s+|clcF*|B7Z+9e>*XglMmbqi+{5QpABfT;9optByVjP=BJ^caOSxVrWu?5w)Y?x zy3AwvZ?jgXlWy6jrTgwWULe(kiphJPQQT8q$9l3ubY?rYIUK`B{;OCkrnhpS8kOQd ze|1~C@Ncs)s)(mSvu`8+fm>M{Q@=-Z@9ySckuZa{`O?F-e=W?y%8MnnS=yY5`Il4A z5|Y!1^Dc_=*Efr9$Jmz@GMX-@Ps2smqv;RH1lik~u^3rjogiH0FzQHAjgOji1M2 zv%_$wJ)sk&fi57v+jQVqG93_34gzr^;!h%K9z2$1FH$M-*VFW31O?QFGxRSmX&8;v zbmYI9>`=4|y~qbhOCLKrl$7;~KN){on)Pn0)_ySdf5WE(MlENtqIV)3S|!2C|4uvP zu+{t^H8|e{g?^Q|+4NU0RCO;XR3(*QTcsGTv+NqRs8+LCtPs*`c~a1tD#%UV^O%Qi zfkGablS3DgBI!EXiH@m0LmnTcsGIEAGg{NjV0-12T<7(kHlr4SuWwH2e+@U|Mhl8> zw&8yze}As}-ZZ_v!42T|hG$;S_l6~tVF1?e%O?^9KBI2$p9ibzQ$+^4I|Lj*AV5Uw zbvmd6j_Q`oDY4TR9MuE<=z{&4_Cr8vd`Ew`RoD10>!S!7GrC$Oc({Gs!|4$D$}=Qa zd;v=T&s%uPnnCqMJuF>KxRHB);TV|u!#Gr0e|cbZuQ?gnUgOr4?Ymd4H=RE8AZcuI z1Op(HUUC-J@%;Feh`B+IfW6O)(az>4>Sz;NraHc?ksbFCXPPQt4KFDMp=MDq;xY6M zTQnE2&;18z+~k0zG3~A7(iXK{y1yYc7^Cl@n#N;;7H=5g|6<$Dq+hvF0+Scy!@jUE zfA-_S?K~YaJgSD=){wTEqkwA%ouA zXEHpNSs`5_N?u!MbqNvQ9T;nLwV}yMU`6W2Z^PnO{uHP2GdH?(ix=OUT [--clean] + +Examples: + python3 migrate_database.py myapp myapp + python3 migrate_database.py oldname newname + python3 migrate_database.py prod_blinko prod_blinko --clean # Drop existing data first + +WARNING: Without --clean flag, pg_restore will attempt to restore objects. If objects already +exist, it may fail with errors or cause data conflicts (duplicate key violations, etc.). +Use --clean to drop existing objects before restoring (this will DELETE all existing data). +""" + +import subprocess +import sys +import argparse +import base64 +import tempfile +import os + + +# Configuration +SOURCE_POD = "prod-postgres-cluster-0" +SOURCE_NAMESPACE = "homelab" +SOURCE_CONTAINER = "prod-postgres-cluster" +SOURCE_DEFAULT_USER = "homelab" # Default user for old server + +DEST_POD = "postgres-statefulset-0" +DEST_NAMESPACE = "shared" +DEST_CONTAINER = "postgres" +DEST_DEFAULT_USER = "postgres" # Default user for new server + + +def run_kubectl_exec(pod, namespace, container, command, stdin=None, binary=False): + """Execute a command in a Kubernetes pod using kubectl exec.""" + cmd = [ + "kubectl", "exec", "-n", namespace, pod, + "-c", container, "--" + ] + command + + try: + if stdin: + result = subprocess.run( + cmd, + input=stdin, + capture_output=True, + text=not binary, + check=True + ) + else: + result = subprocess.run( + cmd, + capture_output=True, + text=not binary, + check=True + ) + return result.stdout, result.stderr + except subprocess.CalledProcessError as e: + print(f"Error executing command: {' '.join(cmd)}", file=sys.stderr) + print(f"Exit code: {e.returncode}", file=sys.stderr) + if not binary: + print(f"stdout: {e.stdout}", file=sys.stderr) + print(f"stderr: {e.stderr}", file=sys.stderr) + raise + + +def check_pod_exists(pod, namespace): + """Check if a pod exists and is running.""" + try: + result = subprocess.run( + ["kubectl", "get", "pod", pod, "-n", namespace], + capture_output=True, + text=True, + check=True + ) + # Check if pod is running + if "Running" in result.stdout: + return True + return False + except subprocess.CalledProcessError: + return False + + +def check_database_exists(pod, namespace, container, db_name, pg_user): + """Check if a database exists on a PostgreSQL server.""" + psql_cmd = [ + "psql", "-U", pg_user, "-tAc", + f"SELECT 1 FROM pg_database WHERE datname='{db_name}'" + ] + + try: + stdout, _ = run_kubectl_exec(pod, namespace, container, psql_cmd) + return stdout.strip() == "1" + except subprocess.CalledProcessError: + return False + + +def dump_database(pod, namespace, container, db_name, pg_user): + """Dump a database from the source server.""" + print(f"Dumping database '{db_name}' from source server...") + + # Use pg_dump with stdout to avoid file I/O issues + dump_cmd = [ + "pg_dump", + "-U", pg_user, + "-F", "c", # Custom format (compressed) + db_name + ] + + # Get the dump directly from stdout + dump_data, _ = run_kubectl_exec(pod, namespace, container, dump_cmd, binary=True) + + if not dump_data or len(dump_data) == 0: + raise RuntimeError(f"Failed to dump database '{db_name}': dump is empty") + + print(f"Successfully dumped database '{db_name}' ({len(dump_data)} bytes).") + + return dump_data # Return as bytes for binary data + + +def fix_database_permissions(pod, namespace, container, db_name, db_user, pg_user): + """Fix permissions for the database user after migration.""" + print(f"Fixing permissions for user '{db_user}' on database '{db_name}'...") + + # Get all schemas owned by the database user or that need permissions + fix_perms_cmd = [ + "psql", "-U", pg_user, "-d", db_name, "-tAc", + f""" + DO $$ + DECLARE + schema_rec RECORD; + BEGIN + -- Grant permissions on all schemas to the database user + FOR schema_rec IN + SELECT nspname + FROM pg_namespace + WHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast', 'pg_toast_temp_1') + LOOP + -- Grant usage and create on schema + EXECUTE format('GRANT USAGE ON SCHEMA %I TO %I', schema_rec.nspname, '{db_user}'); + EXECUTE format('GRANT CREATE ON SCHEMA %I TO %I', schema_rec.nspname, '{db_user}'); + + -- Grant privileges on all existing tables + EXECUTE format('GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA %I TO %I', schema_rec.nspname, '{db_user}'); + + -- Grant privileges on all existing sequences + EXECUTE format('GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA %I TO %I', schema_rec.nspname, '{db_user}'); + + -- Set default privileges for future objects + EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT ALL ON TABLES TO %I', schema_rec.nspname, '{db_user}'); + EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT ALL ON SEQUENCES TO %I', schema_rec.nspname, '{db_user}'); + + -- Change ownership to database user if schema is not system-owned + IF schema_rec.nspname != 'public' THEN + EXECUTE format('ALTER SCHEMA %I OWNER TO %I', schema_rec.nspname, '{db_user}'); + END IF; + END LOOP; + + -- Grant database connection privilege + EXECUTE format('GRANT CONNECT ON DATABASE %I TO %I', '{db_name}', '{db_user}'); + END $$; + """ + ] + + try: + run_kubectl_exec(pod, namespace, container, fix_perms_cmd) + print(f"Successfully fixed permissions for user '{db_user}'.") + except subprocess.CalledProcessError as e: + print(f"Warning: Could not fix all permissions automatically. You may need to fix them manually.", file=sys.stderr) + print(f"Error: {e.stderr}", file=sys.stderr) + + +def restore_database(pod, namespace, container, db_name, dump_data, pg_user, clean=False): + """Restore a database dump to the destination server.""" + print(f"Restoring database '{db_name}' to destination server...") + + # For large dumps, use kubectl cp instead of base64 encoding to avoid command line length limits + # Write dump to a temporary file locally, then copy it to the pod + with tempfile.NamedTemporaryFile(delete=False, suffix='.dump') as tmp_file: + tmp_path = tmp_file.name + tmp_file.write(dump_data) + + try: + # Copy dump file to pod using kubectl cp + print("Copying dump file to destination pod...") + cp_cmd = [ + "kubectl", "cp", tmp_path, + f"{namespace}/{pod}:/tmp/dump.dump", + "-c", container + ] + subprocess.run(cp_cmd, check=True, capture_output=True) + print("Dump file copied successfully.") + finally: + # Clean up local temporary file + try: + os.unlink(tmp_path) + except OSError: + pass + + # Restore the dump + restore_cmd = [ + "pg_restore", + "-U", pg_user, + "-d", db_name, + "-v", # Verbose + "--no-owner", # Don't restore ownership + "--no-acl", # Don't restore access privileges + ] + + # Add --clean flag if requested (drops existing objects before restoring) + if clean: + restore_cmd.append("--clean") + print("WARNING: Using --clean flag. This will drop all existing objects in the destination database!") + + restore_cmd.append("/tmp/dump.dump") + + try: + run_kubectl_exec(pod, namespace, container, restore_cmd) + print(f"Successfully restored database '{db_name}'.") + finally: + # Clean up remote dump file + rm_cmd = ["rm", "/tmp/dump.dump"] + try: + run_kubectl_exec(pod, namespace, container, rm_cmd) + except subprocess.CalledProcessError: + pass # Ignore cleanup errors + + +def main(): + parser = argparse.ArgumentParser( + description="Migrate PostgreSQL database between Kubernetes pods", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + %(prog)s myapp myapp + %(prog)s oldname newname + %(prog)s source_db dest_db + """ + ) + parser.add_argument( + "source_db", + help="Name of the source database (on old server: prod-postgres-cluster-0)" + ) + parser.add_argument( + "dest_db", + help="Name of the destination database (on new server: postgres-statefulset-0)" + ) + parser.add_argument( + "--source-user", + default=SOURCE_DEFAULT_USER, + help=f"PostgreSQL user for source server (default: {SOURCE_DEFAULT_USER})" + ) + parser.add_argument( + "--dest-user", + default=DEST_DEFAULT_USER, + help=f"PostgreSQL user for destination server (default: {DEST_DEFAULT_USER})" + ) + parser.add_argument( + "--clean", + action="store_true", + help="Drop existing objects before restoring (WARNING: This will delete all existing data in the destination database)" + ) + args = parser.parse_args() + + print("=" * 60) + print("PostgreSQL Database Migration Script") + print("=" * 60) + print(f"Source: {SOURCE_POD} ({SOURCE_NAMESPACE}) - Database: {args.source_db}") + print(f"Destination: {DEST_POD} ({DEST_NAMESPACE}) - Database: {args.dest_db}") + print("=" * 60) + print() + + # Check if pods exist and are running + print("Checking source pod...") + if not check_pod_exists(SOURCE_POD, SOURCE_NAMESPACE): + print(f"ERROR: Source pod '{SOURCE_POD}' not found or not running in namespace '{SOURCE_NAMESPACE}'", file=sys.stderr) + sys.exit(1) + print(f"✓ Source pod '{SOURCE_POD}' is running") + + print("Checking destination pod...") + if not check_pod_exists(DEST_POD, DEST_NAMESPACE): + print(f"ERROR: Destination pod '{DEST_POD}' not found or not running in namespace '{DEST_NAMESPACE}'", file=sys.stderr) + sys.exit(1) + print(f"✓ Destination pod '{DEST_POD}' is running") + print() + + # Check if source database exists + print(f"Checking if source database '{args.source_db}' exists...") + if not check_database_exists(SOURCE_POD, SOURCE_NAMESPACE, SOURCE_CONTAINER, args.source_db, args.source_user): + print(f"ERROR: Source database '{args.source_db}' does not exist", file=sys.stderr) + sys.exit(1) + print(f"✓ Source database '{args.source_db}' exists") + + # Check if destination database exists + print(f"Checking if destination database '{args.dest_db}' exists...") + if not check_database_exists(DEST_POD, DEST_NAMESPACE, DEST_CONTAINER, args.dest_db, args.dest_user): + print(f"ERROR: Destination database '{args.dest_db}' does not exist. Please create it first.", file=sys.stderr) + sys.exit(1) + print(f"✓ Destination database '{args.dest_db}' exists") + print() + + # Dump source database + dump_data = dump_database(SOURCE_POD, SOURCE_NAMESPACE, SOURCE_CONTAINER, args.source_db, args.source_user) + print() + + # Restore to destination database + restore_database(DEST_POD, DEST_NAMESPACE, DEST_CONTAINER, args.dest_db, dump_data, args.dest_user, clean=args.clean) + print() + + # Fix permissions for the database user (assuming db user name matches db name) + # This fixes schema ownership and permissions that were lost due to --no-owner and --no-acl + fix_database_permissions(DEST_POD, DEST_NAMESPACE, DEST_CONTAINER, args.dest_db, args.dest_db, args.dest_user) + print() + + print("=" * 60) + print("Migration completed successfully!") + print("=" * 60) + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + print("\n\nMigration interrupted by user.", file=sys.stderr) + sys.exit(1) + except Exception as e: + print(f"\n\nERROR: {e}", file=sys.stderr) + sys.exit(1)