From 06ec5e93e3594f33d0f6bc22ed16ee2673bae8b9 Mon Sep 17 00:00:00 2001 From: Andrii Dema Date: Wed, 16 Jul 2025 18:21:50 +0300 Subject: [PATCH 1/3] K8SPG-724: fix extension reinstall https://perconadev.atlassian.net/browse/K8SPG-724 --- build/postgres-operator/install-extensions.sh | 26 +++--- .../custom-extensions/02-install-pg_cron.yaml | 2 +- .../tests/custom-extensions/06-assert.yaml | 4 +- .../custom-extensions/06-update-pg_cron.yaml | 14 +++ .../tests/custom-extensions/07-assert.yaml | 28 ++++++ .../custom-extensions/07-restart-cluster.yaml | 2 +- .../tests/custom-extensions/08-assert.yaml | 3 +- .../08-check-extensions.yaml | 2 +- .../tests/custom-extensions/09-assert.yaml | 87 +++++++++++++++++-- ...pg_cron.yaml => 09-uninstall-pg_cron.yaml} | 0 .../tests/custom-extensions/10-assert.yaml | 52 +++++++++++ ...t-cluster.yaml => 10-restart-cluster.yaml} | 2 +- .../tests/custom-extensions/11-assert.yaml | 12 +++ .../11-check-extensions.yaml | 13 +++ .../tests/custom-extensions/12-assert.yaml | 13 +++ ...aml => 12-check-installed-extensions.yaml} | 2 +- 16 files changed, 231 insertions(+), 31 deletions(-) create mode 100644 e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml rename e2e-tests/tests/custom-extensions/{06-uninstall-pg_cron.yaml => 09-uninstall-pg_cron.yaml} (100%) create mode 100644 e2e-tests/tests/custom-extensions/10-assert.yaml rename e2e-tests/tests/custom-extensions/{05-restart-cluster.yaml => 10-restart-cluster.yaml} (97%) create mode 100644 e2e-tests/tests/custom-extensions/11-assert.yaml create mode 100644 e2e-tests/tests/custom-extensions/11-check-extensions.yaml create mode 100644 e2e-tests/tests/custom-extensions/12-assert.yaml rename e2e-tests/tests/custom-extensions/{09-check-installed-extensions.yaml => 12-check-installed-extensions.yaml} (88%) diff --git a/build/postgres-operator/install-extensions.sh b/build/postgres-operator/install-extensions.sh index 6a8555bd78..3424a494dc 100755 --- a/build/postgres-operator/install-extensions.sh +++ b/build/postgres-operator/install-extensions.sh @@ -16,19 +16,6 @@ if [[ -n $STORAGE_ENDPOINT ]]; then args+=(-endpoint "$STORAGE_ENDPOINT") fi -for key in "${extensions[@]}"; do - if [ -f "${PGDATA_EXTENSIONS}"/"${key}".installed ]; then - echo "Extension ${key} already installed" - continue - fi - - echo "Installing extension: ${key}" - /usr/local/bin/extension-installer \ - "${args[@]}" \ - -key "${key}" \ - -install -done - for installed in "${PGDATA_EXTENSIONS}"/*.installed; do filename=$(basename -- "${installed}") key=${filename%.*} @@ -45,3 +32,16 @@ for installed in "${PGDATA_EXTENSIONS}"/*.installed; do rm -f "${installed}" fi done + +for key in "${extensions[@]}"; do + if [ -f "${PGDATA_EXTENSIONS}"/"${key}".installed ]; then + echo "Extension ${key} already installed" + continue + fi + + echo "Installing extension: ${key}" + /usr/local/bin/extension-installer \ + "${args[@]}" \ + -key "${key}" \ + -install +done diff --git a/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml b/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml index dbe9380235..7d51929101 100644 --- a/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml +++ b/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml @@ -11,4 +11,4 @@ spec: dynamicConfiguration: postgresql: parameters: - shared_preload_libraries: pg_cron \ No newline at end of file + shared_preload_libraries: pg_cron diff --git a/e2e-tests/tests/custom-extensions/06-assert.yaml b/e2e-tests/tests/custom-extensions/06-assert.yaml index c8b4226623..4a86a66c94 100644 --- a/e2e-tests/tests/custom-extensions/06-assert.yaml +++ b/e2e-tests/tests/custom-extensions/06-assert.yaml @@ -22,8 +22,6 @@ spec: - name: postgres-startup - command: - /usr/local/bin/relocate-extensions.sh - env: - - name: PG_VERSION resources: {} volumeMounts: - mountPath: /pgdata @@ -58,7 +56,7 @@ spec: - /usr/local/bin/init-entrypoint.sh - name: nss-wrapper-init status: - observedGeneration: 3 + observedGeneration: 2 replicas: 1 updatedReplicas: 1 readyReplicas: 1 diff --git a/e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml b/e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml new file mode 100644 index 0000000000..f9092e2cdd --- /dev/null +++ b/e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml @@ -0,0 +1,14 @@ +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: custom-extensions +spec: + extensions: + custom: + - name: pg_cron + version: 1.6.4 + patroni: + dynamicConfiguration: + postgresql: + parameters: + shared_preload_libraries: pg_cron diff --git a/e2e-tests/tests/custom-extensions/07-assert.yaml b/e2e-tests/tests/custom-extensions/07-assert.yaml index 9918171314..336e5cdc41 100644 --- a/e2e-tests/tests/custom-extensions/07-assert.yaml +++ b/e2e-tests/tests/custom-extensions/07-assert.yaml @@ -22,8 +22,36 @@ spec: - name: postgres-startup - command: - /usr/local/bin/relocate-extensions.sh + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - mountPath: /tmp + name: tmp - command: - /usr/local/bin/install-extensions.sh + env: + - name: STORAGE_TYPE + value: s3 + - name: STORAGE_ENDPOINT + - name: STORAGE_REGION + value: eu-central-1 + - name: STORAGE_BUCKET + value: pg-extensions + - name: INSTALL_EXTENSIONS + - name: PG_VERSION + - name: PGDATA_EXTENSIONS + envFrom: + - secretRef: + name: aws-s3-secret + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - name: postgres-data + - name: postgres-data + - mountPath: /tmp + name: tmp - command: - /usr/local/bin/init-entrypoint.sh - name: nss-wrapper-init diff --git a/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml b/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml index ee2af7ff4b..eaf6524770 100644 --- a/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml +++ b/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml @@ -6,7 +6,7 @@ commands: set -o xtrace source ../../functions - + wait_cluster_consistency custom-extensions restart_pg_pods custom-extensions instance1 diff --git a/e2e-tests/tests/custom-extensions/08-assert.yaml b/e2e-tests/tests/custom-extensions/08-assert.yaml index 248fb9f19e..65bed721df 100644 --- a/e2e-tests/tests/custom-extensions/08-assert.yaml +++ b/e2e-tests/tests/custom-extensions/08-assert.yaml @@ -5,8 +5,9 @@ timeout: 30 kind: ConfigMap apiVersion: v1 metadata: - name: 10-check-extensions + name: 08-check-extensions data: data: |2- + pg_cron pg_stat_monitor pgaudit diff --git a/e2e-tests/tests/custom-extensions/08-check-extensions.yaml b/e2e-tests/tests/custom-extensions/08-check-extensions.yaml index dbfbafdf5e..f0936c2af2 100644 --- a/e2e-tests/tests/custom-extensions/08-check-extensions.yaml +++ b/e2e-tests/tests/custom-extensions/08-check-extensions.yaml @@ -10,4 +10,4 @@ commands: data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select name from pg_available_extensions where name in ('pg_cron','pg_stat_monitor','pgaudit') order by name") - kubectl create configmap -n "${NAMESPACE}" 10-check-extensions --from-literal=data="${data}" + kubectl create configmap -n "${NAMESPACE}" 08-check-extensions --from-literal=data="${data}" diff --git a/e2e-tests/tests/custom-extensions/09-assert.yaml b/e2e-tests/tests/custom-extensions/09-assert.yaml index 1217de376b..56ab89ac1c 100644 --- a/e2e-tests/tests/custom-extensions/09-assert.yaml +++ b/e2e-tests/tests/custom-extensions/09-assert.yaml @@ -1,13 +1,82 @@ apiVersion: kuttl.dev/v1beta1 kind: TestAssert -timeout: 30 +timeout: 300 --- -kind: ConfigMap -apiVersion: v1 +kind: StatefulSet +apiVersion: apps/v1 metadata: - name: 11-check-extensions -data: - data: |2- - pg_stat_monitor - pgaudit - plpgsql + labels: + postgres-operator.crunchydata.com/cluster: custom-extensions + postgres-operator.crunchydata.com/data: postgres + postgres-operator.crunchydata.com/instance-set: instance1 + ownerReferences: + - apiVersion: postgres-operator.crunchydata.com/v1beta1 + kind: PostgresCluster + name: custom-extensions + controller: true + blockOwnerDeletion: true +spec: + template: + spec: + initContainers: + - name: postgres-startup + - command: + - /usr/local/bin/relocate-extensions.sh + env: + - name: PG_VERSION + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - mountPath: /tmp + name: tmp + - command: + - /usr/local/bin/install-extensions.sh + env: + - name: STORAGE_TYPE + value: s3 + - name: STORAGE_ENDPOINT + - name: STORAGE_REGION + value: eu-central-1 + - name: STORAGE_BUCKET + value: pg-extensions + - name: INSTALL_EXTENSIONS + - name: PG_VERSION + - name: PGDATA_EXTENSIONS + envFrom: + - secretRef: + name: aws-s3-secret + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - name: postgres-data + - name: postgres-data + - mountPath: /tmp + name: tmp + - command: + - /usr/local/bin/init-entrypoint.sh + - name: nss-wrapper-init +status: + observedGeneration: 4 + replicas: 1 + updatedReplicas: 1 + readyReplicas: 1 + availableReplicas: 1 +--- +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: custom-extensions +status: + pgbouncer: + ready: 3 + size: 3 + postgres: + instances: + - name: instance1 + ready: 3 + size: 3 + ready: 3 + size: 3 + state: ready diff --git a/e2e-tests/tests/custom-extensions/06-uninstall-pg_cron.yaml b/e2e-tests/tests/custom-extensions/09-uninstall-pg_cron.yaml similarity index 100% rename from e2e-tests/tests/custom-extensions/06-uninstall-pg_cron.yaml rename to e2e-tests/tests/custom-extensions/09-uninstall-pg_cron.yaml diff --git a/e2e-tests/tests/custom-extensions/10-assert.yaml b/e2e-tests/tests/custom-extensions/10-assert.yaml new file mode 100644 index 0000000000..8b2d637b29 --- /dev/null +++ b/e2e-tests/tests/custom-extensions/10-assert.yaml @@ -0,0 +1,52 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 120 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + labels: + postgres-operator.crunchydata.com/cluster: custom-extensions + postgres-operator.crunchydata.com/data: postgres + postgres-operator.crunchydata.com/instance-set: instance1 + ownerReferences: + - apiVersion: postgres-operator.crunchydata.com/v1beta1 + kind: PostgresCluster + name: custom-extensions + controller: true + blockOwnerDeletion: true +spec: + template: + spec: + initContainers: + - name: postgres-startup + - command: + - /usr/local/bin/relocate-extensions.sh + - command: + - /usr/local/bin/install-extensions.sh + - command: + - /usr/local/bin/init-entrypoint.sh + - name: nss-wrapper-init +status: + observedGeneration: 4 + replicas: 1 + updatedReplicas: 1 + readyReplicas: 1 + availableReplicas: 1 +--- +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: custom-extensions +status: + pgbouncer: + ready: 3 + size: 3 + postgres: + instances: + - name: instance1 + ready: 3 + size: 3 + ready: 3 + size: 3 + state: ready diff --git a/e2e-tests/tests/custom-extensions/05-restart-cluster.yaml b/e2e-tests/tests/custom-extensions/10-restart-cluster.yaml similarity index 97% rename from e2e-tests/tests/custom-extensions/05-restart-cluster.yaml rename to e2e-tests/tests/custom-extensions/10-restart-cluster.yaml index eaf6524770..ee2af7ff4b 100644 --- a/e2e-tests/tests/custom-extensions/05-restart-cluster.yaml +++ b/e2e-tests/tests/custom-extensions/10-restart-cluster.yaml @@ -6,7 +6,7 @@ commands: set -o xtrace source ../../functions - + wait_cluster_consistency custom-extensions restart_pg_pods custom-extensions instance1 diff --git a/e2e-tests/tests/custom-extensions/11-assert.yaml b/e2e-tests/tests/custom-extensions/11-assert.yaml new file mode 100644 index 0000000000..edd94c0f88 --- /dev/null +++ b/e2e-tests/tests/custom-extensions/11-assert.yaml @@ -0,0 +1,12 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 30 +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: 11-check-extensions +data: + data: |2- + pg_stat_monitor + pgaudit diff --git a/e2e-tests/tests/custom-extensions/11-check-extensions.yaml b/e2e-tests/tests/custom-extensions/11-check-extensions.yaml new file mode 100644 index 0000000000..4d2e9af12a --- /dev/null +++ b/e2e-tests/tests/custom-extensions/11-check-extensions.yaml @@ -0,0 +1,13 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +timeout: 30 +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select name from pg_available_extensions where name in ('pg_cron','pg_stat_monitor','pgaudit') order by name") + + kubectl create configmap -n "${NAMESPACE}" 11-check-extensions --from-literal=data="${data}" diff --git a/e2e-tests/tests/custom-extensions/12-assert.yaml b/e2e-tests/tests/custom-extensions/12-assert.yaml new file mode 100644 index 0000000000..a90c0ad747 --- /dev/null +++ b/e2e-tests/tests/custom-extensions/12-assert.yaml @@ -0,0 +1,13 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 30 +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: 12-check-extensions +data: + data: |2- + pg_stat_monitor + pgaudit + plpgsql diff --git a/e2e-tests/tests/custom-extensions/09-check-installed-extensions.yaml b/e2e-tests/tests/custom-extensions/12-check-installed-extensions.yaml similarity index 88% rename from e2e-tests/tests/custom-extensions/09-check-installed-extensions.yaml rename to e2e-tests/tests/custom-extensions/12-check-installed-extensions.yaml index fa5607a324..8e463d87b3 100644 --- a/e2e-tests/tests/custom-extensions/09-check-installed-extensions.yaml +++ b/e2e-tests/tests/custom-extensions/12-check-installed-extensions.yaml @@ -10,4 +10,4 @@ commands: data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select extname from pg_extension order by extname") - kubectl create configmap -n "${NAMESPACE}" 11-check-extensions --from-literal=data="${data}" + kubectl create configmap -n "${NAMESPACE}" 12-check-extensions --from-literal=data="${data}" From 9b7f7b8de22db2e894ccc1a37f13611e414f9279 Mon Sep 17 00:00:00 2001 From: Andrii Dema Date: Tue, 22 Jul 2025 10:00:43 +0300 Subject: [PATCH 2/3] revert test changes --- .../custom-extensions/02-install-pg_cron.yaml | 2 +- ...t-cluster.yaml => 05-restart-cluster.yaml} | 2 +- .../tests/custom-extensions/06-assert.yaml | 4 +- ...pg_cron.yaml => 06-uninstall-pg_cron.yaml} | 0 .../custom-extensions/06-update-pg_cron.yaml | 14 --- .../tests/custom-extensions/07-assert.yaml | 28 ------ .../custom-extensions/07-restart-cluster.yaml | 2 +- .../tests/custom-extensions/08-assert.yaml | 3 +- .../08-check-extensions.yaml | 2 +- .../tests/custom-extensions/09-assert.yaml | 87 ++----------------- ...aml => 09-check-installed-extensions.yaml} | 2 +- .../tests/custom-extensions/10-assert.yaml | 52 ----------- .../tests/custom-extensions/11-assert.yaml | 12 --- .../11-check-extensions.yaml | 13 --- .../tests/custom-extensions/12-assert.yaml | 13 --- 15 files changed, 18 insertions(+), 218 deletions(-) rename e2e-tests/tests/custom-extensions/{10-restart-cluster.yaml => 05-restart-cluster.yaml} (97%) rename e2e-tests/tests/custom-extensions/{09-uninstall-pg_cron.yaml => 06-uninstall-pg_cron.yaml} (100%) delete mode 100644 e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml rename e2e-tests/tests/custom-extensions/{12-check-installed-extensions.yaml => 09-check-installed-extensions.yaml} (88%) delete mode 100644 e2e-tests/tests/custom-extensions/10-assert.yaml delete mode 100644 e2e-tests/tests/custom-extensions/11-assert.yaml delete mode 100644 e2e-tests/tests/custom-extensions/11-check-extensions.yaml delete mode 100644 e2e-tests/tests/custom-extensions/12-assert.yaml diff --git a/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml b/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml index 7d51929101..dbe9380235 100644 --- a/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml +++ b/e2e-tests/tests/custom-extensions/02-install-pg_cron.yaml @@ -11,4 +11,4 @@ spec: dynamicConfiguration: postgresql: parameters: - shared_preload_libraries: pg_cron + shared_preload_libraries: pg_cron \ No newline at end of file diff --git a/e2e-tests/tests/custom-extensions/10-restart-cluster.yaml b/e2e-tests/tests/custom-extensions/05-restart-cluster.yaml similarity index 97% rename from e2e-tests/tests/custom-extensions/10-restart-cluster.yaml rename to e2e-tests/tests/custom-extensions/05-restart-cluster.yaml index ee2af7ff4b..eaf6524770 100644 --- a/e2e-tests/tests/custom-extensions/10-restart-cluster.yaml +++ b/e2e-tests/tests/custom-extensions/05-restart-cluster.yaml @@ -6,7 +6,7 @@ commands: set -o xtrace source ../../functions - + wait_cluster_consistency custom-extensions restart_pg_pods custom-extensions instance1 diff --git a/e2e-tests/tests/custom-extensions/06-assert.yaml b/e2e-tests/tests/custom-extensions/06-assert.yaml index 4a86a66c94..c8b4226623 100644 --- a/e2e-tests/tests/custom-extensions/06-assert.yaml +++ b/e2e-tests/tests/custom-extensions/06-assert.yaml @@ -22,6 +22,8 @@ spec: - name: postgres-startup - command: - /usr/local/bin/relocate-extensions.sh + env: + - name: PG_VERSION resources: {} volumeMounts: - mountPath: /pgdata @@ -56,7 +58,7 @@ spec: - /usr/local/bin/init-entrypoint.sh - name: nss-wrapper-init status: - observedGeneration: 2 + observedGeneration: 3 replicas: 1 updatedReplicas: 1 readyReplicas: 1 diff --git a/e2e-tests/tests/custom-extensions/09-uninstall-pg_cron.yaml b/e2e-tests/tests/custom-extensions/06-uninstall-pg_cron.yaml similarity index 100% rename from e2e-tests/tests/custom-extensions/09-uninstall-pg_cron.yaml rename to e2e-tests/tests/custom-extensions/06-uninstall-pg_cron.yaml diff --git a/e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml b/e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml deleted file mode 100644 index f9092e2cdd..0000000000 --- a/e2e-tests/tests/custom-extensions/06-update-pg_cron.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: pgv2.percona.com/v2 -kind: PerconaPGCluster -metadata: - name: custom-extensions -spec: - extensions: - custom: - - name: pg_cron - version: 1.6.4 - patroni: - dynamicConfiguration: - postgresql: - parameters: - shared_preload_libraries: pg_cron diff --git a/e2e-tests/tests/custom-extensions/07-assert.yaml b/e2e-tests/tests/custom-extensions/07-assert.yaml index 336e5cdc41..9918171314 100644 --- a/e2e-tests/tests/custom-extensions/07-assert.yaml +++ b/e2e-tests/tests/custom-extensions/07-assert.yaml @@ -22,36 +22,8 @@ spec: - name: postgres-startup - command: - /usr/local/bin/relocate-extensions.sh - resources: {} - volumeMounts: - - mountPath: /pgdata - name: postgres-data - - mountPath: /tmp - name: tmp - command: - /usr/local/bin/install-extensions.sh - env: - - name: STORAGE_TYPE - value: s3 - - name: STORAGE_ENDPOINT - - name: STORAGE_REGION - value: eu-central-1 - - name: STORAGE_BUCKET - value: pg-extensions - - name: INSTALL_EXTENSIONS - - name: PG_VERSION - - name: PGDATA_EXTENSIONS - envFrom: - - secretRef: - name: aws-s3-secret - resources: {} - volumeMounts: - - mountPath: /pgdata - name: postgres-data - - name: postgres-data - - name: postgres-data - - mountPath: /tmp - name: tmp - command: - /usr/local/bin/init-entrypoint.sh - name: nss-wrapper-init diff --git a/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml b/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml index eaf6524770..ee2af7ff4b 100644 --- a/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml +++ b/e2e-tests/tests/custom-extensions/07-restart-cluster.yaml @@ -6,7 +6,7 @@ commands: set -o xtrace source ../../functions - + wait_cluster_consistency custom-extensions restart_pg_pods custom-extensions instance1 diff --git a/e2e-tests/tests/custom-extensions/08-assert.yaml b/e2e-tests/tests/custom-extensions/08-assert.yaml index 65bed721df..248fb9f19e 100644 --- a/e2e-tests/tests/custom-extensions/08-assert.yaml +++ b/e2e-tests/tests/custom-extensions/08-assert.yaml @@ -5,9 +5,8 @@ timeout: 30 kind: ConfigMap apiVersion: v1 metadata: - name: 08-check-extensions + name: 10-check-extensions data: data: |2- - pg_cron pg_stat_monitor pgaudit diff --git a/e2e-tests/tests/custom-extensions/08-check-extensions.yaml b/e2e-tests/tests/custom-extensions/08-check-extensions.yaml index f0936c2af2..dbfbafdf5e 100644 --- a/e2e-tests/tests/custom-extensions/08-check-extensions.yaml +++ b/e2e-tests/tests/custom-extensions/08-check-extensions.yaml @@ -10,4 +10,4 @@ commands: data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select name from pg_available_extensions where name in ('pg_cron','pg_stat_monitor','pgaudit') order by name") - kubectl create configmap -n "${NAMESPACE}" 08-check-extensions --from-literal=data="${data}" + kubectl create configmap -n "${NAMESPACE}" 10-check-extensions --from-literal=data="${data}" diff --git a/e2e-tests/tests/custom-extensions/09-assert.yaml b/e2e-tests/tests/custom-extensions/09-assert.yaml index 56ab89ac1c..1217de376b 100644 --- a/e2e-tests/tests/custom-extensions/09-assert.yaml +++ b/e2e-tests/tests/custom-extensions/09-assert.yaml @@ -1,82 +1,13 @@ apiVersion: kuttl.dev/v1beta1 kind: TestAssert -timeout: 300 +timeout: 30 --- -kind: StatefulSet -apiVersion: apps/v1 +kind: ConfigMap +apiVersion: v1 metadata: - labels: - postgres-operator.crunchydata.com/cluster: custom-extensions - postgres-operator.crunchydata.com/data: postgres - postgres-operator.crunchydata.com/instance-set: instance1 - ownerReferences: - - apiVersion: postgres-operator.crunchydata.com/v1beta1 - kind: PostgresCluster - name: custom-extensions - controller: true - blockOwnerDeletion: true -spec: - template: - spec: - initContainers: - - name: postgres-startup - - command: - - /usr/local/bin/relocate-extensions.sh - env: - - name: PG_VERSION - resources: {} - volumeMounts: - - mountPath: /pgdata - name: postgres-data - - mountPath: /tmp - name: tmp - - command: - - /usr/local/bin/install-extensions.sh - env: - - name: STORAGE_TYPE - value: s3 - - name: STORAGE_ENDPOINT - - name: STORAGE_REGION - value: eu-central-1 - - name: STORAGE_BUCKET - value: pg-extensions - - name: INSTALL_EXTENSIONS - - name: PG_VERSION - - name: PGDATA_EXTENSIONS - envFrom: - - secretRef: - name: aws-s3-secret - resources: {} - volumeMounts: - - mountPath: /pgdata - name: postgres-data - - name: postgres-data - - name: postgres-data - - mountPath: /tmp - name: tmp - - command: - - /usr/local/bin/init-entrypoint.sh - - name: nss-wrapper-init -status: - observedGeneration: 4 - replicas: 1 - updatedReplicas: 1 - readyReplicas: 1 - availableReplicas: 1 ---- -apiVersion: pgv2.percona.com/v2 -kind: PerconaPGCluster -metadata: - name: custom-extensions -status: - pgbouncer: - ready: 3 - size: 3 - postgres: - instances: - - name: instance1 - ready: 3 - size: 3 - ready: 3 - size: 3 - state: ready + name: 11-check-extensions +data: + data: |2- + pg_stat_monitor + pgaudit + plpgsql diff --git a/e2e-tests/tests/custom-extensions/12-check-installed-extensions.yaml b/e2e-tests/tests/custom-extensions/09-check-installed-extensions.yaml similarity index 88% rename from e2e-tests/tests/custom-extensions/12-check-installed-extensions.yaml rename to e2e-tests/tests/custom-extensions/09-check-installed-extensions.yaml index 8e463d87b3..fa5607a324 100644 --- a/e2e-tests/tests/custom-extensions/12-check-installed-extensions.yaml +++ b/e2e-tests/tests/custom-extensions/09-check-installed-extensions.yaml @@ -10,4 +10,4 @@ commands: data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select extname from pg_extension order by extname") - kubectl create configmap -n "${NAMESPACE}" 12-check-extensions --from-literal=data="${data}" + kubectl create configmap -n "${NAMESPACE}" 11-check-extensions --from-literal=data="${data}" diff --git a/e2e-tests/tests/custom-extensions/10-assert.yaml b/e2e-tests/tests/custom-extensions/10-assert.yaml deleted file mode 100644 index 8b2d637b29..0000000000 --- a/e2e-tests/tests/custom-extensions/10-assert.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -timeout: 120 ---- -kind: StatefulSet -apiVersion: apps/v1 -metadata: - labels: - postgres-operator.crunchydata.com/cluster: custom-extensions - postgres-operator.crunchydata.com/data: postgres - postgres-operator.crunchydata.com/instance-set: instance1 - ownerReferences: - - apiVersion: postgres-operator.crunchydata.com/v1beta1 - kind: PostgresCluster - name: custom-extensions - controller: true - blockOwnerDeletion: true -spec: - template: - spec: - initContainers: - - name: postgres-startup - - command: - - /usr/local/bin/relocate-extensions.sh - - command: - - /usr/local/bin/install-extensions.sh - - command: - - /usr/local/bin/init-entrypoint.sh - - name: nss-wrapper-init -status: - observedGeneration: 4 - replicas: 1 - updatedReplicas: 1 - readyReplicas: 1 - availableReplicas: 1 ---- -apiVersion: pgv2.percona.com/v2 -kind: PerconaPGCluster -metadata: - name: custom-extensions -status: - pgbouncer: - ready: 3 - size: 3 - postgres: - instances: - - name: instance1 - ready: 3 - size: 3 - ready: 3 - size: 3 - state: ready diff --git a/e2e-tests/tests/custom-extensions/11-assert.yaml b/e2e-tests/tests/custom-extensions/11-assert.yaml deleted file mode 100644 index edd94c0f88..0000000000 --- a/e2e-tests/tests/custom-extensions/11-assert.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -timeout: 30 ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: 11-check-extensions -data: - data: |2- - pg_stat_monitor - pgaudit diff --git a/e2e-tests/tests/custom-extensions/11-check-extensions.yaml b/e2e-tests/tests/custom-extensions/11-check-extensions.yaml deleted file mode 100644 index 4d2e9af12a..0000000000 --- a/e2e-tests/tests/custom-extensions/11-check-extensions.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: kuttl.dev/v1beta1 -kind: TestStep -timeout: 30 -commands: - - script: |- - set -o errexit - set -o xtrace - - source ../../functions - - data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select name from pg_available_extensions where name in ('pg_cron','pg_stat_monitor','pgaudit') order by name") - - kubectl create configmap -n "${NAMESPACE}" 11-check-extensions --from-literal=data="${data}" diff --git a/e2e-tests/tests/custom-extensions/12-assert.yaml b/e2e-tests/tests/custom-extensions/12-assert.yaml deleted file mode 100644 index a90c0ad747..0000000000 --- a/e2e-tests/tests/custom-extensions/12-assert.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -timeout: 30 ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: 12-check-extensions -data: - data: |2- - pg_stat_monitor - pgaudit - plpgsql From 9e7dd15b762012b00630b67f443490b08853d469 Mon Sep 17 00:00:00 2001 From: Andrii Dema Date: Tue, 22 Jul 2025 11:48:28 +0300 Subject: [PATCH 3/3] fix merge --- build/postgres-operator/install-extensions.sh | 16 ++-- .../tests/custom-extensions/06-assert.yaml | 2 +- .../tests/custom-extensions/14-assert.yaml | 80 +++++++++++++++++++ .../custom-extensions/14-update-pg_cron.yaml | 14 ++++ .../tests/custom-extensions/15-assert.yaml | 80 +++++++++++++++++++ .../custom-extensions/15-restart-cluster.yaml | 13 +++ .../tests/custom-extensions/16-assert.yaml | 13 +++ .../16-check-extensions.yaml | 13 +++ 8 files changed, 222 insertions(+), 9 deletions(-) create mode 100644 e2e-tests/tests/custom-extensions/14-assert.yaml create mode 100644 e2e-tests/tests/custom-extensions/14-update-pg_cron.yaml create mode 100644 e2e-tests/tests/custom-extensions/15-assert.yaml create mode 100644 e2e-tests/tests/custom-extensions/15-restart-cluster.yaml create mode 100644 e2e-tests/tests/custom-extensions/16-assert.yaml create mode 100644 e2e-tests/tests/custom-extensions/16-check-extensions.yaml diff --git a/build/postgres-operator/install-extensions.sh b/build/postgres-operator/install-extensions.sh index f3b1ed3fc4..d5b9ad73be 100755 --- a/build/postgres-operator/install-extensions.sh +++ b/build/postgres-operator/install-extensions.sh @@ -16,6 +16,14 @@ if [[ -n $STORAGE_ENDPOINT ]]; then args+=(-endpoint "$STORAGE_ENDPOINT") fi +if [[ ${STORAGE_DISABLE_SSL} == "true" ]]; then + args+=(-disable-ssl) +fi + +if [[ ${STORAGE_FORCE_PATH_STYLE} == "true" ]]; then + args+=(-force-path-style) +fi + for installed in "${PGDATA_EXTENSIONS}"/*.installed; do filename=$(basename -- "${installed}") key=${filename%.*} @@ -33,14 +41,6 @@ for installed in "${PGDATA_EXTENSIONS}"/*.installed; do fi done -if [[ ${STORAGE_DISABLE_SSL} == "true" ]]; then - args+=(-disable-ssl) -fi - -if [[ ${STORAGE_FORCE_PATH_STYLE} == "true" ]]; then - args+=(-force-path-style) -fi - for key in "${extensions[@]}"; do if [ -f "${PGDATA_EXTENSIONS}"/"${key}".installed ]; then echo "Extension ${key} already installed" diff --git a/e2e-tests/tests/custom-extensions/06-assert.yaml b/e2e-tests/tests/custom-extensions/06-assert.yaml index f0c57e2972..9e0e8c2d25 100644 --- a/e2e-tests/tests/custom-extensions/06-assert.yaml +++ b/e2e-tests/tests/custom-extensions/06-assert.yaml @@ -1,6 +1,6 @@ apiVersion: kuttl.dev/v1beta1 kind: TestAssert -timeout: 120 +timeout: 180 --- kind: StatefulSet apiVersion: apps/v1 diff --git a/e2e-tests/tests/custom-extensions/14-assert.yaml b/e2e-tests/tests/custom-extensions/14-assert.yaml new file mode 100644 index 0000000000..9e347dd025 --- /dev/null +++ b/e2e-tests/tests/custom-extensions/14-assert.yaml @@ -0,0 +1,80 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 120 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + labels: + postgres-operator.crunchydata.com/cluster: custom-extensions + postgres-operator.crunchydata.com/data: postgres + postgres-operator.crunchydata.com/instance-set: instance1 + ownerReferences: + - apiVersion: postgres-operator.crunchydata.com/v1beta1 + kind: PostgresCluster + name: custom-extensions + controller: true + blockOwnerDeletion: true +spec: + template: + spec: + initContainers: + - name: postgres-startup + - command: + - /usr/local/bin/relocate-extensions.sh + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - mountPath: /tmp + name: tmp + - command: + - /usr/local/bin/install-extensions.sh + env: + - name: STORAGE_TYPE + value: s3 + - name: STORAGE_ENDPOINT + - name: STORAGE_REGION + value: eu-central-1 + - name: STORAGE_BUCKET + value: pg-extensions + - name: INSTALL_EXTENSIONS + - name: PG_VERSION + - name: PGDATA_EXTENSIONS + envFrom: + - secretRef: + name: aws-s3-secret + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - name: postgres-data + - name: postgres-data + - mountPath: /tmp + name: tmp + - command: + - /usr/local/bin/init-entrypoint.sh + - name: nss-wrapper-init +status: + observedGeneration: 5 + replicas: 1 + updatedReplicas: 1 + readyReplicas: 1 + availableReplicas: 1 +--- +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: custom-extensions +status: + pgbouncer: + ready: 3 + size: 3 + postgres: + instances: + - name: instance1 + ready: 3 + size: 3 + ready: 3 + size: 3 + state: ready diff --git a/e2e-tests/tests/custom-extensions/14-update-pg_cron.yaml b/e2e-tests/tests/custom-extensions/14-update-pg_cron.yaml new file mode 100644 index 0000000000..f9092e2cdd --- /dev/null +++ b/e2e-tests/tests/custom-extensions/14-update-pg_cron.yaml @@ -0,0 +1,14 @@ +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: custom-extensions +spec: + extensions: + custom: + - name: pg_cron + version: 1.6.4 + patroni: + dynamicConfiguration: + postgresql: + parameters: + shared_preload_libraries: pg_cron diff --git a/e2e-tests/tests/custom-extensions/15-assert.yaml b/e2e-tests/tests/custom-extensions/15-assert.yaml new file mode 100644 index 0000000000..6798d2dc4f --- /dev/null +++ b/e2e-tests/tests/custom-extensions/15-assert.yaml @@ -0,0 +1,80 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 120 +--- +kind: StatefulSet +apiVersion: apps/v1 +metadata: + labels: + postgres-operator.crunchydata.com/cluster: custom-extensions + postgres-operator.crunchydata.com/data: postgres + postgres-operator.crunchydata.com/instance-set: instance1 + ownerReferences: + - apiVersion: postgres-operator.crunchydata.com/v1beta1 + kind: PostgresCluster + name: custom-extensions + controller: true + blockOwnerDeletion: true +spec: + template: + spec: + initContainers: + - name: postgres-startup + - command: + - /usr/local/bin/relocate-extensions.sh + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - mountPath: /tmp + name: tmp + - command: + - /usr/local/bin/install-extensions.sh + env: + - name: STORAGE_TYPE + value: s3 + - name: STORAGE_ENDPOINT + - name: STORAGE_REGION + value: eu-central-1 + - name: STORAGE_BUCKET + value: pg-extensions + - name: INSTALL_EXTENSIONS + - name: PG_VERSION + - name: PGDATA_EXTENSIONS + envFrom: + - secretRef: + name: aws-s3-secret + resources: {} + volumeMounts: + - mountPath: /pgdata + name: postgres-data + - name: postgres-data + - name: postgres-data + - mountPath: /tmp + name: tmp + - command: + - /usr/local/bin/init-entrypoint.sh + - name: nss-wrapper-init +status: + observedGeneration: 6 + replicas: 1 + updatedReplicas: 1 + readyReplicas: 1 + availableReplicas: 1 +--- +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: custom-extensions +status: + pgbouncer: + ready: 3 + size: 3 + postgres: + instances: + - name: instance1 + ready: 3 + size: 3 + ready: 3 + size: 3 + state: ready diff --git a/e2e-tests/tests/custom-extensions/15-restart-cluster.yaml b/e2e-tests/tests/custom-extensions/15-restart-cluster.yaml new file mode 100644 index 0000000000..ee2af7ff4b --- /dev/null +++ b/e2e-tests/tests/custom-extensions/15-restart-cluster.yaml @@ -0,0 +1,13 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + wait_cluster_consistency custom-extensions + + restart_pg_pods custom-extensions instance1 + timeout: 360 \ No newline at end of file diff --git a/e2e-tests/tests/custom-extensions/16-assert.yaml b/e2e-tests/tests/custom-extensions/16-assert.yaml new file mode 100644 index 0000000000..2c70384c04 --- /dev/null +++ b/e2e-tests/tests/custom-extensions/16-assert.yaml @@ -0,0 +1,13 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 30 +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: 16-check-extensions +data: + data: |2- + pg_cron + pg_stat_monitor + pgaudit diff --git a/e2e-tests/tests/custom-extensions/16-check-extensions.yaml b/e2e-tests/tests/custom-extensions/16-check-extensions.yaml new file mode 100644 index 0000000000..e5c7177941 --- /dev/null +++ b/e2e-tests/tests/custom-extensions/16-check-extensions.yaml @@ -0,0 +1,13 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +timeout: 30 +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + data=$(kubectl -n ${NAMESPACE} exec $(get_client_pod) -- psql -v ON_ERROR_STOP=1 -t -q postgres://postgres:$(get_psql_user_pass custom-extensions-pguser-postgres)@$(get_psql_user_host custom-extensions-pguser-postgres) -c "\c postgres" -c "select name from pg_available_extensions where name in ('pg_cron','pg_stat_monitor','pgaudit') order by name") + + kubectl create configmap -n "${NAMESPACE}" 16-check-extensions --from-literal=data="${data}"