diff --git a/build/crd/percona/generated/pgv2.percona.com_perconapgupgrades.yaml b/build/crd/percona/generated/pgv2.percona.com_perconapgupgrades.yaml index 841831692..b06595553 100644 --- a/build/crd/percona/generated/pgv2.percona.com_perconapgupgrades.yaml +++ b/build/crd/percona/generated/pgv2.percona.com_perconapgupgrades.yaml @@ -954,7 +954,7 @@ spec: type: object fromPostgresVersion: description: The major version of PostgreSQL before the upgrade. - maximum: 16 + maximum: 17 minimum: 12 type: integer image: diff --git a/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml b/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml index f807fa7e1..63f540edd 100644 --- a/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml +++ b/config/crd/bases/pgv2.percona.com_perconapgclusters.yaml @@ -22859,7 +22859,7 @@ spec: type: object fromPostgresVersion: description: The major version of PostgreSQL before the upgrade. - maximum: 16 + maximum: 17 minimum: 12 type: integer image: diff --git a/deploy/bundle.yaml b/deploy/bundle.yaml index 16d36f51b..1dda0baea 100644 --- a/deploy/bundle.yaml +++ b/deploy/bundle.yaml @@ -23160,7 +23160,7 @@ spec: type: object fromPostgresVersion: description: The major version of PostgreSQL before the upgrade. - maximum: 16 + maximum: 17 minimum: 12 type: integer image: diff --git a/deploy/crd.yaml b/deploy/crd.yaml index 9c12de399..f6f316458 100644 --- a/deploy/crd.yaml +++ b/deploy/crd.yaml @@ -23160,7 +23160,7 @@ spec: type: object fromPostgresVersion: description: The major version of PostgreSQL before the upgrade. - maximum: 16 + maximum: 17 minimum: 12 type: integer image: diff --git a/deploy/cw-bundle.yaml b/deploy/cw-bundle.yaml index 2f66ce218..d33959219 100644 --- a/deploy/cw-bundle.yaml +++ b/deploy/cw-bundle.yaml @@ -23160,7 +23160,7 @@ spec: type: object fromPostgresVersion: description: The major version of PostgreSQL before the upgrade. - maximum: 16 + maximum: 17 minimum: 12 type: integer image: diff --git a/e2e-tests/release_versions b/e2e-tests/release_versions index a42562244..5b0bc10bc 100644 --- a/e2e-tests/release_versions +++ b/e2e-tests/release_versions @@ -1,37 +1,42 @@ # Images versions -IMAGE_OPERATOR=percona/percona-postgresql-operator:2.8.0 +IMAGE_OPERATOR=percona/percona-postgresql-operator:2.8.1 -IMAGE_POSTGRESQL17=percona/percona-distribution-postgresql:17.6-1 -IMAGE_PGBOUNCER17=percona/percona-pgbouncer:1.24.1-1 -IMAGE_POSTGIS17=percona/percona-postgresql-operator:2.8.0-ppg17.6-postgres-gis3.3.8 -IMAGE_BACKREST17=percona/percona-pgbackrest:2.56.0-1 +IMAGE_POSTGRESQL18=percona/percona-distribution-postgresql:18.1-1 +IMAGE_PGBOUNCER18=percona/percona-pgbouncer:1.25.0-1 +IMAGE_POSTGIS18=percona/percona-postgresql-operator:2.8.1-ppg18.1-postgres-gis3.5.4 +IMAGE_BACKREST18=percona/percona-pgbackrest:2.57.0-1 -IMAGE_POSTGRESQL16=percona/percona-distribution-postgresql:16.10-1 -IMAGE_PGBOUNCER16=percona/percona-pgbouncer:1.24.1-1 -IMAGE_POSTGIS16=percona/percona-postgresql-operator:2.8.0-ppg16.10-postgres-gis3.3.8 -IMAGE_BACKREST16=percona/percona-pgbackrest:2.56.0-1 +IMAGE_POSTGRESQL17=percona/percona-distribution-postgresql:17.7-1 +IMAGE_PGBOUNCER17=percona/percona-pgbouncer:1.25.0-1 +IMAGE_POSTGIS17=percona/percona-postgresql-operator:2.8.1-ppg17.7-postgres-gis3.3.8 +IMAGE_BACKREST17=percona/percona-pgbackrest:2.57.0-1 -IMAGE_POSTGRESQL15=percona/percona-distribution-postgresql:15.14-1 -IMAGE_PGBOUNCER15=percona/percona-pgbouncer:1.24.1-1 -IMAGE_POSTGIS15=percona/percona-postgresql-operator:2.8.0-ppg15.14-postgres-gis3.3.8 -IMAGE_BACKREST15=percona/percona-pgbackrest:2.56.0-1 +IMAGE_POSTGRESQL16=percona/percona-distribution-postgresql:16.11-1 +IMAGE_PGBOUNCER16=percona/percona-pgbouncer:1.25.0-1 +IMAGE_POSTGIS16=percona/percona-postgresql-operator:2.8.1-ppg16.11-postgres-gis3.3.8 +IMAGE_BACKREST16=percona/percona-pgbackrest:2.57.0-1 -IMAGE_POSTGRESQL14=percona/percona-distribution-postgresql:14.19-1 -IMAGE_PGBOUNCER14=percona/percona-pgbouncer:1.24.1-1 -IMAGE_POSTGIS14=percona/percona-postgresql-operator:2.8.0-ppg14.19-postgres-gis3.3.8 -IMAGE_BACKREST14=percona/percona-pgbackrest:2.56.0-1 +IMAGE_POSTGRESQL15=percona/percona-distribution-postgresql:15.15-1 +IMAGE_PGBOUNCER15=percona/percona-pgbouncer:1.25.0-1 +IMAGE_POSTGIS15=percona/percona-postgresql-operator:2.8.1-ppg15.15-postgres-gis3.3.8 +IMAGE_BACKREST15=percona/percona-pgbackrest:2.57.0-1 -IMAGE_POSTGRESQL13=percona/percona-distribution-postgresql:13.22-1 -IMAGE_PGBOUNCER13=percona/percona-pgbouncer:1.24.1-1 -IMAGE_POSTGIS13=percona/percona-postgresql-operator:2.8.0-ppg13.22-postgres-gis3.3.8 -IMAGE_BACKREST13=percona/percona-pgbackrest:2.56.0-1 +IMAGE_POSTGRESQL14=percona/percona-distribution-postgresql:14.20-1 +IMAGE_PGBOUNCER14=percona/percona-pgbouncer:1.25.0-1 +IMAGE_POSTGIS14=percona/percona-postgresql-operator:2.8.1-ppg14.20-postgres-gis3.3.8 +IMAGE_BACKREST14=percona/percona-pgbackrest:2.57.0-1 -IMAGE_UPGRADE=percona/percona-postgresql-operator:2.8.0-upgrade +IMAGE_POSTGRESQL13=percona/percona-distribution-postgresql:13.23-1 +IMAGE_PGBOUNCER13=percona/percona-pgbouncer:1.25.0-1 +IMAGE_POSTGIS13=percona/percona-postgresql-operator:2.8.1-ppg13.23-postgres-gis3.3.8 +IMAGE_BACKREST13=percona/percona-pgbackrest:2.57.0-1 + +IMAGE_UPGRADE=percona/percona-postgresql-operator:2.8.1-upgrade IMAGE_PMM_CLIENT=percona/pmm-client:2.44.1-1 IMAGE_PMM_SERVER=percona/pmm-server:2.44.1 -IMAGE_PMM3_CLIENT=percona/pmm-client:3.4.1 -IMAGE_PMM3_SERVER=percona/pmm-server:3.4.1 +IMAGE_PMM3_CLIENT=percona/pmm-client:3.5.0 +IMAGE_PMM3_SERVER=percona/pmm-server:3.5.0 # Supported k8s versions GKE_MIN=1.31 diff --git a/e2e-tests/tests/custom-tls/09-assert.yaml b/e2e-tests/tests/custom-tls/09-assert.yaml index 2a7385a45..6f4cc49b2 100644 --- a/e2e-tests/tests/custom-tls/09-assert.yaml +++ b/e2e-tests/tests/custom-tls/09-assert.yaml @@ -1,6 +1,6 @@ apiVersion: kuttl.dev/v1beta1 kind: TestAssert -timeout: 100 +timeout: 160 --- kind: StatefulSet apiVersion: apps/v1 diff --git a/e2e-tests/tests/major-upgrade/01-create-cluster.yaml b/e2e-tests/tests/major-upgrade/01-create-cluster.yaml index ad23c41e3..adb3d3987 100644 --- a/e2e-tests/tests/major-upgrade/01-create-cluster.yaml +++ b/e2e-tests/tests/major-upgrade/01-create-cluster.yaml @@ -16,5 +16,5 @@ commands: .spec.proxy.pgBouncer.image = "perconalab/percona-postgresql-operator:main-pgbouncer13" | .spec.backups.pgbackrest.image = "perconalab/percona-postgresql-operator:main-pgbackrest13" | .spec.patroni.dynamicConfiguration.postgresql.parameters.shared_preload_libraries = "pg_cron" | - .spec.extensions.custom += [{"name": "pg_cron", "version": "1.6.1"}]' \ + .spec.extensions.custom += [{"name": "pg_cron", "version": "1.6.6"}]' \ | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/major-upgrade/20-17-to-18.yaml b/e2e-tests/tests/major-upgrade/20-17-to-18.yaml new file mode 100644 index 000000000..7c6020822 --- /dev/null +++ b/e2e-tests/tests/major-upgrade/20-17-to-18.yaml @@ -0,0 +1,24 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + + kubectl apply -n ${NAMESPACE} -f - <<-EOF + apiVersion: pgv2.percona.com/v2 + kind: PerconaPGUpgrade + metadata: + name: 17-to-18 + spec: + postgresClusterName: major-upgrade + image: ${IMAGE_UPGRADE} + fromPostgresVersion: 17 + toPostgresVersion: 18 + toPostgresImage: $(get_container_image "postgres" 18) + toPgBouncerImage: $(get_container_image "pgbouncer" 18) + toPgBackRestImage: $(get_container_image "pgbackrest" 18) + EOF + diff --git a/e2e-tests/tests/major-upgrade/20-assert.yaml b/e2e-tests/tests/major-upgrade/20-assert.yaml new file mode 100644 index 000000000..ed27544cb --- /dev/null +++ b/e2e-tests/tests/major-upgrade/20-assert.yaml @@ -0,0 +1,42 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 360 +commands: +- script: |- + kubectl -n ${NAMESPACE} get pg,pod,job + sleep 5 +--- +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGCluster +metadata: + name: major-upgrade +spec: + postgresVersion: 18 +status: + pgbouncer: + ready: 3 + size: 3 + postgres: + instances: + - name: instance1 + ready: 3 + size: 3 + ready: 3 + size: 3 + state: ready +--- +kind: Job +apiVersion: batch/v1 +metadata: + labels: + postgres-operator.crunchydata.com/cluster: major-upgrade + postgres-operator.crunchydata.com/pgbackrest: '' + postgres-operator.crunchydata.com/pgbackrest-backup: replica-create + postgres-operator.crunchydata.com/pgbackrest-repo: repo4 + ownerReferences: + - apiVersion: pgv2.percona.com/v2 + kind: PerconaPGBackup + controller: true + blockOwnerDeletion: true +status: + succeeded: 1 diff --git a/e2e-tests/tests/major-upgrade/21-assert.yaml b/e2e-tests/tests/major-upgrade/21-assert.yaml new file mode 100644 index 000000000..6af985e4b --- /dev/null +++ b/e2e-tests/tests/major-upgrade/21-assert.yaml @@ -0,0 +1,21 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 660 +commands: +- script: |- + kubectl get postgrescluster major-upgrade \ + -n ${NAMESPACE} \ + -o yaml \ + | yq eval '.status.pgbackrest.repos' - +--- +apiVersion: postgres-operator.crunchydata.com/v1beta1 +kind: PostgresCluster +metadata: + name: major-upgrade +status: + pgbackrest: + repos: + - bound: true + name: repo4 + replicaCreateBackupComplete: true + stanzaCreated: true diff --git a/e2e-tests/tests/major-upgrade/22-assert.yaml b/e2e-tests/tests/major-upgrade/22-assert.yaml new file mode 100644 index 000000000..38642a86f --- /dev/null +++ b/e2e-tests/tests/major-upgrade/22-assert.yaml @@ -0,0 +1,31 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 660 +--- +kind: Job +apiVersion: batch/v1 +metadata: + annotations: + postgres-operator.crunchydata.com/pgbackrest-backup: backup-after-17-to-18 + labels: + postgres-operator.crunchydata.com/pgbackrest-backup: manual + postgres-operator.crunchydata.com/pgbackrest-repo: repo4 + ownerReferences: + - apiVersion: pgv2.percona.com/v2 + kind: PerconaPGBackup + controller: true + blockOwnerDeletion: true +status: + succeeded: 1 +--- +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGBackup +metadata: + name: backup-after-17-to-18 +spec: + pgCluster: major-upgrade + repoName: repo4 + options: + - --type=full +status: + state: Succeeded diff --git a/e2e-tests/tests/major-upgrade/22-run-backup.yaml b/e2e-tests/tests/major-upgrade/22-run-backup.yaml new file mode 100644 index 000000000..105493b19 --- /dev/null +++ b/e2e-tests/tests/major-upgrade/22-run-backup.yaml @@ -0,0 +1,9 @@ +apiVersion: pgv2.percona.com/v2 +kind: PerconaPGBackup +metadata: + name: backup-after-17-to-18 +spec: + pgCluster: major-upgrade + repoName: repo4 + options: + - --type=full diff --git a/e2e-tests/tests/major-upgrade/23-assert.yaml b/e2e-tests/tests/major-upgrade/23-assert.yaml new file mode 100644 index 000000000..15c83197a --- /dev/null +++ b/e2e-tests/tests/major-upgrade/23-assert.yaml @@ -0,0 +1,10 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 30 +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: 23-read-from-primary +data: + data: ' 100500' diff --git a/e2e-tests/tests/major-upgrade/23-read-from-primary.yaml b/e2e-tests/tests/major-upgrade/23-read-from-primary.yaml new file mode 100644 index 000000000..48798197b --- /dev/null +++ b/e2e-tests/tests/major-upgrade/23-read-from-primary.yaml @@ -0,0 +1,12 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +timeout: 30 +commands: + - script: |- + set -o errexit + set -o xtrace + + source ../../functions + data=$(run_psql_local '\c myapp \\\ SELECT * from myApp;' "postgres:$(get_psql_user_pass major-upgrade-pguser-postgres)@$(get_psql_user_host major-upgrade-pguser-postgres)") + + kubectl create configmap -n "${NAMESPACE}" 23-read-from-primary --from-literal=data="${data}" diff --git a/e2e-tests/tests/upgrade-consistency/01-create-cluster.yaml b/e2e-tests/tests/upgrade-consistency/01-create-cluster.yaml index e0c05f018..68577d8b6 100644 --- a/e2e-tests/tests/upgrade-consistency/01-create-cluster.yaml +++ b/e2e-tests/tests/upgrade-consistency/01-create-cluster.yaml @@ -8,15 +8,7 @@ commands: source ../../functions - cr_version="2.7.0" - - backrest_image=$(get_version_images $cr_version BACKREST${PG_VER}) - pgbouncer_image=$(get_version_images $cr_version PGBOUNCER${PG_VER}) - postgres_image=$(get_version_images $cr_version POSTGRESQL${PG_VER}) - get_cr \ - | yq eval ".spec.crVersion=\"$cr_version\"" - \ - | yq eval ".spec.image=\"${REGISTRY_NAME_FULL}${postgres_image}\"" - \ - | yq eval ".spec.backups.pgbackrest.image=\"${REGISTRY_NAME_FULL}${backrest_image}\"" - \ - | yq eval ".spec.proxy.pgBouncer.image=\"${REGISTRY_NAME_FULL}${pgbouncer_image}\"" - \ - | kubectl -n "${NAMESPACE}" apply -f - \ No newline at end of file + | yq eval ' + .spec.crVersion="2.7.0"' - \ + | kubectl -n "${NAMESPACE}" apply -f - diff --git a/e2e-tests/tests/upgrade-consistency/02-assert.yaml b/e2e-tests/tests/upgrade-consistency/02-assert.yaml index 3d3961691..5b4bf418b 100644 --- a/e2e-tests/tests/upgrade-consistency/02-assert.yaml +++ b/e2e-tests/tests/upgrade-consistency/02-assert.yaml @@ -120,7 +120,7 @@ kind: PerconaPGCluster metadata: name: upgrade-consistency spec: - crVersion: 2.8.0 + crVersion: 2.8.1 status: pgbouncer: ready: 3 diff --git a/e2e-tests/tests/upgrade-consistency/02-patch-cluster.yaml b/e2e-tests/tests/upgrade-consistency/02-patch-cluster.yaml index 54c3b9853..d26938bd3 100644 --- a/e2e-tests/tests/upgrade-consistency/02-patch-cluster.yaml +++ b/e2e-tests/tests/upgrade-consistency/02-patch-cluster.yaml @@ -8,17 +8,9 @@ commands: source ../../functions - cr_version="2.8.0" - - backrest_image=$(get_version_images $cr_version BACKREST${PG_VER} ) - pgbouncer_image=$(get_version_images $cr_version PGBOUNCER${PG_VER}) - postgres_image=$(get_version_images $cr_version POSTGRESQL${PG_VER}) - get_cr \ - | yq eval ".spec.crVersion=\"$cr_version\"" - \ - | yq eval ".spec.image=\"${REGISTRY_NAME_FULL}${postgres_image}\"" - \ - | yq eval ".spec.backups.pgbackrest.image=\"${REGISTRY_NAME_FULL}${backrest_image}\"" - \ - | yq eval ".spec.proxy.pgBouncer.image=\"${REGISTRY_NAME_FULL}${pgbouncer_image}\"" - \ + | yq eval ' + .spec.crVersion="2.8.1"' - \ | kubectl -n "${NAMESPACE}" apply -f - sleep 10 diff --git a/e2e-tests/tests/upgrade-consistency/03-patch-cluster.yaml b/e2e-tests/tests/upgrade-consistency/03-patch-cluster.yaml index 51c335c9f..0c71840cb 100644 --- a/e2e-tests/tests/upgrade-consistency/03-patch-cluster.yaml +++ b/e2e-tests/tests/upgrade-consistency/03-patch-cluster.yaml @@ -8,13 +8,9 @@ commands: source ../../functions - cr_version="2.9.0" - get_cr \ - | yq eval ".spec.crVersion=\"$cr_version\"" - \ - | yq eval ".spec.image=\"${IMAGE_BASE}:main-ppg$PG_VER-postgres\"" - \ - | yq eval ".spec.backups.pgbackrest.image=\"${IMAGE_BASE}:main-pgbackrest$PG_VER\"" - \ - | yq eval ".spec.proxy.pgBouncer.image=\"${IMAGE_BASE}:main-pgbouncer$PG_VER\"" - \ + | yq eval ' + .spec.crVersion="2.9.0"' - \ | kubectl -n "${NAMESPACE}" apply -f - sleep 10 diff --git a/pkg/apis/pgv2.percona.com/v2/perconapgupgrade_types.go b/pkg/apis/pgv2.percona.com/v2/perconapgupgrade_types.go index 5b5797627..e8dbce4a9 100644 --- a/pkg/apis/pgv2.percona.com/v2/perconapgupgrade_types.go +++ b/pkg/apis/pgv2.percona.com/v2/perconapgupgrade_types.go @@ -59,7 +59,7 @@ type PerconaPGUpgradeSpec struct { // The major version of PostgreSQL before the upgrade. // +kubebuilder:validation:Required // +kubebuilder:validation:Minimum=12 - // +kubebuilder:validation:Maximum=16 + // +kubebuilder:validation:Maximum=17 FromPostgresVersion int `json:"fromPostgresVersion"` // The major version of PostgreSQL to be upgraded to.