diff --git a/dagger/maintenance/main.go b/dagger/maintenance/main.go index 508c722..ddd70c2 100644 --- a/dagger/maintenance/main.go +++ b/dagger/maintenance/main.go @@ -174,9 +174,16 @@ func (m *Maintenance) GenerateTestingValues( targetExtensionImage) } + // Sanitize the extension name for Kubernetes compatibility. + // Underscores are valid in extension metadata but prohibited in K8s + // object names, which must follow DNS subdomain conventions + // (RFC-1123). + k8sName := strings.ReplaceAll(metadata.Name, "_", "-") + // Build values.yaml content values := map[string]any{ "name": metadata.Name, + "k8s_name": k8sName, "sql_name": metadata.SQLName, "image_name": metadata.ImageName, "shared_preload_libraries": metadata.SharedPreloadLibraries, diff --git a/postgis/test/check-extension.yaml b/postgis/test/check-extension.yaml index 76706ed..c20b6ef 100644 --- a/postgis/test/check-extension.yaml +++ b/postgis/test/check-extension.yaml @@ -14,7 +14,7 @@ spec: - name: DB_URI valueFrom: secretKeyRef: - name: (join('-', [$values.name, 'app'])) + name: (join('-', [$values.k8s_name, 'app'])) key: uri image: alpine/psql:latest command: ['sh', '-c'] diff --git a/postgis/test/cluster-assert.yaml b/postgis/test/cluster-assert.yaml index aa22123..6f1446b 100644 --- a/postgis/test/cluster-assert.yaml +++ b/postgis/test/cluster-assert.yaml @@ -1,7 +1,7 @@ apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: - name: ($values.name) + name: ($values.k8s_name) status: readyInstances: 1 phase: Cluster in healthy state diff --git a/postgis/test/cluster.yaml b/postgis/test/cluster.yaml index 779b4a1..28f0594 100644 --- a/postgis/test/cluster.yaml +++ b/postgis/test/cluster.yaml @@ -1,7 +1,7 @@ apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: - name: ($values.name) + name: ($values.k8s_name) spec: imageName: ($values.pg_image) instances: 1 @@ -12,7 +12,7 @@ spec: postgresql: shared_preload_libraries: ($values.shared_preload_libraries) extensions: - - name: ($values.name) + - name: ($values.k8s_name) image: reference: ($values.extension_image) extension_control_path: ($values.extension_control_path) diff --git a/postgis/test/database-assert.yaml b/postgis/test/database-assert.yaml index ec2bf00..0eea6f0 100644 --- a/postgis/test/database-assert.yaml +++ b/postgis/test/database-assert.yaml @@ -1,7 +1,7 @@ apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: - name: (join('-', [$values.name, 'app'])) + name: (join('-', [$values.k8s_name, 'app'])) status: applied: true extensions: diff --git a/postgis/test/database.yaml b/postgis/test/database.yaml index d89343a..5144878 100644 --- a/postgis/test/database.yaml +++ b/postgis/test/database.yaml @@ -1,12 +1,12 @@ apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: - name: (join('-', [$values.name, 'app'])) + name: (join('-', [$values.k8s_name, 'app'])) spec: name: app owner: app cluster: - name: ($values.name) + name: ($values.k8s_name) extensions: - name: ($values.sql_name) version: ($values.version) diff --git a/templates/README.md.tmpl b/templates/README.md.tmpl index b2ee265..93740ab 100644 --- a/templates/README.md.tmpl +++ b/templates/README.md.tmpl @@ -29,7 +29,7 @@ your `Cluster` resource. For example: apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: - name: cluster-{{ .Name }} + name: cluster-{{ replaceAll .Name "_" "-" }} spec: imageName: ghcr.io/cloudnative-pg/postgresql:{{ .DefaultVersion }}-minimal-{{ .DefaultDistro }} instances: 1 @@ -39,7 +39,7 @@ spec: postgresql: extensions: - - name: {{ .Name }} + - name: {{ replaceAll .Name "_" "-" }} image: # renovate: suite={{ .DefaultDistro }}-pgdg depName={{ replaceAll .Package "%version%" (printf "%d" .DefaultVersion) }} reference: ghcr.io/cloudnative-pg/{{ .Name }}:1.0-{{ .DefaultVersion }}-{{ .DefaultDistro }} @@ -54,12 +54,12 @@ You can install `{{ .Name }}` in a specific database by creating or updating a apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: - name: cluster-{{ .Name }}-app + name: cluster-{{ replaceAll .Name "_" "-" }}-app spec: name: app owner: app cluster: - name: cluster-{{ .Name }} + name: cluster-{{ replaceAll .Name "_" "-" }} extensions: - name: {{ .Name }} # renovate: suite={{ .DefaultDistro }}-pgdg depName={{ replaceAll .Package "%version%" (printf "%d" .DefaultVersion) }} diff --git a/test/check-extension.yaml b/test/check-extension.yaml index d0f2241..ce15689 100644 --- a/test/check-extension.yaml +++ b/test/check-extension.yaml @@ -16,7 +16,7 @@ spec: - name: DB_URI valueFrom: secretKeyRef: - name: (join('-', [$values.name, 'app'])) + name: (join('-', [$values.k8s_name, 'app'])) key: uri image: alpine/psql:latest command: ['sh', '-c'] diff --git a/test/cluster-assert.yaml b/test/cluster-assert.yaml index aa22123..6f1446b 100644 --- a/test/cluster-assert.yaml +++ b/test/cluster-assert.yaml @@ -1,7 +1,7 @@ apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: - name: ($values.name) + name: ($values.k8s_name) status: readyInstances: 1 phase: Cluster in healthy state diff --git a/test/cluster.yaml b/test/cluster.yaml index 779b4a1..28f0594 100644 --- a/test/cluster.yaml +++ b/test/cluster.yaml @@ -1,7 +1,7 @@ apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: - name: ($values.name) + name: ($values.k8s_name) spec: imageName: ($values.pg_image) instances: 1 @@ -12,7 +12,7 @@ spec: postgresql: shared_preload_libraries: ($values.shared_preload_libraries) extensions: - - name: ($values.name) + - name: ($values.k8s_name) image: reference: ($values.extension_image) extension_control_path: ($values.extension_control_path) diff --git a/test/database-assert.yaml b/test/database-assert.yaml index dcc0f42..19892d5 100644 --- a/test/database-assert.yaml +++ b/test/database-assert.yaml @@ -1,7 +1,7 @@ apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: - name: (join('-', [$values.name, 'app'])) + name: (join('-', [$values.k8s_name, 'app'])) status: applied: true extensions: diff --git a/test/database.yaml b/test/database.yaml index fd61499..6586b71 100644 --- a/test/database.yaml +++ b/test/database.yaml @@ -1,12 +1,12 @@ apiVersion: postgresql.cnpg.io/v1 kind: Database metadata: - name: (join('-', [$values.name, 'app'])) + name: (join('-', [$values.k8s_name, 'app'])) spec: name: app owner: app cluster: - name: ($values.name) + name: ($values.k8s_name) extensions: - name: ($values.sql_name) version: ($values.version)