Skip to content

Commit 287b75b

Browse files
committed
K8SPG-1000 Add extensions major upgrade tests
1 parent cf0cd8d commit 287b75b

82 files changed

Lines changed: 2221 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

e2e-tests/functions

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,7 @@ get_container_image() {
11581158
case $component in
11591159
pgbouncer) key="IMAGE_PGBOUNCER${pgVersion}" ;;
11601160
pgbackrest) key="IMAGE_BACKREST${pgVersion}" ;;
1161+
postgis) key="IMAGE_POSTGIS${pgVersion}" ;;
11611162
*) key="IMAGE_POSTGRESQL${pgVersion}" ;;
11621163
esac
11631164
get_release_image "$key"

e2e-tests/run-release.csv

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ major-upgrade-14-to-15
1616
major-upgrade-15-to-16
1717
major-upgrade-16-to-17
1818
major-upgrade-17-to-18
19+
major-upgrade-14-to-15-postgis
20+
major-upgrade-15-to-16-postgis
21+
major-upgrade-16-to-17-postgis
22+
major-upgrade-17-to-18-postgis
1923
ldap
2024
ldap-tls
2125
monitoring
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 120
4+
---
5+
apiVersion: apiextensions.k8s.io/v1
6+
kind: CustomResourceDefinition
7+
metadata:
8+
name: perconapgclusters.pgv2.percona.com
9+
spec:
10+
group: pgv2.percona.com
11+
names:
12+
kind: PerconaPGCluster
13+
listKind: PerconaPGClusterList
14+
plural: perconapgclusters
15+
singular: perconapgcluster
16+
scope: Namespaced
17+
---
18+
apiVersion: kuttl.dev/v1beta1
19+
kind: TestAssert
20+
metadata:
21+
name: check-operator-deploy-status
22+
timeout: 120
23+
commands:
24+
- script: kubectl assert exist-enhanced deployment percona-postgresql-operator -n ${OPERATOR_NS:-$NAMESPACE} --field-selector status.readyReplicas=1
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
source ../../functions
9+
init_temp_dir # do this only in the first TestStep
10+
11+
deploy_operator
12+
deploy_client
13+
deploy_s3_secrets
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 120
4+
---
5+
kind: StatefulSet
6+
apiVersion: apps/v1
7+
metadata:
8+
name: major-upgrade-14-to-15-postgis-repo-host
9+
labels:
10+
postgres-operator.crunchydata.com/cluster: major-upgrade-14-to-15-postgis
11+
postgres-operator.crunchydata.com/data: pgbackrest
12+
postgres-operator.crunchydata.com/pgbackrest: ''
13+
postgres-operator.crunchydata.com/pgbackrest-dedicated: ''
14+
ownerReferences:
15+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
16+
kind: PostgresCluster
17+
name: major-upgrade-14-to-15-postgis
18+
controller: true
19+
blockOwnerDeletion: true
20+
status:
21+
observedGeneration: 1
22+
replicas: 1
23+
readyReplicas: 1
24+
currentReplicas: 1
25+
updatedReplicas: 1
26+
collisionCount: 0
27+
---
28+
kind: StatefulSet
29+
apiVersion: apps/v1
30+
metadata:
31+
labels:
32+
postgres-operator.crunchydata.com/cluster: major-upgrade-14-to-15-postgis
33+
postgres-operator.crunchydata.com/data: postgres
34+
postgres-operator.crunchydata.com/instance-set: instance1
35+
ownerReferences:
36+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
37+
kind: PostgresCluster
38+
name: major-upgrade-14-to-15-postgis
39+
controller: true
40+
blockOwnerDeletion: true
41+
status:
42+
observedGeneration: 1
43+
replicas: 1
44+
readyReplicas: 1
45+
currentReplicas: 1
46+
updatedReplicas: 1
47+
collisionCount: 0
48+
---
49+
kind: Deployment
50+
apiVersion: apps/v1
51+
metadata:
52+
name: major-upgrade-14-to-15-postgis-pgbouncer
53+
labels:
54+
postgres-operator.crunchydata.com/cluster: major-upgrade-14-to-15-postgis
55+
postgres-operator.crunchydata.com/role: pgbouncer
56+
annotations:
57+
deployment.kubernetes.io/revision: '1'
58+
ownerReferences:
59+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
60+
kind: PostgresCluster
61+
name: major-upgrade-14-to-15-postgis
62+
controller: true
63+
blockOwnerDeletion: true
64+
status:
65+
observedGeneration: 1
66+
replicas: 3
67+
updatedReplicas: 3
68+
readyReplicas: 3
69+
---
70+
kind: Job
71+
apiVersion: batch/v1
72+
metadata:
73+
labels:
74+
postgres-operator.crunchydata.com/cluster: major-upgrade-14-to-15-postgis
75+
postgres-operator.crunchydata.com/pgbackrest: ''
76+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
77+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
78+
ownerReferences:
79+
- apiVersion: pgv2.percona.com/v2
80+
kind: PerconaPGBackup
81+
controller: true
82+
blockOwnerDeletion: true
83+
status:
84+
succeeded: 1
85+
---
86+
apiVersion: postgres-operator.crunchydata.com/v1beta1
87+
kind: PostgresCluster
88+
metadata:
89+
name: major-upgrade-14-to-15-postgis
90+
ownerReferences:
91+
- apiVersion: pgv2.percona.com/v2
92+
kind: PerconaPGCluster
93+
name: major-upgrade-14-to-15-postgis
94+
controller: true
95+
blockOwnerDeletion: true
96+
finalizers:
97+
- postgres-operator.crunchydata.com/finalizer
98+
status:
99+
instances:
100+
- name: instance1
101+
readyReplicas: 3
102+
replicas: 3
103+
updatedReplicas: 3
104+
observedGeneration: 1
105+
pgbackrest:
106+
repoHost:
107+
apiVersion: apps/v1
108+
kind: StatefulSet
109+
ready: true
110+
repos:
111+
- bound: true
112+
name: repo1
113+
replicaCreateBackupComplete: true
114+
stanzaCreated: true
115+
proxy:
116+
pgBouncer:
117+
readyReplicas: 3
118+
replicas: 3
119+
---
120+
apiVersion: pgv2.percona.com/v2
121+
kind: PerconaPGCluster
122+
metadata:
123+
name: major-upgrade-14-to-15-postgis
124+
status:
125+
pgbouncer:
126+
ready: 3
127+
size: 3
128+
postgres:
129+
instances:
130+
- name: instance1
131+
ready: 3
132+
size: 3
133+
ready: 3
134+
size: 3
135+
state: ready
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
timeout: 10
4+
commands:
5+
- script: |-
6+
set -o errexit
7+
set -o xtrace
8+
9+
source ../../functions
10+
11+
postgres_image=$(get_container_image "postgis" 14)
12+
pgbouncer_image=$(get_container_image "pgbouncer" 14)
13+
pgbackrest_image=$(get_container_image "pgbackrest" 14)
14+
15+
get_cr \
16+
| yq eval "
17+
.spec.postgresVersion = 14 |
18+
.spec.image = \"${postgres_image}\" |
19+
.spec.instances[0].dataVolumeClaimSpec.resources.requests.storage = \"3Gi\" |
20+
.spec.proxy.pgBouncer.image = \"${pgbouncer_image}\" |
21+
.spec.backups.pgbackrest.image = \"${pgbackrest_image}\" |
22+
.spec.patroni.removeDataDirectoryOnDivergedTimelines = true |
23+
.spec.patroni.dynamicConfiguration.postgresql.parameters.shared_preload_libraries = \"pg_cron\" |
24+
.spec.extensions.builtin.pg_stat_monitor = true |
25+
.spec.extensions.builtin.pg_stat_statements = false |
26+
.spec.extensions.builtin.pg_audit = true |
27+
.spec.extensions.builtin.pgvector = true |
28+
.spec.extensions.builtin.pg_repack = true |
29+
.spec.extensions.custom += [{\"name\": \"pg_cron\", \"version\": \"1.6.6\"}]" \
30+
| kubectl -n "${NAMESPACE}" apply -f -
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
source ../../functions
9+
10+
run_psql_local \
11+
'CREATE DATABASE myapp; \c myapp \\\ CREATE TABLE IF NOT EXISTS myApp (id int PRIMARY KEY);' \
12+
"postgres:$(get_psql_user_pass major-upgrade-14-to-15-postgis-pguser-postgres)@$(get_psql_user_host major-upgrade-14-to-15-postgis-pguser-postgres)"
13+
14+
run_psql_local \
15+
'\c myapp \\\ INSERT INTO myApp (id) VALUES (100500)' \
16+
"postgres:$(get_psql_user_pass major-upgrade-14-to-15-postgis-pguser-postgres)@$(get_psql_user_host major-upgrade-14-to-15-postgis-pguser-postgres)"
17+
18+
primary=$(get_pod_by_role major-upgrade-14-to-15-postgis primary name)
19+
kubectl -n ${NAMESPACE} exec ${primary} -- \
20+
psql -v ON_ERROR_STOP=1 -d postgres -c 'CREATE DATABASE mygisdata'
21+
kubectl -n ${NAMESPACE} exec ${primary} -- \
22+
psql -v ON_ERROR_STOP=1 -d mygisdata -c 'CREATE SCHEMA gis'
23+
kubectl -n ${NAMESPACE} exec ${primary} -- \
24+
psql -v ON_ERROR_STOP=1 -d mygisdata -c 'CREATE EXTENSION postgis'
25+
kubectl -n ${NAMESPACE} exec ${primary} -- \
26+
psql -v ON_ERROR_STOP=1 -d mygisdata -c 'CREATE TABLE gis.locations (id int PRIMARY KEY, geom geometry(Point, 4326))'
27+
kubectl -n ${NAMESPACE} exec ${primary} -- \
28+
psql -v ON_ERROR_STOP=1 -d mygisdata -c 'INSERT INTO gis.locations (id, geom) VALUES (1, ST_GeomFromText($$POINT(30 10)$$, 4326))'
29+
30+
run_psql_local \
31+
'\c postgres \\\ CREATE EXTENSION pg_cron' \
32+
"postgres:$(get_psql_user_pass major-upgrade-14-to-15-postgis-pguser-postgres)@$(get_psql_user_host major-upgrade-14-to-15-postgis-pguser-postgres)"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 30
4+
---
5+
kind: ConfigMap
6+
apiVersion: v1
7+
metadata:
8+
name: 03-read-from-primary
9+
data:
10+
data: ' 100500'
11+
postgis: ' POINT(30 10)'
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
commands:
4+
- script: |-
5+
set -o errexit
6+
set -o xtrace
7+
8+
source ../../functions
9+
data=$(run_psql_local '\c myapp \\\ SELECT * from myApp;' "postgres:$(get_psql_user_pass major-upgrade-14-to-15-postgis-pguser-postgres)@$(get_psql_user_host major-upgrade-14-to-15-postgis-pguser-postgres)")
10+
postgis=$(run_psql_local '\c mygisdata \\\ SELECT ST_AsText(geom) FROM gis.locations ORDER BY id;' "postgres:$(get_psql_user_pass major-upgrade-14-to-15-postgis-pguser-postgres)@$(get_psql_user_host major-upgrade-14-to-15-postgis-pguser-postgres)")
11+
12+
kubectl create configmap -n "${NAMESPACE}" 03-read-from-primary --from-literal=data="${data}" --from-literal=postgis="${postgis}"
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 360
4+
commands:
5+
- script: |-
6+
kubectl -n ${NAMESPACE} get cm \
7+
-l app.kubernetes.io/instance=major-upgrade-14-to-15-postgis \
8+
-l app.kubernetes.io/component=pg -o yaml
9+
kubectl -n ${NAMESPACE} get pg,pod,job
10+
sleep 5
11+
---
12+
apiVersion: pgv2.percona.com/v2
13+
kind: PerconaPGCluster
14+
metadata:
15+
name: major-upgrade-14-to-15-postgis
16+
spec:
17+
postgresVersion: 15
18+
status:
19+
pgbouncer:
20+
ready: 3
21+
size: 3
22+
postgres:
23+
instances:
24+
- name: instance1
25+
ready: 3
26+
size: 3
27+
ready: 3
28+
size: 3
29+
state: ready
30+
---
31+
apiVersion: pgv2.percona.com/v2
32+
kind: PerconaPGUpgrade
33+
metadata:
34+
name: 14-to-15-postgis
35+
status:
36+
conditions:
37+
- type: Progressing
38+
reason: PGUpgradeCompleted
39+
status: "False"
40+
observedGeneration: 1
41+
- type: Succeeded
42+
reason: PGUpgradeSucceeded
43+
status: "True"
44+
observedGeneration: 1
45+
observedGeneration: 1
46+
---
47+
kind: Job
48+
apiVersion: batch/v1
49+
metadata:
50+
labels:
51+
postgres-operator.crunchydata.com/cluster: major-upgrade-14-to-15-postgis
52+
postgres-operator.crunchydata.com/pgbackrest: ''
53+
postgres-operator.crunchydata.com/pgbackrest-backup: replica-create
54+
postgres-operator.crunchydata.com/pgbackrest-repo: repo1
55+
ownerReferences:
56+
- apiVersion: pgv2.percona.com/v2
57+
kind: PerconaPGBackup
58+
controller: true
59+
blockOwnerDeletion: true
60+
status:
61+
succeeded: 1

0 commit comments

Comments
 (0)