From a0b3bccbc67ea2262a9c1998494f760ec5ac802b Mon Sep 17 00:00:00 2001 From: Debian Date: Fri, 29 May 2026 15:41:20 +0200 Subject: [PATCH] =?UTF-8?q?fix(cluster):=20ha=5Fnodes=20INET-Spalten=20?= =?UTF-8?q?=E2=86=92=20TEXT=20=E2=80=94=20pgx-Scan-Fehler=20OID=20869?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pgx kann INET-Typen (OID 869) nicht direkt in *string scannen. Migration 0028 konvertiert public_ip, internal_ip, mgmt_ip auf TEXT (USING ip::TEXT erhält bestehende Werte). Basis-Migrationen 0002 + 0020 auf TEXT umgestellt damit frische Installs keine INET anlegen. Co-Authored-By: Claude Sonnet 4.6 --- VERSION | 2 +- cmd/edgeguard-api/main.go | 2 +- cmd/edgeguard-ctl/main.go | 2 +- cmd/edgeguard-scheduler/main.go | 2 +- internal/database/migrations/0002_cluster.sql | 4 ++-- .../database/migrations/0020_ha_nodes_ext.sql | 4 ++-- .../migrations/0028_ha_nodes_ip_text.sql | 20 +++++++++++++++++++ 7 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 internal/database/migrations/0028_ha_nodes_ip_text.sql diff --git a/VERSION b/VERSION index b59e8c3..2053fc9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.146 +1.1.147 diff --git a/cmd/edgeguard-api/main.go b/cmd/edgeguard-api/main.go index 2955841..022cee6 100644 --- a/cmd/edgeguard-api/main.go +++ b/cmd/edgeguard-api/main.go @@ -60,7 +60,7 @@ import ( usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users" ) -var version = "1.1.146" +var version = "1.1.147" func main() { addr := os.Getenv("EDGEGUARD_API_ADDR") diff --git a/cmd/edgeguard-ctl/main.go b/cmd/edgeguard-ctl/main.go index d81a8ec..55c9a86 100644 --- a/cmd/edgeguard-ctl/main.go +++ b/cmd/edgeguard-ctl/main.go @@ -11,7 +11,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/setup" ) -var version = "1.1.146" +var version = "1.1.147" const usage = `edgeguard-ctl — EdgeGuard CLI diff --git a/cmd/edgeguard-scheduler/main.go b/cmd/edgeguard-scheduler/main.go index a32a22e..44d0392 100644 --- a/cmd/edgeguard-scheduler/main.go +++ b/cmd/edgeguard-scheduler/main.go @@ -41,7 +41,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts" ) -var version = "1.1.146" +var version = "1.1.147" const ( // renewTickInterval — how often we re-evaluate expiring certs. diff --git a/internal/database/migrations/0002_cluster.sql b/internal/database/migrations/0002_cluster.sql index af05b34..e21355e 100644 --- a/internal/database/migrations/0002_cluster.sql +++ b/internal/database/migrations/0002_cluster.sql @@ -15,8 +15,8 @@ CREATE TABLE IF NOT EXISTS ha_nodes ( name TEXT NOT NULL, fqdn TEXT NOT NULL, api_url TEXT NOT NULL, - public_ip INET, - internal_ip INET, + public_ip TEXT, + internal_ip TEXT, role TEXT NOT NULL DEFAULT 'peer', last_seen TIMESTAMPTZ, joined_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), diff --git a/internal/database/migrations/0020_ha_nodes_ext.sql b/internal/database/migrations/0020_ha_nodes_ext.sql index 75980e5..e18d29a 100644 --- a/internal/database/migrations/0020_ha_nodes_ext.sql +++ b/internal/database/migrations/0020_ha_nodes_ext.sql @@ -14,7 +14,7 @@ ALTER TABLE ha_nodes ADD COLUMN IF NOT EXISTS version TEXT, ADD COLUMN IF NOT EXISTS config_hash TEXT, - ADD COLUMN IF NOT EXISTS mgmt_ip INET, + ADD COLUMN IF NOT EXISTS mgmt_ip TEXT, ADD COLUMN IF NOT EXISTS status TEXT NOT NULL DEFAULT 'unknown'; ALTER TABLE ha_nodes @@ -33,7 +33,7 @@ ALTER TABLE ha_nodes DROP CONSTRAINT IF EXISTS ha_nodes_status_check; ALTER TABLE ha_nodes DROP COLUMN IF EXISTS status, - DROP COLUMN IF EXISTS mgmt_ip, + DROP COLUMN IF EXISTS mgmt_ip, -- TEXT DROP COLUMN IF EXISTS config_hash, DROP COLUMN IF EXISTS version; -- +goose StatementEnd diff --git a/internal/database/migrations/0028_ha_nodes_ip_text.sql b/internal/database/migrations/0028_ha_nodes_ip_text.sql new file mode 100644 index 0000000..b7b9d50 --- /dev/null +++ b/internal/database/migrations/0028_ha_nodes_ip_text.sql @@ -0,0 +1,20 @@ +-- +goose Up +-- +goose StatementBegin + +-- pgx scannt INET-Spalten nicht direkt in *string (OID 869-Fehler). +-- Go-Modell speichert IPs als string — TEXT ist hier korrekt. +-- Bestehende Werte bleiben erhalten (USING public_ip::TEXT). +ALTER TABLE ha_nodes + ALTER COLUMN public_ip TYPE TEXT USING public_ip::TEXT, + ALTER COLUMN internal_ip TYPE TEXT USING internal_ip::TEXT, + ALTER COLUMN mgmt_ip TYPE TEXT USING mgmt_ip::TEXT; + +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +ALTER TABLE ha_nodes + ALTER COLUMN public_ip TYPE INET USING public_ip::INET, + ALTER COLUMN internal_ip TYPE INET USING internal_ip::INET, + ALTER COLUMN mgmt_ip TYPE INET USING mgmt_ip::INET; +-- +goose StatementEnd