diff --git a/charts/cluster/test/database-management/01-database-parameters-assert.yaml b/charts/cluster/test/database-management/01-database-parameters-assert.yaml index e300a8bdce..b5987248af 100644 --- a/charts/cluster/test/database-management/01-database-parameters-assert.yaml +++ b/charts/cluster/test/database-management/01-database-parameters-assert.yaml @@ -42,7 +42,7 @@ spec: extensions: - name: pg_search ensure: absent - version: "0.15.21" + version: "0.19.11" schema: test-schema --- @@ -75,5 +75,5 @@ spec: extensions: - name: pg_search ensure: absent - version: "0.15.21" + version: "0.19.11" schema: test-schema diff --git a/charts/cluster/test/database-management/01-database-parameters.yaml b/charts/cluster/test/database-management/01-database-parameters.yaml index 71de78b369..6b5e2730a0 100644 --- a/charts/cluster/test/database-management/01-database-parameters.yaml +++ b/charts/cluster/test/database-management/01-database-parameters.yaml @@ -1,6 +1,7 @@ type: postgresql version: postgresql: "17" + paradedb: "0.19.11" cluster: instances: 1 @@ -33,7 +34,7 @@ databases: extensions: - name: pg_search ensure: absent - version: "0.15.21" + version: "0.19.11" schema: test-schema - name: test-db-builtin @@ -58,5 +59,5 @@ databases: extensions: - name: pg_search ensure: absent - version: "0.15.21" + version: "0.19.11" schema: test-schema diff --git a/charts/cluster/test/database-management/02-extension-upgrade-init-assert.yaml b/charts/cluster/test/database-management/02-extension-upgrade-init-assert.yaml new file mode 100644 index 0000000000..8042b3c641 --- /dev/null +++ b/charts/cluster/test/database-management/02-extension-upgrade-init-assert.yaml @@ -0,0 +1,25 @@ +apiVersion: postgresql.cnpg.io/v1 +kind: Cluster +metadata: + name: extension-upgrade-cluster +status: + readyInstances: 2 + phase: Cluster in healthy state +--- +apiVersion: postgresql.cnpg.io/v1 +kind: Database +metadata: + name: extension-upgrade-cluster-cluster +spec: + name: test-db-icu + cluster: + name: extension-upgrade-cluster + ensure: present + owner: test-owner + template: template1 + encoding: UTF8 + databaseReclaimPolicy: retain + extensions: + - name: pg_search + ensure: present + version: "0.19.10" diff --git a/charts/cluster/test/database-management/02-extension-upgrade-init.yaml b/charts/cluster/test/database-management/02-extension-upgrade-init.yaml new file mode 100644 index 0000000000..1304e5c3d3 --- /dev/null +++ b/charts/cluster/test/database-management/02-extension-upgrade-init.yaml @@ -0,0 +1,16 @@ +type: postgresql +version: + postgresql: "17" + paradedb: "0.19.10" + +cluster: + instances: 2 + +databases: + - name: test-db-icu + ensure: present + owner: test-owner + encoding: UTF8 + extensions: + - name: pg_search + ensure: present diff --git a/charts/cluster/test/database-management/03-paradedb_extension_check-assert.yaml b/charts/cluster/test/database-management/03-paradedb_extension_check-assert.yaml new file mode 100644 index 0000000000..f52779599c --- /dev/null +++ b/charts/cluster/test/database-management/03-paradedb_extension_check-assert.yaml @@ -0,0 +1,6 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: test-db-icu-version-check-before +status: + succeeded: 1 diff --git a/charts/cluster/test/database-management/03-paradedb_extension_check.yaml b/charts/cluster/test/database-management/03-paradedb_extension_check.yaml new file mode 100644 index 0000000000..4dec1d32fc --- /dev/null +++ b/charts/cluster/test/database-management/03-paradedb_extension_check.yaml @@ -0,0 +1,32 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: test-db-icu-version-check-before +spec: + template: + spec: + restartPolicy: OnFailure + containers: + - name: data-test + env: + - name: DB_URI + valueFrom: + secretKeyRef: + name: extension-upgrade-cluster-app + key: uri + image: alpine:3.19 + command: ['sh', '-c'] + args: + - | + apk --no-cache add postgresql-client + PG_SEARCH_VERSION=$(psql "$DB_URI" -t) <<-EOSQL + SELECT version FROM paradedb.version_info(); + EOSQL + echo $PG_SEARCH_VERSION + test "$PG_SEARCH_VERSION" = " 0.19.10" + + EXTVERSION=$(psql "$DB_URI" -t) <<-EOSQL + SELECT extversion FROM pg_extension WHERE extname = 'pg_search'; + EOSQL + echo $EXTVERSION + test "$EXTVERSION" = " 0.19.10" diff --git a/charts/cluster/test/database-management/04-extension-upgrade-post-assert.yaml b/charts/cluster/test/database-management/04-extension-upgrade-post-assert.yaml new file mode 100644 index 0000000000..25d84b7c01 --- /dev/null +++ b/charts/cluster/test/database-management/04-extension-upgrade-post-assert.yaml @@ -0,0 +1,25 @@ +apiVersion: postgresql.cnpg.io/v1 +kind: Cluster +metadata: + name: extension-upgrade-cluster +status: + readyInstances: 2 + phase: Cluster in healthy state +--- +apiVersion: postgresql.cnpg.io/v1 +kind: Database +metadata: + name: extension-upgrade-cluster-cluster +spec: + name: test-db-icu + cluster: + name: extension-upgrade-cluster + ensure: present + owner: test-owner + template: template1 + encoding: UTF8 + databaseReclaimPolicy: retain + extensions: + - name: pg_search + ensure: present + version: "0.19.11" diff --git a/charts/cluster/test/database-management/04-extension-upgrade-post.yaml b/charts/cluster/test/database-management/04-extension-upgrade-post.yaml new file mode 100644 index 0000000000..8516037b16 --- /dev/null +++ b/charts/cluster/test/database-management/04-extension-upgrade-post.yaml @@ -0,0 +1,16 @@ +type: postgresql +version: + postgresql: "17" + paradedb: "0.19.11" + +cluster: + instances: 2 + +databases: + - name: test-db-icu + ensure: present + owner: test-owner + encoding: UTF8 + extensions: + - name: pg_search + ensure: present diff --git a/charts/cluster/test/database-management/05-paradedb_extension_check-assert.yaml b/charts/cluster/test/database-management/05-paradedb_extension_check-assert.yaml new file mode 100644 index 0000000000..b75df162f3 --- /dev/null +++ b/charts/cluster/test/database-management/05-paradedb_extension_check-assert.yaml @@ -0,0 +1,6 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: test-db-icu-version-check-after +status: + succeeded: 1 diff --git a/charts/cluster/test/database-management/05-paradedb_extension_check.yaml b/charts/cluster/test/database-management/05-paradedb_extension_check.yaml new file mode 100644 index 0000000000..62e8095d09 --- /dev/null +++ b/charts/cluster/test/database-management/05-paradedb_extension_check.yaml @@ -0,0 +1,32 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: test-db-icu-version-check-after +spec: + template: + spec: + restartPolicy: OnFailure + containers: + - name: data-test + env: + - name: DB_URI + valueFrom: + secretKeyRef: + name: extension-upgrade-cluster-app + key: uri + image: alpine:3.19 + command: ['sh', '-c'] + args: + - | + apk --no-cache add postgresql-client + PG_SEARCH_VERSION=$(psql "$DB_URI" -t) <<-EOSQL + SELECT version FROM paradedb.version_info(); + EOSQL + echo $PG_SEARCH_VERSION + test "$PG_SEARCH_VERSION" = " 0.19.11" + + EXTVERSION=$(psql "$DB_URI" -t) <<-EOSQL + SELECT extversion FROM pg_extension WHERE extname = 'pg_search'; + EOSQL + echo $EXTVERSION + test "$EXTVERSION" = " 0.19.11" diff --git a/charts/cluster/test/database-management/chainsaw-test.yaml b/charts/cluster/test/database-management/chainsaw-test.yaml index fde0372a3e..c0426d45fc 100644 --- a/charts/cluster/test/database-management/chainsaw-test.yaml +++ b/charts/cluster/test/database-management/chainsaw-test.yaml @@ -24,8 +24,65 @@ spec: database-parameters ../../ - assert: file: ./01-database-parameters-assert.yaml + + - name: Provision a cluster with a database with the ParadeDB extension + try: + - script: + content: | + helm upgrade \ + --install \ + --namespace $NAMESPACE \ + --values ./02-extension-upgrade-init.yaml \ + --wait \ + extension-upgrade ../../ + - assert: + file: ./02-extension-upgrade-init-assert.yaml + catch: + - describe: + apiVersion: postgresql.cnpg.io/v1 + kind: Cluster + name: extension-upgrade-paradedb + - podLogs: + selector: cnpg.io/cluster=extension-upgrade-paradedb + - script: + content: | + echo "=== Cluster Status ===" + kubectl get cluster extension-upgrade-paradedb -n $NAMESPACE -o yaml | grep -A 50 "status:" + echo "=== Pod Status ===" + kubectl get pods -n $NAMESPACE -l cnpg.io/cluster=extension-upgrade-paradedb -o wide + echo "=== Pod Events ===" + kubectl get events -n $NAMESPACE --sort-by='.lastTimestamp' | tail -30 + + - name: Verify the ParadeDB extension version before upgrade + try: + - apply: + file: ./03-paradedb_extension_check.yaml + - assert: + file: ./03-paradedb_extension_check-assert.yaml + + - name: Upgrade the ParadeDB cluster and the extension + try: + - script: + content: | + helm upgrade \ + --install \ + --namespace $NAMESPACE \ + --values ./04-extension-upgrade-post.yaml \ + --wait \ + extension-upgrade ../../ + - assert: + file: ./04-extension-upgrade-post-assert.yaml + + - name: Verify the ParadeDB extension version after upgrade + try: + - apply: + file: ./05-paradedb_extension_check.yaml + - assert: + file: ./05-paradedb_extension_check-assert.yaml + - name: cleanup try: - script: content: | helm uninstall --namespace $NAMESPACE database-parameters + helm uninstall --namespace $NAMESPACE extension-upgrade diff --git a/charts/cluster/values.yaml b/charts/cluster/values.yaml index 964ef2934e..95ff3292ff 100644 --- a/charts/cluster/values.yaml +++ b/charts/cluster/values.yaml @@ -577,7 +577,7 @@ databases: [] # extensions: [] # -- List of extensions to be created in the database. # # - name: pg_search # # ensure: present # -- Ensure the PostgreSQL extension is present or absent - defaults to "present". - # # version: "0.15.21" # -- Version of the extension to be installed, if not specified the latest version will be used. + # # version: "0.19.11" # -- Version of the extension to be installed, if not specified the latest version will be used. # # schema: "" # -- Schema where the extension will be installed, if not specified the extensions or current default object creation schema will be used. # isTemplate: false # -- Maps to the IS_TEMPLATE parameter. If true, the database is considered a template for new databases. # locale: "" # -- Maps to the LC_COLLATE and LC_CTYPE parameters diff --git a/charts/paradedb/test/database-management/chainsaw-test.yaml b/charts/paradedb/test/database-management/chainsaw-test.yaml new file mode 100644 index 0000000000..d194d289b3 --- /dev/null +++ b/charts/paradedb/test/database-management/chainsaw-test.yaml @@ -0,0 +1,88 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: database-management +spec: + timeouts: + apply: 1s + assert: 300s + cleanup: 60s + steps: + - name: database-parameters + timeouts: + apply: 1s + assert: 5s + cleanup: 30s + try: + - script: + content: | + helm upgrade \ + --install \ + --namespace $NAMESPACE \ + --values ./01-database-parameters.yaml \ + --wait \ + database-parameters ../../ + - assert: + file: ./01-database-parameters-assert.yaml + + - name: Provision a cluster with a database with the pg_search extension + try: + - script: + content: | + helm upgrade \ + --install \ + --namespace $NAMESPACE \ + --values ./02-extension-upgrade-init.yaml \ + --wait \ + extension-upgrade ../../ + - assert: + file: ./02-extension-upgrade-init-assert.yaml + catch: + - describe: + apiVersion: postgresql.cnpg.io/v1 + kind: Cluster + name: extension-upgrade-cluster + - podLogs: + selector: cnpg.io/cluster=extension-upgrade-cluster + - script: + content: | + echo "=== Cluster Status ===" + kubectl get cluster extension-upgrade-cluster -n $NAMESPACE -o yaml | grep -A 50 "status:" + echo "=== Pod Status ===" + kubectl get pods -n $NAMESPACE -l cnpg.io/cluster=extension-upgrade-cluster -o wide + echo "=== Pod Events ===" + kubectl get events -n $NAMESPACE --sort-by='.lastTimestamp' | tail -30 + + - name: Verify the ParadeDB extension version before upgrade + try: + - apply: + file: ./03-cluster_extension_check.yaml + - assert: + file: ./03-cluster_extension_check-assert.yaml + + - name: Upgrade the ParadeDB cluster and the extension + try: + - script: + content: | + helm upgrade \ + --install \ + --namespace $NAMESPACE \ + --values ./04-extension-upgrade-post.yaml \ + --wait \ + extension-upgrade ../../ + - assert: + file: ./04-extension-upgrade-post-assert.yaml + + - name: Verify the ParadeDB extension version after upgrade + try: + - apply: + file: ./05-cluster_extension_check.yaml + - assert: + file: ./05-cluster_extension_check-assert.yaml + + - name: cleanup + try: + - script: + content: | + helm uninstall --namespace $NAMESPACE database-parameters + helm uninstall --namespace $NAMESPACE extension-upgrade